From ad68ba1cacfc2cd44c1c2adbdc9b9ef174b67d17 Mon Sep 17 00:00:00 2001 From: Arturo Corro Date: Wed, 1 Dec 2021 22:41:59 -0600 Subject: [PATCH] first commit --- README.md | 3 + ...ador_lite_Atmel_LC2004_4buttons_v0.1.0.ino | 982 +++ libraries/DS3231/CONTRIBUTING.md | 13 + libraries/DS3231/DS3231.cpp | 747 ++ libraries/DS3231/DS3231.h | 188 + libraries/DS3231/DS3231.h.gch | Bin 0 -> 8843 bytes libraries/DS3231/LICENSE | 24 + libraries/DS3231/README.md | 121 + .../DS3231_oscillator_test.pde | 38 + .../DS3231/examples/DS3231_set/DS3231_set.pde | 113 + .../examples/DS3231_test/DS3231_test.pde | 157 + .../DS3231/examples/echo_time/echo_time.pde | 51 + libraries/DS3231/examples/now/now.pde | 40 + .../DS3231/examples/set_echo/set_echo.pde | 182 + libraries/DS3231/keywords.txt | 33 + libraries/DS3231/library.properties | 10 + libraries/LiquidCrystal/FastIO.cpp | 267 + libraries/LiquidCrystal/FastIO.h | 219 + libraries/LiquidCrystal/I2CIO.cpp | 198 + libraries/LiquidCrystal/I2CIO.h | 148 + libraries/LiquidCrystal/LCD.cpp | 347 + libraries/LiquidCrystal/LCD.h | 536 ++ libraries/LiquidCrystal/LiquidCrystal.cpp | 299 + libraries/LiquidCrystal/LiquidCrystal.h | 161 + libraries/LiquidCrystal/LiquidCrystal_I2C.cpp | 291 + libraries/LiquidCrystal/LiquidCrystal_I2C.h | 204 + libraries/LiquidCrystal/LiquidCrystal_SR.cpp | 209 + libraries/LiquidCrystal/LiquidCrystal_SR.h | 176 + .../LiquidCrystal/LiquidCrystal_SR2W.cpp | 135 + libraries/LiquidCrystal/LiquidCrystal_SR2W.h | 202 + .../LiquidCrystal/LiquidCrystal_SR3W.cpp | 283 + libraries/LiquidCrystal/LiquidCrystal_SR3W.h | 202 + libraries/LiquidCrystal/docs/Doxyfile | 1749 ++++ libraries/LiquidCrystal/docs/def/doxygen.def | 7432 +++++++++++++++++ .../LiquidCrystal/docs/def/doxygen.def.txt | 2897 +++++++ .../docs/html/_fast_i_o_8cpp.html | 549 ++ .../docs/html/_fast_i_o_8cpp_source.html | 351 + .../LiquidCrystal/docs/html/_fast_i_o_8h.html | 786 ++ .../docs/html/_fast_i_o_8h_source.html | 209 + .../docs/html/_i2_c_i_o_8cpp.html | 92 + .../docs/html/_i2_c_i_o_8cpp_source.html | 282 + .../LiquidCrystal/docs/html/_i2_c_i_o_8h.html | 114 + .../docs/html/_i2_c_i_o_8h_source.html | 147 + .../LiquidCrystal/docs/html/_l_c_d_8cpp.html | 93 + .../docs/html/_l_c_d_8cpp_source.html | 431 + .../LiquidCrystal/docs/html/_l_c_d_8h.html | 711 ++ .../docs/html/_l_c_d_8h_source.html | 301 + .../docs/html/_liquid_crystal_8cpp.html | 146 + .../html/_liquid_crystal_8cpp_source.html | 383 + .../docs/html/_liquid_crystal_8h.html | 117 + .../docs/html/_liquid_crystal_8h_source.html | 176 + .../html/_liquid_crystal___i2_c_8cpp.html | 247 + .../_liquid_crystal___i2_c_8cpp_source.html | 344 + .../docs/html/_liquid_crystal___i2_c_8h.html | 97 + .../_liquid_crystal___i2_c_8h_source.html | 172 + .../html/_liquid_crystal___s_r2_w_8cpp.html | 89 + .../_liquid_crystal___s_r2_w_8cpp_source.html | 219 + .../html/_liquid_crystal___s_r2_w_8h.html | 164 + .../_liquid_crystal___s_r2_w_8h_source.html | 245 + .../html/_liquid_crystal___s_r3_w_8cpp.html | 249 + .../_liquid_crystal___s_r3_w_8cpp_source.html | 336 + .../html/_liquid_crystal___s_r3_w_8h.html | 96 + .../_liquid_crystal___s_r3_w_8h_source.html | 201 + .../docs/html/_liquid_crystal___s_r_8cpp.html | 94 + .../_liquid_crystal___s_r_8cpp_source.html | 293 + .../docs/html/_liquid_crystal___s_r_8h.html | 148 + .../html/_liquid_crystal___s_r_8h_source.html | 210 + .../_liquid_crystal___s_r___l_c_d3_8cpp.html | 147 + ...id_crystal___s_r___l_c_d3_8cpp_source.html | 295 + .../_liquid_crystal___s_r___l_c_d3_8h.html | 95 + ...quid_crystal___s_r___l_c_d3_8h_source.html | 129 + .../LiquidCrystal/docs/html/annotated.html | 95 + libraries/LiquidCrystal/docs/html/bc_s.png | Bin 0 -> 677 bytes .../docs/html/class_i2_c_i_o-members.html | 95 + .../docs/html/class_i2_c_i_o.html | 339 + .../docs/html/class_l_c_d-members.html | 120 + .../LiquidCrystal/docs/html/class_l_c_d.html | 982 +++ .../LiquidCrystal/docs/html/class_l_c_d.png | Bin 0 -> 870 bytes .../html/class_liquid_crystal-members.html | 129 + .../docs/html/class_liquid_crystal.html | 827 ++ .../docs/html/class_liquid_crystal.png | Bin 0 -> 352 bytes .../class_liquid_crystal___i2_c-members.html | 127 + .../html/class_liquid_crystal___i2_c.html | 599 ++ .../docs/html/class_liquid_crystal___i2_c.png | Bin 0 -> 390 bytes .../class_liquid_crystal___s_r-members.html | 122 + .../docs/html/class_liquid_crystal___s_r.html | 271 + .../docs/html/class_liquid_crystal___s_r.png | Bin 0 -> 387 bytes ...class_liquid_crystal___s_r2_w-members.html | 122 + .../html/class_liquid_crystal___s_r2_w.html | 230 + .../html/class_liquid_crystal___s_r2_w.png | Bin 0 -> 414 bytes ...class_liquid_crystal___s_r3_w-members.html | 125 + .../html/class_liquid_crystal___s_r3_w.html | 501 ++ .../html/class_liquid_crystal___s_r3_w.png | Bin 0 -> 413 bytes ...liquid_crystal___s_r___l_c_d3-members.html | 120 + .../class_liquid_crystal___s_r___l_c_d3.html | 200 + .../class_liquid_crystal___s_r___l_c_d3.png | Bin 0 -> 442 bytes .../LiquidCrystal/docs/html/classes.html | 91 + libraries/LiquidCrystal/docs/html/closed.png | Bin 0 -> 126 bytes libraries/LiquidCrystal/docs/html/doxygen.css | 835 ++ libraries/LiquidCrystal/docs/html/doxygen.png | Bin 0 -> 3942 bytes libraries/LiquidCrystal/docs/html/files.html | 102 + .../LiquidCrystal/docs/html/functions.html | 319 + .../docs/html/functions_func.html | 296 + .../docs/html/functions_vars.html | 109 + .../LiquidCrystal/docs/html/globals.html | 419 + .../LiquidCrystal/docs/html/globals_defs.html | 350 + .../LiquidCrystal/docs/html/globals_enum.html | 95 + .../LiquidCrystal/docs/html/globals_eval.html | 98 + .../LiquidCrystal/docs/html/globals_func.html | 128 + .../LiquidCrystal/docs/html/globals_type.html | 98 + .../LiquidCrystal/docs/html/hierarchy.html | 97 + libraries/LiquidCrystal/docs/html/index.html | 78 + libraries/LiquidCrystal/docs/html/installdox | 112 + libraries/LiquidCrystal/docs/html/jquery.js | 54 + .../LiquidCrystal/docs/html/logoGoogle.jpg | Bin 0 -> 17184 bytes libraries/LiquidCrystal/docs/html/nav_f.png | Bin 0 -> 159 bytes libraries/LiquidCrystal/docs/html/nav_h.png | Bin 0 -> 97 bytes libraries/LiquidCrystal/docs/html/open.png | Bin 0 -> 118 bytes .../docs/html/search/all_5f.html | 62 + .../docs/html/search/all_61.html | 38 + .../docs/html/search/all_62.html | 54 + .../docs/html/search/all_63.html | 44 + .../docs/html/search/all_64.html | 80 + .../docs/html/search/all_65.html | 35 + .../docs/html/search/all_66.html | 156 + .../docs/html/search/all_68.html | 32 + .../docs/html/search/all_69.html | 39 + .../docs/html/search/all_6c.html | 354 + .../docs/html/search/all_6d.html | 32 + .../docs/html/search/all_6e.html | 56 + .../docs/html/search/all_6f.html | 32 + .../docs/html/search/all_70.html | 38 + .../docs/html/search/all_72.html | 50 + .../docs/html/search/all_73.html | 117 + .../docs/html/search/all_74.html | 32 + .../docs/html/search/all_77.html | 35 + .../docs/html/search/classes_69.html | 25 + .../docs/html/search/classes_6c.html | 50 + .../LiquidCrystal/docs/html/search/close.png | Bin 0 -> 273 bytes .../docs/html/search/defines_5f.html | 26 + .../docs/html/search/defines_61.html | 32 + .../docs/html/search/defines_62.html | 32 + .../docs/html/search/defines_63.html | 26 + .../docs/html/search/defines_64.html | 62 + .../docs/html/search/defines_65.html | 35 + .../docs/html/search/defines_66.html | 56 + .../docs/html/search/defines_68.html | 26 + .../docs/html/search/defines_6c.html | 219 + .../docs/html/search/defines_72.html | 38 + .../docs/html/search/defines_73.html | 62 + .../docs/html/search/defines_74.html | 26 + .../docs/html/search/enums_74.html | 26 + .../docs/html/search/enumvalues_6e.html | 26 + .../docs/html/search/enumvalues_70.html | 26 + .../docs/html/search/files_66.html | 30 + .../docs/html/search/files_69.html | 30 + .../docs/html/search/files_6c.html | 80 + .../docs/html/search/functions_61.html | 26 + .../docs/html/search/functions_62.html | 42 + .../docs/html/search/functions_63.html | 38 + .../docs/html/search/functions_64.html | 38 + .../docs/html/search/functions_65.html | 26 + .../docs/html/search/functions_66.html | 98 + .../docs/html/search/functions_68.html | 26 + .../docs/html/search/functions_69.html | 26 + .../docs/html/search/functions_6c.html | 83 + .../docs/html/search/functions_6d.html | 32 + .../docs/html/search/functions_6e.html | 50 + .../docs/html/search/functions_6f.html | 32 + .../docs/html/search/functions_70.html | 32 + .../docs/html/search/functions_72.html | 32 + .../docs/html/search/functions_73.html | 75 + .../docs/html/search/functions_77.html | 35 + .../docs/html/search/mag_sel.png | Bin 0 -> 563 bytes .../docs/html/search/nomatches.html | 12 + .../LiquidCrystal/docs/html/search/search.css | 240 + .../LiquidCrystal/docs/html/search/search.js | 742 ++ .../docs/html/search/search_l.png | Bin 0 -> 604 bytes .../docs/html/search/search_m.png | Bin 0 -> 158 bytes .../docs/html/search/search_r.png | Bin 0 -> 612 bytes .../docs/html/search/typedefs_66.html | 32 + .../docs/html/search/variables_5f.html | 56 + libraries/LiquidCrystal/docs/html/tab_a.png | Bin 0 -> 140 bytes libraries/LiquidCrystal/docs/html/tab_b.png | Bin 0 -> 178 bytes libraries/LiquidCrystal/docs/html/tab_h.png | Bin 0 -> 192 bytes libraries/LiquidCrystal/docs/html/tab_s.png | Bin 0 -> 189 bytes libraries/LiquidCrystal/docs/html/tabs.css | 59 + .../HelloWorld_4bit/HelloWorld_4bit.pde | 78 + .../examples/HelloWorld_SR/HelloWorld_SR.pde | 36 + .../HelloWorld_i2c/HelloWorld_i2c.pde | 61 + .../examples/LCDiSpeed/LCDiSpeed.pde | 274 + .../examples/LCDiSpeed/LCDiSpeed.txt | 20 + .../examples/SerialDisplay/SerialDisplay.pde | 37 + .../examples/i2cLCDextraIO/i2cLCDextraIO.pde | 246 + .../i2cLCDextraIO_tempLeonardo.ino | 332 + .../performanceLCD/performanceLCD.pde | 480 ++ libraries/LiquidCrystal/keywords.txt | 52 + libraries/Timer_lite/FM24I2C.cpp | 27 + libraries/Timer_lite/FM24I2C.h | 29 + libraries/Timer_lite/RTClib.cpp | 506 ++ libraries/Timer_lite/RTClib.h | 135 + libraries/Timer_lite/Timer_lite.cpp | 401 + libraries/Timer_lite/Timer_lite.h | 153 + libraries/Timer_lite/keywords.txt | 49 + libraries/Timer_lite/library.properties | 10 + libraries/Timer_lite/readme.txt | 5 + libraries/libraries.zip | Bin 0 -> 1007436 bytes libraries/readme.txt | 1 + 208 files changed, 42683 insertions(+) create mode 100644 README.md create mode 100644 Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0.ino create mode 100644 libraries/DS3231/CONTRIBUTING.md create mode 100644 libraries/DS3231/DS3231.cpp create mode 100644 libraries/DS3231/DS3231.h create mode 100644 libraries/DS3231/DS3231.h.gch create mode 100644 libraries/DS3231/LICENSE create mode 100644 libraries/DS3231/README.md create mode 100644 libraries/DS3231/examples/DS3231_oscillator_test/DS3231_oscillator_test.pde create mode 100644 libraries/DS3231/examples/DS3231_set/DS3231_set.pde create mode 100644 libraries/DS3231/examples/DS3231_test/DS3231_test.pde create mode 100644 libraries/DS3231/examples/echo_time/echo_time.pde create mode 100644 libraries/DS3231/examples/now/now.pde create mode 100644 libraries/DS3231/examples/set_echo/set_echo.pde create mode 100644 libraries/DS3231/keywords.txt create mode 100644 libraries/DS3231/library.properties create mode 100644 libraries/LiquidCrystal/FastIO.cpp create mode 100644 libraries/LiquidCrystal/FastIO.h create mode 100644 libraries/LiquidCrystal/I2CIO.cpp create mode 100644 libraries/LiquidCrystal/I2CIO.h create mode 100644 libraries/LiquidCrystal/LCD.cpp create mode 100644 libraries/LiquidCrystal/LCD.h create mode 100644 libraries/LiquidCrystal/LiquidCrystal.cpp create mode 100644 libraries/LiquidCrystal/LiquidCrystal.h create mode 100644 libraries/LiquidCrystal/LiquidCrystal_I2C.cpp create mode 100644 libraries/LiquidCrystal/LiquidCrystal_I2C.h create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR.cpp create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR.h create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR2W.h create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp create mode 100644 libraries/LiquidCrystal/LiquidCrystal_SR3W.h create mode 100644 libraries/LiquidCrystal/docs/Doxyfile create mode 100644 libraries/LiquidCrystal/docs/def/doxygen.def create mode 100644 libraries/LiquidCrystal/docs/def/doxygen.def.txt create mode 100644 libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_fast_i_o_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_fast_i_o_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_l_c_d_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_l_c_d_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_l_c_d_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html create mode 100644 libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html create mode 100644 libraries/LiquidCrystal/docs/html/annotated.html create mode 100644 libraries/LiquidCrystal/docs/html/bc_s.png create mode 100644 libraries/LiquidCrystal/docs/html/class_i2_c_i_o-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_i2_c_i_o.html create mode 100644 libraries/LiquidCrystal/docs/html/class_l_c_d-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_l_c_d.html create mode 100644 libraries/LiquidCrystal/docs/html/class_l_c_d.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html create mode 100644 libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png create mode 100644 libraries/LiquidCrystal/docs/html/classes.html create mode 100644 libraries/LiquidCrystal/docs/html/closed.png create mode 100644 libraries/LiquidCrystal/docs/html/doxygen.css create mode 100644 libraries/LiquidCrystal/docs/html/doxygen.png create mode 100644 libraries/LiquidCrystal/docs/html/files.html create mode 100644 libraries/LiquidCrystal/docs/html/functions.html create mode 100644 libraries/LiquidCrystal/docs/html/functions_func.html create mode 100644 libraries/LiquidCrystal/docs/html/functions_vars.html create mode 100644 libraries/LiquidCrystal/docs/html/globals.html create mode 100644 libraries/LiquidCrystal/docs/html/globals_defs.html create mode 100644 libraries/LiquidCrystal/docs/html/globals_enum.html create mode 100644 libraries/LiquidCrystal/docs/html/globals_eval.html create mode 100644 libraries/LiquidCrystal/docs/html/globals_func.html create mode 100644 libraries/LiquidCrystal/docs/html/globals_type.html create mode 100644 libraries/LiquidCrystal/docs/html/hierarchy.html create mode 100644 libraries/LiquidCrystal/docs/html/index.html create mode 100644 libraries/LiquidCrystal/docs/html/installdox create mode 100644 libraries/LiquidCrystal/docs/html/jquery.js create mode 100644 libraries/LiquidCrystal/docs/html/logoGoogle.jpg create mode 100644 libraries/LiquidCrystal/docs/html/nav_f.png create mode 100644 libraries/LiquidCrystal/docs/html/nav_h.png create mode 100644 libraries/LiquidCrystal/docs/html/open.png create mode 100644 libraries/LiquidCrystal/docs/html/search/all_5f.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_61.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_62.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_63.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_64.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_65.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_66.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_68.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_69.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_6c.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_6d.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_6e.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_6f.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_70.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_72.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_73.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_74.html create mode 100644 libraries/LiquidCrystal/docs/html/search/all_77.html create mode 100644 libraries/LiquidCrystal/docs/html/search/classes_69.html create mode 100644 libraries/LiquidCrystal/docs/html/search/classes_6c.html create mode 100644 libraries/LiquidCrystal/docs/html/search/close.png create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_5f.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_61.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_62.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_63.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_64.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_65.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_66.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_68.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_6c.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_72.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_73.html create mode 100644 libraries/LiquidCrystal/docs/html/search/defines_74.html create mode 100644 libraries/LiquidCrystal/docs/html/search/enums_74.html create mode 100644 libraries/LiquidCrystal/docs/html/search/enumvalues_6e.html create mode 100644 libraries/LiquidCrystal/docs/html/search/enumvalues_70.html create mode 100644 libraries/LiquidCrystal/docs/html/search/files_66.html create mode 100644 libraries/LiquidCrystal/docs/html/search/files_69.html create mode 100644 libraries/LiquidCrystal/docs/html/search/files_6c.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_61.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_62.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_63.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_64.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_65.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_66.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_68.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_69.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_6c.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_6d.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_6e.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_6f.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_70.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_72.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_73.html create mode 100644 libraries/LiquidCrystal/docs/html/search/functions_77.html create mode 100644 libraries/LiquidCrystal/docs/html/search/mag_sel.png create mode 100644 libraries/LiquidCrystal/docs/html/search/nomatches.html create mode 100644 libraries/LiquidCrystal/docs/html/search/search.css create mode 100644 libraries/LiquidCrystal/docs/html/search/search.js create mode 100644 libraries/LiquidCrystal/docs/html/search/search_l.png create mode 100644 libraries/LiquidCrystal/docs/html/search/search_m.png create mode 100644 libraries/LiquidCrystal/docs/html/search/search_r.png create mode 100644 libraries/LiquidCrystal/docs/html/search/typedefs_66.html create mode 100644 libraries/LiquidCrystal/docs/html/search/variables_5f.html create mode 100644 libraries/LiquidCrystal/docs/html/tab_a.png create mode 100644 libraries/LiquidCrystal/docs/html/tab_b.png create mode 100644 libraries/LiquidCrystal/docs/html/tab_h.png create mode 100644 libraries/LiquidCrystal/docs/html/tab_s.png create mode 100644 libraries/LiquidCrystal/docs/html/tabs.css create mode 100644 libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde create mode 100644 libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde create mode 100644 libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde create mode 100644 libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde create mode 100644 libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt create mode 100644 libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde create mode 100644 libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde create mode 100644 libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino create mode 100644 libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.pde create mode 100644 libraries/LiquidCrystal/keywords.txt create mode 100644 libraries/Timer_lite/FM24I2C.cpp create mode 100644 libraries/Timer_lite/FM24I2C.h create mode 100644 libraries/Timer_lite/RTClib.cpp create mode 100644 libraries/Timer_lite/RTClib.h create mode 100644 libraries/Timer_lite/Timer_lite.cpp create mode 100644 libraries/Timer_lite/Timer_lite.h create mode 100644 libraries/Timer_lite/keywords.txt create mode 100644 libraries/Timer_lite/library.properties create mode 100644 libraries/Timer_lite/readme.txt create mode 100644 libraries/libraries.zip create mode 100644 libraries/readme.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..93ca8f2 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Arduino Temporizador SSR DS3231 LCD2004 + + diff --git a/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0.ino b/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0.ino new file mode 100644 index 0000000..5ee90cc --- /dev/null +++ b/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0/Temporizador_lite_Atmel_LC2004_4buttons_v0.1.0.ino @@ -0,0 +1,982 @@ +/***************************************** +* Dosificador_LCD2004_4buttons * +* 15/03/2021 * +* Versión 0.1.0 * +* koneko.mx * +*****************************************/ + +#include "Timer_lite.h" +#include + +#define arr_len(x) (sizeof(x)/sizeof(*x)) + +/************************************************** +* PINOUT / MEMORY ADDRESS +**************************************************/ + #define LCD_I2C_ADDRESS 0x27 + #define RELAY_PIN 4 + #define SETTINGS_BUTTONS_PIN A3 + +/************************************************** +* BOTONES +**************************************************/ + #define SETTING_BUTTON_IN_VAL 16 + #define SETTING_BUTTON_OUT_VAL 91 + #define SETTING_BUTTON_UP_VAL 41 + #define SETTING_BUTTON_DOWN_VAL 69 + + #define SETTING_BUTTON_TOLERANCE_READ 8 + #define SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS 1 + #define SETTING_BUTTON_DELAY_MILLIS 350 + + // 4-button configuration + uint8_t button_values[] = {SETTING_BUTTON_IN_VAL, SETTING_BUTTON_OUT_VAL, SETTING_BUTTON_UP_VAL, SETTING_BUTTON_DOWN_VAL}; + uint32_t _bt[sizeof(button_values)]; // millis + uint32_t confirmation_repeats_millis; + +/************************************************** +* MENÚ +**************************************************/ + #define ALL_SETTINGS 0 + + #define VIEW 0 + #define UPDATE 1 + + #define POSITION_ONE 0 + #define POSITION_TWO 1 + #define POSITION_THREE 2 + #define POSITION_FOUR 3 + #define POSITION_FIVE 4 + #define POSITION_SIX 5 + + #define YEARS_DATETIME 2020 + + #define AUTO_EXIT_MENU_MILLIS 15000 + + // MENÚ + #define OUT_OF_MENU -1 + #define MENU_SALIR 0 + #define MENU_T_ESPERA_INICIAL 1 + #define MENU_T_ARRANQUE 2 + #define MENU_T_ARRANQUE_ESPERA 3 + #define MENU_T_ENCENDIDO 4 + #define MENU_T_ENCENDIDO_ESPERA 5 + #define MENU_FECHA_Y_HORA 6 + #define MENU_DETENER_PROCESO 7 + #define MENU_REANUDAR_PROCESO 8 + #define MENU_REINICIAR_EQUIPO 9 + #define MENU_VALORES_DE_FABRICA 10 + + #define DETENER 0 + #define REANUDAR 1 + #define REINICIAR 2 + #define RESTAURAR 3 + #define CANCELAR 4 + + // Menú navegación + int8_t menu_section; + uint8_t menu_edition; + uint8_t menu_cursor_var; + + uint8_t setup_var[6]; + + uint32_t last_change_menu_millis; + +/************************************************** +* LCD +**************************************************/ + #define BLINK_MILLIS 1600 + #define LCD_PROCESS_REFRESH_MILLIS 250 + + // LCD2004 + LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); + + String menu[] = { + "SALIR", + "T. ESPERA INICIAL", + "T. ARRANQUE", + "T. ESPERA ARRANQUE", + "T. ENCENDIDO", + "T. ESPERA ENCENDIDO", + "CAMBIAR FECHA Y HORA", + "DETENER PROCESO", + "REANUDAR PROCESO", + "REINICIAR EQUIPO", + "VALORES DE FABRICA", + }; + + String timer_text[] = { + "DETENIDO", + "INICIARA EN", + "ARRANQUE", + "ESPERA A.", + "ENCENDIDO", + "ESPERA E.", + }; + + String text_info[] = { + "DETENER", + "REANUDAR", + "REINICIAR", + "RESTAURAR", + "CANCELAR", + }; + + boolean refresh_lcd_menu; + uint32_t blink_millis; + +/*************************************************** +* Timer_lite +***************************************************/ + #define TIMER_FIRST_EEPROM_ADREESS 0 + + #define TIEMPO_INICIO_ESPERA_DEFAULT 60 + #define TIEMPO_ARRRANQUE_DEFAULT 10 + #define TIEMPO_ARRRANQUE_ESPERA_DEFAULT 20 + #define TIEMPO_ENCENDIDO_DEFAULT 10 + #define TIEMPO_ENCENDIDO_ESPERA_DEFAULT 10 + #define PROCESO_DETENIDO_DEFAULT 0 + + uint8_t Timer_lite::_instancias_num; + RTC_DS3231 Timer_lite::_RTC; + DateTime Timer_lite::_now; + + Timer_lite myTimer_lite(RELAY_PIN, TIMER_FIRST_EEPROM_ADREESS); + +/************************************************** +* Define DEBUG_SERIAL_ENABLE to enable debug serial. +* Comment it to disable debug serial. +**************************************************/ + #define DEBUG_SERIAL_ENABLE + + #define dbSerial Serial + + #ifdef DEBUG_SERIAL_ENABLE + #define serialPrint(a) dbSerial.print(a) + #define serialPrintln(a) dbSerial.println(a) + #define serialBegin(a) dbSerial.begin(a) + #define serialBeginWhile(a) while(!dbSerial) delay(1) + #else + #define serialPrint(a) do{}while(0) + #define serialPrintln(a) do{}while(0) + #define serialBegin(a) do{}while(0) + #define serialBeginWhile(a) do{}while(0) + #endif + +/************************************************** +* FRONT PANEL OF CONFIGURATIONS +**************************************************/ + // button methods and memory spaces + void loop_panel_buttons() + { + // Leemos valor analogo del botón + uint16_t button_value = analogRead(SETTINGS_BUTTONS_PIN); + + // Comprobamos el valor obtenido con un rago de tolerancia SETTING_BUTTON_TOLERANCE_READ + for (uint8_t i = 0; i < sizeof button_values / sizeof button_values[0]; i++) { + if(button_values[i] >= (button_value - SETTING_BUTTON_TOLERANCE_READ) && button_values[i] <= (button_value + SETTING_BUTTON_TOLERANCE_READ)) + button_value = button_values[i]; + } + + serialPrintln(button_value); + + //Valoramos si se presiono un botón y ejecutamos el metodo correspondiente + switch(button_value) { + case SETTING_BUTTON_IN_VAL: + if(millis() >= _bt[0] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_IN_VAL); + + _bt[0] = millis(); + } + } + break; + + case SETTING_BUTTON_OUT_VAL: + if(millis() >= _bt[1] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_OUT_VAL); + + _bt[1] = millis(); + } + } + break; + + case SETTING_BUTTON_UP_VAL: + if(millis() >= _bt[2] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_UP_VAL); + + _bt[2] = millis(); + } + } + break; + + case SETTING_BUTTON_DOWN_VAL: + if(millis() >= _bt[3] + SETTING_BUTTON_DELAY_MILLIS) { + if(confirmation_repeats_millis == 0) + confirmation_repeats_millis = millis() + SETTING_BUTTON_CONFIRMATION_REPEATS_MILLIS; + + if(millis() > confirmation_repeats_millis){ + action_button(SETTING_BUTTON_DOWN_VAL); + + _bt[3] = millis(); + } + } + break; + + default: + confirmation_repeats_millis = 0; + + _bt[0] = 0; + _bt[1] = 0; + _bt[2] = 0; + _bt[3] = 0; + } + + // Verificamos y salimos del menú si a pasan AUTO_EXIT_MENU_MILLIS + if((menu_section != OUT_OF_MENU) && (millis() >= last_change_menu_millis + AUTO_EXIT_MENU_MILLIS)){ + load_menu_variables(OUT_OF_MENU); + + refresh_lcd_menu = true; + + serialPrintln("AUTO_EXIT_MENU_MILLIS"); + } + } + + void action_button(uint8_t button_value) + { + switch(button_value) { + case SETTING_BUTTON_IN_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(1); + break; + + case MENU_DETENER_PROCESO: + case MENU_REANUDAR_PROCESO: + case MENU_REINICIAR_EQUIPO: + case MENU_VALORES_DE_FABRICA: + if(menu_edition == VIEW) + menu_edition = UPDATE; + + else if(++menu_cursor_var > POSITION_ONE) + save_setting(menu_section); + break; + + + case MENU_T_ESPERA_INICIAL: + if(menu_edition == VIEW) + menu_edition = UPDATE; + + else if(++menu_cursor_var > POSITION_TWO) + save_setting(menu_section); + break; + + + case MENU_T_ARRANQUE_ESPERA: + case MENU_T_ARRANQUE: + case MENU_T_ENCENDIDO_ESPERA: + case MENU_T_ENCENDIDO: + if(menu_edition == VIEW) + menu_edition = UPDATE; + + else if(++menu_cursor_var > POSITION_THREE) + save_setting(menu_section); + break; + + case MENU_FECHA_Y_HORA: + if(menu_edition == VIEW) + menu_edition = UPDATE; + + else if(++menu_cursor_var > POSITION_SIX) + save_setting(menu_section); + break; + + case MENU_SALIR: + load_menu_variables(OUT_OF_MENU); + break; + } + break; + + case SETTING_BUTTON_OUT_VAL: + switch(menu_edition){ + case VIEW: + load_menu_variables(OUT_OF_MENU); + break; + + case UPDATE: + if(menu_cursor_var == 0) + load_menu_variables(menu_section); + else + menu_cursor_var--; + } + break; + + case SETTING_BUTTON_UP_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(arr_len(menu) -1); + break; + + case MENU_T_ESPERA_INICIAL: + if(menu_edition == VIEW){ + load_menu_variables(MENU_SALIR); + + }else{// UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] >= 60 ? 0 : ++setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Segundos + } + break; + + case MENU_T_ARRANQUE_ESPERA: + case MENU_T_ARRANQUE: + case MENU_T_ENCENDIDO_ESPERA: + case MENU_T_ENCENDIDO: + if(menu_edition == VIEW){ + load_menu_variables(menu_section -1); + + }else{// UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] >= 23 ? 0 : ++setup_var[0]; // Horas + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Minutos + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] >= 59 ? 0 : ++setup_var[2]; // Segundos + } + break; + + case MENU_FECHA_Y_HORA: + if(menu_edition == VIEW){ + load_menu_variables(menu_section -1); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] >= 23 ? 1 : ++setup_var[0]; // Horas + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] >= 59 ? 0 : ++setup_var[1]; // Minutos + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] >= 59 ? 0 : ++setup_var[2]; // Segundo + + else if(menu_cursor_var == POSITION_FOUR) + setup_var[3] = setup_var[3] >= 31 ? 0 : ++setup_var[3]; // Día + + else if(menu_cursor_var == POSITION_FIVE) + setup_var[4] = setup_var[4] >= 12 ? 0 : ++setup_var[4]; // Mes + + else if(menu_cursor_var == POSITION_SIX) + setup_var[5] = setup_var[5] >= 10 ? 0 : ++setup_var[5]; // año + } + break; + + case MENU_DETENER_PROCESO: + if(menu_edition == VIEW) + load_menu_variables(menu_section -1); + + else // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + break; + + case MENU_REANUDAR_PROCESO: + if(menu_edition == VIEW) + load_menu_variables(menu_section -2); + + else // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + break; + + case MENU_REINICIAR_EQUIPO: + if(menu_edition == VIEW) + load_menu_variables(menu_section + (myTimer_lite.getTimerDetenido()? -1: -2)); + + else // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + break; + + case MENU_VALORES_DE_FABRICA: + if(menu_edition == VIEW) + load_menu_variables(menu_section -1); + + else // UPDATE + setup_var[0] = setup_var[0] >= 1 ? 0 : ++setup_var[0]; + break; + + case MENU_SALIR: + load_menu_variables(arr_len(menu) -1); + break; + } + break; + + case SETTING_BUTTON_DOWN_VAL: + switch(menu_section) { + case OUT_OF_MENU: + load_menu_variables(1); + break; + + case MENU_T_ESPERA_INICIAL: + if(menu_edition == VIEW){ + load_menu_variables(menu_section +1); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] <= 0 ? 60 : --setup_var[0]; // Minutos + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Segundos + } + break; + + case MENU_T_ARRANQUE: + case MENU_T_ARRANQUE_ESPERA: + case MENU_T_ENCENDIDO: + case MENU_T_ENCENDIDO_ESPERA: + if(menu_edition == VIEW){ + load_menu_variables(menu_section +1); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] <= 0 ? 23 : --setup_var[0]; // Horas + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Minutos + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] <= 0 ? 59 : --setup_var[2]; // Segundos + } + break; + + case MENU_FECHA_Y_HORA: + if(menu_edition == VIEW){ + load_menu_variables(menu_section + (myTimer_lite.getTimerDetenido()? 2: 1)); + + }else{ // UPDATE + if(menu_cursor_var == POSITION_ONE) + setup_var[0] = setup_var[0] <= 0 ? 23 : --setup_var[0]; // Horas + + else if(menu_cursor_var == POSITION_TWO) + setup_var[1] = setup_var[1] <= 0 ? 59 : --setup_var[1]; // Minutos + + else if(menu_cursor_var == POSITION_THREE) + setup_var[2] = setup_var[2] <= 0 ? 59 : --setup_var[2]; // Segundos + + else if(menu_cursor_var == POSITION_FOUR) + setup_var[3] = setup_var[3] <= 0? 31 : --setup_var[3]; // Día + + else if(menu_cursor_var == POSITION_FIVE) + setup_var[4] = setup_var[4] <= 0? 12 : --setup_var[4]; // Mes + + else if(menu_cursor_var == POSITION_SIX) + setup_var[5] = setup_var[5] <= 0? 10 : --setup_var[5]; // año + } + break; + + case MENU_DETENER_PROCESO: + if(menu_edition == VIEW) + load_menu_variables(menu_section +2); + + else // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + break; + + case MENU_REANUDAR_PROCESO: + if(menu_edition == VIEW) + load_menu_variables(menu_section +1); + + else // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + break; + + case MENU_REINICIAR_EQUIPO: + if(menu_edition == VIEW) + load_menu_variables(menu_section +1); + + else // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + break; + + case MENU_VALORES_DE_FABRICA: + if(menu_edition == VIEW) + load_menu_variables(MENU_SALIR); + + else // UPDATE + setup_var[0] = setup_var[0] <= 0 ? 1 : --setup_var[0]; + break; + + case MENU_SALIR: + load_menu_variables(1); + break; + } + break; + } + + refresh_lcd_menu = true; + last_change_menu_millis = millis(); + + serialPrint("menu_section: "); + serialPrint(menu_section); + serialPrint(", menu_edition: "); + serialPrint(menu_edition); + serialPrint(", menu_cursor_var: "); + serialPrint(menu_cursor_var); + serialPrint(", setup_var[0]: "); + serialPrint(setup_var[0]); + serialPrint(", setup_var[1]: "); + serialPrint(setup_var[1]); + serialPrint(", setup_var[2]: "); + serialPrint(setup_var[2]); + serialPrint(", setup_var[3]: "); + serialPrint(setup_var[3]); + serialPrint(", setup_var[4]: "); + serialPrint(setup_var[4]); + serialPrint(", setup_var[5]: "); + serialPrintln(setup_var[5]); + } + + void save_setting(uint8_t _setting) + { + menu_edition = VIEW; + menu_cursor_var = POSITION_ONE; + + switch(_setting){ + case MENU_T_ESPERA_INICIAL: + myTimer_lite.setTiempoInicioEspera(setup_var[0], setup_var[1]); + break; + + case MENU_T_ARRANQUE: + myTimer_lite.setTiempoArranque(setup_var[0], setup_var[1], setup_var[2]); + break; + + case MENU_T_ARRANQUE_ESPERA: + myTimer_lite.setTiempoArranqueEspera(setup_var[0], setup_var[1], setup_var[2]); + break; + + case MENU_T_ENCENDIDO: + myTimer_lite.setTiempoEncendido(setup_var[0], setup_var[1], setup_var[2]); + break; + + case MENU_T_ENCENDIDO_ESPERA: + myTimer_lite.setTiempoEncendidoEspera(setup_var[0], setup_var[1], setup_var[2]); + break; + + case MENU_FECHA_Y_HORA: + myTimer_lite.setFechaHora(YEARS_DATETIME + setup_var[5], setup_var[4], setup_var[3], setup_var[0], setup_var[1], setup_var[2]); + break; + + case MENU_DETENER_PROCESO: + if(setup_var[0]){ + myTimer_lite.detener(); + + load_menu_variables(MENU_REANUDAR_PROCESO); + } + break; + + case MENU_REANUDAR_PROCESO: + if(setup_var[0]){ + myTimer_lite.reanudar(); + + load_menu_variables(MENU_DETENER_PROCESO); + } + break; + + case MENU_REINICIAR_EQUIPO: + if(setup_var[0]){ + myTimer_lite.reiniciar(); + + load_menu_variables(OUT_OF_MENU); + } + break; + + case MENU_VALORES_DE_FABRICA: + if(setup_var[0]){ + myTimer_lite.setTiempoInicioEspera(TIEMPO_INICIO_ESPERA_DEFAULT); + myTimer_lite.setTiempoArranque(TIEMPO_ARRRANQUE_DEFAULT); + myTimer_lite.setTiempoArranqueEspera(TIEMPO_ARRRANQUE_ESPERA_DEFAULT); + myTimer_lite.setTiempoEncendido(TIEMPO_ENCENDIDO_DEFAULT); + myTimer_lite.setTiempoEncendidoEspera(TIEMPO_ENCENDIDO_ESPERA_DEFAULT); + myTimer_lite.reanudar(); + myTimer_lite.reiniciar(); + + load_menu_variables(1); + } + break; + } + } + + void load_menu_variables(int8_t _menu_section) + { + menu_section = _menu_section; + menu_edition = VIEW; + menu_cursor_var = POSITION_ONE; + + setup_var[0] = 0; + setup_var[1] = 0; + setup_var[2] = 0; + setup_var[3] = 0; + setup_var[4] = 0; + setup_var[5] = 0; + + uint32_t valor_guardado; + + switch(_menu_section){ + case MENU_T_ESPERA_INICIAL: + valor_guardado = myTimer_lite.getTiempoInicioEspera(); + + setup_var[0] = uint8_t(valor_guardado / 60); // Minutos + setup_var[1] = uint8_t(valor_guardado - (setup_var[0] * 60)); // Segundos + break; + + case int8_t(MENU_T_ARRANQUE): + valor_guardado = myTimer_lite.getTiempoArranque(); + + setup_var[0] = uint8_t(valor_guardado / 3600); // horas + setup_var[1] = uint8_t((valor_guardado - (setup_var[0] * 3600)) / 60); // Minutos + setup_var[2] = uint8_t(valor_guardado - (setup_var[0] * 3600) - (setup_var[1] * 60)); // Segundos + break; + + case MENU_T_ARRANQUE_ESPERA: + valor_guardado = myTimer_lite.getTiempoArranqueEspera(); + + setup_var[0] = uint8_t(valor_guardado / 3600); // horas + setup_var[1] = uint8_t((valor_guardado - (setup_var[0] * 3600)) / 60); // Minutos + setup_var[2] = uint8_t(valor_guardado - (setup_var[0] * 3600) - (setup_var[1] * 60)); // Segundos + break; + + case MENU_T_ENCENDIDO: + valor_guardado = myTimer_lite.getTiempoEncendido(); + + setup_var[0] = uint8_t(valor_guardado / 3600); // horas + setup_var[1] = uint8_t((valor_guardado - (setup_var[0] * 3600)) / 60); // Minutos + setup_var[2] = uint8_t(valor_guardado - (setup_var[0] * 3600) - (setup_var[1] * 60)); // Segundos + break; + + case MENU_T_ENCENDIDO_ESPERA: + valor_guardado = myTimer_lite.getTiempoEncendidoEspera(); + + setup_var[0] = uint8_t(valor_guardado / 3600); // horas + setup_var[1] = uint8_t((valor_guardado - (setup_var[0] * 3600)) / 60); // Minutos + setup_var[2] = uint8_t(valor_guardado - (setup_var[0] * 3600) - (setup_var[1] * 60)); // Segundos + break; + + case MENU_FECHA_Y_HORA: + setup_var[0] = Timer_lite::_now.hour(); + setup_var[1] = Timer_lite::_now.minute(); + setup_var[2] = Timer_lite::_now.second(); + + setup_var[3] = Timer_lite::_now.day(); + setup_var[4] = Timer_lite::_now.month(); + + if(Timer_lite::_now.year() >= 2020) + setup_var[5] = (Timer_lite::_now.year() - YEARS_DATETIME); + break; + } + } + + +/************************************************** +* LCD2004 rendering +**************************************************/ + // Helpers + String fill_string_ws(String _text_info, uint8_t _length, uint8_t _first_spaces = 0, String _char = " ") + { + if(_text_info.length() >= _length) + return _text_info.substring(0, _length); + + for(uint8_t i = 0; _first_spaces > i; i++) + if(_text_info.length() < _length) + _text_info = _char + _text_info; + + while(_text_info.length() < _length) + _text_info = _text_info + _char; + + return _text_info; + } + + String min_seg_to_string(uint8_t _min, uint8_t _seg) + { + String min = String(_min < 10? "0": "") + String(_min); + String seg = String(_seg < 10? "0": "") + String(_seg); + + return min + ":" + seg; + } + + String hrs_min_seg_to_string(uint8_t _hrs, uint8_t _min, uint8_t _seg) + { + String hrs = String(_hrs < 10? "0": "") + String(_hrs); + String min = String(_min < 10? "0": "") + String(_min); + String seg = String(_seg < 10? "0": "") + String(_seg); + + return hrs + ":" + min + ":" + seg; + } + + String hrs_min_seg_dia_mes_ano_to_string(uint8_t _hrs, uint8_t _min, uint8_t _seg, uint8_t _dia, uint8_t _mes, uint8_t _ano) + { + String hrs = String(_hrs < 10? "0": "") + String(_hrs); + String min = String(_min < 10? "0": "") + String(_min); + String seg = String(_seg < 10? "0": "") + String(_seg); + + String dia = String(_dia < 10? "0": "") + String(_dia); + String mes = String(_mes < 10? "0": "") + String(_mes); + String ano = String(YEARS_DATETIME + _ano); + + return hrs + ":" + min + ":" + seg + " " + dia + "/" + mes + "/" + ano; + } + + String seg_to_string(uint32_t _seg) + { + uint32_t hrs = _seg / 3600; + uint16_t min = (_seg - (hrs * 3600)) / 60; + uint8_t seg = _seg - (hrs * 3600) - (min * 60); + + String hrs_s = hrs >= 1? String(hrs) + ":": ""; + String min_s = min >= 1? (hrs >= 1 && min <= 9? "0": "") + String(min) + (min >= 1? ":": ""): ""; + String seg_s = (min >= 1 && seg <= 9? "0": "") + String(seg); + + return hrs_s + min_s + seg_s; + } + + + + // Methods + void loop_screen_rendering() + { + if(refresh_lcd_menu){ + print_lcd_menu(); + + refresh_lcd_menu = false; + } + + if(millis() % LCD_PROCESS_REFRESH_MILLIS == 0){ + print_lcd_datetime(); + print_lcd_process(); + setCursor_lcd_menu(); + } + } + + void print_lcd_menu() + { + lcd.noCursor(); + + // Menú de configuraciones + lcd.setCursor(0, 1); + + menu_section == OUT_OF_MENU? + lcd.print(fill_string_ws("", 20)): + lcd.print(fill_string_ws(menu[menu_section], 20)); + + // Detalles de configuraciones + lcd.setCursor(0, 2); + + uint8_t text_info_idx; + + switch(menu_section){ + case OUT_OF_MENU: + case MENU_SALIR: + lcd.print(fill_string_ws("", 20)); + break; + + case MENU_T_ESPERA_INICIAL: + lcd.print(fill_string_ws(min_seg_to_string(setup_var[0], setup_var[1]), 20, 6)); + break; + + case MENU_T_ARRANQUE: + case MENU_T_ARRANQUE_ESPERA: + case MENU_T_ENCENDIDO: + case MENU_T_ENCENDIDO_ESPERA: + lcd.print(fill_string_ws(hrs_min_seg_to_string(setup_var[0], setup_var[1], setup_var[2]), 20, 3)); + break; + + case MENU_FECHA_Y_HORA: + if(menu_edition == UPDATE){ + text_info_idx = setup_var[0]? DETENER: CANCELAR; + + lcd.print(hrs_min_seg_dia_mes_ano_to_string(setup_var[0], setup_var[1], setup_var[2], setup_var[3], setup_var[4], setup_var[5])); + + }else + lcd.print(fill_string_ws("", 20)); + break; + + case MENU_DETENER_PROCESO: + if(menu_edition == UPDATE){ + text_info_idx = setup_var[0]? DETENER: CANCELAR; + + lcd.print(fill_string_ws(text_info[text_info_idx], 20, 3)); + + }else + lcd.print(fill_string_ws("", 20)); + break; + + case MENU_REANUDAR_PROCESO: + if(menu_edition == UPDATE){ + text_info_idx = setup_var[0]? REANUDAR: CANCELAR; + + lcd.print(fill_string_ws(text_info[text_info_idx], 20, 3)); + + }else + lcd.print(fill_string_ws("", 20)); + break; + + case MENU_REINICIAR_EQUIPO: + if(menu_edition == UPDATE){ + text_info_idx = setup_var[0]? REINICIAR: CANCELAR; + + lcd.print(fill_string_ws(text_info[text_info_idx], 20, 3)); + + }else + lcd.print(fill_string_ws("", 20)); + break; + + case MENU_VALORES_DE_FABRICA: + if(menu_edition == UPDATE){ + text_info_idx = setup_var[0]? RESTAURAR: CANCELAR; + + lcd.print(fill_string_ws(text_info[text_info_idx], 20, 3)); + }else + lcd.print(fill_string_ws("", 20)); + break; + } + + /* + // Limpiamos línea de proceso + if(menu_edition == UPDATE){ + lcd.setCursor(0, 2); + lcd.print(fill_string_ws("", 20)); + + lcd.setCursor(0, 3); + lcd.print(fill_string_ws("", 20)); + } + */ + } + + void print_lcd_datetime() + { + /* + lcd.setCursor(0, 0); + lcd.print(myTimer_lite.getHora()); + lcd.setCursor(10, 0); + lcd.print(myTimer_lite.getFecha()); + */ + } + + void print_lcd_process() + { + lcd.setCursor(0, 3); + + if(myTimer_lite.getTimerDetenido() != true){ + // Estado del Temporizador + lcd.print(fill_string_ws(timer_text[myTimer_lite.getPeriodo()], 12)); + + // Tiempo del periodo del temporizador + lcd.print(fill_string_ws(seg_to_string(myTimer_lite.getRestantePeriodoSeg()), 8)); + + }else{ + if(millis() >= blink_millis) + blink_millis = millis() + (BLINK_MILLIS * 2); + + if(blink_millis - millis() >= BLINK_MILLIS) + lcd.print(fill_string_ws(timer_text[0], 11)); + } + } + + void setCursor_lcd_menu() + { + if(menu_edition == UPDATE){ + switch(menu_section){ + case MENU_T_ESPERA_INICIAL: + // Posicionamos el cursos, para la edición + if(menu_cursor_var == POSITION_ONE) + lcd.setCursor(6, 2); + + else if(menu_cursor_var == POSITION_TWO) + lcd.setCursor(9, 2); + break; + + case MENU_T_ARRANQUE: + case MENU_T_ARRANQUE_ESPERA: + case MENU_T_ENCENDIDO: + case MENU_T_ENCENDIDO_ESPERA: + // Posicionamos el cursos, para la edición + if(menu_cursor_var == POSITION_ONE) + lcd.setCursor(3, 2); + + else if(menu_cursor_var == POSITION_TWO) + lcd.setCursor(6, 2); + + else if(menu_cursor_var == POSITION_THREE) + lcd.setCursor(9, 2); + break; + + case MENU_FECHA_Y_HORA: + // Posicionamos el cursos, para la edición + if(menu_cursor_var == POSITION_ONE) + lcd.setCursor(0, 2); + + else if(menu_cursor_var == POSITION_TWO) + lcd.setCursor(3, 2); + + else if(menu_cursor_var == POSITION_THREE) + lcd.setCursor(6, 2); + + else if(menu_cursor_var == POSITION_FOUR) + lcd.setCursor(10, 2); + + else if(menu_cursor_var == POSITION_FIVE) + lcd.setCursor(13, 2); + + else if(menu_cursor_var == POSITION_SIX) + lcd.setCursor(16, 2); + break; + + case MENU_DETENER_PROCESO: + case MENU_REANUDAR_PROCESO: + case MENU_REINICIAR_EQUIPO: + case MENU_VALORES_DE_FABRICA: + lcd.setCursor(3, 2); + break; + } + + lcd.cursor(); + } + } + +/************************************************** +* Setup / Loop +**************************************************/ + void setup() { + pinMode(SETTINGS_BUTTONS_PIN, INPUT_PULLUP); + + // Salida Serial + serialBegin(9600); + serialBeginWhile(); + + // Iniciamos la pantalla + lcd.begin(20, 4); + + lcd.setCursor(0, 0); + lcd.print("DIKEN INTERNATIONAL"); + + myTimer_lite.initialize(); + //myTimer_lite.setFechaHoraSistema(); + } + + void loop() { + myTimer_lite.process_loop(); + + loop_panel_buttons(); + loop_screen_rendering(); + } diff --git a/libraries/DS3231/CONTRIBUTING.md b/libraries/DS3231/CONTRIBUTING.md new file mode 100644 index 0000000..810b1fa --- /dev/null +++ b/libraries/DS3231/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contribution Guidelines + +This library is the culmination of the expertise of many members of the open source community who have dedicated their time and hard work. The best way to ask for help or propose a new idea is to [create a new issue](https://github.com/NorthernWidget/DS3231/issues/new) while creating a Pull Request with your code changes allows you to share your own innovations with the rest of the community. + +The following are some guidelines to observe when creating issues or PRs: + +- Be friendly; it is important that we can all enjoy a safe space as we are all working on the same project and it is okay for people to have different ideas + +- [Use code blocks](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code); it helps us help you when we can read your code! On that note also refrain from pasting more than 30 lines of code in a post, instead [create a gist](https://gist.github.com/) if you need to share large snippets + +- Use reasonable titles; refrain from using overly long or capitalized titles as they are usually annoying and do little to encourage others to help :smile: + +- Be detailed; refrain from mentioning code problems without sharing your source code and always give information regarding your board and version of the library. diff --git a/libraries/DS3231/DS3231.cpp b/libraries/DS3231/DS3231.cpp new file mode 100644 index 0000000..9c0749e --- /dev/null +++ b/libraries/DS3231/DS3231.cpp @@ -0,0 +1,747 @@ +/* +DS3231.cpp: DS3231 Real-Time Clock library +Eric Ayars +4/1/11 + +Spliced in DateTime all-at-once reading (to avoid rollover) and unix time +from Jean-Claude Wippler and Limor Fried +Andy Wickert +5/15/11 + +Fixed problem with SD processors(no function call) by replacing all occurences of the term PM, which +is defined as a macro on SAMD controllers by PM_time. +Simon Gassner +11/28/2017 + +Fixed setting 12-hour clock in setHour function so that 12:xx AM is not stored as 00:xx and corrected +the setting of the PM flag for 12:xx PM. These address certain DS3231 errors in properly setting the +AM/PM (bit 5) flag in the 02h register when passing from AM to PM and PM to AM. +David Merrifield +04/14/2020 + +Released into the public domain. +*/ + +#include + +// These included for the DateTime class inclusion; will try to find a way to +// not need them in the future... +#if defined(__AVR__) +#include +#elif defined(ESP8266) +#include +#endif +// Changed the following to work on 1.0 +//#include "WProgram.h" +#include + + +#define CLOCK_ADDRESS 0x68 + +#define SECONDS_FROM_1970_TO_2000 946684800 + + +// Constructor +DS3231::DS3231() { + // nothing to do for this constructor. +} + +// Utilities from JeeLabs/Ladyada + +//////////////////////////////////////////////////////////////////////////////// +// utility code, some of this could be exposed in the DateTime API if needed + +// DS3231 is smart enough to know this, but keeping it for now so I don't have +// to rewrite their code. -ADW +static const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 }; + +// number of days since 2000/01/01, valid for 2001..2099 +static uint16_t date2days(uint16_t y, uint8_t m, uint8_t d) { + if (y >= 2000) + y -= 2000; + uint16_t days = d; + for (uint8_t i = 1; i < m; ++i) + days += pgm_read_byte(daysInMonth + i - 1); + if (m > 2 && isleapYear(y)) + ++days; + return days + 365 * y + (y + 3) / 4 - 1; +} + +static long time2long(uint16_t days, uint8_t h, uint8_t m, uint8_t s) { + return ((days * 24L + h) * 60 + m) * 60 + s; +} + +/***************************************** + Public Functions + *****************************************/ + +/******************************************************************************* + * TO GET ALL DATE/TIME INFORMATION AT ONCE AND AVOID THE CHANCE OF ROLLOVER + * DateTime implementation spliced in here from Jean-Claude Wippler's (JeeLabs) + * RTClib, as modified by Limor Fried (Ladyada); source code at: + * https://github.com/adafruit/RTClib + ******************************************************************************/ + +//////////////////////////////////////////////////////////////////////////////// +// DateTime implementation - ignores time zones and DST changes +// NOTE: also ignores leap seconds, see http://en.wikipedia.org/wiki/Leap_second + +DateTime::DateTime (uint32_t t) { + t -= SECONDS_FROM_1970_TO_2000; // bring to 2000 timestamp from 1970 + + ss = t % 60; + t /= 60; + mm = t % 60; + t /= 60; + hh = t % 24; + uint16_t days = t / 24; + uint8_t leap; + for (yOff = 0; ; ++yOff) { + leap = isleapYear(yOff); + if (days < 365 + leap) + break; + days -= 365 + leap; + } + for (m = 1; ; ++m) { + uint8_t daysPerMonth = pgm_read_byte(daysInMonth + m - 1); + if (leap && m == 2) + ++daysPerMonth; + if (days < daysPerMonth) + break; + days -= daysPerMonth; + } + d = days + 1; +} + +DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) { + if (year >= 2000) + year -= 2000; + yOff = year; + m = month; + d = day; + hh = hour; + mm = min; + ss = sec; +} + +// supported formats are date "Mmm dd yyyy" and time "hh:mm:ss" (same as __DATE__ and __TIME__) +DateTime::DateTime(const char* date, const char* time) { + static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; + static const char buff[4]={'0','0','0','0'}; + int y; + sscanf(date, "%s %d %d", buff, &d, &y); + yOff = y >= 2000 ? y - 2000 : y; + m = (strstr(month_names, buff) - month_names) / 3 + 1; + sscanf(time, "%d:%d:%d", &hh, &mm, &ss); +} + +static uint8_t conv2d(const char* p) { + uint8_t v = 0; + if ('0' <= *p && *p <= '9') + v = *p - '0'; + return 10 * v + *++p - '0'; +} + +// UNIX time: IS CORRECT ONLY WHEN SET TO UTC!!! +uint32_t DateTime::unixtime(void) const { + uint32_t t; + uint16_t days = date2days(yOff, m, d); + t = time2long(days, hh, mm, ss); + t += SECONDS_FROM_1970_TO_2000; // seconds from 1970 to 2000 + + return t; +} + +// Slightly modified from JeeLabs / Ladyada +// Get all date/time at once to avoid rollover (e.g., minute/second don't match) +static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); } +static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); } + +bool isleapYear(const uint8_t y) { + if(y&3)//check if divisible by 4 + return false; + //only check other, when first failed + return (y % 100 || y % 400 == 0); +} + +DateTime RTClib::now() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0); // This is the first register address (Seconds) + // We'll read from here on for 7 bytes: secs reg, minutes reg, hours, days, months and years. + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 7); + uint8_t ss = bcd2bin(Wire.read() & 0x7F); + uint8_t mm = bcd2bin(Wire.read()); + uint8_t hh = bcd2bin(Wire.read()); + Wire.read(); + uint8_t d = bcd2bin(Wire.read()); + uint8_t m = bcd2bin(Wire.read()); + uint16_t y = bcd2bin(Wire.read()) + 2000; + + return DateTime (y, m, d, hh, mm, ss); +} + +///// ERIC'S ORIGINAL CODE FOLLOWS ///// + +byte DS3231::getSecond() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x00); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + return bcdToDec(Wire.read()); +} + +byte DS3231::getMinute() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x01); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + return bcdToDec(Wire.read()); +} + +byte DS3231::getHour(bool& h12, bool& PM_time) { + byte temp_buffer; + byte hour; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x02); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + temp_buffer = Wire.read(); + h12 = temp_buffer & 0b01000000; + if (h12) { + PM_time = temp_buffer & 0b00100000; + hour = bcdToDec(temp_buffer & 0b00011111); + } else { + hour = bcdToDec(temp_buffer & 0b00111111); + } + return hour; +} + +byte DS3231::getDoW() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x03); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + return bcdToDec(Wire.read()); +} + +byte DS3231::getDate() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x04); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + return bcdToDec(Wire.read()); +} + +byte DS3231::getMonth(bool& Century) { + byte temp_buffer; + byte hour; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x05); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + temp_buffer = Wire.read(); + Century = temp_buffer & 0b10000000; + return (bcdToDec(temp_buffer & 0b01111111)) ; +} + +byte DS3231::getYear() { + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x06); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 1); + return bcdToDec(Wire.read()); +} + +void DS3231::setSecond(byte Second) { + // Sets the seconds + // This function also resets the Oscillator Stop Flag, which is set + // whenever power is interrupted. + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x00); + Wire.write(decToBcd(Second)); + Wire.endTransmission(); + // Clear OSF flag + byte temp_buffer = readControlByte(1); + writeControlByte((temp_buffer & 0b01111111), 1); +} + +void DS3231::setMinute(byte Minute) { + // Sets the minutes + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x01); + Wire.write(decToBcd(Minute)); + Wire.endTransmission(); +} + +// Following setHour revision by David Merrifield 4/14/2020 correcting handling of 12-hour clock + +void DS3231::setHour(byte Hour) { + // Sets the hour, without changing 12/24h mode. + // The hour must be in 24h format. + + bool h12; + byte temp_hour; + + // Start by figuring out what the 12/24 mode is + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x02); + Wire.endTransmission(); + Wire.requestFrom(CLOCK_ADDRESS, 1); + h12 = (Wire.read() & 0b01000000); + // if h12 is true, it's 12h mode; false is 24h. + + if (h12) { + // 12 hour + bool am_pm = (Hour > 11); + temp_hour = Hour; + if (temp_hour > 11) { + temp_hour = temp_hour - 12; + } + if (temp_hour == 0) { + temp_hour = 12; + } + temp_hour = decToBcd(temp_hour) | (am_pm << 5) | 0b01000000; + } else { + // 24 hour + temp_hour = decToBcd(Hour) & 0b10111111; + } + + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x02); + Wire.write(temp_hour); + Wire.endTransmission(); +} + +void DS3231::setDoW(byte DoW) { + // Sets the Day of Week + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x03); + Wire.write(decToBcd(DoW)); + Wire.endTransmission(); +} + +void DS3231::setDate(byte Date) { + // Sets the Date + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x04); + Wire.write(decToBcd(Date)); + Wire.endTransmission(); +} + +void DS3231::setMonth(byte Month) { + // Sets the month + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x05); + Wire.write(decToBcd(Month)); + Wire.endTransmission(); +} + +void DS3231::setYear(byte Year) { + // Sets the year + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x06); + Wire.write(decToBcd(Year)); + Wire.endTransmission(); +} + +void DS3231::setClockMode(bool h12) { + // sets the mode to 12-hour (true) or 24-hour (false). + // One thing that bothers me about how I've written this is that + // if the read and right happen at the right hourly millisecnd, + // the clock will be set back an hour. Not sure how to do it better, + // though, and as long as one doesn't set the mode frequently it's + // a very minimal risk. + // It's zero risk if you call this BEFORE setting the hour, since + // the setHour() function doesn't change this mode. + + byte temp_buffer; + + // Start by reading byte 0x02. + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x02); + Wire.endTransmission(); + Wire.requestFrom(CLOCK_ADDRESS, 1); + temp_buffer = Wire.read(); + + // Set the flag to the requested value: + if (h12) { + temp_buffer = temp_buffer | 0b01000000; + } else { + temp_buffer = temp_buffer & 0b10111111; + } + + // Write the byte + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x02); + Wire.write(temp_buffer); + Wire.endTransmission(); +} + +float DS3231::getTemperature() { + // Checks the internal thermometer on the DS3231 and returns the + // temperature as a floating-point value. + + // Updated / modified a tiny bit from "Coding Badly" and "Tri-Again" + // http://forum.arduino.cc/index.php/topic,22301.0.html + + byte tMSB, tLSB; + float temp3231; + + // temp registers (11h-12h) get updated automatically every 64s + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x11); + Wire.endTransmission(); + Wire.requestFrom(CLOCK_ADDRESS, 2); + + // Should I do more "if available" checks here? + if(Wire.available()) { + tMSB = Wire.read(); //2's complement int portion + tLSB = Wire.read(); //fraction portion + + int16_t itemp = ( tMSB << 8 | (tLSB & 0xC0) ); // Shift upper byte, add lower + temp3231 = ( (float)itemp / 256.0 ); // Scale and return + } + else { + temp3231 = -9999; // Impossible temperature; error value + } + + return temp3231; +} + +void DS3231::getA1Time(byte& A1Day, byte& A1Hour, byte& A1Minute, byte& A1Second, byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM) { + byte temp_buffer; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x07); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 4); + + temp_buffer = Wire.read(); // Get A1M1 and A1 Seconds + A1Second = bcdToDec(temp_buffer & 0b01111111); + // put A1M1 bit in position 0 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>7; + + temp_buffer = Wire.read(); // Get A1M2 and A1 minutes + A1Minute = bcdToDec(temp_buffer & 0b01111111); + // put A1M2 bit in position 1 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>6; + + temp_buffer = Wire.read(); // Get A1M3 and A1 Hour + // put A1M3 bit in position 2 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>5; + // determine A1 12/24 mode + A1h12 = temp_buffer & 0b01000000; + if (A1h12) { + A1PM = temp_buffer & 0b00100000; // determine am/pm + A1Hour = bcdToDec(temp_buffer & 0b00011111); // 12-hour + } else { + A1Hour = bcdToDec(temp_buffer & 0b00111111); // 24-hour + } + + temp_buffer = Wire.read(); // Get A1M4 and A1 Day/Date + // put A1M3 bit in position 3 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>4; + // determine A1 day or date flag + A1Dy = (temp_buffer & 0b01000000)>>6; + if (A1Dy) { + // alarm is by day of week, not date. + A1Day = bcdToDec(temp_buffer & 0b00001111); + } else { + // alarm is by date, not day of week. + A1Day = bcdToDec(temp_buffer & 0b00111111); + } +} + +void DS3231::getA2Time(byte& A2Day, byte& A2Hour, byte& A2Minute, byte& AlarmBits, bool& A2Dy, bool& A2h12, bool& A2PM) { + byte temp_buffer; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x0b); + Wire.endTransmission(); + + Wire.requestFrom(CLOCK_ADDRESS, 3); + temp_buffer = Wire.read(); // Get A2M2 and A2 Minutes + A2Minute = bcdToDec(temp_buffer & 0b01111111); + // put A2M2 bit in position 4 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>3; + + temp_buffer = Wire.read(); // Get A2M3 and A2 Hour + // put A2M3 bit in position 5 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>2; + // determine A2 12/24 mode + A2h12 = temp_buffer & 0b01000000; + if (A2h12) { + A2PM = temp_buffer & 0b00100000; // determine am/pm + A2Hour = bcdToDec(temp_buffer & 0b00011111); // 12-hour + } else { + A2Hour = bcdToDec(temp_buffer & 0b00111111); // 24-hour + } + + temp_buffer = Wire.read(); // Get A2M4 and A1 Day/Date + // put A2M4 bit in position 6 of DS3231_AlarmBits. + AlarmBits = AlarmBits | (temp_buffer & 0b10000000)>>1; + // determine A2 day or date flag + A2Dy = (temp_buffer & 0b01000000)>>6; + if (A2Dy) { + // alarm is by day of week, not date. + A2Day = bcdToDec(temp_buffer & 0b00001111); + } else { + // alarm is by date, not day of week. + A2Day = bcdToDec(temp_buffer & 0b00111111); + } +} + +void DS3231::setA1Time(byte A1Day, byte A1Hour, byte A1Minute, byte A1Second, byte AlarmBits, bool A1Dy, bool A1h12, bool A1PM) { + // Sets the alarm-1 date and time on the DS3231, using A1* information + byte temp_buffer; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x07); // A1 starts at 07h + // Send A1 second and A1M1 + Wire.write(decToBcd(A1Second) | ((AlarmBits & 0b00000001) << 7)); + // Send A1 Minute and A1M2 + Wire.write(decToBcd(A1Minute) | ((AlarmBits & 0b00000010) << 6)); + // Figure out A1 hour + if (A1h12) { + // Start by converting existing time to h12 if it was given in 24h. + if (A1Hour > 12) { + // well, then, this obviously isn't a h12 time, is it? + A1Hour = A1Hour - 12; + A1PM = true; + } + if (A1PM) { + // Afternoon + // Convert the hour to BCD and add appropriate flags. + temp_buffer = decToBcd(A1Hour) | 0b01100000; + } else { + // Morning + // Convert the hour to BCD and add appropriate flags. + temp_buffer = decToBcd(A1Hour) | 0b01000000; + } + } else { + // Now for 24h + temp_buffer = decToBcd(A1Hour); + } + temp_buffer = temp_buffer | ((AlarmBits & 0b00000100)<<5); + // A1 hour is figured out, send it + Wire.write(temp_buffer); + // Figure out A1 day/date and A1M4 + temp_buffer = ((AlarmBits & 0b00001000)<<4) | decToBcd(A1Day); + if (A1Dy) { + // Set A1 Day/Date flag (Otherwise it's zero) + temp_buffer = temp_buffer | 0b01000000; + } + Wire.write(temp_buffer); + // All done! + Wire.endTransmission(); +} + +void DS3231::setA2Time(byte A2Day, byte A2Hour, byte A2Minute, byte AlarmBits, bool A2Dy, bool A2h12, bool A2PM) { + // Sets the alarm-2 date and time on the DS3231, using A2* information + byte temp_buffer; + Wire.beginTransmission(CLOCK_ADDRESS); + Wire.write(0x0b); // A1 starts at 0bh + // Send A2 Minute and A2M2 + Wire.write(decToBcd(A2Minute) | ((AlarmBits & 0b00010000) << 3)); + // Figure out A2 hour + if (A2h12) { + // Start by converting existing time to h12 if it was given in 24h. + if (A2Hour > 12) { + // well, then, this obviously isn't a h12 time, is it? + A2Hour = A2Hour - 12; + A2PM = true; + } + if (A2PM) { + // Afternoon + // Convert the hour to BCD and add appropriate flags. + temp_buffer = decToBcd(A2Hour) | 0b01100000; + } else { + // Morning + // Convert the hour to BCD and add appropriate flags. + temp_buffer = decToBcd(A2Hour) | 0b01000000; + } + } else { + // Now for 24h + temp_buffer = decToBcd(A2Hour); + } + // add in A2M3 bit + temp_buffer = temp_buffer | ((AlarmBits & 0b00100000)<<2); + // A2 hour is figured out, send it + Wire.write(temp_buffer); + // Figure out A2 day/date and A2M4 + temp_buffer = ((AlarmBits & 0b01000000)<<1) | decToBcd(A2Day); + if (A2Dy) { + // Set A2 Day/Date flag (Otherwise it's zero) + temp_buffer = temp_buffer | 0b01000000; + } + Wire.write(temp_buffer); + // All done! + Wire.endTransmission(); +} + +void DS3231::turnOnAlarm(byte Alarm) { + // turns on alarm number "Alarm". Defaults to 2 if Alarm is not 1. + byte temp_buffer = readControlByte(0); + // modify control byte + if (Alarm == 1) { + temp_buffer = temp_buffer | 0b00000101; + } else { + temp_buffer = temp_buffer | 0b00000110; + } + writeControlByte(temp_buffer, 0); +} + +void DS3231::turnOffAlarm(byte Alarm) { + // turns off alarm number "Alarm". Defaults to 2 if Alarm is not 1. + // Leaves interrupt pin alone. + byte temp_buffer = readControlByte(0); + // modify control byte + if (Alarm == 1) { + temp_buffer = temp_buffer & 0b11111110; + } else { + temp_buffer = temp_buffer & 0b11111101; + } + writeControlByte(temp_buffer, 0); +} + +bool DS3231::checkAlarmEnabled(byte Alarm) { + // Checks whether the given alarm is enabled. + byte result = 0x0; + byte temp_buffer = readControlByte(0); + if (Alarm == 1) { + result = temp_buffer & 0b00000001; + } else { + result = temp_buffer & 0b00000010; + } + return result; +} + +bool DS3231::checkIfAlarm(byte Alarm) { + // Checks whether alarm 1 or alarm 2 flag is on, returns T/F accordingly. + // Turns flag off, also. + // defaults to checking alarm 2, unless Alarm == 1. + byte result; + byte temp_buffer = readControlByte(1); + if (Alarm == 1) { + // Did alarm 1 go off? + result = temp_buffer & 0b00000001; + // clear flag + temp_buffer = temp_buffer & 0b11111110; + } else { + // Did alarm 2 go off? + result = temp_buffer & 0b00000010; + // clear flag + temp_buffer = temp_buffer & 0b11111101; + } + writeControlByte(temp_buffer, 1); + return result; +} + +void DS3231::enableOscillator(bool TF, bool battery, byte frequency) { + // turns oscillator on or off. True is on, false is off. + // if battery is true, turns on even for battery-only operation, + // otherwise turns off if Vcc is off. + // frequency must be 0, 1, 2, or 3. + // 0 = 1 Hz + // 1 = 1.024 kHz + // 2 = 4.096 kHz + // 3 = 8.192 kHz (Default if frequency byte is out of range) + if (frequency > 3) frequency = 3; + // read control byte in, but zero out current state of RS2 and RS1. + byte temp_buffer = readControlByte(0) & 0b11100111; + if (battery) { + // turn on BBSQW flag + temp_buffer = temp_buffer | 0b01000000; + } else { + // turn off BBSQW flag + temp_buffer = temp_buffer & 0b10111111; + } + if (TF) { + // set ~EOSC to 0 and INTCN to zero. + temp_buffer = temp_buffer & 0b01111011; + } else { + // set ~EOSC to 1, leave INTCN as is. + temp_buffer = temp_buffer | 0b10000000; + } + // shift frequency into bits 3 and 4 and set. + frequency = frequency << 3; + temp_buffer = temp_buffer | frequency; + // And write the control bits + writeControlByte(temp_buffer, 0); +} + +void DS3231::enable32kHz(bool TF) { + // turn 32kHz pin on or off + byte temp_buffer = readControlByte(1); + if (TF) { + // turn on 32kHz pin + temp_buffer = temp_buffer | 0b00001000; + } else { + // turn off 32kHz pin + temp_buffer = temp_buffer & 0b11110111; + } + writeControlByte(temp_buffer, 1); +} + +bool DS3231::oscillatorCheck() { + // Returns false if the oscillator has been off for some reason. + // If this is the case, the time is probably not correct. + byte temp_buffer = readControlByte(1); + bool result = true; + if (temp_buffer & 0b10000000) { + // Oscillator Stop Flag (OSF) is set, so return false. + result = false; + } + return result; +} + +/***************************************** + Private Functions + *****************************************/ + +byte DS3231::decToBcd(byte val) { +// Convert normal decimal numbers to binary coded decimal + return ( (val/10*16) + (val%10) ); +} + +byte DS3231::bcdToDec(byte val) { +// Convert binary coded decimal to normal decimal numbers + return ( (val/16*10) + (val%16) ); +} + +byte DS3231::readControlByte(bool which) { + // Read selected control byte + // first byte (0) is 0x0e, second (1) is 0x0f + Wire.beginTransmission(CLOCK_ADDRESS); + if (which) { + // second control byte + Wire.write(0x0f); + } else { + // first control byte + Wire.write(0x0e); + } + Wire.endTransmission(); + Wire.requestFrom(CLOCK_ADDRESS, 1); + return Wire.read(); +} + +void DS3231::writeControlByte(byte control, bool which) { + // Write the selected control byte. + // which=false -> 0x0e, true->0x0f. + Wire.beginTransmission(CLOCK_ADDRESS); + if (which) { + Wire.write(0x0f); + } else { + Wire.write(0x0e); + } + Wire.write(control); + Wire.endTransmission(); +} + diff --git a/libraries/DS3231/DS3231.h b/libraries/DS3231/DS3231.h new file mode 100644 index 0000000..a1fa6ea --- /dev/null +++ b/libraries/DS3231/DS3231.h @@ -0,0 +1,188 @@ +/* + * DS3231.h + * + * Arduino Library for the DS3231 Real-Time Clock chip + * + * (c) Eric Ayars + * 4/1/11 + * released into the public domain. If you use this, please let me know + * (just out of pure curiosity!) by sending me an email: + * eric@ayars.org + * + */ + +// Modified by Andy Wickert 5/15/11: Spliced in stuff from RTClib +// Modified by Simon Gassner 11/28/2017: Changed Term "PM" to "PM_time" for compability with SAMD Processors +#ifndef DS3231_h +#define DS3231_h + +// Changed the following to work on 1.0 +//#include "WProgram.h" +#include + +#include + +// DateTime (get everything at once) from JeeLabs / Adafruit +// Simple general-purpose date/time class (no TZ / DST / leap second handling!) +class DateTime { +public: + DateTime (uint32_t t =0); + DateTime (uint16_t year, uint8_t month, uint8_t day, + uint8_t hour =0, uint8_t min =0, uint8_t sec =0); + DateTime (const char* date, const char* time); + uint16_t year() const { return 2000 + yOff; } + uint8_t month() const { return m; } + uint8_t day() const { return d; } + uint8_t hour() const { return hh; } + uint8_t minute() const { return mm; } + uint8_t second() const { return ss; } + uint8_t dayOfTheWeek() const; + + // 32-bit times as seconds since 1/1/2000 + long secondstime() const; + // 32-bit times as seconds since 1/1/1970 + // THE ABOVE COMMENT IS CORRECT FOR LOCAL TIME; TO USE THIS COMMAND TO + // OBTAIN TRUE UNIX TIME SINCE EPOCH, YOU MUST CALL THIS COMMAND AFTER + // SETTING YOUR CLOCK TO UTC + uint32_t unixtime(void) const; +protected: + uint8_t yOff, m, d, hh, mm, ss; +}; + +//checks if a year is a leap year +bool isleapYear(const uint8_t); + +class RTClib { + public: + // Get date and time snapshot + static DateTime now(); +}; + +// Eric's original code is everything below this line +class DS3231 { + public: + + //Constructor + DS3231(); + + // Time-retrieval functions + + // the get*() functions retrieve current values of the registers. + byte getSecond(); + byte getMinute(); + byte getHour(bool& h12, bool& PM_time); + // In addition to returning the hour register, this function + // returns the values of the 12/24-hour flag and the AM/PM flag. + byte getDoW(); + byte getDate(); + byte getMonth(bool& Century); + // Also sets the flag indicating century roll-over. + byte getYear(); + // Last 2 digits only + + // Time-setting functions + // Note that none of these check for sensibility: You can set the + // date to July 42nd and strange things will probably result. + + void setSecond(byte Second); + // In addition to setting the seconds, this clears the + // "Oscillator Stop Flag". + void setMinute(byte Minute); + // Sets the minute + void setHour(byte Hour); + // Sets the hour + void setDoW(byte DoW); + // Sets the Day of the Week (1-7); + void setDate(byte Date); + // Sets the Date of the Month + void setMonth(byte Month); + // Sets the Month of the year + void setYear(byte Year); + // Last two digits of the year + void setClockMode(bool h12); + // Set 12/24h mode. True is 12-h, false is 24-hour. + + // Temperature function + + float getTemperature(); + + // Alarm functions + + void getA1Time(byte& A1Day, byte& A1Hour, byte& A1Minute, byte& A1Second, byte& AlarmBits, bool& A1Dy, bool& A1h12, bool& A1PM); +/* Retrieves everything you could want to know about alarm + * one. + * A1Dy true makes the alarm go on A1Day = Day of Week, + * A1Dy false makes the alarm go on A1Day = Date of month. + * + * byte AlarmBits sets the behavior of the alarms: + * Dy A1M4 A1M3 A1M2 A1M1 Rate + * X 1 1 1 1 Once per second + * X 1 1 1 0 Alarm when seconds match + * X 1 1 0 0 Alarm when min, sec match + * X 1 0 0 0 Alarm when hour, min, sec match + * 0 0 0 0 0 Alarm when date, h, m, s match + * 1 0 0 0 0 Alarm when DoW, h, m, s match + * + * Dy A2M4 A2M3 A2M2 Rate + * X 1 1 1 Once per minute (at seconds = 00) + * X 1 1 0 Alarm when minutes match + * X 1 0 0 Alarm when hours and minutes match + * 0 0 0 0 Alarm when date, hour, min match + * 1 0 0 0 Alarm when DoW, hour, min match + */ + void getA2Time(byte& A2Day, byte& A2Hour, byte& A2Minute, byte& AlarmBits, bool& A2Dy, bool& A2h12, bool& A2PM); + // Same as getA1Time();, but A2 only goes on seconds == 00. + void setA1Time(byte A1Day, byte A1Hour, byte A1Minute, byte A1Second, byte AlarmBits, bool A1Dy, bool A1h12, bool A1PM); + // Set the details for Alarm 1 + void setA2Time(byte A2Day, byte A2Hour, byte A2Minute, byte AlarmBits, bool A2Dy, bool A2h12, bool A2PM); + // Set the details for Alarm 2 + void turnOnAlarm(byte Alarm); + // Enables alarm 1 or 2 and the external interrupt pin. + // If Alarm != 1, it assumes Alarm == 2. + void turnOffAlarm(byte Alarm); + // Disables alarm 1 or 2 (default is 2 if Alarm != 1); + // and leaves the interrupt pin alone. + bool checkAlarmEnabled(byte Alarm); + // Returns T/F to indicate whether the requested alarm is + // enabled. Defaults to 2 if Alarm != 1. + bool checkIfAlarm(byte Alarm); + // Checks whether the indicated alarm (1 or 2, 2 default); + // has been activated. + + // Oscillator functions + + void enableOscillator(bool TF, bool battery, byte frequency); + // turns oscillator on or off. True is on, false is off. + // if battery is true, turns on even for battery-only operation, + // otherwise turns off if Vcc is off. + // frequency must be 0, 1, 2, or 3. + // 0 = 1 Hz + // 1 = 1.024 kHz + // 2 = 4.096 kHz + // 3 = 8.192 kHz (Default if frequency byte is out of range); + void enable32kHz(bool TF); + // Turns the 32kHz output pin on (true); or off (false). + bool oscillatorCheck();; + // Checks the status of the OSF (Oscillator Stop Flag);. + // If this returns false, then the clock is probably not + // giving you the correct time. + // The OSF is cleared by function setSecond();. + + private: + + byte decToBcd(byte val); + // Convert normal decimal numbers to binary coded decimal + byte bcdToDec(byte val); + // Convert binary coded decimal to normal decimal numbers + + protected: + + byte readControlByte(bool which); + // Read selected control byte: (0); reads 0x0e, (1) reads 0x0f + void writeControlByte(byte control, bool which); + // Write the selected control byte. + // which == false -> 0x0e, true->0x0f. + +}; + +#endif diff --git a/libraries/DS3231/DS3231.h.gch b/libraries/DS3231/DS3231.h.gch new file mode 100644 index 0000000000000000000000000000000000000000..c25114714cc9904f23c0448d6bee8c1307d80450 GIT binary patch literal 8843 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 j?LJiaj{$ut1S{IbdNm diff --git a/libraries/DS3231/README.md b/libraries/DS3231/README.md new file mode 100644 index 0000000..449a99d --- /dev/null +++ b/libraries/DS3231/README.md @@ -0,0 +1,121 @@ +# DS3231 + +## Description + +Arduino library for the DS3231 real-time clock (RTC). Abstracts functionality for clock reading, clock setting, and alarms for the DS3231 high-precision real-time clock. This is a splice of [Ayars'](http://hacks.ayars.org/2011/04/ds3231-real-time-clock.html) and [Jeelabs/Ladyada's](https://github.com/adafruit/RTClib) libraries. + +## Installation + +### First Method + +![image](https://user-images.githubusercontent.com/36513474/68038497-eae68200-fceb-11e9-9812-b47ff6e06e2f.png) + +1. In the Arduino IDE, navigate to Sketch > Include Library > Manage Libraries +1. Then the Library Manager will open and you will find a list of libraries that are already installed or ready for installation. +1. Then search for DS3231 using the search bar. +1. Click on the text area and then select the specific version and install it. + +### Second Method + +1. Navigate to the [Releases page](https://github.com/NorthernWidget/DS3231/releases). +1. Download the latest release. +1. Extract the zip file +1. In the Arduino IDE, navigate to Sketch > Include Library > Add .ZIP Library + +## Requirements + +This library depends on the wire header file. To use this library functions, the user has to include **wire.h** (header) file. + +## Features + +- ### Easy Interface + + DS3231 library has a very easy to use interface + +- ### Low-cost + + DS3231 is a low-cost module + +- ### Accuracy + + DS3231 is an extremely accurate I2C realtime clock (RTC) with an integrated temperature-compensated crystal oscillator (TCXO) and crystal. + +- ### Time Fomat + + The clock operates in either the 24-hour or 12-hour format with an AM/PM indicator. + +- ### Information + + The RTC maintains seconds, minutes, hours, day, date, month, and year information. The date at the end of the month is automatically adjusted for months with fewer than 31 days, including corrections for leap year. + +## Functions + +- date2days() +- time2long() +- conv2d() +- unixtime() +- bcd2bin() +- bin2bcd() +- now() +- getSecond() +- getMinute() +- getHour() +- getDoW() +- getDate() +- getMonth() +- getYear() +- setSecond() +- setMinute() +- setHour() +- setDoW() +- setDate() +- setMonth() +- setYear() +- setClockMode() +- getTemperature() +- getA1Time() +- getA2Time() +- setA1Time() +- setA2Time() +- turnOnAlarm() +- turnOffAlarm() +- checkAlarmEnabled() +- checkIfAlarm() +- enableOscillator() +- enable32kHz() +- oscillatorCheck() +- decToBcd() +- bcdToDec() +- readControlByte() +- writeControlByte() + +## Example + +There are many examples implemented where this library is used. You can find other examples from [Github-DS3231](https://github.com/NorthernWidget/DS3231/tree/master/examples) + +## Contributing + +If you want to contribute to this project: + +- Report bugs and errors +- Ask for enhancements +- Create issues and pull requests +- Tell others about this library +- Contribute new protocols + +Please read [CONTRIBUTING.md](https://github.com/NorthernWidget/DS3231/blob/master/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. + +## Credits + +The authors of this library are A. Wickert , E. Ayars, J. C. Wippler, N. W. LLC and it is maintained by A. Wickert. This library is released into the public domain by Jeelabs, Ladyada, and E. Ayar. + +Based on previous work by: + +- S. T. Andersen +- SimGas +- Per1234 +- Glownt + +## License + +DS3231 is licensed under [The Unlicense](https://github.com/NorthernWidget/DS3231/blob/master/LICENSE). diff --git a/libraries/DS3231/examples/DS3231_oscillator_test/DS3231_oscillator_test.pde b/libraries/DS3231/examples/DS3231_oscillator_test/DS3231_oscillator_test.pde new file mode 100644 index 0000000..9d30710 --- /dev/null +++ b/libraries/DS3231/examples/DS3231_oscillator_test/DS3231_oscillator_test.pde @@ -0,0 +1,38 @@ +/* +oscillator_test.pde +Eric Ayars +4/11 + +Test/demo of oscillator routines for a DS3231 RTC. + +Use a scope after loading this to check if things are +working as they should. + +*/ + +#include +#include + +DS3231 Clock; +byte j; +bool on = false; + +void setup() { + // Start the I2C interface + Wire.begin(); + // Start the serial interface + Serial.begin(9600); +} + +void loop() { + for (j=0;j<4;j++) { + // invert state of 32kHz oscillator. + on = !on; + Clock.enable32kHz(on); + // Turn on oscillator pin, frequency j + Clock.enableOscillator(true, false, j); + delay(4000); + } + // So... The 32kHz oscillator (pin 1) will turn on or off once each 2s, + // and the oscillator out pin (pin 3) will cycle through frequencies. +} diff --git a/libraries/DS3231/examples/DS3231_set/DS3231_set.pde b/libraries/DS3231/examples/DS3231_set/DS3231_set.pde new file mode 100644 index 0000000..3a758c2 --- /dev/null +++ b/libraries/DS3231/examples/DS3231_set/DS3231_set.pde @@ -0,0 +1,113 @@ +/* +DS3231_set.pde +Eric Ayars +4/11 + +Test of set-time routines for a DS3231 RTC + +*/ + +#include +#include + +DS3231 Clock; + +byte Year; +byte Month; +byte Date; +byte DoW; +byte Hour; +byte Minute; +byte Second; + +void GetDateStuff(byte& Year, byte& Month, byte& Day, byte& DoW, + byte& Hour, byte& Minute, byte& Second) { + // Call this if you notice something coming in on + // the serial port. The stuff coming in should be in + // the order YYMMDDwHHMMSS, with an 'x' at the end. + boolean GotString = false; + char InChar; + byte Temp1, Temp2; + char InString[20]; + + byte j=0; + while (!GotString) { + if (Serial.available()) { + InChar = Serial.read(); + InString[j] = InChar; + j += 1; + if (InChar == 'x') { + GotString = true; + } + } + } + Serial.println(InString); + // Read Year first + Temp1 = (byte)InString[0] -48; + Temp2 = (byte)InString[1] -48; + Year = Temp1*10 + Temp2; + // now month + Temp1 = (byte)InString[2] -48; + Temp2 = (byte)InString[3] -48; + Month = Temp1*10 + Temp2; + // now date + Temp1 = (byte)InString[4] -48; + Temp2 = (byte)InString[5] -48; + Day = Temp1*10 + Temp2; + // now Day of Week + DoW = (byte)InString[6] - 48; + // now Hour + Temp1 = (byte)InString[7] -48; + Temp2 = (byte)InString[8] -48; + Hour = Temp1*10 + Temp2; + // now Minute + Temp1 = (byte)InString[9] -48; + Temp2 = (byte)InString[10] -48; + Minute = Temp1*10 + Temp2; + // now Second + Temp1 = (byte)InString[11] -48; + Temp2 = (byte)InString[12] -48; + Second = Temp1*10 + Temp2; +} + +void setup() { + // Start the serial port + Serial.begin(9600); + + // Start the I2C interface + Wire.begin(); +} + +void loop() { + + // If something is coming in on the serial line, it's + // a time correction so set the clock accordingly. + if (Serial.available()) { + GetDateStuff(Year, Month, Date, DoW, Hour, Minute, Second); + + Clock.setClockMode(false); // set to 24h + //setClockMode(true); // set to 12h + + Clock.setYear(Year); + Clock.setMonth(Month); + Clock.setDate(Date); + Clock.setDoW(DoW); + Clock.setHour(Hour); + Clock.setMinute(Minute); + Clock.setSecond(Second); + + // Test of alarm functions + // set A1 to one minute past the time we just set the clock + // on current day of week. + Clock.setA1Time(DoW, Hour, Minute+1, Second, 0x0, true, + false, false); + // set A2 to two minutes past, on current day of month. + Clock.setA2Time(Date, Hour, Minute+2, 0x0, false, false, + false); + // Turn on both alarms, with external interrupt + Clock.turnOnAlarm(1); + Clock.turnOnAlarm(2); + + } + delay(1000); +} diff --git a/libraries/DS3231/examples/DS3231_test/DS3231_test.pde b/libraries/DS3231/examples/DS3231_test/DS3231_test.pde new file mode 100644 index 0000000..4e2584e --- /dev/null +++ b/libraries/DS3231/examples/DS3231_test/DS3231_test.pde @@ -0,0 +1,157 @@ +/* +DS3231_test.pde +Eric Ayars +4/11 + +Test/demo of read routines for a DS3231 RTC. + +Turn on the serial monitor after loading this to check if things are +working as they should. + +*/ + +#include +#include + +DS3231 clock; +bool century = false; +bool h12Flag; +bool pmFlag; +byte alarmDay, alarmHour, alarmMinute, alarmSecond, alarmBits; +bool alarmDy, alarmH12Flag, alarmPmFlag; + +void setup() { + // Start the I2C interface + Wire.begin(); + + // Start the serial interface + Serial.begin(57600); +} + +void loop() { + // send what's going on to the serial monitor. + + // Start with the year + Serial.print("2"); + if (century) { // Won't need this for 89 years. + Serial.print("1"); + } else { + Serial.print("0"); + } + Serial.print(clock.getYear(), DEC); + Serial.print(' '); + + // then the month + Serial.print(clock.getMonth(century), DEC); + Serial.print(" "); + + // then the date + Serial.print(clock.getDate(), DEC); + Serial.print(" "); + + // and the day of the week + Serial.print(clock.getDoW(), DEC); + Serial.print(" "); + + // Finally the hour, minute, and second + Serial.print(clock.getHour(h12Flag, pmFlag), DEC); + Serial.print(" "); + Serial.print(clock.getMinute(), DEC); + Serial.print(" "); + Serial.print(clock.getSecond(), DEC); + + // Add AM/PM indicator + if (h12Flag) { + if (pmFlag) { + Serial.print(" PM "); + } else { + Serial.print(" AM "); + } + } else { + Serial.print(" 24h "); + } + + // Display the temperature + Serial.print("T="); + Serial.print(clock.getTemperature(), 2); + + // Tell whether the time is (likely to be) valid + if (clock.oscillatorCheck()) { + Serial.print(" O+"); + } else { + Serial.print(" O-"); + } + + // Indicate whether an alarm went off + if (clock.checkIfAlarm(1)) { + Serial.print(" A1!"); + } + + if (clock.checkIfAlarm(2)) { + Serial.print(" A2!"); + } + + // New line on display + Serial.println(); + + // Display Alarm 1 information + Serial.print("Alarm 1: "); + clock.getA1Time(alarmDay, alarmHour, alarmMinute, alarmSecond, alarmBits, alarmDy, alarmH12Flag, alarmPmFlag); + Serial.print(alarmDay, DEC); + if (alarmDy) { + Serial.print(" DoW"); + } else { + Serial.print(" Date"); + } + Serial.print(' '); + Serial.print(alarmHour, DEC); + Serial.print(' '); + Serial.print(alarmMinute, DEC); + Serial.print(' '); + Serial.print(alarmSecond, DEC); + Serial.print(' '); + if (alarmH12Flag) { + if (alarmPmFlag) { + Serial.print("pm "); + } else { + Serial.print("am "); + } + } + if (clock.checkAlarmEnabled(1)) { + Serial.print("enabled"); + } + Serial.println(); + + // Display Alarm 2 information + Serial.print("Alarm 2: "); + clock.getA2Time(alarmDay, alarmHour, alarmMinute, alarmBits, alarmDy, alarmH12Flag, alarmPmFlag); + Serial.print(alarmDay, DEC); + if (alarmDy) { + Serial.print(" DoW"); + } else { + Serial.print(" Date"); + } + Serial.print(" "); + Serial.print(alarmHour, DEC); + Serial.print(" "); + Serial.print(alarmMinute, DEC); + Serial.print(" "); + if (alarmH12Flag) { + if (alarmPmFlag) { + Serial.print("pm"); + } else { + Serial.print("am"); + } + } + if (clock.checkAlarmEnabled(2)) { + Serial.print("enabled"); + } + + // display alarm bits + Serial.println(); + Serial.print("Alarm bits: "); + Serial.println(alarmBits, BIN); + + Serial.println(); + delay(1000); +} diff --git a/libraries/DS3231/examples/echo_time/echo_time.pde b/libraries/DS3231/examples/echo_time/echo_time.pde new file mode 100644 index 0000000..2d4fee2 --- /dev/null +++ b/libraries/DS3231/examples/echo_time/echo_time.pde @@ -0,0 +1,51 @@ +/* + +Prints time stamps for 5 seconds using getXXX functions + +Based on DS3231_set.pde +by Eric Ayars +4/11 + +Added printing back of time stamps and increased baud rate +(to better synchronize computer and RTC) +Andy Wickert +5/15/2011 + +*/ + +#include +#include + +DS3231 clock; + +bool century = false; +bool h12Flag; +bool pmFlag; + +void setup() { + // Start the serial port + Serial.begin(57600); + + // Start the I2C interface + Wire.begin(); + + + for (int i=0; i<5; i++){ + delay(1000); + Serial.print(clock.getYear(), DEC); + Serial.print("-"); + Serial.print(clock.getMonth(century), DEC); + Serial.print("-"); + Serial.print(clock.getDate(), DEC); + Serial.print(" "); + Serial.print(clock.getHour(h12Flag, pmFlag), DEC); //24-hr + Serial.print(":"); + Serial.print(clock.getMinute(), DEC); + Serial.print(":"); + Serial.println(clock.getSecond(), DEC); + } +} + +void loop() { + +} diff --git a/libraries/DS3231/examples/now/now.pde b/libraries/DS3231/examples/now/now.pde new file mode 100644 index 0000000..8b33c65 --- /dev/null +++ b/libraries/DS3231/examples/now/now.pde @@ -0,0 +1,40 @@ +// now.pde +// Prints a snapshot of the current date and time along with the UNIX time +// Modified by Andy Wickert from the JeeLabs / Ladyada RTC library examples +// 5/15/11 + +#include +#include + +RTClib myRTC; + +void setup () { + Serial.begin(57600); + Wire.begin(); +} + +void loop () { + + delay(1000); + + DateTime now = myRTC.now(); + + Serial.print(now.year(), DEC); + Serial.print('/'); + Serial.print(now.month(), DEC); + Serial.print('/'); + Serial.print(now.day(), DEC); + Serial.print(' '); + Serial.print(now.hour(), DEC); + Serial.print(':'); + Serial.print(now.minute(), DEC); + Serial.print(':'); + Serial.print(now.second(), DEC); + Serial.println(); + + Serial.print(" since midnight 1/1/1970 = "); + Serial.print(now.unixtime()); + Serial.print("s = "); + Serial.print(now.unixtime() / 86400L); + Serial.println("d"); +} diff --git a/libraries/DS3231/examples/set_echo/set_echo.pde b/libraries/DS3231/examples/set_echo/set_echo.pde new file mode 100644 index 0000000..64006ab --- /dev/null +++ b/libraries/DS3231/examples/set_echo/set_echo.pde @@ -0,0 +1,182 @@ +/* + +Sets the time from input and prints back time stamps for 5 seconds + +Based on DS3231_set.pde +by Eric Ayars +4/11 + +Added printing back of time stamps and increased baud rate +(to better synchronize computer and RTC) +Andy Wickert +5/15/2011 + +Clean for SAMD arch, add explanation, respect code-style and +fix interpretation of Serial input if used more than once +Olivier Staquet +4/26/2020 + +*/ + +#include +#include + +DS3231 clock; + +byte year; +byte month; +byte date; +byte dow; +byte hour; +byte minute; +byte second; + +bool century = false; +bool h12Flag; +bool pmFlag; + +/***************************************************************************************************** + * Setup + * - Open Serial and Wire connection + * - Explain to the user how to use the program + *****************************************************************************************************/ +void setup() { + // Start the serial port + Serial.begin(57600); + + // Start the I2C interface + Wire.begin(); + + // Request the time correction on the Serial + delay(4000); + Serial.println("Format YYMMDDwhhmmssx"); + Serial.println("Where YY = Year (ex. 20 for 2020)"); + Serial.println(" MM = Month (ex. 04 for April)"); + Serial.println(" DD = Day of month (ex. 09 for 9th)"); + Serial.println(" w = Day of week from 1 to 7, 1 = Sunday (ex. 5 for Thursday)"); + Serial.println(" hh = hours in 24h format (ex. 09 for 9AM or 21 for 9PM)"); + Serial.println(" mm = minutes (ex. 02)"); + Serial.println(" ss = seconds (ex. 42)"); + Serial.println("Example for input : 2004095090242x"); + Serial.println("-----------------------------------------------------------------------------"); + Serial.println("Please enter the current time to set on DS3231 ended by 'x':"); +} + +/***************************************************************************************************** + * Loop + * - Each time we receive the time correction on the Serial + * - Set the clock of the DS3231 + * - Echo the value from the DS3231 during 5 seconds + *****************************************************************************************************/ +void loop() { + // If something is coming in on the serial line, it's + // a time correction so set the clock accordingly. + if (Serial.available()) { + inputDateFromSerial(); + + clock.setClockMode(false); // set to 24h + + clock.setYear(year); + clock.setMonth(month); + clock.setDate(date); + clock.setDoW(dow); + clock.setHour(hour); + clock.setMinute(minute); + clock.setSecond(second); + + // Give time at next five seconds + for (uint8_t i = 0; i < 5; i++){ + delay(1000); + Serial.print(clock.getYear(), DEC); + Serial.print("-"); + Serial.print(clock.getMonth(century), DEC); + Serial.print("-"); + Serial.print(clock.getDate(), DEC); + Serial.print(" "); + Serial.print(clock.getHour(h12Flag, pmFlag), DEC); //24-hr + Serial.print(":"); + Serial.print(clock.getMinute(), DEC); + Serial.print(":"); + Serial.println(clock.getSecond(), DEC); + } + + // Notify that we are ready for the next input + Serial.println("Please enter the current time to set on DS3231 ended by 'x':"); + } + delay(1000); +} + +/***************************************************************************************************** + * inputDateFromSerial + * - Read and interpret the data from the Serial input + * - Store the data in global variables + *****************************************************************************************************/ +void inputDateFromSerial() { + // Call this if you notice something coming in on + // the serial port. The stuff coming in should be in + // the order YYMMDDwHHMMSS, with an 'x' at the end. + boolean isStrComplete = false; + char inputChar; + byte temp1, temp2; + char inputStr[20]; + + uint8_t currentPos = 0; + while (!isStrComplete) { + if (Serial.available()) { + inputChar = Serial.read(); + inputStr[currentPos] = inputChar; + currentPos += 1; + + // Check if string complete (end with "x") + if (inputChar == 'x') { + isStrComplete = true; + } + } + } + Serial.println(inputStr); + + // Find the end of char "x" + int posX = -1; + for(uint8_t i = 0; i < 20; i++) { + if(inputStr[i] == 'x') { + posX = i; + break; + } + } + + // Consider 0 character in ASCII + uint8_t zeroAscii = '0'; + + // Read Year first + temp1 = (byte)inputStr[posX - 13] - zeroAscii; + temp2 = (byte)inputStr[posX - 12] - zeroAscii; + year = temp1 * 10 + temp2; + + // now month + temp1 = (byte)inputStr[posX - 11] - zeroAscii; + temp2 = (byte)inputStr[posX - 10] - zeroAscii; + month = temp1 * 10 + temp2; + + // now date + temp1 = (byte)inputStr[posX - 9] - zeroAscii; + temp2 = (byte)inputStr[posX - 8] - zeroAscii; + date = temp1 * 10 + temp2; + + // now Day of Week + dow = (byte)inputStr[posX - 7] - zeroAscii; + + // now Hour + temp1 = (byte)inputStr[posX - 6] - zeroAscii; + temp2 = (byte)inputStr[posX - 5] - zeroAscii; + hour = temp1 * 10 + temp2; + + // now Minute + temp1 = (byte)inputStr[posX - 4] - zeroAscii; + temp2 = (byte)inputStr[posX - 3] - zeroAscii; + minute = temp1 * 10 + temp2; + + // now Second + temp1 = (byte)inputStr[posX - 2] - zeroAscii; + temp2 = (byte)inputStr[posX - 1] - zeroAscii; + second = temp1 * 10 + temp2; +} diff --git a/libraries/DS3231/keywords.txt b/libraries/DS3231/keywords.txt new file mode 100644 index 0000000..e5ed18e --- /dev/null +++ b/libraries/DS3231/keywords.txt @@ -0,0 +1,33 @@ +DS3231 KEYWORD1 +RTClib KEYWORD1 +DateTime KEYWORD1 +now KEYWORD2 +secondstime KEYWORD2 +unixtime KEYWORD2 +getSecond KEYWORD2 +getMinute KEYWORD2 +getHour KEYWORD2 +getDoW KEYWORD2 +getDate KEYWORD2 +getMonth KEYWORD2 +getYear KEYWORD2 +setSecond KEYWORD2 +setMinute KEYWORD2 +setHour KEYWORD2 +setDoW KEYWORD2 +setDate KEYWORD2 +setMonth KEYWORD2 +setYear KEYWORD2 +setClockMode KEYWORD2 +getTemperature KEYWORD2 +getA1Time KEYWORD2 +getA2Time KEYWORD2 +setA1Time KEYWORD2 +setA2Time KEYWORD2 +turnOnAlarm KEYWORD2 +turnOffAlarm KEYWORD2 +checkAlarmEnabled KEYWORD2 +checkIfAlarm KEYWORD2 +enableOscillator KEYWORD2 +enable32kHz KEYWORD2 +oscillatorCheck KEYWORD2 diff --git a/libraries/DS3231/library.properties b/libraries/DS3231/library.properties new file mode 100644 index 0000000..9cfccd9 --- /dev/null +++ b/libraries/DS3231/library.properties @@ -0,0 +1,10 @@ +name=DS3231 +version=1.0.7 +author=Andrew Wickert , Eric Ayars, Jean-Claude Wippler, Northern Widget LLC +maintainer=Andrew Wickert +sentence=Arduino library for the DS3231 real-time clock (RTC) +paragraph=Abstracts functionality for clock reading, clock setting, and alarms for the DS3231 high-precision real-time clock. This is a splice of Ayars' (http://hacks.ayars.org/2011/04/ds3231-real-time-clock.html) and Jeelabs/Ladyada's (https://github.com/adafruit/RTClib) libraries. +category=Timing +url=https://github.com/NorthernWidget/DS3231 +architectures=* +includes=DS3231.h diff --git a/libraries/LiquidCrystal/FastIO.cpp b/libraries/LiquidCrystal/FastIO.cpp new file mode 100644 index 0000000..18c8ac5 --- /dev/null +++ b/libraries/LiquidCrystal/FastIO.cpp @@ -0,0 +1,267 @@ +// --------------------------------------------------------------------------- +// Created by Florian Fida on 20/01/12 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// http://creativecommons.org/licenses/by-sa/3.0/ +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// --------------------------------------------------------------------------- +// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black +// (http://www.romanblack.com/shift1.htm) +// +// Thread Safe: No +// Extendable: Yes +// +// @file FastIO.h +// This file implements basic fast IO routines. +// +// @brief +// +// @version API 1.0.0 +// +// @author Florian Fida - +// +// 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster +// +// @todo: +// support chipkit: +// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ +// cores/pic32/wiring_digital.c) +// --------------------------------------------------------------------------- +#include "FastIO.h" + + +fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state) +{ + pinMode(pin, OUTPUT); + + if(initial_state != SKIP) + { + digitalWrite(pin, initial_state); // also turns off pwm timer + } +#ifdef FIO_FALLBACK + // just wasting memory if not using fast io... + return 0; +#else + return portOutputRegister(digitalPinToPort(pin)); +#endif +} + + +fio_register fio_pinToInputRegister(uint8_t pin) +{ + pinMode(pin, INPUT); + digitalWrite(pin, LOW); // also turns off pwm timer and pullup +#ifdef FIO_FALLBACK + // just wasting memory if not using fast io... + return 0; +#else + return portInputRegister(digitalPinToPort(pin)); +#endif +} + + +fio_bit fio_pinToBit(uint8_t pin) +{ +#ifdef FIO_FALLBACK + // (ab)use the bit variable to store the pin + return pin; +#else + return digitalPinToBitMask(pin); +#endif +} + + +void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) +{ +#ifdef FIO_FALLBACK + digitalWrite(pinBit, value); +#else + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value == LOW) + { + fio_digitalWrite_LOW(pinRegister,pinBit); + } + else + { + fio_digitalWrite_HIGH(pinRegister,pinBit); + } + } +#endif +} + +int fio_digitalRead(fio_register pinRegister, uint8_t pinBit) +{ +#ifdef FIO_FALLBACK + return digitalRead (pinBit); +#else + if (*pinRegister & pinBit) + { + return HIGH; + } + return LOW; +#endif +} + +void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, + fio_register clockRegister, fio_bit clockBit, + uint8_t value, uint8_t bitOrder) +{ + // # disable interrupts + int8_t i; + + if(bitOrder == LSBFIRST) + { + for(i = 0; i < 8; i++) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value & 1) + { + fio_digitalWrite_HIGH(dataRegister, dataBit); + } + else + { + fio_digitalWrite_LOW(dataRegister, dataBit); + } + value >>= 1; + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_LOW (clockRegister,clockBit); + } + } + + } + else + { + for(i = 0; i < 8; i++) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + if(value & 0x80) + { + fio_digitalWrite_HIGH(dataRegister, dataBit); + } + else + { + fio_digitalWrite_LOW(dataRegister, dataBit); + } + value <<= 1; + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_LOW (clockRegister,clockBit); + } + } + } +} + + +void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, + fio_register clockRegister, fio_bit clockBit) +{ + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // shift out 0x0 (B00000000) fast, byte order is irrelevant + fio_digitalWrite_LOW (dataRegister, dataBit); + + for(uint8_t i = 0; i<8; ++i) + { + fio_digitalWrite_HIGH (clockRegister, clockBit); + fio_digitalWrite_SWITCH (clockRegister, clockBit); + } + } +} + + +void fio_shiftOut1_init(uint8_t pin) +{ + fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin)); +} + +void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit) +{ + // Make sure that capacitors are charged + // 300us is an educated guess... + fio_digitalWrite(shift1Register,shift1Bit,HIGH); + delayMicroseconds(300); +} + + +void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, + boolean noLatch) +{ + /* + * this function are based on Shif1 protocol developed by Roman Black + * (http://www.romanblack.com/shift1.htm) + * + * test sketches: + * http://pastebin.com/raw.php?i=2hnC9v2Z + * http://pastebin.com/raw.php?i=bGg4DhXQ + * http://pastebin.com/raw.php?i=tg1ZFiM5 + * http://pastebin.com/raw.php?i=93ExPDD3 - cascading + * tested with: + * TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/ + * arduino-one-wire-shift-register-prototype) + * 7HC595N + */ + + // iterate but ignore last bit (is it correct now?) + for(int8_t i = 7; i>=0; --i) + { + + // assume that pin is HIGH (smokin' pot all day... :) - requires + // initialization + if(value & _BV(i)) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // HIGH = 1 Bit + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + //hold pin LOW for 1us - done! :) + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); + } // end critical section + //hold pin HIGH for 15us + delayMicroseconds(15); + } + else + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // LOW = 0 Bit + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + // hold pin LOW for 15us + delayMicroseconds(15); + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); + } // end critical section + + // hold pin HIGH for 30us + delayMicroseconds(30); + } + if(!noLatch && i==1) + { + break; + } + } + + if(!noLatch) + { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + // send last bit (=LOW) and Latch command + fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); + } // end critical section + delayMicroseconds(199); // Hold pin low for 200us + + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(shift1Register,shift1Bit); + } // end critical section + delayMicroseconds(299); // Hold pin high for 300us and leave it that + // way - using explicit HIGH here, just in case. + } +} + +void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch) +{ + fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch); +} diff --git a/libraries/LiquidCrystal/FastIO.h b/libraries/LiquidCrystal/FastIO.h new file mode 100644 index 0000000..8636e20 --- /dev/null +++ b/libraries/LiquidCrystal/FastIO.h @@ -0,0 +1,219 @@ +// --------------------------------------------------------------------------- +// Created by Florian Fida on 20/01/12 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// http://creativecommons.org/licenses/by-sa/3.0/ +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// --------------------------------------------------------------------------- +// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black +// (http://www.romanblack.com/shift1.htm) +// +// Thread Safe: No +// Extendable: Yes +// +// @file FastIO.h +// This file implements basic fast IO routines. +// +// @brief +// +// @version API 1.0.0 +// +// @author Florian Fida - +// 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino +// support chipkit: +// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ +// cores/pic32/wiring_digital.c) +// --------------------------------------------------------------------------- +#ifndef _FAST_IO_H_ +#define _FAST_IO_H_ + +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include // pleasing sanguino core +#include + + +#define SKIP 0x23 + +#if defined (__AVR__) +#include // for critical section management +typedef uint8_t fio_bit; +typedef volatile uint8_t *fio_register; + + +#elif defined(__PIC32MX__) +typedef uint32_t fio_bit; +typedef volatile uint32_t *fio_register; + + +#else +// fallback to Arduino standard digital i/o routines +#define FIO_FALLBACK +#define ATOMIC_BLOCK(dummy) if(true) +#define ATOMIC_RESTORESTATE +typedef uint8_t fio_bit; +typedef uint8_t fio_register; +#endif + + + +#if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK) +/* + * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type + * Using the portable Arduino interrupts() and noInterrupts() + */ +#define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet. +#define ATOMIC_FORCEON uint8_t sreg_save \ + __attribute__((__cleanup__(__iSeiParam))) = 0 + +static __inline__ uint8_t __iCliRetVal(void) +{ + noInterrupts(); + return(1); +} +static __inline__ void __iSeiParam(const uint8_t *__s) +{ + interrupts(); +} +#define ATOMIC_BLOCK(type) for(type, __Todo = __iCliRetVal(); __Todo; __Todo = 0) + +#endif // end of block to create compatible ATOMIC_BLOCK() + + + +/*! + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register + */ +fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW); + +/*! + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register + */ +fio_register fio_pinToInputRegister(uint8_t pin); + +/*! + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit + */ +fio_bit fio_pinToBit(uint8_t pin); + + +/*! + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output + */ +// __attribute__ ((always_inline)) /* let the optimizer decide that for now */ +void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value ); + +/** + * This is where the magic happens that makes things fast. + * Implemented as preprocessor directives to force inlining + * SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. + */ + +#ifndef FIO_FALLBACK +#define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit +#define fio_digitalWrite_HIGH(reg,bit) *reg |= bit +#define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit +#define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit) +#else +// reg -> dummy NULL, bit -> pin +#define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH) +#define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW) +#define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit)) +#define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val); +#endif + +/*! + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin + */ +int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit ); + +/*! + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order + */ +void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, + fio_bit clockBit, uint8_t value, uint8_t bitOrder ); + +/*! + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + */ +void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit); + +/*! + * @method + * @abstract one wire shift out + * @discussion protocol needs initialisation (fio_shiftOut1_init) + * @param shift1Register[in] pins register + * @param shift1Bit[in] pins bit + * @param value[in] value to shift out, last byte is ignored and always shifted out LOW + */ +void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false); +/*! + * @method + * @abstract one wire shift out + * @discussion protocol needs initialisation (fio_shiftOut1_init) + * @param pin[in] digital pin + * @param value[in] value to shift out, last byte is ignored and always shifted out LOW + */ +void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false); +/*! + * @method + * @abstract initializes one wire shift out protocol + * @discussion Puts pin to HIGH state and delays until Capacitors are charged. + * @param shift1Register[in] pins register + * @param shift1Bit[in] pins bit + */ +void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit); +/*! + * @method + * @abstract initializes one wire shift out protocol + * @discussion Puts pin to HIGH state and delays until Capacitors are charged. + * @param pin[in] digital pin + */ +void fio_shiftOut1_init(uint8_t pin); + +#endif // FAST_IO_H diff --git a/libraries/LiquidCrystal/I2CIO.cpp b/libraries/LiquidCrystal/I2CIO.cpp new file mode 100644 index 0000000..ddda7d3 --- /dev/null +++ b/libraries/LiquidCrystal/I2CIO.cpp @@ -0,0 +1,198 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file I2CIO.h +// This file implements a basic IO library using the PCF8574 I2C IO Expander +// chip. +// +// @brief +// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. +// The library implements basic IO general methods to configure IO pin direction +// read and write uint8_t operations and basic pin level routines to set or read +// a particular IO port. +// +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include + +#include +#include "I2CIO.h" + +// CLASS VARIABLES +// --------------------------------------------------------------------------- + + +// CONSTRUCTOR +// --------------------------------------------------------------------------- +I2CIO::I2CIO ( ) +{ + _i2cAddr = 0x0; + _dirMask = 0xFF; // mark all as INPUTs + _shadow = 0x0; // no values set + _initialised = false; +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +// +// begin +int I2CIO::begin ( uint8_t i2cAddr ) +{ + _i2cAddr = i2cAddr; + + Wire.begin ( ); + + _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); + +#if (ARDUINO < 100) + _shadow = Wire.receive (); +#else + _shadow = Wire.read (); // Remove the byte read don't need it. +#endif + + return ( _initialised ); +} + +// +// pinMode +void I2CIO::pinMode ( uint8_t pin, uint8_t dir ) +{ + if ( _initialised ) + { + if ( OUTPUT == dir ) + { + _dirMask &= ~( 1 << pin ); + } + else + { + _dirMask |= ( 1 << pin ); + } + } +} + +// +// portMode +void I2CIO::portMode ( uint8_t dir ) +{ + + if ( _initialised ) + { + if ( dir == INPUT ) + { + _dirMask = 0xFF; + } + else + { + _dirMask = 0x00; + } + } +} + +// +// read +uint8_t I2CIO::read ( void ) +{ + uint8_t retVal = 0; + + if ( _initialised ) + { + Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); +#if (ARDUINO < 100) + retVal = ( _dirMask & Wire.receive ( ) ); +#else + retVal = ( _dirMask & Wire.read ( ) ); +#endif + + } + return ( retVal ); +} + +// +// write +int I2CIO::write ( uint8_t value ) +{ + int status = 0; + + if ( _initialised ) + { + // Only write HIGH the values of the ports that have been initialised as + // outputs updating the output shadow of the device + _shadow = ( value & ~(_dirMask) ); + + Wire.beginTransmission ( _i2cAddr ); +#if (ARDUINO < 100) + Wire.send ( _shadow ); +#else + Wire.write ( _shadow ); +#endif + status = Wire.endTransmission (); + } + return ( (status == 0) ); +} + +// +// digitalRead +uint8_t I2CIO::digitalRead ( uint8_t pin ) +{ + uint8_t pinVal = 0; + + // Check if initialised and that the pin is within range of the device + // ------------------------------------------------------------------- + if ( ( _initialised ) && ( pin <= 7 ) ) + { + // Remove the values which are not inputs and get the value of the pin + pinVal = this->read() & _dirMask; + pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value + } + return (pinVal); +} + +// +// digitalWrite +int I2CIO::digitalWrite ( uint8_t pin, uint8_t level ) +{ + uint8_t writeVal; + int status = 0; + + // Check if initialised and that the pin is within range of the device + // ------------------------------------------------------------------- + if ( ( _initialised ) && ( pin <= 7 ) ) + { + // Only write to HIGH the port if the port has been configured as + // an OUTPUT pin. Add the new state of the pin to the shadow + writeVal = ( 1 << pin ) & ~_dirMask; + if ( level == HIGH ) + { + _shadow |= writeVal; + + } + else + { + _shadow &= ~writeVal; + } + status = this->write ( _shadow ); + } + return ( status ); +} + +// +// PRIVATE METHODS +// --------------------------------------------------------------------------- diff --git a/libraries/LiquidCrystal/I2CIO.h b/libraries/LiquidCrystal/I2CIO.h new file mode 100644 index 0000000..e05f16b --- /dev/null +++ b/libraries/LiquidCrystal/I2CIO.h @@ -0,0 +1,148 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file I2CIO.h +// This file implements a basic IO library using the PCF8574 I2C IO Expander +// chip. +// +// @brief +// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. +// The library implements basic IO general methods to configure IO pin direction +// read and write uint8_t operations and basic pin level routines to set or read +// a particular IO port. +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- + +#ifndef _I2CIO_H_ +#define _I2CIO_H_ + +#include + +#define _I2CIO_VERSION "1.0.0" + +/*! + @class + @abstract I2CIO + @discussion Library driver to control PCF8574 based ASICs. Implementing + library calls to set/get port through I2C bus. + */ + +class I2CIO +{ +public: + /*! + @method + @abstract Constructor method + @discussion Class constructor constructor. + */ + I2CIO ( ); + + /*! + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise + */ + int begin ( uint8_t i2cAddr ); + + /*! + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + + @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 + @param dir[in] Pin direction (INPUT, OUTPUT). + */ + void pinMode ( uint8_t pin, uint8_t dir ); + + /*! + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). + */ + void portMode ( uint8_t dir ); + + /*! + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + + @param none + */ + uint8_t read ( void ); + + /*! + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + + @param pin[in] Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. + */ + uint8_t digitalRead ( uint8_t pin ); + + /*! + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + + @param value[in] value to be written to the device. + @result 1 on success, 0 otherwise + */ + int write ( uint8_t value ); + + /*! + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + + @param pin[in] device pin to change level. Range (0..7). + @para level[in] logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. + */ + int digitalWrite ( uint8_t pin, uint8_t level ); + + + +private: + uint8_t _shadow; // Shadow output + uint8_t _dirMask; // Direction mask + uint8_t _i2cAddr; // I2C address + bool _initialised; // Initialised object + +}; + +#endif \ No newline at end of file diff --git a/libraries/LiquidCrystal/LCD.cpp b/libraries/LiquidCrystal/LCD.cpp new file mode 100644 index 0000000..373f529 --- /dev/null +++ b/libraries/LiquidCrystal/LCD.cpp @@ -0,0 +1,347 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LCD.cpp +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the HD44780 library of the +// Arduino SDK. This library is a refactored version of the one supplied +// in the Arduino SDK in such a way that it simplifies its extension +// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ... +// The original library has been reworked in such a way that this will be +// the base class implementing all generic methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets. +// +// This base class is a pure abstract class and needs to be extended. As reference, +// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension +// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. +// +// +// @version API 1.1.0 +// +// 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0 +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LCD.h" + +// CLASS CONSTRUCTORS +// --------------------------------------------------------------------------- +// Constructor +LCD::LCD () +{ + +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). +// A call to begin() will reinitialize the LCD. +// +void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) +{ + if (lines > 1) + { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + _cols = cols; + + // for some 1 line displays you can select a 10 pixel high font + // ------------------------------------------------------------ + if ((dotsize != LCD_5x8DOTS) && (lines == 1)) + { + _displayfunction |= LCD_5x10DOTS; + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way before 4.5V so we'll wait + // 50 + // --------------------------------------------------------------------------- + delay (100); // 100ms delay + + //put the LCD into 4 bit or 8 bit mode + // ------------------------------------- + if (! (_displayfunction & LCD_8BITMODE)) + { + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + send(0x03, FOUR_BITS); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + send ( 0x03, FOUR_BITS ); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + send( 0x03, FOUR_BITS ); + delayMicroseconds(150); + + // finally, set to 4-bit interface + send ( 0x02, FOUR_BITS ); + } + else + { + // this is according to the hitachi HD44780 datasheet + // page 45 figure 23 + + // Send function set command sequence + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(4500); // wait more than 4.1ms + + // second try + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(150); + + // third go + command(LCD_FUNCTIONSET | _displayfunction); + } + + // finally, set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear the LCD + clear(); + + // Initialize to default text direction (for romance languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + + backlight(); + +} + +// Common LCD Commands +// --------------------------------------------------------------------------- +void LCD::clear() +{ + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero + delayMicroseconds(HOME_CLEAR_EXEC); // this command is time consuming +} + +void LCD::home() +{ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(HOME_CLEAR_EXEC); // This command is time consuming +} + +void LCD::setCursor(uint8_t col, uint8_t row) +{ + const byte row_offsetsDef[] = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs + const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs + + if ( row >= _numlines ) + { + row = _numlines-1; // rows start at 0 + } + + // 16x4 LCDs have special memory map layout + // ---------------------------------------- + if ( _cols == 16 && _numlines == 4 ) + { + command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row])); + } + else + { + command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row])); + } + +} + +// Turn the display on/off +void LCD::noDisplay() +{ + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +void LCD::display() +{ + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LCD::noCursor() +{ + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LCD::cursor() +{ + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns on/off the blinking cursor +void LCD::noBlink() +{ + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +void LCD::blink() +{ + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LCD::scrollDisplayLeft(void) +{ + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} + +void LCD::scrollDisplayRight(void) +{ + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LCD::leftToRight(void) +{ + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LCD::rightToLeft(void) +{ + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This method moves the cursor one space to the right +void LCD::moveCursorRight(void) +{ + command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT); +} + +// This method moves the cursor one space to the left +void LCD::moveCursorLeft(void) +{ + command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT); +} + + +// This will 'right justify' text from the cursor +void LCD::autoscroll(void) +{ + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LCD::noAutoscroll(void) +{ + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Write to CGRAM of new characters +void LCD::createChar(uint8_t location, uint8_t charmap[]) +{ + location &= 0x7; // we only have 8 locations 0-7 + + command(LCD_SETCGRAMADDR | (location << 3)); + delayMicroseconds(30); + + for (int i=0; i<8; i++) + { + write(charmap[i]); // call the virtual write method + delayMicroseconds(40); + } +} + +// +// Switch on the backlight +void LCD::backlight ( void ) +{ + setBacklight(255); +} + +// +// Switch off the backlight +void LCD::noBacklight ( void ) +{ + setBacklight(0); +} + +// +// Switch fully on the LCD (backlight and LCD) +void LCD::on ( void ) +{ + display(); + backlight(); +} + +// +// Switch fully off the LCD (backlight and LCD) +void LCD::off ( void ) +{ + noBacklight(); + noDisplay(); +} + +// General LCD commands - generic methods used by the rest of the commands +// --------------------------------------------------------------------------- +void LCD::command(uint8_t value) +{ + send(value, COMMAND); +} + +#if (ARDUINO < 100) +void LCD::write(uint8_t value) +{ + send(value, DATA); +} +#else +size_t LCD::write(uint8_t value) +{ + send(value, DATA); + return 1; // assume OK +} +#endif diff --git a/libraries/LiquidCrystal/LCD.h b/libraries/LiquidCrystal/LCD.h new file mode 100644 index 0000000..88a58ad --- /dev/null +++ b/libraries/LiquidCrystal/LCD.h @@ -0,0 +1,536 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LCD.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. This library is a refactored version of the one supplied +// in the Arduino SDK in such a way that it simplifies its extension +// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, +// The original library has been reworked in such a way that this will be +// the base class implementing all generic methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets. +// +// This base class is a pure abstract class and needs to be extended. As reference, +// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension +// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// @version API 1.1.0 +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LCD_H_ +#define _LCD_H_ + +#if (ARDUINO < 100) +#include +#else +#include +#endif + +#include +#include + + +/*! + @defined + @abstract Enables disables fast waits for write operations for LCD + @discussion If defined, the library will avoid doing un-necessary waits. + this can be done, because the time taken by Arduino's slow digitalWrite + operations. If fast digitalIO operations, comment this line out or undefine + the mode. + */ +#ifdef __AVR__ +#define FAST_MODE +#endif + +/*! + @function + @abstract waits for a given time in microseconds (compilation dependent). + @discussion Waits for a given time defined in microseconds depending on + the FAST_MODE define. If the FAST_MODE is defined the call will return + inmediatelly. + @param uSec[in] time in microseconds. + @result None + */ +inline static void waitUsec ( uint16_t uSec ) +{ +#ifndef FAST_MODE + delayMicroseconds ( uSec ); +#endif // FAST_MODE +} + + +/*! + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. + */ +// LCD Commands +// --------------------------------------------------------------------------- +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +// --------------------------------------------------------------------------- +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off and cursor control +// --------------------------------------------------------------------------- +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +// --------------------------------------------------------------------------- +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +// --------------------------------------------------------------------------- +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + + +// Define COMMAND and DATA LCD Rs (used by send method). +// --------------------------------------------------------------------------- +#define COMMAND 0 +#define DATA 1 +#define FOUR_BITS 2 + + +/*! + @defined + @abstract Defines the duration of the home and clear commands + @discussion This constant defines the time it takes for the home and clear + commands in the LCD - Time in microseconds. + */ +#define HOME_CLEAR_EXEC 2000 + +/*! + @defined + @abstract Backlight off constant declaration + @discussion Used in combination with the setBacklight to swith off the + LCD backlight. @set setBacklight +*/ +#define BACKLIGHT_OFF 0 + +/*! + @defined + @abstract Backlight on constant declaration + @discussion Used in combination with the setBacklight to swith on the + LCD backlight. @set setBacklight + */ +#define BACKLIGHT_ON 255 + + +/*! + @typedef + @abstract Define backlight control polarity + @discussion Backlight control polarity. @see setBacklightPin. + */ +typedef enum { POSITIVE, NEGATIVE } t_backlighPol; + +class LCD : public Print +{ +public: + + /*! + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. + */ + LCD ( ); + + /*! + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is abstract, a base implementation is available common to all LCD + drivers. Should it not be compatible with some other LCD driver, a derived + implementation should be done on the driver specif class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] character size, default==LCD_5x8DOTS + */ + virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + /*! + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none + */ + void clear(); + + /*! + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none + */ + void home(); + + /*! + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none + */ + void noDisplay(); + + /*! + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none + */ + void display(); + + /*! + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none + */ + void noBlink(); + + /*! + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none + */ + void blink(); + + /*! + @function + @abstract Hides the LCD cursor. + + @param none + */ + void noCursor(); + + /*! + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none + */ + void cursor(); + + /*! + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none + */ + void scrollDisplayLeft(); + + /*! + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none + */ + void scrollDisplayRight(); + + /*! + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none + */ + void leftToRight(); + + /*! + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none + */ + void rightToLeft(); + + /*! + @function + @abstract Moves the cursor one space to the left. + @discussion + @param none + */ + void moveCursorLeft(); + + + /*! + @function + @abstract Moves the cursor one space to the right. + + @param none + */ + void moveCursorRight(); + + /*! + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none + */ + void autoscroll(); + + /*! + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none + */ + void noAutoscroll(); + + /*! + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location[in] LCD memory location of the character to create + (0 to 7) + @param charmap[in] the bitmap array representing each row of the character. + */ + void createChar(uint8_t location, uint8_t charmap[]); + + /*! + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col[in] LCD column + @param row[in] LCD row - line. + */ + void setCursor(uint8_t col, uint8_t row); + + /*! + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + */ + void backlight ( void ); + + /*! + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + */ + void noBacklight ( void ); + + /*! + @function + @abstract Switch on the LCD module. + @discussion Switch on the LCD module, it will switch on the LCD controller + and the backlight. This method has the same effect of calling display and + backlight. @see display, @see backlight + */ + void on ( void ); + + /*! + @function + @abstract Switch off the LCD module. + @discussion Switch off the LCD module, it will switch off the LCD controller + and the backlight. This method has the same effect of calling noDisplay and + noBacklight. @see display, @see backlight + */ + void off ( void ); + + // + // virtual class methods + // -------------------------------------------------------------------------- + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + This method is device dependent and can be programmed on each subclass. An + empty function call is provided that does nothing. + + @param value: pin associated to backlight control. + @param pol: backlight polarity control (POSITIVE, NEGATIVE) + */ + virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { }; + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. The behaviour + of this method is very dependent on the device. Some controllers support + dimming some don't. Please read the actual header file for each individual + device. The setBacklightPin method has to be called before setting the backlight + or the adequate backlight control constructor. + @see setBacklightPin. + + NOTE: The prefered methods to control the backlight are "backlight" and + "noBacklight". + + @param 0..255 - the value is very dependent on the LCD. However, + BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the + backlight on. + */ + virtual void setBacklight ( uint8_t value ) { }; + + /*! + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value[in] Value to write to the LCD. + */ +#if (ARDUINO < 100) + virtual void write(uint8_t value); +#else + virtual size_t write(uint8_t value); +#endif + +#if (ARDUINO < 100) + using Print::write; +#else + using Print::write; +#endif + +protected: + // Internal LCD variables to control the LCD shared between all derived + // classes. + uint8_t _displayfunction; // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or + // LCD_8BITMODE, LCD_1LINE or LCD_2LINE + uint8_t _displaycontrol; // LCD base control command LCD on/off, blink, cursor + // all commands are "ored" to its contents. + uint8_t _displaymode; // Text entry mode to the LCD + uint8_t _numlines; // Number of lines of the LCD, initialized with begin() + uint8_t _cols; // Number of columns in the LCD + t_backlighPol _polarity; // Backlight polarity + +private: + /*! + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value[in] Command value to send to the LCD (COMMAND, DATA or + FOUR_BITS). + */ + void command(uint8_t value); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ +#if (ARDUINO < 100) + virtual void send(uint8_t value, uint8_t mode) { }; +#else + virtual void send(uint8_t value, uint8_t mode) = 0; +#endif + +}; + +#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal.cpp b/libraries/LiquidCrystal/LiquidCrystal.cpp new file mode 100644 index 0000000..2c2cae1 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -0,0 +1,299 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal.cpp +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using the parallel port of +// the LCD (4 bit and 8 bit). +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal.h" + +// CONSTANT definitions +// --------------------------------------------------------------------------- +#define LCD_NOBACKLIGHT 0xFF + +// LCD driver configuration (4bit or 8bit driver control) +#define LCD_4BIT 1 +#define LCD_8BIT 0 + +// STATIC helper functions +// --------------------------------------------------------------------------- + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +// Contructors with backlight control +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); + setBacklightPin ( backlightPin, pol ); +} + +LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol) +{ + init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); + setBacklightPin ( backlightPin, pol ); +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal::send(uint8_t value, uint8_t mode) +{ + // Only interested in COMMAND or DATA + digitalWrite( _rs_pin, ( mode == DATA ) ); + + // if there is a RW pin indicated, set it low to Write + // --------------------------------------------------- + if (_rw_pin != 255) + { + digitalWrite(_rw_pin, LOW); + } + + if ( mode != FOUR_BITS ) + { + if ( (_displayfunction & LCD_8BITMODE ) ) + { + writeNbits(value, 8); + } + else + { + writeNbits ( value >> 4, 4 ); + writeNbits ( value, 4 ); + } + } + else + { + writeNbits ( value, 4 ); + } + waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD +} + +// +// setBacklightPin +void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol ) +{ + pinMode ( pin, OUTPUT ); // Difine the backlight pin as output + _backlightPin = pin; + _polarity = pol; + setBacklight(BACKLIGHT_OFF); // Set the backlight low by default +} + +// +// setBackligh +void LiquidCrystal::setBacklight ( uint8_t value ) +{ + // Check if there is a pin assigned to the backlight + // --------------------------------------------------- + if ( _backlightPin != LCD_NOBACKLIGHT ) + { + // Check if the pin is associated to a timer, i.e. PWM + // --------------------------------------------------- + if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER) + { + // Check for control polarity inversion + // --------------------------------------------------- + if ( _polarity == POSITIVE ) + { + analogWrite ( _backlightPin, value ); + } + else + { + analogWrite ( _backlightPin, 255 - value ); + } + } + // Not a PWM pin, set the backlight pin for POSI or NEG + // polarity + // -------------------------------------------------------- + else if (((value > 0) && (_polarity == POSITIVE)) || + ((value == 0) && (_polarity == NEGATIVE))) + { + digitalWrite( _backlightPin, HIGH); + } + else + { + digitalWrite( _backlightPin, LOW); + } + } +} + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + + +// init +void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + uint8_t i; + + // Initialize the IO pins + // ----------------------- + + _rs_pin = rs; + _rw_pin = rw; + _enable_pin = enable; + + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + // Initialize the IO port direction to OUTPUT + // ------------------------------------------ + + for ( i = 0; i < 4; i++ ) + { + pinMode ( _data_pins[i], OUTPUT ); + } + + // Initialize the rest of the ports if it is an 8bit controlled LCD + // ---------------------------------------------------------------- + + if ( !fourbitmode ) + { + for ( i = 4; i < 8; i++ ) + { + pinMode ( _data_pins[i], OUTPUT ); + } + } + pinMode(_rs_pin, OUTPUT); + + // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# + if (_rw_pin != 255) + { + pinMode(_rw_pin, OUTPUT); + } + + pinMode(_enable_pin, OUTPUT); + + // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS + // ------------------------------------------------------------------------- + if (fourbitmode) + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + else + _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + + // Now we pull both RS and R/W low to begin commands + digitalWrite(_rs_pin, LOW); + digitalWrite(_enable_pin, LOW); + + if (_rw_pin != 255) + { + digitalWrite(_rw_pin, LOW); + } + + // Initialise the backlight pin no nothing + _backlightPin = LCD_NOBACKLIGHT; + _polarity = POSITIVE; +} + +// +// pulseEnable +void LiquidCrystal::pulseEnable(void) +{ + // There is no need for the delays, since the digitalWrite operation + // takes longer. + digitalWrite(_enable_pin, HIGH); + waitUsec(1); // enable pulse must be > 450ns + digitalWrite(_enable_pin, LOW); +} + +// +// write4bits +void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) +{ + for (uint8_t i = 0; i < numBits; i++) + { + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + pulseEnable(); +} + + diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h new file mode 100644 index 0000000..e2114dc --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal.h @@ -0,0 +1,161 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using the parallel port of +// the LCD (4 bit and 8 bit). +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef LiquidCrystal_4bit_h +#define LiquidCrystal_4bit_h + +#include + +#include "LCD.h" +#include "FastIO.h" + + +/*! + @defined + @abstract Command execution time on the LCD. + @discussion This defines how long a command takes to execute by the LCD. + The time is expressed in micro-seconds. + */ +#define EXEC_TIME 37 + +class LiquidCrystal : public LCD +{ +public: + /*! + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. + */ + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + // Constructors with backlight control + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol); + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlightPin, t_backlighPol pol); + /*! + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. + */ + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + // Constructors with backlight control + LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol); + LiquidCrystal(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t backlightPin, t_backlighPol pol); + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + + @param pin: pin assigned to the backlight + @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). + */ + void setBacklightPin ( uint8_t pin, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. For dimming control of the + backlight, the configuration pin must be a PWM output pin. Dim control + is achieved by passing a value from 1 to 255 as a parameter. If the + pin configured when calling the setBacklightPin does not support PWM, + then: (0) backlight off, (1..255) backlight on. + + @param value: backlight value. 0: off, 1..255: dim control of the + backlight. For negative logic 255: off, 254..0: dim control. + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation and associated HW + @discussion Initializes the LCD pin allocation and configuration. + */ + void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + /*! + @method + @abstract Writes numBits bits from value value to the LCD. + @discussion Writes numBists bits (the least significant) to the LCD control + data lines. + */ + void writeNbits(uint8_t value, uint8_t numBits); + + /*! + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. + */ + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; // Data pins. + uint8_t _backlightPin; // Pin associated to control the LCD backlight +}; + +#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp b/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp new file mode 100644 index 0000000..8f1ce77 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp @@ -0,0 +1,291 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_I2C.c +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using an I2C IO extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using I2C extension +// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include +#include "I2CIO.h" +#include "LiquidCrystal_I2C.h" + +// CONSTANT definitions +// --------------------------------------------------------------------------- + +// flags for backlight control +/*! + @defined + @abstract LCD_NOBACKLIGHT + @discussion NO BACKLIGHT MASK + */ +#define LCD_NOBACKLIGHT 0x00 + +/*! + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on + */ +#define LCD_BACKLIGHT 0xFF + + +// Default library configuration parameters used by class constructor with +// only the I2C address field. +// --------------------------------------------------------------------------- +/*! + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable + */ +#define EN 6 // Enable bit + +/*! + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin + */ +#define RW 5 // Read/Write bit + +/*! + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin + */ +#define RS 4 // Register select bit + +/*! + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module + */ +#define D4 0 +#define D5 1 +#define D6 2 +#define D7 3 + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr ) +{ + config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); +} + + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, + t_backlighPol pol = POSITIVE) +{ + config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs) +{ + config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t backlighPin, + t_backlighPol pol = POSITIVE) +{ + config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t d4, uint8_t d5, + uint8_t d6, uint8_t d7 ) +{ + config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); +} + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, + uint8_t Rs, uint8_t d4, uint8_t d5, + uint8_t d6, uint8_t d7, uint8_t backlighPin, + t_backlighPol pol = POSITIVE ) +{ + config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); + setBacklightPin(backlighPin, pol); +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + +// +// begin +void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) +{ + + init(); // Initialise the I2C expander interface + LCD::begin ( cols, lines, dotsize ); +} + + +// User commands - users can expand this section +//---------------------------------------------------------------------------- +// Turn the (optional) backlight off/on + +// +// setBacklightPin +void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) +{ + _backlightPinMask = ( 1 << value ); + _polarity = pol; + setBacklight(BACKLIGHT_OFF); +} + +// +// setBacklight +void LiquidCrystal_I2C::setBacklight( uint8_t value ) +{ + // Check if backlight is available + // ---------------------------------------------------- + if ( _backlightPinMask != 0x0 ) + { + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if (((_polarity == POSITIVE) && (value > 0)) || + ((_polarity == NEGATIVE ) && ( value == 0 ))) + { + _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; + } + else + { + _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; + } + _i2cio.write( _backlightStsMask ); + } +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +int LiquidCrystal_I2C::init() +{ + int status = 0; + + // initialize the backpack IO expander + // and display functions. + // ------------------------------------------------------------------------ + if ( _i2cio.begin ( _Addr ) == 1 ) + { + _i2cio.portMode ( OUTPUT ); // Set the entire IO extender to OUTPUT + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + status = 1; + _i2cio.write(0); // Set the entire port to LOW + } + return ( status ); +} + +// +// config +void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) +{ + _Addr = lcd_Addr; + + _backlightPinMask = 0; + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = POSITIVE; + + _En = ( 1 << En ); + _Rw = ( 1 << Rw ); + _Rs = ( 1 << Rs ); + + // Initialise pin mapping + _data_pins[0] = ( 1 << d4 ); + _data_pins[1] = ( 1 << d5 ); + _data_pins[2] = ( 1 << d6 ); + _data_pins[3] = ( 1 << d7 ); +} + + + +// low level data pushing commands +//---------------------------------------------------------------------------- + +// +// send - write either command or data +void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) +{ + // No need to use the delay routines since the time taken to write takes + // longer that what is needed both for toggling and enable pin an to execute + // the command. + + if ( mode == FOUR_BITS ) + { + write4bits( (value & 0x0F), COMMAND ); + } + else + { + write4bits( (value >> 4), mode ); + write4bits( (value & 0x0F), mode); + } +} + +// +// write4bits +void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) +{ + uint8_t pinMapValue = 0; + + // Map the value to LCD pin mapping + // -------------------------------- + for ( uint8_t i = 0; i < 4; i++ ) + { + if ( ( value & 0x1 ) == 1 ) + { + pinMapValue |= _data_pins[i]; + } + value = ( value >> 1 ); + } + + // Is it a command or data + // ----------------------- + if ( mode == DATA ) + { + mode = _Rs; + } + + pinMapValue |= mode | _backlightStsMask; + pulseEnable ( pinMapValue ); +} + +// +// pulseEnable +void LiquidCrystal_I2C::pulseEnable (uint8_t data) +{ + _i2cio.write (data | _En); // En HIGH + _i2cio.write (data & ~_En); // En LOW +} \ No newline at end of file diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C.h b/libraries/LiquidCrystal/LiquidCrystal_I2C.h new file mode 100644 index 0000000..ea6d87f --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_I2C.h @@ -0,0 +1,204 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_I2C.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using an I2C IO extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using I2C extension +// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef LiquidCrystal_I2C_h +#define LiquidCrystal_I2C_h +#include +#include + +#include "I2CIO.h" +#include "LCD.h" + + +class LiquidCrystal_I2C : public LCD +{ +public: + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + */ + LiquidCrystal_I2C (uint8_t lcd_Addr); + // Constructor with backlight control + LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + */ + LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs); + // Constructor with backlight control + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module + */ + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + // Constructor with backlight control + LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol); + /*! + @function + @abstract LCD initialization and associated HW. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class or parent class. + + The begin method can be overloaded if necessary to initialize any HW that + is implemented by a library and can't be done during construction, here + we use the Wire class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. + */ + virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. + */ + void setBacklightPin ( uint8_t value, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. + */ + int init(); + + /*! + @function + @abstract Initialises class private variables + @discussion This is the class single point for initialising private variables. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module + */ + void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + + /*! + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. + */ + void write4bits(uint8_t value, uint8_t mode); + + /*! + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. + */ + void pulseEnable(uint8_t); + + + uint8_t _Addr; // I2C Address of the IO expander + uint8_t _backlightPinMask; // Backlight IO pin mask + uint8_t _backlightStsMask; // Backlight status mask + I2CIO _i2cio; // I2CIO PCF8574* expansion module driver I2CLCDextraIO + uint8_t _En; // LCD expander word for enable pin + uint8_t _Rw; // LCD expander word for R/W pin + uint8_t _Rs; // LCD expander word for Register Select pin + uint8_t _data_pins[4]; // LCD data lines + +}; + +#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR.cpp new file mode 100644 index 0000000..67e6954 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR.cpp @@ -0,0 +1,209 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR.h +// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit +// ShiftRegister (SR from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// +// Modified to work serially with the shiftOut() function, an 8-bit +// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// I used 74LS164, for the reason that's what I had at hand. +// +// Connection description: +// +// SR output: +// Bit #0 - N/C - not connected, used to hold a zero +// Bit #1 - N/C +// Bit #2 - connects to RS (Register Select) on the LCD +// Bits #3-6 - connects to LCD data inputs D4 - D7. +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable +// If not using Enable, the Data pin is used for the enable signal by defining +// the same pin for Enable as for Data. Data and Clock outputs/pins goes to +// the shiftregister. +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// +// History +// 2012.03.29 bperrybap - Added delays for faster fio shiftout (it got too fast) +// AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32. +// Added code to support indicating two wire mode by using enable=data pin +// (documentation indicated this as working) +// Fixed incorrect use of 5x10 for default font - now matches original LQ library. +// can now eliminate enable pin in constructor for two wire mode. +// 2012.01.16 Florian Fida - faster digitalWrite/shiftOut +// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. +// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, +// just a bit more memory efficient. +// Thanks to CapnBry (from google code and github) who noticed it. +// URL to his version of shiftregLCD: +// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 +// 2009.07.30 raron - minor corrections to the comments. +// Fixed timing to datasheet safe. Fixed keyword highlights. +// 2009.07.28 Mircho / raron - a new modification to the schematics, and a +// more streamlined interface +// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduino +// playgrond forum, the number of wires now required is only two! +// 2009.07.25 raron - Fixed comments. I really messed up the comments before +// posting this, so I had to fix it. +// Renamed a function, but no improvements or functional changes. +// 2009.07.23 Incorporated some proper initialization routines +// inspired (lets say copy-paste-tweaked) from LiquidCrystal +// library improvements from LadyAda. +// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) +// on the "official" LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal_SR.h" + +#include "FastIO.h" + + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +// Assuming 1 line 8 pixel high font +LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, + uint8_t enable ) +{ + init ( srdata, srclock, enable, 1, 0 ); +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, + uint8_t lines, uint8_t font) +{ + // Initialise private variables + _two_wire = 0; + + _srDataRegister = fio_pinToOutputRegister(srdata); + _srDataBit = fio_pinToBit(srdata); + _srClockRegister = fio_pinToOutputRegister(srclock); + _srClockBit = fio_pinToBit(srclock); + + if ((enable == TWO_WIRE) || (enable == srdata)) + { + _two_wire = 1; + _srEnableRegister = _srDataRegister; + _srEnableBit = _srDataBit; + } + else + { + _srEnableRegister = fio_pinToOutputRegister(enable); + _srEnableBit = fio_pinToBit(enable); + } + + // Configure control pins as outputs + // ------------------------------------------------------------------------ + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; +} + +// +// shiftIt +void LiquidCrystal_SR::shiftIt(uint8_t val) +{ + if (_two_wire) + { + // Clear to get Enable LOW + fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit); + } + fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST); + + // LCD ENABLE PULSE + // + // While this library is written with a shift register without an output + // latch in mind, it can work in 3-wire mode with a shiftregister with a + // latch. The shiftregister latch pin (STR, RCL or similar) is then + // connected to the LCD enable pin. The LCD is (very likely) slower + // to read the Enable pulse, and then reads the new contents of the SR. + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit); + waitUsec (1); // enable pulse must be >450ns + fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW); + } // end critical section +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal_SR::send(uint8_t value, uint8_t mode) +{ + // Divide byte in two nibbles include the RS signal + // and format it for shiftregister output wiring to the LCD + // We are only interested in my COMMAND or DATA for myMode + uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command. HIGH: character. + + if ( mode != FOUR_BITS ) + { + shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble + } + + shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble + /* + * Add some delay since this code is so fast it needs some added delay + * even on AVRs because the shiftout is shorter than the LCD command execution time. + */ +#if (F_CPU <= 16000000) + if(_two_wire) + delayMicroseconds ( 10 ); + else + delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif + +} + +// +// setBacklightPin +void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol ) +{ } + +// +// setBacklight +void LiquidCrystal_SR::setBacklight ( uint8_t mode ) +{ } + diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR.h b/libraries/LiquidCrystal/LiquidCrystal_SR.h new file mode 100644 index 0000000..0d22022 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR.h @@ -0,0 +1,176 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR.h +// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit +// ShiftRegister (SR from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// +// Modified to work serially with the shiftOut() function, an 8-bit +// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// I used 74LS164, for the reason that's what I had at hand. +// +// Connection description: +// +// SR output: +// Bit #0 - N/C - not connected, used to hold a zero +// Bit #1 - N/C +// Bit #2 - connects to RS (Register Select) on the LCD +// Bits #3-6 - connects to LCD data inputs D4 - D7. +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable +// If not using Enable, the Data pin will be used for the enable signal. +// 2 wire mode can be indicated by: +// - ommitting the enable pin in constructor +// - defining the same pin for Enable as for Data in constructor +// - by using the token TWO_WIRE for the enable pin. +// +// Data and Clock outputs/pins goes to the shiftregister. +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// +// History +// 2012.03.29 bperrybap - can now eliminate enable pin in constructor for two wire mode. +// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. +// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, +// just a bit more memory efficient. +// Thanks to CapnBry (from google code and github) who noticed it. +// URL to his version of shiftregLCD: +// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 +// 2009.07.30 raron - minor corrections to the comments. +// Fixed timing to datasheet safe. Fixed keyword highlights. +// 2009.07.28 Mircho / raron - a new modification to the schematics, and a +// more streamlined interface +// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduiono +// playgrond forum, the number of wires now required is only two! +// 2009.07.25 raron - Fixed comments. I really messed up the comments before +// posting this, so I had to fix it. +// Renamed a function, but no improvements or functional changes. +// 2009.07.23 Incorporated some proper initialization routines +// inspired (lets say copy-paste-tweaked) from LiquidCrystal +// library improvements from LadyAda. +// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) +// on the "official" LiquidCrystal library. +// +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR_ +#define _LIQUIDCRYSTAL_SR_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +// two-wire indicator constant +// --------------------------------------------------------------------------- +#define TWO_WIRE 204 +#define SR_RS_BIT 0x04 +#define SR_EN_BIT 0x80 + +class LiquidCrystal_SR : public LCD +{ +public: + /*! + @method + @abstract LCD SHIFT REGISTER constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] pin for shiftregister data line. + @param srclock[in] pin for shiftregister clock line. + @param enable[in] optional direct enable pin for the LCD + */ + LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE ); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + @warning Currently not supported + + @param mode: backlight mode (HIGH|LOW) + @param pol: backlight polarity + */ + void setBacklightPin ( uint8_t pin, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t mode ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. + */ + void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, + uint8_t font ); + + /*! + * @method + * @abstract takes care of shifting and the enable pulse + */ + void shiftIt (uint8_t val); + + uint8_t _enable_pin; // Enable Pin + uint8_t _two_wire; // two wire mode + + fio_register _srDataRegister; // Serial Data pin + fio_bit _srDataBit; + fio_register _srClockRegister; // Clock Pin + fio_bit _srClockBit; + fio_register _srEnableRegister; // Enable Pin + fio_bit _srEnableBit; + +}; + +#endif + diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp new file mode 100644 index 0000000..df4559a --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp @@ -0,0 +1,135 @@ +// --------------------------------------------------------------------------- +// Created/Adapted by Bill Perry 2012-03-16 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR2W.cpp +// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit +// ShiftRegister (SR2W from now on). +// +// @brief +// This is a port of the ShiftRegLCD library from raron and ported to the +// LCD library. +// +// +// See the corresponding SR2W header file for full details. +// +// History +// 2012.03.29 bperrybap - Fixed incorrect use of 5x10 for default font +// (now matches original LQ library) +// Fixed typo in SR2W mask define names +// changed default backlight state to on +// 2012.03.16 bperrybap - created/modified from SR sources to create SR2W +// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com +// --------------------------------------------------------------------------- + +#include "LiquidCrystal_SR2W.h" + +// CONSTRUCTORS +// --------------------------------------------------------------------------- +// Assuming 1 line 8 pixel high font +LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol) +{ + init ( srdata, srclock, blpol, 1, 0 ); +} + + +// PRIVATE METHODS +// --------------------------------------------------------------------------- + +// +// init +void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font) +{ + _srDataRegister = fio_pinToOutputRegister(srdata); + _srDataMask = fio_pinToBit(srdata); + _srClockRegister = fio_pinToOutputRegister(srclock); + _srClockMask = fio_pinToBit(srclock); + + _blPolarity = blpol; + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + + backlight(); // set default backlight state to on +} + +// +// loadSR +void LiquidCrystal_SR2W::loadSR(uint8_t val) +{ + // Clear to keep Enable LOW while clocking in new bits + fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask); + + + // clock out SR data byte + fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST); + + + // strobe LCD enable which can now be toggled by the data line + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_srDataRegister, _srDataMask); + waitUsec (1); // enable pulse must be >450ns + fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW); + } // end critical section +} + +// PUBLIC METHODS +// --------------------------------------------------------------------------- + + +/************ low level data pushing commands **********/ +// +// send +void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode) +{ + uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; + + myMode = myMode | SR2W_EN_MASK | _blMask; + + if ( mode != FOUR_BITS ) + { + loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble + } + + loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble + + /* + * Don't call waitUsec() + * do our own delay optmization since this code is so fast it needs some added delay + * even on slower AVRs. + */ +#if (F_CPU <= 16000000) + delayMicroseconds ( 10 ); // commands & data writes need > 37us to complete +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif +} + +// +// setBacklight +void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) +{ + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if ( ((_blPolarity == POSITIVE) && (value > 0)) || + ((_blPolarity == NEGATIVE ) && ( value == 0 )) ) + { + _blMask = SR2W_BL_MASK; + } + else + { + _blMask = 0; + } + + // send dummy data of blMask to set BL pin + // Note: loadSR() will strobe the data line trying to pulse EN + // but E will not strobe because the EN output bit is not set. + loadSR(_blMask); +} diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR2W.h b/libraries/LiquidCrystal/LiquidCrystal_SR2W.h new file mode 100644 index 0000000..2bccb87 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR2W.h @@ -0,0 +1,202 @@ +// --------------------------------------------------------------------------- +// Created/Adapted by Bill Perry 2012-03-16 +// Copyright 2012 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// @file LiquidCrystal_SR2W.h +// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit +// ShiftRegister (SR2W from now on). +// +// @brief +// This is the 2 wire shift register interface class for the LCD library +// +// The functionality provided by this class and its base class is a superset of +// the original functionality of the Arduino LiquidCrystal library and can +// be used as such. +// See the LCD class for a full description of the API functions available. +// +// It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) +// shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode. +// Any such shift register should do (pref. 74LS family IC's for 2-wire). +// 74LS164 and 74HC595 have been exstensively tested. +// +// +// 2 Pins required from the Arduino: +// - Data/Enable +// - Clock +// The Data pin is also used to control the enable signal +// LCD RW-pin hardwired to LOW (only writing to LCD). +// Busy Flag (BF, data bit D7) is not read. +// +// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ +// +// Shift register bits +// Bit #0 - (cannot be used on 74HC595) +// Bit #1 - optional backlight control +// Bit #2 - connects to RS (Register Select) on the LCD +// Bit #3 - connects to LCD data inputs D4 +// Bit #4 - connects to LCD data inputs D5 +// Bit #5 - connects to LCD data inputs D6 +// Bit #6 - connects to LCD data inputs D7 +// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") +// +// Wiring for a 74LS164 +// --------------------- +// 1k/4.7k +// +--------[ Resistor ]--------+---(LCD Enable) +// | | +// | 74LS164 (VCC) | +// | +----u----+ | _V_ diode +// (data pin)---+---+--1-|A VCC|-14-+ | +// | | | | +// +--2-|B Q7|-13------+ +// 3-|Q0 Q6|-12--(LCD D7) +// (BL Circuit)--------4-|Q1 Q5|-11--(LCD D6) +// (LCD RS)------------5-|Q2 Q4|-10--(LCD D5) +// (LCD D4)------------6-|Q3 /MR|--9--(VCC) +// +-7-|GND CP|--8--(clock pin) +// | +---------+ +// | 0.1uf +// (gnd)-----||----(vcc) +// +// Wiring for a 74HC595 +// -------------------- +// NOTE: the 74HC595 is a latching shift register. In order to get it to operate +// in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this +// is that the latched output is one clock behind behind the internal shift register bits. +// To compensate for this the wiring is offset by one bit position lower. +// For example, while the backlight is hooked to Q0 it is still using bit 1 of +// of the shift register because the outputs are 1 clock behind the real internal shift +// register. +// +// 74HC595 (VCC) +// +----u----+ | +-----------------------(BL circuit) +// (LCD RS)------------1-|Q1 VCC|-16-+ | +--------------------(data pin) +// (LCD D4)------------2-|Q2 Q0|-15----+ | 1k/4.7k +// (LCD D5)------------3-|Q3 SER|-14-------+---[ Resistor ]--+--(LCD Enable) +// (LCD D6)------------4-|Q4 /OE|-13--(gnd) | +// (LCD D7)------------5-|Q5 RCLK|-12-------+ | +// | | | | +// +------6-|Q6 SCLK|-11-------+--(clock pin) | +// | 7-|Q7 /MR|-10--(VCC) | +// | +-8-|GND Q6'|--9 | +// | | +---------+ diode _V_ +// | | 0.1uf | +// | (gnd)-----||----(vcc) | +// +-----------------------------------------------+ +// +// +// Backlight Control circuit +// ------------------------- +// Because the shift resiter is not latching the outputs, the backlight circuitry +// will "see" the output bits as they are shifted into the shift register which +// can cause the backlight to flicker rather than remain constantly on/off. +// The circuit below slows down the transitions to the transistor to remove +// the visible flicker. When the BL input is HIGH the LCD backlight will turn on. +// +// (value depends on LCD, 100ohm is usually safe) +// (LCD BL anode)---[ resistor ]---(vcc) +// +// (LCD BL cathode)-------------------------------+ +// | +// D +// | +// (BL input)----[ 4.7k Resistor ]----+-------G-|-< (2N7000 FET) +// | | +// (0.1uf) = S +// | | +// (gnd) (gnd) +// +// +// +// +// History +// 2012.03.16 bperrybap - creation/adaption from SR header to create SR2W header. +// Fixed typo in SR2W mask define names +// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com +// -------------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR2W_ +#define _LIQUIDCRYSTAL_SR2W_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +// two-wire SR output bit constants +// --------------------------------------------------------------------------- + +#define SR2W_BL_MASK 0x02 +#define SR2W_RS_MASK 0x04 +#define SR2W_DATA_MASK 0x78 // data bits are hard coded to be SR bits 6,5,4,3 +#define SR2W_EN_MASK 0x80 // cannot ever be changed + +class LiquidCrystal_SR2W : public LCD +{ +public: + /*! + @method + @abstract LCD 2 wire SHIFT REGISTER constructor. + @discussion Defines the pin assignments that connect to the shift register. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] Arduino pin for shift register data line. + @param srclock[in] Arduino pin for shift register clock line. + @param blpol[in] optional backlight polarity (default = POSITIVE) + */ + LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd + the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode[in] backlight mode (0 off, non-zero on) + */ + void setBacklight ( uint8_t mode ); + +private: + + /*! + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. + */ + void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font ); + + /*! + * @method + * @abstract takes care of shifting and the enable pulse + */ + void loadSR (uint8_t val); + + fio_register _srDataRegister; // Serial Data pin + fio_bit _srDataMask; + fio_register _srClockRegister; // Clock Pin + fio_bit _srClockMask; + + uint8_t _blPolarity; + uint8_t _blMask; +}; +#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp new file mode 100644 index 0000000..6144c06 --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp @@ -0,0 +1,283 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 7.3.2012. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SRG.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using a generic SHIFT REGISTER extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching +// shift register. While it has been tested with a 74HC595N shift register +// it should also work with other latching shift registers such as the MC14094 +// and the HEF4094 +// +// This particular driver has been created as generic as possible to enable +// users to configure and connect their LCDs using just 3 digital IOs from the +// AVR or Arduino, and connect the LCD to the outputs of the shiftregister +// in any configuration. The library is configured by passing the IO pins +// that control the strobe, data and clock of the shift register and a map +// of how the shiftregister is connected to the LCD. +// +// +// +--------------------------------------------+ +// | MCU | +// | IO1 IO2 IO3 | +// +----+-------------+-------------+-----------+ +// | | | +// | | | +// +----+-------------+-------------+-----------+ +// | Strobe Data Clock | +// | 8-bit shift/latch register | 74HC595N +// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | +// +----+----+----+----+----+----+----+----+----+ +// | | | | | | | +// |11 |12 |13 |14 |6 |5 |4 (LCD pins) +// +----+----+----+----+----+----+----+----+----+ +// | DB4 DB5 DB6 DB7 E Rw RS | +// | LCD Module | +// +// NOTE: Rw is not used by the driver so it can be connected to GND. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// History +// 2012.03.29 bperrybap - fixed constructors not properly using Rs +// Fixed incorrect use of 5x10 for default font +// - now matches original LQ library. +// moved delay to send() so it is per cmd/write vs shiftout() +// NOTE: delay is on hairy edge of working when FAST_MODE is on. +// because of waitUsec(). +// There is margin at 16Mhz AVR but might fail on 20Mhz AVRs. +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +// flags for backlight control +#include +#include +#include + +#if (ARDUINO < 100) +#include +#else +#include +#endif +#include "LiquidCrystal_SR3W.h" + +#include "FastIO.h" + +/*! + @defined + @abstract LCD_NOBACKLIGHT + @discussion No BACKLIGHT MASK + */ +#define LCD_NOBACKLIGHT 0x00 + +/*! + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on + */ +#define LCD_BACKLIGHT 0xFF + + +// Default library configuration parameters used by class constructor with +// only the I2C address field. +// --------------------------------------------------------------------------- +/*! + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Enable + */ +#define EN 4 // Enable bit + +/*! + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Rw pin + */ +#define RW 5 // Read/Write bit + +/*! + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Register select pin + */ +#define RS 6 // Register select bit + +/*! + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module + */ +#define D4 0 +#define D5 1 +#define D6 2 +#define D7 3 + + + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe) +{ + init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t backlighPin, t_backlighPol pol) +{ + init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); + setBacklightPin(backlighPin, pol); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) +{ + init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); +} + +LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol) +{ + init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); + setBacklightPin(backlighPin, pol); +} + + +void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode) +{ + + if ( mode != FOUR_BITS ) + { + write4bits( (value >> 4), mode ); // upper nibble + } + write4bits( (value & 0x0F), mode); // lower nibble + + +#if (F_CPU <= 16000000) + // No need to use the delay routines on AVR since the time taken to write + // on AVR with SR pin mapping even with fio is longer than LCD command execution. + waitUsec(37); //goes away on AVRs +#else + delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete +#endif + +} + + +void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) +{ + _backlightPinMask = ( 1 << value ); + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = pol; + setBacklight (BACKLIGHT_OFF); // Set backlight to off as initial setup +} + +void LiquidCrystal_SR3W::setBacklight ( uint8_t value ) +{ + // Check if backlight is available + // ---------------------------------------------------- + if ( _backlightPinMask != 0x0 ) + { + // Check for polarity to configure mask accordingly + // ---------------------------------------------------------- + if (((_polarity == POSITIVE) && (value > 0)) || + ((_polarity == NEGATIVE ) && ( value == 0 ))) + { + _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; + } + else + { + _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; + } + loadSR( _backlightStsMask ); + } +} + + +// PRIVATE METHODS +// ----------------------------------------------------------------------------- + +int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t Rs, uint8_t Rw, uint8_t En, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + _data = fio_pinToBit(data); + _clk = fio_pinToBit(clk); + _strobe = fio_pinToBit(strobe); + _data_reg = fio_pinToOutputRegister(data); + _clk_reg = fio_pinToOutputRegister(clk); + _strobe_reg = fio_pinToOutputRegister(strobe); + + // LCD pin mapping + _backlightPinMask = 0; + _backlightStsMask = LCD_NOBACKLIGHT; + _polarity = POSITIVE; + + _En = ( 1 << En ); + _Rw = ( 1 << Rw ); + _Rs = ( 1 << Rs ); + + // Initialise pin mapping + _data_pins[0] = ( 1 << d4 ); + _data_pins[1] = ( 1 << d5 ); + _data_pins[2] = ( 1 << d6 ); + _data_pins[3] = ( 1 << d7 ); + + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + + return (1); +} + +void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode) +{ + uint8_t pinMapValue = 0; + + // Map the value to LCD pin mapping + // -------------------------------- + for ( uint8_t i = 0; i < 4; i++ ) + { + if ( ( value & 0x1 ) == 1 ) + { + pinMapValue |= _data_pins[i]; + } + value = ( value >> 1 ); + } + + // Is it a command or data + // ----------------------- + mode = ( mode == DATA ) ? _Rs : 0; + + pinMapValue |= mode | _backlightStsMask; + loadSR ( pinMapValue | _En ); // Send with enable high + loadSR ( pinMapValue); // Send with enable low +} + + +void LiquidCrystal_SR3W::loadSR(uint8_t value) +{ + // Load the shift register with information + fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST); + + // Strobe the data into the latch + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + fio_digitalWrite_HIGH(_strobe_reg, _strobe); + fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW); + } +} diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR3W.h b/libraries/LiquidCrystal/LiquidCrystal_SR3W.h new file mode 100644 index 0000000..0f0b32f --- /dev/null +++ b/libraries/LiquidCrystal/LiquidCrystal_SR3W.h @@ -0,0 +1,202 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 7.3.2012. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file LiquidCrystal_SR3W.h +// This file implements a basic liquid crystal library that comes as standard +// in the Arduino SDK but using a generic SHIFT REGISTER extension board. +// +// @brief +// This is a basic implementation of the LiquidCrystal library of the +// Arduino SDK. The original library has been reworked in such a way that +// this class implements the all methods to command an LCD based +// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching +// shift register. While it has been tested with a 74HC595N shift register +// it should also work with other latching shift registers such as the MC14094 +// and the HEF4094 +// +// This particular driver has been created as generic as possible to enable +// users to configure and connect their LCDs using just 3 digital IOs from the +// AVR or Arduino, and connect the LCD to the outputs of the shiftregister +// in any configuration. The library is configured by passing the IO pins +// that control the strobe, data and clock of the shift register and a map +// of how the shiftregister is connected to the LCD. +// +// +// +--------------------------------------------+ +// | MCU | +// | IO1 IO2 IO3 | +// +----+-------------+-------------+-----------+ +// | | | +// | | | +// +----+-------------+-------------+-----------+ +// | Strobe Data Clock | +// | 8-bit shift/latch register | 74HC595N +// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | +// +----+----+----+----+----+----+----+----+----+ +// | | | | | | | +// |11 |12 |13 |14 |6 |5 |4 (LCD pins) +// +----+----+----+----+----+----+----+----+----+ +// | DB4 DB5 DB6 DB7 E Rw RS | +// | LCD Module | +// +// NOTE: Rw is not used by the driver so it can be connected to GND. +// +// The functionality provided by this class and its base class is identical +// to the original functionality of the Arduino LiquidCrystal library. +// +// +// @author F. Malpartida - fmalpartida@gmail.com +// --------------------------------------------------------------------------- +#ifndef _LIQUIDCRYSTAL_SR3W_H_ +#define _LIQUIDCRYSTAL_SR3W_H_ + +#include +#include "LCD.h" +#include "FastIO.h" + + +class LiquidCrystal_SR3W : public LCD +{ +public: + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the IO driving the + shift register. The constructor does not initialize the LCD. + Default configuration: + Shift register LCD + QA - 0 DB4 + QB - 1 DB5 + QC - 2 DB6 + QD - 3 DB7 + QE - 4 E + QF - 5 + QG - 6 Rs + GND Rw + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to the shiftregister data pin. + @param clk[in] digital IO connected to the shiftregister clock pin. + */ + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe); + // Constructor with backlight control + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the control lines of + the LCD and the shiftregister. The constructor does not initialize the LCD. + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to shiftregister data pin. + @param clk[in] digital IO connected to shiftregister clock pin. + @param En[in] LCD En (Enable) pin connected to SR output pin. + @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. + @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. + @param d4[in] LCD data 4 pin map to the SR output pin. + @param d5[in] LCD data 5 pin map to the SR output pin. + @param d6[in] LCD data 6 pin map to the SR output pin. + @param d7[in] LCD data 7 pin map to the SR output pin. + */ + LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); + // Constructor with backlight control + LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t En, uint8_t Rw, uint8_t Rs, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, + uint8_t backlighPin, t_backlighPol pol); + + /*! + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. + */ + virtual void send(uint8_t value, uint8_t mode); + + /*! + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. + */ + void setBacklightPin ( uint8_t value, t_backlighPol pol ); + + /*! + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) + */ + void setBacklight ( uint8_t value ); + +private: + + /*! + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. + */ + int init(uint8_t data, uint8_t clk, uint8_t strobe, + uint8_t Rs, uint8_t Rw, uint8_t En, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + /*! + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. + */ + void write4bits(uint8_t value, uint8_t mode); + + /*! + @function + @abstract load into the shift register a byte + @discussion loads into the shift register a byte + @param value[in]: value to be loaded into the shiftregister. + */ + void loadSR(uint8_t value); + + + fio_bit _strobe; // shift register strobe pin + fio_register _strobe_reg; // SR strobe pin MCU register + fio_bit _data; // shift register data pin + fio_register _data_reg; // SR data pin MCU register + fio_bit _clk; // shift register clock pin + fio_register _clk_reg; // SR clock pin MCU register + uint8_t _En; // LCD expander word for enable pin + uint8_t _Rw; // LCD expander word for R/W pin + uint8_t _Rs; // LCD expander word for Register Select pin + uint8_t _data_pins[4]; // LCD data lines + uint8_t _backlightPinMask; // Backlight IO pin mask + uint8_t _backlightStsMask; // Backlight status mask + +}; + +#endif + diff --git a/libraries/LiquidCrystal/docs/Doxyfile b/libraries/LiquidCrystal/docs/Doxyfile new file mode 100644 index 0000000..b097cd8 --- /dev/null +++ b/libraries/LiquidCrystal/docs/Doxyfile @@ -0,0 +1,1749 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "LCD Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.2.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library." + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = /Users/fmalpartida/Documents/electroFunLTD/templates/anchillary/graficas/logo/logoGoogle.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = YES + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = YES + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/libraries/LiquidCrystal/docs/def/doxygen.def b/libraries/LiquidCrystal/docs/def/doxygen.def new file mode 100644 index 0000000..5af747c --- /dev/null +++ b/libraries/LiquidCrystal/docs/def/doxygen.def @@ -0,0 +1,7432 @@ +AutoGen Definitions dummy; +class = { + cp-id = 'class_i2_c_i_o'; + cp-name = 'I2CIO'; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'i2cAddr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '62'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalRead'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '108'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + + @param pin[in] Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'level'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '136'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + + @param pin[in] device pin to change level. Range (0..7). + @para level[in] logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'I2CIO'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '49'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Constructor method + @discussion Class constructor constructor. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pinMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '73'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + + @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 + @param dir[in] Pin direction (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'portMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'read'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '94'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '123'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + + @param value[in] value to be written to the device. + @result 1 on success, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_dirMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '142'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cAddr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '143'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +bool +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_initialised'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '144'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_shadow'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '141'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + cp-fileline = '42'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_l_c_d'; + cp-name = 'LCD'; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___i2_c'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r2_w'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___s_r3_w'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'autoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '354'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aba8867fe2210cbfa8db869208709be10'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'backlight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '402'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3f587d1cbb2d59765ef60a5216b56fea'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is abstract, a base implementation is available common to all LCD + drivers. Should it not be compatible with some other LCD driver, a derived + implementation should be done on the driver specif class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] character size, default==LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'blink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '260'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'clear'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '208'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'createChar'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'location'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charmap'; + sec-mem-param-array = '[]'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '382'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location[in] LCD memory location of the character to create + (0 to 7) + @param charmap[in] the bitmap array representing each row of the character. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'cursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '278'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'display'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '242'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'home'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '221'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LCD'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '179'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'leftToRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '309'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aad2abc99d1aca5403873579d9d72c2d4'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'moveCursorLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '330'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Moves the cursor one space to the left. + @discussion + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a09eec0c712e54b066f5894635c1fe75c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'moveCursorRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '339'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Moves the cursor one space to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noAutoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '364'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a2a331b4e142734411b2f1cfaffe7a488'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '411'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBlink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '250'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noCursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '268'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Hides the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noDisplay'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '231'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a191639be183be1476c9bfe6d455d23b2'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'off'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '429'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch off the LCD module. + @discussion Switch off the LCD module, it will switch off the LCD controller + and the backlight. This method has the same effect of calling noDisplay and + noBacklight. @see display, @see backlight +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a718da3a638deb59bd1c7a5222a52d98a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'on'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '420'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch on the LCD module. + @discussion Switch on the LCD module, it will switch on the LCD controller + and the backlight. This method has the same effect of calling display and + backlight. @see display, @see backlight +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'rightToLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '322'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '287'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '296'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3305570d7b37eb93f2cf840263c15828'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '463'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. The behaviour + of this method is very dependent on the device. Some controllers support + dimming some don't. Please read the actual header file for each individual + device. The setBacklightPin method has to be called before setting the backlight + or the adequate backlight control constructor. + @see setBacklightPin. + + NOTE: The prefered methods to control the backlight are "backlight" and + "noBacklight". + + @param 0..255 - the value is very dependent on the LCD. However, + BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the + backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a53f4ee9b39d9ab3d7ae4d9f8dedca3bc'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '444'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + This method is device dependent and can be programmed on each subclass. An + empty function call is provided that does nothing. + + @param value: pin associated to backlight control. + @param pol: backlight polarity control (POSITIVE, NEGATIVE) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setCursor'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'col'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'row'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '393'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col[in] LCD column + @param row[in] LCD row - line. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a2d89cc2e62f72afb5f15a7fd812900e3'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '477'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value[in] Value to write to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'protected-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a88b16ea0e5c7d1cabc5007d48bcbd2b0'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_cols'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '497'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaycontrol'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '493'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displayfunction'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '491'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaymode'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '495'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_numlines'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '496'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a990338759d2abe10b0fb1743b7789566'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_polarity'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '498'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'command'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '513'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value[in] Command value to send to the LCD (COMMAND, DATA or + FOUR_BITS). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a8a5b6f6f448a6ca6eeb3466c370d47ab'; + sec-mem-virt = virtual; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '529'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + cp-fileline = '170'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 5; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 2; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 3; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 4; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 6; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 7; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal'; + cp-name = 'LiquidCrystal'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '55'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '58'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae0c3c8f7661634b1400f00a1c9c02c26'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '68'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a52a4de3d866e347208a32dfc9d797729'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '86'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '76'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a8b90122c67a6d14b967c8a11ba490670'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '78'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1aff2330186495fde93370d46c0ca2cbf0'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlightPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '64'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '99'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1aa2b898366e1c656ac313b9007c98cebd'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '125'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. For dimming control of the + backlight, the configuration pin must be a PWM output pin. Dim control + is achieved by passing a value from 1 to 255 as a parameter. If the + pin configured when calling the setBacklightPin does not support PWM, + then: (0) backlight off, (1..255) backlight on. + + @param value: backlight value. 0: off, 1..255: dim control of the + backlight. For negative logic 255: off, 254..0: dim control. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a63740dc1198d8169a39d9c6daff0efc9'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '109'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + + @param pin: pin assigned to the backlight + @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'fourbitmode'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '136'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation and associated HW + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '152'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a641301bc315a4e167c5aee7ea99993fd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'writeNbits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'numBits'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '144'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes numBits bits from value value to the LCD. + @discussion Writes numBists bits (the least significant) to the LCD control + data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a23a1807a1fe4210ac7cfca9b779513ea'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '158'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '157'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '156'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rs_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rw_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + cp-fileline = '45'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 10; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 9; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '10'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 12; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 11; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '12'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___i2_c'; + cp-name = 'LiquidCrystal_I2C'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '110'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization and associated HW. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class or parent class. + + The begin method can be overloaded if necessary to initialize any HW that + is implemented by a library and can't be done during construction, here + we use the Wire class. + + @param cols[in] the number of columns that the display has + @param rows[in] the number of rows that the display has + @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9fc9bc519ebbf7503dadc11622e02ed6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '53'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1add1f2da7de4ec9b9cd5c9b5fab712464'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '70'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a7d9b54d3a91fa0e0e50db27cda6b4654'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '89'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a517f8847ebf09f0eacfb9c7232975fce'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '67'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1ab15622287533de7a47f3e2012ebf18be'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '51'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '124'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af11b8fa0082616e2b6e6e4238589d8a8'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a2eaf86f62d1f169b3763b03fbf88f70b'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '134'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adb997350478bdc0ab8eb5cc5623a2ad9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'config'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '172'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Initialises class private variables + @discussion This is the class single point for initialising private variables. + + @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. + @param En[in] LCD En (Enable) pin connected to the IO extender module + @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module + @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module + @param d4[in] LCD data 0 pin map on IO extender module + @param d5[in] LCD data 1 pin map on IO extender module + @param d6[in] LCD data 2 pin map on IO extender module + @param d7[in] LCD data 3 pin map on IO extender module +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '190'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a60111950cc0a47e6223c22949faa15f3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '182'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Addr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '193'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9d59c16cde5c3ffb30a881e9a61c9a32'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPinMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0eaa7c2ac1040a1786960618866c066e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightStsMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a3436246b17062357066c636aa598b49d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '200'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aa0a878e97b6111abf1bc8d767a548cf2'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_En'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +I2CIO +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cio'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1ab70fc18e99a70e3293c4f6ba25c37efa'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rs'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '199'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a882df32eb9ae0e7a1b74f9a8ee4bffe9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rw'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '198'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + cp-fileline = '39'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 14; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 13; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '14'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 16; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 15; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '16'; + relation = public-inheritance; + }; /* node-child */ + node-child = { + child-id = '17'; + relation = usage; + edgelabel = <<_EnD_oF_dEf_TeXt_ +_i2cio +_EnD_oF_dEf_TeXt_; + }; /* node-child */ + }; /* node */ + node = { + node-id = 17; + node-label = 'I2CIO'; + node-link = { + node-link-id = 'class_i2_c_i_o'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r'; + cp-name = 'LiquidCrystal_SR'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1ac3fe0b48f8d4c1c941d82d1333495cfc'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +TWO_WIRE +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '108'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LCD SHIFT REGISTER constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] pin for shiftregister data line. + @param srclock[in] pin for shiftregister clock line. + @param enable[in] optional direct enable pin for the LCD +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a03821351a32db07cb7e42c8c11ce8d47'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '122'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1ad9f3e3f36257984c23fb508973e14535'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a5bfc0dcc1f042bcb59992493a3a7231d'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '134'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. + @warning Currently not supported + + @param mode: backlight mode (HIGH|LOW) + @param pol: backlight polarity +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a0f15bf3f5041a91469da5fd75aba5d5e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lines'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'font'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r_1a2684630ad69618fab065f53eea543df8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'shiftIt'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'val'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '161'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract takes care of shifting and the enable pulse +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1acee96e0ef397441bdde73ca921160476'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '163'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a68bffb6befc28cb716fb0c48b50f65fc'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '169'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a507726b30de4b552b4e32faf9a3aa9e3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '168'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a9984b207beddba9ff299f9356f891065'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '167'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a1e5bf3e5c6ec5b6c41f6949b6e34fd34'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '166'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1a12e3ee583d454d5f52223beca91f5bae'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srEnableBit'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '171'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1adab0eb2bb7392a77375034530bf230eb'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srEnableRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '170'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r_1ad20f9d3282b047fdbae8e97b07d4fc89'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_two_wire'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + sec-mem-desc-line = '164'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + cp-fileline = '95'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 18; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '19'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 19; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 20; + node-label = 'LiquidCrystal_SR'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r'; + }; + node-child = { + child-id = '21'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 21; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r2_w'; + cp-name = 'LiquidCrystal_SR2W'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1af307fdf5c8feb757e965074dcdeb1dd3'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR2W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'blpol'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +POSITIVE +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '151'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LCD 2 wire SHIFT REGISTER constructor. + @discussion Defines the pin assignments that connect to the shift register. + The constructor does not initialize the LCD. Assuming 1 line 8 pixel high + font. + + @param srdata[in] Arduino pin for shift register data line. + @param srclock[in] Arduino pin for shift register clock line. + @param blpol[in] optional backlight polarity (default = POSITIVE) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a65dc6f261c319be8e56f3c1f6a5c877d'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command using the shift register. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2158db27287c1564a03e7a1472beb3b6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '177'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param mode[in] backlight mode (0 off, non-zero on) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a12c14153e7056cb4a98310529bace6a8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srdata'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'srclock'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'blpol'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lines'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'font'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '186'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1ae369efcd3fca47a018a034f5f4a1679b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'loadSR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'val'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract takes care of shifting and the enable pulse +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a3b1dfb83ad02274c30fa940a10619737'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_blMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '200'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a906f803e1ae324b5383fa004093124f4'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_blPolarity'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '199'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a27727d63c1ce0f9aada630814b8f022b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1aa36d38c009bf846e7726fc48c0067fc3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srClockRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1ad188042fdcc7df0178248401c678eb8e'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2e43c3f1d6b0e5599a1b4d14ef428077'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_srDataRegister'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + cp-fileline = '138'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 23; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 22; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '23'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 25; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 24; + node-label = 'LiquidCrystal_SR2W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r2_w'; + }; + node-child = { + child-id = '25'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___s_r3_w'; + cp-name = 'LiquidCrystal_SR3W'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ae1396bcd5e9c5b7ed13182c166de776b'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '90'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the IO driving the + shift register. The constructor does not initialize the LCD. + Default configuration: + Shift register LCD + QA - 0 DB4 + QB - 1 DB5 + QC - 2 DB6 + QD - 3 DB7 + QE - 4 E + QF - 5 + QG - 6 Rs + GND Rw + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to the shiftregister data pin. + @param clk[in] digital IO connected to the shiftregister clock pin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a7b2f382b76bc9d88adb8d681e824b4de'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a24f051747dfeda48f7b207c3358c8015'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'backlighPin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '119'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4fab8ff2f21bba3efd133cd8c87fffc0'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_SR3W'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '114'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the control lines of + the LCD and the shiftregister. The constructor does not initialize the LCD. + + @param strobe[in] digital IO connected to shiftregister strobe pin. + @param data[in] digital IO connected to shiftregister data pin. + @param clk[in] digital IO connected to shiftregister clock pin. + @param En[in] LCD En (Enable) pin connected to SR output pin. + @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. + @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. + @param d4[in] LCD data 4 pin map to the SR output pin. + @param d5[in] LCD data 5 pin map to the SR output pin. + @param d6[in] LCD data 6 pin map to the SR output pin. + @param d7[in] LCD data 7 pin map to the SR output pin. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ade34af5b7fe795482f1848c2176d6e56'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '133'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value[in] Value to send to the LCD. + @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a + command to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a6d0fc7907ef9fd87c408a21b9bd49295'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklight'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '154'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on/off the LCD backlight. + @discussion Switch-on/off the LCD backlight. + The setBacklightPin has to be called before setting the backlight for + this method to work. @see setBacklightPin. + + @param value: backlight mode (HIGH|LOW) +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a894d0ea8ea61c1d15acd8a26d417e477'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setBacklightPin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +t_backlighPol +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pol'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '143'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the pin to control the backlight. + @discussion Sets the pin in the device to control the backlight. This device + doesn't support dimming backlight capability. + + @param 0: backlight off, 1..255: backlight on. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a45cde916021d9b52b0f769c17886b2ef'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'data'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'clk'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'strobe'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'Rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'En'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a80f6e4e8b10635d9daed718f2918c1bd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'loadSR'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '183'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract load into the shift register a byte + @discussion loads into the shift register a byte + @param value[in]: value to be loaded into the shiftregister. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ac0702caa5d07ffd8e832ad8a5d0afe7c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '175'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. + @param value[in] Value to write to the LCD + @param more[in] Value to distinguish between command and data. + COMMAND == command, DATA == data. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a21ef2e5b78edd0d160d81b0c06d41440'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightPinMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '196'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1adf17379bfac4def5c780fc8ad023764c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightStsMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '197'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2c14746e8f626a53f777c8df68f8a92b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_clk'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '190'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1af7d09207dffb9f2fc85fc60661ffa0d4'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_clk_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '191'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1ab81049d446d2e7399ee6b20c9da4cdde'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '188'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a366adab314f5dc8b7e53298d6eccf85d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '195'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a301acb36345c56ae336156fdeee4a783'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '189'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4306c59b6bf3870fecad23d6b0c0aa5d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_En'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a062da9fb985a7e88128d7d95fd8239d6'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rs'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '194'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1aef47417b089e53af1ce032e5f1b23b43'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Rw'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '193'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a0d40b3c14c3f56fd341d41220f425925'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_strobe'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '186'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2a7d9703b04a91658b7a590b926ff9cd'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_strobe_reg'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + sec-mem-desc-line = '187'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + cp-fileline = '67'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 27; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 26; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '27'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 29; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 28; + node-label = 'LiquidCrystal_SR3W'; + node-link = { + node-link-id = 'class_liquid_crystal___s_r3_w'; + }; + node-child = { + child-id = '29'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +file = { + file-id = '_fast_i_o_8cpp'; + file-name = 'FastIO.cpp'; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a83fc2fdc19ab3f9aade9e1a2f39e81a6'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalRead'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '96'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1ae91bbe682b02a5842c291055c0e998b5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalWrite'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '77'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a07a19dfbdca1afaca5d666bdaa3be7d5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToBit'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '66'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1afb934fc0ded94cbb5ed8ed14e2a123ed'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToInputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '53'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a04210cc785c3b4a11c86f794949c327f'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToOutputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'initial_state'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '36'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a5d8d5977294d614d15bda19f75d6b787'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '161'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a56c72b9f00680662229895ab22aaa743'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'bitOrder'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '111'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a7ac8b242e7e3cacf175e481889e047dd'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '265'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param pin[in] digital pin + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a5b4d1684030dc620938b7c2fbdf5ced8'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '192'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1a2d0e4495eb12504255bbd3f82405b17b'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '182'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8cpp_1ae4b2e099f8ade9ee674d1565669e870a'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + func-mem-desc-line = '177'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param pin[in] digital pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_fast_i_o_8h'; + file-name = 'FastIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a04971fe5fabe4129736708c494e08e6d'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'ATOMIC_BLOCK'; + define-mem-param = { + define-mem-def-name = 'dummy'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +if(true) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '58'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a362c18b15a09703e42e1c246c47420ef'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'ATOMIC_RESTORESTATE'; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '59'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a89e1c62276052100c62b6c82a2e95622'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_HIGH'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,HIGH) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '143'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + This is where the magic happens that makes things fast. + Implemented as preprocessor directives to force inlining + SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1ac8f00a1bccb98109531b88fbb6e91478'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_LOW'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,LOW) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '144'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a6d1dffed7f0c8f28f6c88146315f7832'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_SWITCH'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit, !digitalRead(bit)) +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '145'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1accae9687fdfc5f3492fb6344d62eb190'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'fio_digitalWrite_SWITCHTO'; + define-mem-param = { + define-mem-def-name = 'reg'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'bit'; + }; /* define-mem-def--param */ + define-mem-param = { + define-mem-def-name = 'val'; + }; /* define-mem-def--param */ + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +digitalWrite(bit,val); +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '146'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a32f90d0ad5c1295c97cc1e79936aadd6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'FIO_FALLBACK'; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '57'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_fast_i_o_8h_1a688a4adbb87520a2b68681bd6bfb199e'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SKIP'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x23 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + typedef = { + typedef-member = { + typedef-mem-kind = 'typedef'; + typedef-mem-id = '_fast_i_o_8h_1a0a595a88b29bcfd1540b6fac75787937'; + typedef-mem-virt = normal; + typedef-mem-prot = public; + typedef-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + typedef-mem-name = 'fio_bit'; + typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + typedef-mem-desc-line = '60'; + typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* typedef-member */ + typedef-member = { + typedef-mem-kind = 'typedef'; + typedef-mem-id = '_fast_i_o_8h_1ae44ea3af54ef26db03f1ae2ea62f9c1f'; + typedef-mem-virt = normal; + typedef-mem-prot = public; + typedef-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + typedef-mem-name = 'fio_register'; + typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + typedef-mem-desc-line = '61'; + typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* typedef-member */ + }; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a197336e47e1c3f929056ce3abbbc7e8d'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalRead'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '158'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract direct digital read + @discussion without any checks + @discussion falls back to normal digitalRead if fast io is disabled + @param pinRegister[in] Register - ignored if fast io is disabled + @param pinBit[in] Bit - Pin if fast io is disabled + @result Value read from pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1ae91bbe682b02a5842c291055c0e998b5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_digitalWrite'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pinBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '128'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract direct digital write + @discussion without any checks + @discussion falls back to normal digitalWrite if fast io is disabled + @param pinRegister[in] Register - ignored if fast digital write is disabled + @param pinBit[in] Bit - Pin if fast digital write is disabled + @param value[in] desired output +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a07a19dfbdca1afaca5d666bdaa3be7d5'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToBit'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '115'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Find the bit which belongs to specified pin + @discussion if fast digitalWrite is disabled this function returns the pin + @param pin[in] Number of a digital pin + @result Bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1afb934fc0ded94cbb5ed8ed14e2a123ed'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToInputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '106'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the input register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a385ae40d960c1a57e86818332476a802'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_pinToOutputRegister'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'initial_state'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LOW +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '97'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Get the output register for specified pin. + @discussion if fast digital IO is disabled this function returns NULL + @param pin[in] Number of a digital pin + @result Register +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a5d8d5977294d614d15bda19f75d6b787'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '184'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out clear + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a56c72b9f00680662229895ab22aaa743'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'dataBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockRegister'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'clockBit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'bitOrder'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '172'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract faster shift out + @discussion using fast digital write + @discussion falls back to normal digitalWrite if fastio is disabled + @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled + @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled + @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled + @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled + @param bitOrder[in] bit order +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a33ce251dcd6b448185cda415a99001cf'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +false +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '194'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1af2aac35d9a8ab7a2c87672f2c7cbbafb'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'value'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +boolean +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'noLatch'; + func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +false +_EnD_oF_dEf_TeXt_; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '202'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract one wire shift out + @discussion protocol needs initialisation (fio_shiftOut1_init) + @param pin[in] digital pin + @param value[in] value to shift out, last byte is ignored and always shifted out LOW +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1a2d0e4495eb12504255bbd3f82405b17b'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_register +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Register'; + }; /* func-mem-param--param */ + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +fio_bit +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'shift1Bit'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '210'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param shift1Register[in] pins register + @param shift1Bit[in] pins bit +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_fast_i_o_8h_1ae4b2e099f8ade9ee674d1565669e870a'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'fio_shiftOut1_init'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'pin'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + func-mem-desc-line = '217'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract initializes one wire shift out protocol + @discussion Puts pin to HIGH state and delays until Capacitors are charged. + @param pin[in] digital pin +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8cpp'; + file-name = 'I2CIO.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8h'; + file-name = 'I2CIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = '_I2CIO_VERSION'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +"1.0.0" +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + define-mem-desc-line = '32'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8cpp'; + file-name = 'LCD.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8h'; + file-name = 'LCD.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a0f50ae3b4bdb42dd5ad74b2c604a7515'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'BACKLIGHT_OFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '151'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Backlight off constant declaration + @discussion Used in combination with the setBacklight to swith off the + LCD backlight. @set setBacklight +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa5bad1c51f5fac029f3deacfef48c54b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'BACKLIGHT_ON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +255 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '159'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Backlight on constant declaration + @discussion Used in combination with the setBacklight to swith on the + LCD backlight. @set setBacklight +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab0d87e07831e7e4943caef187872123e'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'COMMAND'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '132'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aad9ae913bdfab20dd94ad04ee2d5b045'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'DATA'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '133'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa1e30e32b6c2cf8d90a9281328472dbe'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'FOUR_BITS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '134'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ad25b138788d83e67f840588754e2df2f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'HOME_CLEAR_EXEC'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '143'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Defines the duration of the home and clear commands + @discussion This constant defines the time it takes for the home and clear + commands in the LCD - Time in microseconds. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_1LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '125'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_2LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '124'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '123'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x10DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '126'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x8DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '127'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '122'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '111'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '110'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CLEARDISPLAY'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '116'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSOROFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '109'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '108'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORSHIFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYCONTROL'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '115'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '107'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '106'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYLEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '100'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYMODESET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYRIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '99'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '102'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '101'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_FUNCTIONSET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x20 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '93'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVELEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '118'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVERIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '117'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_RETURNHOME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETCGRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x40 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '94'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETDDRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '95'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + enum = { + enum-member = { + enum-mem-kind = 'enum'; + enum-mem-id = '_l_c_d_8h_1aeeef728bf4726268aa5e99391a1502bc'; + enum-mem-virt = normal; + enum-mem-prot = public; + enum-mem-name = 't_backlighPol'; + enum-mem-enum = { enum-name = POSITIVE; }; + enum-mem-enum = { enum-name = NEGATIVE; }; + enum-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + enum-mem-desc-line = '167'; + enum-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + enum-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* enum-member */ + }; + func = { + func-member = { + func-mem-kind = 'function'; + func-mem-id = '_l_c_d_8h_1a6eac41e4be58d7736ac0c19de225c0dc'; + func-mem-virt = normal; + func-mem-prot = public; + func-mem-type = <<_EnD_oF_dEf_TeXt_ +static void +_EnD_oF_dEf_TeXt_; + func-mem-name = 'waitUsec'; + func-mem-param = { + func-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint16_t +_EnD_oF_dEf_TeXt_; + func-mem-param-declname = 'uSec'; + }; /* func-mem-param--param */ + func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + func-mem-desc-line = '72'; + func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + func-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enables disables fast waits for write operations for LCD + @discussion If defined, the library will avoid doing un-necessary waits. + this can be done, because the time taken by Arduino's slow digitalWrite + operations. If fast digitalIO operations, comment this line out or undefine + the mode. + + + @function + @abstract waits for a given time in microseconds (compilation dependent). + @discussion Waits for a given time defined in microseconds depending on + the FAST_MODE define. If the FAST_MODE is defined the call will return + inmediatelly. + @param uSec[in] time in microseconds. + @result None +_EnD_oF_dEf_TeXt_; + }; /* func-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8cpp'; + file-name = 'LiquidCrystal.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a31e1c14e8c2845dec3301f0ebd36b43c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '45'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a57d84af8cf61ceee4eb91db77889f071'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '46'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8h'; + file-name = 'LiquidCrystal.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal_8h_1adebff0f00a59c9f9863bc196938d5726'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EXEC_TIME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +37 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Command execution time on the LCD. + @discussion This defines how long a command takes to execute by the LCD. + The time is expressed in micro-seconds. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8cpp'; + file-name = 'LiquidCrystal_I2C.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D4'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D5'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D6'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D7'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +3 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EN'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +6 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '66'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '55'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '48'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_NOBACKLIGHT + @discussion NO BACKLIGHT MASK +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1af8903d8eea3868940c60af887473b152'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +4 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '80'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8cpp_1afc4ded33ac0ca43defcce639e965748a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RW'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +5 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + define-mem-desc-line = '73'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8h'; + file-name = 'LiquidCrystal_I2C.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r_8cpp'; + file-name = 'LiquidCrystal_SR.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r_8h'; + file-name = 'LiquidCrystal_SR.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1a0075b041d82abb47f279dce482e7b087'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR_EN_BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1afdaa2bbb2cc185700864ac8d7a570ced'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR_RS_BIT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r_8h_1a40fb1f76bc5f8ca9e6534b47bd6da27c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'TWO_WIRE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +204 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r2_w_8cpp'; + file-name = 'LiquidCrystal_SR2W.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r2_w_8h'; + file-name = 'LiquidCrystal_SR2W.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a53e3add69865ae57ca872cb41fcae9e3'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_BL_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '132'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a7cf86f2a173473d01e02b2ac786a8690'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_DATA_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x78 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '134'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1a8d17b6abb5bcde6883dbdc86d34be9d8'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_EN_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '135'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r2_w_8h_1acce98b026d9fdcb2e126705c14af7500'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'SR2W_RS_MASK'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + define-mem-desc-line = '133'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r3_w_8cpp'; + file-name = 'LiquidCrystal_SR3W.cpp'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D4'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '126'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD dataline allocation this library only supports 4 bit LCD control + mode. + @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D5'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +1 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '127'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D6'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +2 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '128'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'D7'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +3 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '129'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'EN'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +4 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '104'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0xFF +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '93'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_BACKLIGHT + @discussion BACKLIGHT MASK used when backlight is on +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '86'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract LCD_NOBACKLIGHT + @discussion No BACKLIGHT MASK +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1af8903d8eea3868940c60af887473b152'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +6 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '118'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1afc4ded33ac0ca43defcce639e965748a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'RW'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +5 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + define-mem-desc-line = '111'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD's Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___s_r3_w_8h'; + file-name = 'LiquidCrystal_SR3W.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ diff --git a/libraries/LiquidCrystal/docs/def/doxygen.def.txt b/libraries/LiquidCrystal/docs/def/doxygen.def.txt new file mode 100644 index 0000000..8f4275f --- /dev/null +++ b/libraries/LiquidCrystal/docs/def/doxygen.def.txt @@ -0,0 +1,2897 @@ +AutoGen Definitions dummy; +class = { + cp-id = 'class_i2_c_i_o'; + cp-name = 'I2CIO'; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'I2CIO'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '51'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Constructor method + @discussion Class constructor constructor. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'i2cAddr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '63'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the device. + @discussion This method initializes the device allocating an I2C address. + This method is the first method that should be call prior to calling any + other method form this class. On initialization all pins are configured + as INPUT on the device. + @param i2cAddr: I2C Address where the device is located. + @result 1 if the device was initialized correctly, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pinMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '73'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets the mode of a particular pin. + @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite + has no effect on pins which are not declared as output. + @param pin: Pin from the I2C IO expander to be configured. Range 0..7 + @param dir: Pin direction (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'portMode'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'dir'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '83'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Sets all the pins of the device in a particular direction. + @discussion This method sets all the pins of the device in a particular + direction. This method is useful to set all the pins of the device to be + either inputs or outputs. + @param dir: Direction of all the pins of the device (INPUT, OUTPUT). +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'read'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Reads all the pins of the device that are configured as INPUT. + @discussion Reads from the device the status of the pins that are configured + as INPUT. During initialization all pins are configured as INPUTs by default. + Please refer to pinMode or portMode. + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalRead'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '106'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Read a pin from the device. + @discussion Reads a particular pin from the device. To read a particular + pin it has to be configured as INPUT. During initialization all pins are + configured as INPUTs by default. Please refer to pinMode or portMode. + @param pin: Pin from the port to read its status. Range (0..7) + @result Returns the pin status (HIGH, LOW) if the pin is configured + as an output, reading its value will always return LOW regardless of its + real state. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '120'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Write a value to the device. + @discussion Writes to a set of pins in the device. The value is the binary + representation of all the pins in device. The value written is masked with + the configuration of the direction of the pins; to change the state of + a particular pin with this method, such pin has to be configured as OUTPUT + using the portMode or pinMode methods. If no pins have been configured as + OUTPUTs this method will have no effect. + @param value: value to be written to the device. + @result 1 on success, 0 otherwise +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'digitalWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'pin'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'level'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes a digital level to a particular pin. + @discussion Write a level to the indicated pin of the device. For this + method to have effect, the pin has to be configured as OUTPUT using the + pinMode or portMode methods. + @param pin: device pin to change level. Range (0..7). + @para level: logic level to set the pin at (HIGH, LOW). + @result 1 on success, 0 otherwise. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_shadow'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '137'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_dirMask'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '138'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cAddr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '139'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +bool +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_initialised'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + sec-mem-desc-line = '140'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + cp-fileline = '44'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_l_c_d'; + cp-name = 'LCD'; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-ref = { + ref-type = derived; + ref-id = 'class_liquid_crystal___i2_c'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LCD'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '104'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract LiquidCrystal abstract constructor. + @discussion LiquidCrystal class abstract constructor needed to create + the base abstract class. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b7aee49867828a0160a142b9109c07a'; + sec-mem-virt = pure-virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '120'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + This method is pure abstract, it is dependent on each derived class from + this base class to implement the internals of how the LCD is initialized + and configured. + + @param cols the number of columns that the display has + @param rows the number of rows that the display has +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'clear'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Clears the LCD. + @discussion Clears the LCD screen and positions the cursor in the upper-left + corner. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'home'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '145'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Sets the cursor to the upper-left corner. + @discussion Positions the cursor in the upper-left of the LCD. + That is, use that location in outputting subsequent text to the display. + To also clear the display, use the clear() function instead. + + This operation is time consuming for the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noDisplay'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '155'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the LCD display. + @discussion Turns off the LCD display, without losing the text currently + being displayed on it. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'display'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '166'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on the LCD display. + @discussion Turns on the LCD display, after it's been turned off with + noDisplay(). This will restore the text (and cursor location) that was on + the display prior to calling noDisplay(). + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBlink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '174'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off the blinking of the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'blink'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '184'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the cursor of the LCD. + @discussion Display the blinking LCD cursor. If used in combination with + the cursor() function, the result will depend on the particular display. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noCursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '192'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Hides the LCD cursor. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'cursor'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '202'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Display the LCD cursor. + @discussion Display the LCD cursor: an underscore (line) at the location + where the next character will be written. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '211'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the left. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'scrollDisplayRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '220'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Scrolls the contents of the display (text and cursor) one space + to the right. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'leftToRight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '233'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to left-to-right. + @discussion Set the direction for text written to the LCD to left-to-right. + All subsequent characters written to the display will go from left to right, + but does not affect previously-output text. + + This is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'rightToLeft'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '246'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Set the direction for text written to the LCD to right-to-left. + @discussion Set the direction for text written to the LCD to right-to-left. + All subsequent characters written to the display will go from right to left, + but does not affect previously-output text. + + left-to-right is the default configuration. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'autoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '261'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns on automatic scrolling of the LCD. + @discussion Turns on automatic scrolling of the LCD. This causes each + character output to the display to push previous characters over by one + space. If the current text direction is left-to-right (the default), + the display scrolls to the left; if the current direction is right-to-left, + the display scrolls to the right. + This has the effect of outputting each new character to the same location on + the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noAutoscroll'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '271'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Turns off automatic scrolling of the LCD. + @discussion Turns off automatic scrolling of the LCD, this is the default + configuration of the LCD. + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'createChar'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'location'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charmap'; + sec-mem-param-array = '[]'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '289'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Creates a custom character for use on the LCD. + @discussion Create a custom character (glyph) for use on the LCD. + Most chipsets only support up to eight characters of 5x8 pixels. Therefore, + this methods has been limited to locations (numbered 0 to 7). + + The appearance of each custom character is specified by an array of eight + bytes, one for each row. The five least significant bits of each byte + determine the pixels in that row. To display a custom character on screen, + write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. + + @param location: LCD memory location of the character to create + (0 to 7) + @param charmap: the bitmap array representing each row of the character. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'setCursor'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'col'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'row'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '300'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Position the LCD cursor. + @discussion Sets the position of the LCD cursor. Set the location at which + subsequent text written to the LCD will be displayed. + + @param col LCD column + @param row LCD row - line. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'command'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '314'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a command to the LCD. + @discussion This method sends a command to the LCD by setting the Register + select line of the LCD. + + This command shouldn't be used to drive the LCD, only to implement any other + feature that is not available on this library. + + @param value Command value to send to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1acf471f0d9fea7ea3f5c3279519c8b32c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +size_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '327'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Writes to the LCD. + @discussion This method writes character to the LCD in the current cursor + position. + + This is the virtual write method, implemented in the Print class, therefore + all Print class methods will end up calling this method. + + @param value Value to write to the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_l_c_d_1a121fac7d916284d71af8b1fdd9ade2f6'; + sec-mem-virt = pure-virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '342'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD. This is a pure abstract + method, therefore, it is implementation dependent of each derived class how + to physically write to the LCD. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'protected-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displayfunction'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '349'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaycontrol'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '351'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_displaymode'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '353'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; + sec-mem-virt = normal; + sec-mem-prot = protected; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_numlines'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + sec-mem-desc-line = '354'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + cp-fileline = '95'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 2; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 3; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + node = { + node-id = 4; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '2'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal'; + cp-name = 'LiquidCrystal'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '50'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 8 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '53'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '62'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract 4 bit LCD constructors. + @discussion Defines the pin assignment that the LCD will have. + The constructor does not initialize the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '64'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1adb5f37d69809ed7c0772c74a4adff19b'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '79'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + @param cols: the number of columns that the display has + @param rows: the number of rows that the display has + @param charsize: size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '93'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value Value to send to the LCD. + @result mode LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'fourbitmode'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rs'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rw'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'enable'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd0'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd1'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd2'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd3'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd4'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd5'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd6'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'd7'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '105'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD pin allocation + @discussion Initializes the LCD pin allocation and configuration. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1adebd21f2955b1e193a6d24367833fd63'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write8bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '112'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 8 bit value to the LCD. + @discussion Writes 8 bits to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a52837217db49272eea03c9056cab36a8'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '119'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '127'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rs_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '129'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rw_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '130'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_enable_pin'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '131'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_data_pins'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + cp-fileline = '40'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 7; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 6; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '7'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 9; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 8; + node-label = 'LiquidCrystal'; + node-link = { + node-link-id = 'class_liquid_crystal'; + }; + node-child = { + child-id = '9'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +class = { + cp-id = 'class_liquid_crystal___i2_c'; + cp-name = 'LiquidCrystal_I2C'; + cp-ref = { + ref-type = base; + ref-id = 'class_l_c_d'; + ref-prot = public; + ref-virt = non-virtual; + }; + cp-section = { + sec-kind = 'public-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'LiquidCrystal_I2C'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'lcd_Addr'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '84'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Class constructor. + @discussion Initializes class variables and defines the I2C address of the + LCD. The constructor does not initialize the LCD. + + @param lcd_Addr: I2C address of the IO expansion module. For I2CLCDextraIO, + the address can be configured using the on board jumpers. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'begin'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'cols'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'rows'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'charsize'; + sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ +LCD_5x8DOTS +_EnD_oF_dEf_TeXt_; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '98'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract LCD initialization. + @discussion Initializes the LCD to a given size (col, row). This methods + initializes the LCD, therefore, it MUST be called prior to using any other + method from this class. + + @param cols: the number of columns that the display has + @param rows: the number of rows that the display has + @param charsize: size of the characters of the LCD: LCD_5x8DOTS or + LCD_5x10DOTS. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; + sec-mem-virt = virtual; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +virtual void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'send'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-declname = 'mode'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '112'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Send a particular value to the LCD. + @discussion Sends a particular value to the LCD for writing to the LCD or + as an LCD command. + + Users should never call this method. + + @param value: Value to send to the LCD. + @result mode: LOW - write to the LCD CGRAM, HIGH - write a command to + the LCD. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a576f1f5813f55f34333d6d7e9fe53ad3'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'noBacklight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '122'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-off the LCD backlight. + @discussion Switch-off the LCD backlight, this method is not supported by + the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a9f296e0d26f8b6a4509d8d4b9d738c03'; + sec-mem-virt = normal; + sec-mem-prot = public; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'backlight'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '132'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @function + @abstract Switch-on the LCD backlight. + @discussion Switch-on the LCD backlight, this method is not supported by + the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight + + @param none +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-func'; + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +int +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'init'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '142'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Initializes the LCD class + @discussion Initializes the LCD class and IO expansion module. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1aebb0b9f000b94cc3ab026e0154d6ecef'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'write4bits'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = 'value'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '149'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes an 4 bit value to the LCD. + @discussion Writes 4 bits (the least significant) to the LCD control data lines. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'pulseEnable'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = '_data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '157'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Pulse the LCD enable line (En). + @discussion Sends a pulse of 1 uS to the Enable pin to execute an command + or write operation. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'function'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a4c63780ceef67e90750d3e4bbdb83402'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +void +_EnD_oF_dEf_TeXt_; + sec-mem-name = 'expanderWrite'; + sec-mem-param = { + sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-param-defname = '_data'; + }; /* sec-mem-param--param */ + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '165'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @method + @abstract Writes to the expansion module. + @discussion Writes a byte to the IO expansion module. This will be applied + to all its outputs. +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-section = { + sec-kind = 'private-attrib'; + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_Addr'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '167'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af99934fdb39403e02d68981ad8366e6b'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_cols'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '168'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adb3edf6c68b018a37293a926c4816127'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_rows'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '169'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1af63a2b732d345d55abfcb83bf962c8d3'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +uint8_t +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_backlightval'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '170'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + sec-member = { + sec-mem-kind = 'variable'; + sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; + sec-mem-virt = normal; + sec-mem-prot = private; + sec-mem-type = <<_EnD_oF_dEf_TeXt_ +I2CIO +_EnD_oF_dEf_TeXt_; + sec-mem-name = '_i2cio'; + sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + sec-mem-desc-line = '171'; + sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* sec-member */ + }; /* cp-section */ + cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + cp-fileline = '72'; + cp-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 11; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 10; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '11'; + relation = public-inheritance; + }; /* node-child */ + }; /* node */ + +_EnD_oF_dEf_TeXt_; + cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ + node = { + node-id = 13; + node-label = 'LCD'; + node-link = { + node-link-id = 'class_l_c_d'; + }; + }; /* node */ + node = { + node-id = 12; + node-label = 'LiquidCrystal_I2C'; + node-link = { + node-link-id = 'class_liquid_crystal___i2_c'; + }; + node-child = { + child-id = '13'; + relation = public-inheritance; + }; /* node-child */ + node-child = { + child-id = '14'; + relation = usage; + edgelabel = <<_EnD_oF_dEf_TeXt_ +_i2cio +_EnD_oF_dEf_TeXt_; + }; /* node-child */ + }; /* node */ + node = { + node-id = 14; + node-label = 'I2CIO'; + node-link = { + node-link-id = 'class_i2_c_i_o'; + }; + }; /* node */ + +_EnD_oF_dEf_TeXt_; +}; /* class */ +file = { + file-id = '_i2_c_i_o_8cpp'; + file-name = 'I2CIO.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_i2_c_i_o_8h'; + file-name = 'I2CIO.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = '_I2CIO_VERSION'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +"1.0.0" +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + define-mem-desc-line = '34'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8cpp'; + file-name = 'LCD.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_l_c_d_8h'; + file-name = 'LCD.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CLEARDISPLAY'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '53'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract All these definitions shouldn't be used unless you are writing + a driver. + @discussion All these definitions are for driver implementation only and + shouldn't be used by applications. +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_RETURNHOME'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '54'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYMODESET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '55'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYCONTROL'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '56'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORSHIFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '57'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_FUNCTIONSET'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x20 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '58'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETCGRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x40 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '59'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_SETDDRAMADDR'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '60'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYRIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '64'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYLEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '65'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '66'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '67'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '71'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '72'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x02 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '73'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSOROFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '74'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKON'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x01 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '75'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BLINKOFF'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '76'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_DISPLAYMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '80'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_CURSORMOVE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '81'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVERIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '82'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_MOVELEFT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '83'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_8BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x10 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '87'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_4BITMODE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '88'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_2LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x08 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '89'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_1LINE'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '90'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x10DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x04 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '91'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_5x8DOTS'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + define-mem-desc-line = '92'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8cpp'; + file-name = 'LiquidCrystal.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal_8h'; + file-name = 'LiquidCrystal.h'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8cpp'; + file-name = 'LiquidCrystal_I2C.cpp'; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ +file = { + file-id = '_liquid_crystal___i2_c_8h'; + file-name = 'LiquidCrystal_I2C.h'; + define = { + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1ac059d24dfe9c1e1f7c07cb7869a1833b'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_BACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x00 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '41'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a65fa786d6e31fe8b1aa51784a9736581'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'LCD_NOBACKLIGHT'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +0x80 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '42'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1ab5ef25ebfe582f7bf0d93e2770548e2c'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'En'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B01000000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '54'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @warning These definitions will have to be changed should the IOExpander be + connected differently to this default. + + + @defined + @abstract Enable bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Enable +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a98b6a2661a04ebbc1b3f38da70306814'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'Rw'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B00100000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '61'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Read/Write bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Rw pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + define-member = { + define-mem-kind = 'define'; + define-mem-id = '_liquid_crystal___i2_c_8h_1a345d1a871beb9e772c3bf9ef75412bb5'; + define-mem-virt = normal; + define-mem-prot = public; + define-mem-name = 'Rs'; + define-mem-initializer = <<_EnD_oF_dEf_TeXt_ +B00010000 +_EnD_oF_dEf_TeXt_; + define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + define-mem-desc-line = '68'; + define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + define-mem-documentation = <<_EnD_oF_dEf_TeXt_ + @defined + @abstract Register bit of the LCD + @discussion Defines the IO of the expander connected to the LCD Register select pin +_EnD_oF_dEf_TeXt_; + }; /* define-member */ + }; + file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; + file-first-line = '1'; + file-briefdesc = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; + file-documentation = <<_EnD_oF_dEf_TeXt_ + +_EnD_oF_dEf_TeXt_; +}; /* file */ diff --git a/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp.html b/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp.html new file mode 100644 index 0000000..06d5bac --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp.html @@ -0,0 +1,549 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp File Reference
+
+
+
#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + +

+Functions

int fio_digitalRead (fio_register pinRegister, uint8_t pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
+
+
+

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

+
Parameters:
+ + + +
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
+
+
+
Returns:
Value read from pin
+ +

Definition at line 95 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
+
+
+

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

+
Parameters:
+ + + + +
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
+
+
+ +

Definition at line 76 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_bit fio_pinToBit (uint8_t pin)
+
+
+

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Bit
+ +

Definition at line 65 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_register fio_pinToInputRegister (uint8_t pin)
+
+
+

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 52 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
+
+
+

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 35 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
+
+
+

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
+
+
+ +

Definition at line 159 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
+
+
+

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
+
+
+ +

Definition at line 108 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + +
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 264 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 190 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
+
+
+ +

Definition at line 181 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void fio_shiftOut1_init (uint8_t pin)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + +
pin[in]digital pin
+
+
+ +

Definition at line 176 of file FastIO.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html new file mode 100644 index 0000000..af9f776 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_fast_i_o_8cpp_source.html @@ -0,0 +1,351 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Florian Fida on 20/01/12
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //        http://creativecommons.org/licenses/by-sa/3.0/
+00006 //
+00007 // This software is furnished "as is", without technical support, and with no
+00008 // warranty, express or implied, as to its usefulness for any purpose.
+00009 // ---------------------------------------------------------------------------
+00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
+00011 // (http://www.romanblack.com/shift1.htm)
+00012 //
+00013 // Thread Safe: No
+00014 // Extendable: Yes
+00015 //
+00016 // @file FastIO.h
+00017 // This file implements basic fast IO routines.
+00018 // 
+00019 // @brief 
+00020 //
+00021 // @version API 1.0.0
+00022 //
+00023 // @author Florian Fida -
+00024 //
+00025 // 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster
+00026 //
+00027 // @todo:
+00028 //  support chipkit:
+00029 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
+00030 //   cores/pic32/wiring_digital.c)
+00031 // ---------------------------------------------------------------------------
+00032 #include "FastIO.h"
+00033 
+00034 
+00035 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state)
+00036 {
+00037         pinMode(pin, OUTPUT);
+00038    
+00039         if(initial_state != SKIP) 
+00040    {
+00041       digitalWrite(pin, initial_state); // also turns off pwm timer
+00042    }
+00043 #ifdef FIO_FALLBACK
+00044         //  just wasting memory if not using fast io...
+00045         return 0;
+00046 #else
+00047         return portOutputRegister(digitalPinToPort(pin));
+00048 #endif
+00049 }
+00050 
+00051 
+00052 fio_register fio_pinToInputRegister(uint8_t pin)
+00053 {
+00054         pinMode(pin, INPUT);
+00055         digitalWrite(pin, LOW); // also turns off pwm timer and pullup
+00056 #ifdef FIO_FALLBACK
+00057         //  just wasting memory if not using fast io...
+00058         return 0;
+00059 #else
+00060         return portInputRegister(digitalPinToPort(pin));
+00061 #endif
+00062 }
+00063 
+00064 
+00065 fio_bit fio_pinToBit(uint8_t pin)
+00066 {
+00067 #ifdef FIO_FALLBACK
+00068         // (ab)use the bit variable to store the pin
+00069         return pin;
+00070 #else
+00071         return digitalPinToBitMask(pin);
+00072 #endif
+00073 }
+00074 
+00075 
+00076 void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) 
+00077 {
+00078 #ifdef FIO_FALLBACK
+00079         digitalWrite(pinBit, value);
+00080 #else
+00081    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00082    {
+00083       if(value == LOW)
+00084       {
+00085          fio_digitalWrite_LOW(pinRegister,pinBit);
+00086       }
+00087       else
+00088       {
+00089          fio_digitalWrite_HIGH(pinRegister,pinBit);
+00090       }
+00091    }
+00092 #endif
+00093 }
+00094 
+00095 int fio_digitalRead(fio_register pinRegister, uint8_t pinBit)
+00096 {
+00097 #ifdef FIO_FALLBACK
+00098         return digitalRead (pinBit);
+00099 #else
+00100         if (*pinRegister & pinBit)
+00101    {
+00102       return HIGH;
+00103    }
+00104         return LOW;
+00105 #endif
+00106 }
+00107 
+00108 void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, 
+00109                    fio_register clockRegister, fio_bit clockBit, 
+00110                    uint8_t value, uint8_t bitOrder)
+00111 {
+00112         // # disable interrupts
+00113         int8_t i;
+00114    
+00115         if(bitOrder == LSBFIRST)
+00116         {
+00117                 for(i = 0; i < 8; i++)
+00118                 {
+00119                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00120                         {
+00121                                 if(value & 1)
+00122             {
+00123                fio_digitalWrite_HIGH(dataRegister, dataBit);
+00124                                 }
+00125             else
+00126             {
+00127                fio_digitalWrite_LOW(dataRegister, dataBit);
+00128             }
+00129             value >>= 1;
+00130                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
+00131                                 fio_digitalWrite_LOW (clockRegister,clockBit);
+00132                         }
+00133                 }
+00134       
+00135         }
+00136         else
+00137         {
+00138                 for(i = 0; i < 8; i++)
+00139                 {
+00140                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00141                         {
+00142                                 if(value & 0x80)
+00143             {
+00144                fio_digitalWrite_HIGH(dataRegister, dataBit);
+00145                                 }
+00146             else
+00147             {
+00148                fio_digitalWrite_LOW(dataRegister, dataBit);
+00149             }
+00150                                 value <<= 1;
+00151                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
+00152                                 fio_digitalWrite_LOW (clockRegister,clockBit);
+00153                         }
+00154                 }
+00155         }
+00156 }
+00157 
+00158 
+00159 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, 
+00160                   fio_register clockRegister, fio_bit clockBit)
+00161 {
+00162    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00163    {
+00164       // shift out 0x0 (B00000000) fast, byte order is irrelevant
+00165       fio_digitalWrite_LOW (dataRegister, dataBit);
+00166       
+00167       for(uint8_t i = 0; i<8; ++i)
+00168       {
+00169          fio_digitalWrite_HIGH (clockRegister, clockBit);
+00170          fio_digitalWrite_SWITCH (clockRegister, clockBit);
+00171       }
+00172    }
+00173 }
+00174 
+00175 
+00176 void fio_shiftOut1_init(uint8_t pin)
+00177 {
+00178         fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin));
+00179 }
+00180 
+00181 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit)
+00182 {
+00183         // Make sure that capacitors are charged
+00184         // 300us is an educated guess...
+00185         fio_digitalWrite(shift1Register,shift1Bit,HIGH);
+00186         delayMicroseconds(300);
+00187 }
+00188 
+00189 
+00190 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, 
+00191                    boolean noLatch)
+00192 {
+00193         /*
+00194          * this function are based on Shif1 protocol developed by Roman Black 
+00195     *    (http://www.romanblack.com/shift1.htm)
+00196          *
+00197          * test sketches:
+00198          *      http://pastebin.com/raw.php?i=2hnC9v2Z
+00199          *      http://pastebin.com/raw.php?i=bGg4DhXQ
+00200          *      http://pastebin.com/raw.php?i=tg1ZFiM5
+00201          *    http://pastebin.com/raw.php?i=93ExPDD3 - cascading
+00202          * tested with:
+00203          *      TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/
+00204     *                   arduino-one-wire-shift-register-prototype)
+00205          *      7HC595N
+00206          */
+00207    
+00208         // iterate but ignore last bit (is it correct now?)
+00209         for(int8_t i = 7; i>=0; --i)
+00210    {
+00211       
+00212                 // assume that pin is HIGH (smokin' pot all day... :) - requires 
+00213       // initialization
+00214                 if(value & _BV(i))
+00215       {
+00216          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00217          {
+00218             // HIGH = 1 Bit
+00219             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00220             //hold pin LOW for 1us - done! :)
+00221             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
+00222          } // end critical section
+00223          //hold pin HIGH for 15us
+00224          delayMicroseconds(15);
+00225                 }
+00226       else
+00227       {
+00228          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00229          {
+00230             // LOW = 0 Bit
+00231             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00232             // hold pin LOW for 15us
+00233             delayMicroseconds(15);
+00234             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
+00235          } // end critical section
+00236          
+00237          // hold pin HIGH for 30us
+00238          delayMicroseconds(30);         
+00239                 }
+00240                 if(!noLatch && i==1)
+00241       {
+00242          break;
+00243       }
+00244         }
+00245    
+00246         if(!noLatch)
+00247    {
+00248       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00249       {
+00250          // send last bit (=LOW) and Latch command
+00251          fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
+00252       } // end critical section
+00253       delayMicroseconds(199);           // Hold pin low for 200us
+00254       
+00255       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00256       {
+00257          fio_digitalWrite_HIGH(shift1Register,shift1Bit);
+00258       } // end critical section
+00259                 delayMicroseconds(299);   // Hold pin high for 300us and leave it that 
+00260       // way - using explicit HIGH here, just in case.
+00261         }
+00262 }
+00263 
+00264 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch)
+00265 {
+00266         fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch);
+00267 }
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_fast_i_o_8h.html b/libraries/LiquidCrystal/docs/html/_fast_i_o_8h.html new file mode 100644 index 0000000..b840b04 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_fast_i_o_8h.html @@ -0,0 +1,786 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h File Reference
+
+
+
#include <WProgram.h>
+#include <pins_arduino.h>
+#include <inttypes.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Defines

#define ATOMIC_BLOCK(dummy)   if(true)
#define ATOMIC_RESTORESTATE
#define fio_digitalWrite_HIGH(reg, bit)   digitalWrite(bit,HIGH)
#define fio_digitalWrite_LOW(reg, bit)   digitalWrite(bit,LOW)
#define fio_digitalWrite_SWITCH(reg, bit)   digitalWrite(bit, !digitalRead(bit))
#define fio_digitalWrite_SWITCHTO(reg, bit, val)   digitalWrite(bit,val);
#define FIO_FALLBACK
#define SKIP   0x23

+Typedefs

typedef uint8_t fio_bit
typedef uint8_t fio_register

+Functions

int fio_digitalRead (fio_register pinRegister, fio_bit pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state=LOW)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch=false)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch=false)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
+

Define Documentation

+ +
+
+ + + + + + + + +
#define ATOMIC_BLOCK( dummy)   if(true)
+
+
+ +

Definition at line 58 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define ATOMIC_RESTORESTATE
+
+
+ +

Definition at line 59 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_HIGH( reg,
 bit 
)   digitalWrite(bit,HIGH)
+
+
+

This is where the magic happens that makes things fast. Implemented as preprocessor directives to force inlining SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known.

+ +

Definition at line 143 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_LOW( reg,
 bit 
)   digitalWrite(bit,LOW)
+
+
+ +

Definition at line 144 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_SWITCH( reg,
 bit 
)   digitalWrite(bit, !digitalRead(bit))
+
+
+ +

Definition at line 145 of file FastIO.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define fio_digitalWrite_SWITCHTO( reg,
 bit,
 val 
)   digitalWrite(bit,val);
+
+
+ +

Definition at line 146 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define FIO_FALLBACK
+
+
+ +

Definition at line 57 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
#define SKIP   0x23
+
+
+ +

Definition at line 42 of file FastIO.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t fio_bit
+
+
+ +

Definition at line 60 of file FastIO.h.

+ +
+
+ +
+
+ + + + +
typedef uint8_t fio_register
+
+
+ +

Definition at line 61 of file FastIO.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
+
+
+

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

+
Parameters:
+ + + +
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
+
+
+
Returns:
Value read from pin
+ +

Definition at line 95 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
+
+
+

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

+
Parameters:
+ + + + +
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
+
+
+ +

Definition at line 76 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_bit fio_pinToBit (uint8_t pin)
+
+
+

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Bit
+ +

Definition at line 65 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
fio_register fio_pinToInputRegister (uint8_t pin)
+
+
+

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 52 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
+
+
+

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

+
Parameters:
+ + +
pin[in]Number of a digital pin
+
+
+
Returns:
Register
+ +

Definition at line 35 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
+
+
+

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
+
+
+ +

Definition at line 159 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
+
+
+

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

+
Parameters:
+ + + + + + +
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
+
+
+ +

Definition at line 108 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 190 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
+
+
+

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

+
Parameters:
+ + + +
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
+
+
+ +

Definition at line 264 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + + +
shift1Register[in]pins register
shift1Bit[in]pins bit
+
+
+ +

Definition at line 181 of file FastIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void fio_shiftOut1_init (uint8_t pin)
+
+
+

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

+
Parameters:
+ + +
pin[in]digital pin
+
+
+ +

Definition at line 176 of file FastIO.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_fast_i_o_8h_source.html b/libraries/LiquidCrystal/docs/html/_fast_i_o_8h_source.html new file mode 100644 index 0000000..b17f76f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_fast_i_o_8h_source.html @@ -0,0 +1,209 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Florian Fida on 20/01/12
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //        http://creativecommons.org/licenses/by-sa/3.0/
+00006 //
+00007 // This software is furnished "as is", without technical support, and with no
+00008 // warranty, express or implied, as to its usefulness for any purpose.
+00009 // ---------------------------------------------------------------------------
+00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
+00011 // (http://www.romanblack.com/shift1.htm)
+00012 //
+00013 // Thread Safe: No
+00014 // Extendable: Yes
+00015 //
+00016 // @file FastIO.h
+00017 // This file implements basic fast IO routines.
+00018 // 
+00019 // @brief 
+00020 //
+00021 // @version API 1.0.0
+00022 //
+00023 // @author Florian Fida -
+00024 // 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino
+00025 //  support chipkit:
+00026 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
+00027 //   cores/pic32/wiring_digital.c)
+00028 // ---------------------------------------------------------------------------
+00029 #ifndef _FAST_IO_H_
+00030 #define _FAST_IO_H_
+00031 
+00032 #if (ARDUINO <  100)
+00033 #include <WProgram.h>
+00034 #else
+00035 #include <Arduino.h>
+00036 #endif
+00037 
+00038 #include <pins_arduino.h> // pleasing sanguino core
+00039 #include <inttypes.h>
+00040 
+00041 
+00042 #define SKIP 0x23
+00043 
+00044 #if defined (__AVR__)
+00045 #include <util/atomic.h> // for critical section management
+00046 typedef uint8_t fio_bit;
+00047 typedef volatile uint8_t *fio_register;
+00048 
+00049 
+00050 #elif defined(__PIC32MX__)
+00051 typedef uint32_t fio_bit;
+00052 typedef volatile uint32_t *fio_register;
+00053 
+00054 
+00055 #else
+00056 // fallback to Arduino standard digital i/o routines
+00057 #define FIO_FALLBACK
+00058 #define ATOMIC_BLOCK(dummy) if(true)
+00059 #define ATOMIC_RESTORESTATE
+00060 typedef uint8_t fio_bit;
+00061 typedef uint8_t fio_register;
+00062 #endif
+00063 
+00064 
+00065 
+00066 #if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK)
+00067 /*
+00068  * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type
+00069  * Using the portable Arduino interrupts() and noInterrupts()
+00070  */
+00071 #define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet.
+00072 #define ATOMIC_FORCEON uint8_t sreg_save \
+00073               __attribute__((__cleanup__(__iSeiParam))) = 0
+00074 
+00075 static __inline__ uint8_t __iCliRetVal(void)
+00076 {
+00077         noInterrupts();
+00078         return(1);
+00079 }
+00080 static __inline__ void __iSeiParam(const uint8_t *__s)
+00081 {
+00082         interrupts();
+00083 }
+00084 #define ATOMIC_BLOCK(type) for(type,  __Todo = __iCliRetVal(); __Todo; __Todo = 0)
+00085 
+00086 #endif // end of block to create compatible ATOMIC_BLOCK()
+00087 
+00088 
+00089 
+00097 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
+00098 
+00106 fio_register fio_pinToInputRegister(uint8_t pin);
+00107 
+00115 fio_bit fio_pinToBit(uint8_t pin);
+00116 
+00117 
+00127 // __attribute__ ((always_inline)) /* let the optimizer decide that for now */
+00128 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
+00129 
+00136 #ifndef FIO_FALLBACK
+00137 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
+00138 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
+00139 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
+00140 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
+00141 #else
+00142 // reg -> dummy NULL, bit -> pin
+00143 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
+00144 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
+00145 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
+00146 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
+00147 #endif
+00148 
+00158 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
+00159 
+00171 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, 
+00172                   fio_bit clockBit, uint8_t value, uint8_t bitOrder );
+00173 
+00184 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
+00185 
+00194 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false);
+00202 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false);
+00210 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
+00217 void fio_shiftOut1_init(uint8_t pin);
+00218 
+00219 #endif // FAST_IO_H
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html new file mode 100644 index 0000000..36e213d --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp.html @@ -0,0 +1,92 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include <../Wire/Wire.h>
+#include "I2CIO.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html new file mode 100644 index 0000000..332da7b --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8cpp_source.html @@ -0,0 +1,282 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file I2CIO.h
+00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
+00014 // chip.
+00015 // 
+00016 // @brief 
+00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
+00018 // The library implements basic IO general methods to configure IO pin direction
+00019 // read and write uint8_t operations and basic pin level routines to set or read
+00020 // a particular IO port.
+00021 //
+00022 //
+00023 // @version API 1.0.0
+00024 //
+00025 // @author F. Malpartida - fmalpartida@gmail.com
+00026 // ---------------------------------------------------------------------------
+00027 #if (ARDUINO <  100)
+00028 #include <WProgram.h>
+00029 #else
+00030 #include <Arduino.h>
+00031 #endif
+00032 
+00033 #include <inttypes.h>
+00034 
+00035 #include <../Wire/Wire.h>
+00036 #include "I2CIO.h"
+00037 
+00038 // CLASS VARIABLES
+00039 // ---------------------------------------------------------------------------
+00040 
+00041 
+00042 // CONSTRUCTOR
+00043 // ---------------------------------------------------------------------------
+00044 I2CIO::I2CIO ( )
+00045 {
+00046    _i2cAddr     = 0x0;
+00047    _dirMask     = 0xFF;    // mark all as INPUTs
+00048    _shadow      = 0x0;     // no values set
+00049    _initialised = false;
+00050 }
+00051 
+00052 // PUBLIC METHODS
+00053 // ---------------------------------------------------------------------------
+00054 
+00055 //
+00056 // begin
+00057 int I2CIO::begin (  uint8_t i2cAddr )
+00058 {
+00059    _i2cAddr = i2cAddr;
+00060    
+00061    Wire.begin ( );
+00062       
+00063    _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
+00064 
+00065 #if (ARDUINO <  100)
+00066    _shadow = Wire.receive ();
+00067 #else
+00068    _shadow = Wire.read (); // Remove the byte read don't need it.
+00069 #endif
+00070    
+00071    return ( _initialised );
+00072 }
+00073 
+00074 //
+00075 // pinMode
+00076 void I2CIO::pinMode ( uint8_t pin, uint8_t dir )
+00077 {
+00078    if ( _initialised )
+00079    {
+00080       if ( OUTPUT == dir )
+00081       {
+00082          _dirMask &= ~( 1 << pin );
+00083       }
+00084       else 
+00085       {
+00086          _dirMask |= ( 1 << pin );
+00087       }
+00088    }
+00089 }
+00090 
+00091 //
+00092 // portMode
+00093 void I2CIO::portMode ( uint8_t dir )
+00094 {
+00095    
+00096    if ( _initialised )
+00097    {
+00098       if ( dir == INPUT )
+00099       {
+00100          _dirMask = 0xFF;
+00101       }
+00102       else
+00103       {
+00104          _dirMask = 0x00;
+00105       }
+00106    }
+00107 }
+00108 
+00109 //
+00110 // read
+00111 uint8_t I2CIO::read ( void )
+00112 {
+00113    uint8_t retVal = 0;
+00114    
+00115    if ( _initialised )
+00116    {
+00117       Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
+00118 #if (ARDUINO <  100)
+00119       retVal = ( _dirMask & Wire.receive ( ) );
+00120 #else
+00121       retVal = ( _dirMask & Wire.read ( ) );
+00122 #endif      
+00123       
+00124    }
+00125    return ( retVal );
+00126 }
+00127 
+00128 //
+00129 // write
+00130 int I2CIO::write ( uint8_t value )
+00131 {
+00132    int status = 0;
+00133    
+00134    if ( _initialised )
+00135    {
+00136       // Only write HIGH the values of the ports that have been initialised as
+00137       // outputs updating the output shadow of the device
+00138       _shadow = ( value & ~(_dirMask) );
+00139    
+00140       Wire.beginTransmission ( _i2cAddr );
+00141 #if (ARDUINO <  100)
+00142       Wire.send ( _shadow );
+00143 #else
+00144       Wire.write ( _shadow );
+00145 #endif  
+00146       status = Wire.endTransmission ();
+00147    }
+00148    return ( (status == 0) );
+00149 }
+00150 
+00151 //
+00152 // digitalRead
+00153 uint8_t I2CIO::digitalRead ( uint8_t pin )
+00154 {
+00155    uint8_t pinVal = 0;
+00156    
+00157    // Check if initialised and that the pin is within range of the device
+00158    // -------------------------------------------------------------------
+00159    if ( ( _initialised ) && ( pin <= 7 ) )
+00160    {
+00161       // Remove the values which are not inputs and get the value of the pin
+00162       pinVal = this->read() & _dirMask;
+00163       pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value
+00164    }
+00165    return (pinVal);
+00166 }
+00167 
+00168 //
+00169 // digitalWrite
+00170 int I2CIO::digitalWrite ( uint8_t pin, uint8_t level )
+00171 {
+00172    uint8_t writeVal;
+00173    int status = 0;
+00174    
+00175    // Check if initialised and that the pin is within range of the device
+00176    // -------------------------------------------------------------------
+00177    if ( ( _initialised ) && ( pin <= 7 ) )
+00178    {
+00179       // Only write to HIGH the port if the port has been configured as
+00180       // an OUTPUT pin. Add the new state of the pin to the shadow
+00181       writeVal = ( 1 << pin ) & ~_dirMask;
+00182       if ( level == HIGH )
+00183       {
+00184          _shadow |= writeVal;
+00185                                                       
+00186       }
+00187       else 
+00188       {
+00189          _shadow &= ~writeVal;
+00190       }
+00191       status = this->write ( _shadow );
+00192    }
+00193    return ( status );
+00194 }
+00195 
+00196 //
+00197 // PRIVATE METHODS
+00198 // ---------------------------------------------------------------------------
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h.html b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h.html new file mode 100644 index 0000000..be27c2c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h.html @@ -0,0 +1,114 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h File Reference
+
+
+
#include <inttypes.h>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  I2CIO

+Defines

#define _I2CIO_VERSION   "1.0.0"
+

Define Documentation

+ +
+
+ + + + +
#define _I2CIO_VERSION   "1.0.0"
+
+
+ +

Definition at line 32 of file I2CIO.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html new file mode 100644 index 0000000..23d77fd --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_i2_c_i_o_8h_source.html @@ -0,0 +1,147 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file I2CIO.h
+00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
+00014 // chip.
+00015 // 
+00016 // @brief 
+00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
+00018 // The library implements basic IO general methods to configure IO pin direction
+00019 // read and write uint8_t operations and basic pin level routines to set or read
+00020 // a particular IO port.
+00021 //
+00022 // @version API 1.0.0
+00023 //
+00024 // @author F. Malpartida - fmalpartida@gmail.com
+00025 // ---------------------------------------------------------------------------
+00026 
+00027 #ifndef _I2CIO_H_
+00028 #define _I2CIO_H_
+00029 
+00030 #include <inttypes.h>
+00031 
+00032 #define _I2CIO_VERSION "1.0.0"
+00033 
+00041 class I2CIO  
+00042 {
+00043 public:
+00049    I2CIO ( );
+00050    
+00062    int begin ( uint8_t i2cAddr );
+00063    
+00073    void pinMode ( uint8_t pin, uint8_t dir );
+00074    
+00083    void portMode ( uint8_t dir );
+00084    
+00094    uint8_t read ( void );
+00095    
+00108    uint8_t digitalRead ( uint8_t pin );
+00109    
+00123    int write ( uint8_t value );
+00124    
+00136    int digitalWrite ( uint8_t pin, uint8_t level );
+00137    
+00138    
+00139    
+00140 private:
+00141    uint8_t _shadow;      // Shadow output
+00142    uint8_t _dirMask;     // Direction mask
+00143    uint8_t _i2cAddr;     // I2C address
+00144    bool    _initialised; // Initialised object
+00145    
+00146 };
+00147 
+00148 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp.html b/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp.html new file mode 100644 index 0000000..af4ed6f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp.html @@ -0,0 +1,93 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LCD.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html new file mode 100644 index 0000000..275807e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_l_c_d_8cpp_source.html @@ -0,0 +1,431 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LCD.cpp
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the HD44780 library of the
+00018 // Arduino SDK. This library is a refactored version of the one supplied
+00019 // in the Arduino SDK in such a way that it simplifies its extension
+00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ...
+00021 // The original library has been reworked in such a way that this will be
+00022 // the base class implementing all generic methods to command an LCD based
+00023 // on the Hitachi HD44780 and compatible chipsets.
+00024 //
+00025 // This base class is a pure abstract class and needs to be extended. As reference,
+00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
+00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
+00028 //
+00029 //
+00030 // @version API 1.1.0
+00031 //
+00032 // 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0
+00033 // @author F. Malpartida - fmalpartida@gmail.com
+00034 // ---------------------------------------------------------------------------
+00035 #include <stdio.h>
+00036 #include <string.h>
+00037 #include <inttypes.h>
+00038 
+00039 #if (ARDUINO <  100)
+00040 #include <WProgram.h>
+00041 #else
+00042 #include <Arduino.h>
+00043 #endif
+00044 #include "LCD.h"
+00045 
+00046 // CLASS CONSTRUCTORS
+00047 // ---------------------------------------------------------------------------
+00048 // Constructor
+00049 LCD::LCD () 
+00050 {
+00051    
+00052 }
+00053 
+00054 // PUBLIC METHODS
+00055 // ---------------------------------------------------------------------------
+00056 // When the display powers up, it is configured as follows:
+00057 //
+00058 // 1. Display clear
+00059 // 2. Function set: 
+00060 //    DL = 1; 8-bit interface data 
+00061 //    N = 0; 1-line display 
+00062 //    F = 0; 5x8 dot character font 
+00063 // 3. Display on/off control: 
+00064 //    D = 0; Display off 
+00065 //    C = 0; Cursor off 
+00066 //    B = 0; Blinking off 
+00067 // 4. Entry mode set: 
+00068 //    I/D = 1; Increment by 1 
+00069 //    S = 0; No shift 
+00070 //
+00071 // Note, however, that resetting the Arduino doesn't reset the LCD, so we
+00072 // can't assume that its in that state when a sketch starts (and the
+00073 // LiquidCrystal constructor is called).
+00074 // A call to begin() will reinitialize the LCD.
+00075 //
+00076 void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
+00077 {
+00078    if (lines > 1) 
+00079    {
+00080       _displayfunction |= LCD_2LINE;
+00081    }
+00082    _numlines = lines;
+00083    _cols = cols;
+00084    
+00085    // for some 1 line displays you can select a 10 pixel high font
+00086    // ------------------------------------------------------------
+00087    if ((dotsize != LCD_5x8DOTS) && (lines == 1)) 
+00088    {
+00089       _displayfunction |= LCD_5x10DOTS;
+00090    }
+00091    
+00092    // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
+00093    // according to datasheet, we need at least 40ms after power rises above 2.7V
+00094    // before sending commands. Arduino can turn on way before 4.5V so we'll wait 
+00095    // 50
+00096    // ---------------------------------------------------------------------------
+00097    delay (100); // 100ms delay
+00098    
+00099    //put the LCD into 4 bit or 8 bit mode
+00100    // -------------------------------------
+00101    if (! (_displayfunction & LCD_8BITMODE)) 
+00102    {
+00103       // this is according to the hitachi HD44780 datasheet
+00104       // figure 24, pg 46
+00105       
+00106       // we start in 8bit mode, try to set 4 bit mode
+00107       send(0x03, FOUR_BITS);
+00108       delayMicroseconds(4500); // wait min 4.1ms
+00109       
+00110       // second try
+00111       send ( 0x03, FOUR_BITS );
+00112       delayMicroseconds(4500); // wait min 4.1ms
+00113       
+00114       // third go!
+00115       send( 0x03, FOUR_BITS );
+00116       delayMicroseconds(150);
+00117       
+00118       // finally, set to 4-bit interface
+00119       send ( 0x02, FOUR_BITS ); 
+00120    } 
+00121    else 
+00122    {
+00123       // this is according to the hitachi HD44780 datasheet
+00124       // page 45 figure 23
+00125       
+00126       // Send function set command sequence
+00127       command(LCD_FUNCTIONSET | _displayfunction);
+00128       delayMicroseconds(4500);  // wait more than 4.1ms
+00129       
+00130       // second try
+00131       command(LCD_FUNCTIONSET | _displayfunction);
+00132       delayMicroseconds(150);
+00133       
+00134       // third go
+00135       command(LCD_FUNCTIONSET | _displayfunction);
+00136    }
+00137    
+00138    // finally, set # lines, font size, etc.
+00139    command(LCD_FUNCTIONSET | _displayfunction);  
+00140    
+00141    // turn the display on with no cursor or blinking default
+00142    _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;  
+00143    display();
+00144    
+00145    // clear the LCD
+00146    clear();
+00147    
+00148    // Initialize to default text direction (for romance languages)
+00149    _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
+00150    // set the entry mode
+00151    command(LCD_ENTRYMODESET | _displaymode);
+00152 
+00153    backlight();
+00154 
+00155 }
+00156 
+00157 // Common LCD Commands
+00158 // ---------------------------------------------------------------------------
+00159 void LCD::clear()
+00160 {
+00161    command(LCD_CLEARDISPLAY);             // clear display, set cursor position to zero
+00162    delayMicroseconds(HOME_CLEAR_EXEC);    // this command is time consuming
+00163 }
+00164 
+00165 void LCD::home()
+00166 {
+00167    command(LCD_RETURNHOME);             // set cursor position to zero
+00168    delayMicroseconds(HOME_CLEAR_EXEC);  // This command is time consuming
+00169 }
+00170 
+00171 void LCD::setCursor(uint8_t col, uint8_t row)
+00172 {
+00173    const byte row_offsetsDef[]   = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs
+00174    const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs
+00175    
+00176    if ( row >= _numlines ) 
+00177    {
+00178       row = _numlines-1;    // rows start at 0
+00179    }
+00180    
+00181    // 16x4 LCDs have special memory map layout
+00182    // ----------------------------------------
+00183    if ( _cols == 16 && _numlines == 4 )
+00184    {
+00185       command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row]));
+00186    }
+00187    else 
+00188    {
+00189       command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row]));
+00190    }
+00191    
+00192 }
+00193 
+00194 // Turn the display on/off
+00195 void LCD::noDisplay() 
+00196 {
+00197    _displaycontrol &= ~LCD_DISPLAYON;
+00198    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00199 }
+00200 
+00201 void LCD::display() 
+00202 {
+00203    _displaycontrol |= LCD_DISPLAYON;
+00204    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00205 }
+00206 
+00207 // Turns the underline cursor on/off
+00208 void LCD::noCursor() 
+00209 {
+00210    _displaycontrol &= ~LCD_CURSORON;
+00211    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00212 }
+00213 void LCD::cursor() 
+00214 {
+00215    _displaycontrol |= LCD_CURSORON;
+00216    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00217 }
+00218 
+00219 // Turns on/off the blinking cursor
+00220 void LCD::noBlink() 
+00221 {
+00222    _displaycontrol &= ~LCD_BLINKON;
+00223    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00224 }
+00225 
+00226 void LCD::blink() 
+00227 {
+00228    _displaycontrol |= LCD_BLINKON;
+00229    command(LCD_DISPLAYCONTROL | _displaycontrol);
+00230 }
+00231 
+00232 // These commands scroll the display without changing the RAM
+00233 void LCD::scrollDisplayLeft(void) 
+00234 {
+00235    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
+00236 }
+00237 
+00238 void LCD::scrollDisplayRight(void) 
+00239 {
+00240    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
+00241 }
+00242 
+00243 // This is for text that flows Left to Right
+00244 void LCD::leftToRight(void) 
+00245 {
+00246    _displaymode |= LCD_ENTRYLEFT;
+00247    command(LCD_ENTRYMODESET | _displaymode);
+00248 }
+00249 
+00250 // This is for text that flows Right to Left
+00251 void LCD::rightToLeft(void) 
+00252 {
+00253    _displaymode &= ~LCD_ENTRYLEFT;
+00254    command(LCD_ENTRYMODESET | _displaymode);
+00255 }
+00256 
+00257 // This method moves the cursor one space to the right
+00258 void LCD::moveCursorRight(void)
+00259 {
+00260    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT);
+00261 }
+00262 
+00263 // This method moves the cursor one space to the left
+00264 void LCD::moveCursorLeft(void)
+00265 {
+00266    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT);
+00267 }
+00268 
+00269 
+00270 // This will 'right justify' text from the cursor
+00271 void LCD::autoscroll(void) 
+00272 {
+00273    _displaymode |= LCD_ENTRYSHIFTINCREMENT;
+00274    command(LCD_ENTRYMODESET | _displaymode);
+00275 }
+00276 
+00277 // This will 'left justify' text from the cursor
+00278 void LCD::noAutoscroll(void) 
+00279 {
+00280    _displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
+00281    command(LCD_ENTRYMODESET | _displaymode);
+00282 }
+00283 
+00284 // Write to CGRAM of new characters
+00285 void LCD::createChar(uint8_t location, uint8_t charmap[]) 
+00286 {
+00287    location &= 0x7;            // we only have 8 locations 0-7
+00288    
+00289    command(LCD_SETCGRAMADDR | (location << 3));
+00290    delayMicroseconds(30);
+00291    
+00292    for (int i=0; i<8; i++) 
+00293    {
+00294       write(charmap[i]);      // call the virtual write method
+00295       delayMicroseconds(40);
+00296    }
+00297 }
+00298 
+00299 //
+00300 // Switch on the backlight
+00301 void LCD::backlight ( void )
+00302 {
+00303    setBacklight(255);
+00304 }
+00305 
+00306 //
+00307 // Switch off the backlight
+00308 void LCD::noBacklight ( void )
+00309 {
+00310    setBacklight(0);
+00311 }
+00312 
+00313 //
+00314 // Switch fully on the LCD (backlight and LCD)
+00315 void LCD::on ( void )
+00316 {
+00317    display();
+00318    backlight();
+00319 }
+00320 
+00321 //
+00322 // Switch fully off the LCD (backlight and LCD) 
+00323 void LCD::off ( void )
+00324 {
+00325    noBacklight();
+00326    noDisplay();
+00327 }
+00328 
+00329 // General LCD commands - generic methods used by the rest of the commands
+00330 // ---------------------------------------------------------------------------
+00331 void LCD::command(uint8_t value) 
+00332 {
+00333    send(value, COMMAND);
+00334 }
+00335 
+00336 #if (ARDUINO <  100)
+00337 void LCD::write(uint8_t value)
+00338 {
+00339    send(value, DATA);
+00340 }
+00341 #else
+00342 size_t LCD::write(uint8_t value) 
+00343 {
+00344    send(value, DATA);
+00345    return 1;             // assume OK
+00346 }
+00347 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_l_c_d_8h.html b/libraries/LiquidCrystal/docs/html/_l_c_d_8h.html new file mode 100644 index 0000000..19ad58f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_l_c_d_8h.html @@ -0,0 +1,711 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include <Print.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  LCD

+Defines

#define BACKLIGHT_OFF   0
#define BACKLIGHT_ON   255
#define COMMAND   0
#define DATA   1
#define FOUR_BITS   2
#define HOME_CLEAR_EXEC   2000
#define LCD_1LINE   0x00
#define LCD_2LINE   0x08
#define LCD_4BITMODE   0x00
#define LCD_5x10DOTS   0x04
#define LCD_5x8DOTS   0x00
#define LCD_8BITMODE   0x10
#define LCD_BLINKOFF   0x00
#define LCD_BLINKON   0x01
#define LCD_CLEARDISPLAY   0x01
#define LCD_CURSORMOVE   0x00
#define LCD_CURSOROFF   0x00
#define LCD_CURSORON   0x02
#define LCD_CURSORSHIFT   0x10
#define LCD_DISPLAYCONTROL   0x08
#define LCD_DISPLAYMOVE   0x08
#define LCD_DISPLAYOFF   0x00
#define LCD_DISPLAYON   0x04
#define LCD_ENTRYLEFT   0x02
#define LCD_ENTRYMODESET   0x04
#define LCD_ENTRYRIGHT   0x00
#define LCD_ENTRYSHIFTDECREMENT   0x00
#define LCD_ENTRYSHIFTINCREMENT   0x01
#define LCD_FUNCTIONSET   0x20
#define LCD_MOVELEFT   0x00
#define LCD_MOVERIGHT   0x04
#define LCD_RETURNHOME   0x02
#define LCD_SETCGRAMADDR   0x40
#define LCD_SETDDRAMADDR   0x80

+Enumerations

enum  t_backlighPol { POSITIVE, +NEGATIVE + }

+Functions

static void waitUsec (uint16_t uSec)
+

Define Documentation

+ +
+
+ + + + +
#define BACKLIGHT_OFF   0
+
+
+

Backlight off constant declaration Used in combination with the setBacklight to swith off the LCD backlight. setBacklight

+ +

Definition at line 151 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define BACKLIGHT_ON   255
+
+
+

Backlight on constant declaration Used in combination with the setBacklight to swith on the LCD backlight. setBacklight

+ +

Definition at line 159 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define COMMAND   0
+
+
+ +

Definition at line 132 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define DATA   1
+
+
+ +

Definition at line 133 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define FOUR_BITS   2
+
+
+ +

Definition at line 134 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define HOME_CLEAR_EXEC   2000
+
+
+

Defines the duration of the home and clear commands This constant defines the time it takes for the home and clear commands in the LCD - Time in microseconds.

+ +

Definition at line 143 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_1LINE   0x00
+
+
+ +

Definition at line 125 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_2LINE   0x08
+
+
+ +

Definition at line 124 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_4BITMODE   0x00
+
+
+ +

Definition at line 123 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_5x10DOTS   0x04
+
+
+ +

Definition at line 126 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_5x8DOTS   0x00
+
+
+ +

Definition at line 127 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_8BITMODE   0x10
+
+
+ +

Definition at line 122 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_BLINKOFF   0x00
+
+
+ +

Definition at line 111 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_BLINKON   0x01
+
+
+ +

Definition at line 110 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CLEARDISPLAY   0x01
+
+
+

All these definitions shouldn't be used unless you are writing a driver. All these definitions are for driver implementation only and shouldn't be used by applications.

+ +

Definition at line 88 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORMOVE   0x00
+
+
+ +

Definition at line 116 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSOROFF   0x00
+
+
+ +

Definition at line 109 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORON   0x02
+
+
+ +

Definition at line 108 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_CURSORSHIFT   0x10
+
+
+ +

Definition at line 92 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYCONTROL   0x08
+
+
+ +

Definition at line 91 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYMOVE   0x08
+
+
+ +

Definition at line 115 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYOFF   0x00
+
+
+ +

Definition at line 107 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_DISPLAYON   0x04
+
+
+ +

Definition at line 106 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYLEFT   0x02
+
+
+ +

Definition at line 100 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYMODESET   0x04
+
+
+ +

Definition at line 90 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYRIGHT   0x00
+
+
+ +

Definition at line 99 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYSHIFTDECREMENT   0x00
+
+
+ +

Definition at line 102 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_ENTRYSHIFTINCREMENT   0x01
+
+
+ +

Definition at line 101 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_FUNCTIONSET   0x20
+
+
+ +

Definition at line 93 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_MOVELEFT   0x00
+
+
+ +

Definition at line 118 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_MOVERIGHT   0x04
+
+
+ +

Definition at line 117 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_RETURNHOME   0x02
+
+
+ +

Definition at line 89 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_SETCGRAMADDR   0x40
+
+
+ +

Definition at line 94 of file LCD.h.

+ +
+
+ +
+
+ + + + +
#define LCD_SETDDRAMADDR   0x80
+
+
+ +

Definition at line 95 of file LCD.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum t_backlighPol
+
+
+
Enumerator:
+ + +
POSITIVE  +
NEGATIVE  +
+
+
+ +

Definition at line 167 of file LCD.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
static void waitUsec (uint16_t uSec) [inline, static]
+
+
+

Enables disables fast waits for write operations for LCD If defined, the library will avoid doing un-necessary waits. this can be done, because the time taken by Arduino's slow digitalWrite operations. If fast digitalIO operations, comment this line out or undefine the mode.

+

waits for a given time in microseconds (compilation dependent). Waits for a given time defined in microseconds depending on the FAST_MODE define. If the FAST_MODE is defined the call will return inmediatelly.

+
Parameters:
+ + +
uSec[in]time in microseconds.
+
+
+
Returns:
None
+ +

Definition at line 71 of file LCD.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_l_c_d_8h_source.html b/libraries/LiquidCrystal/docs/html/_l_c_d_8h_source.html new file mode 100644 index 0000000..496e98e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_l_c_d_8h_source.html @@ -0,0 +1,301 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LCD.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. This library is a refactored version of the one supplied
+00019 // in the Arduino SDK in such a way that it simplifies its extension
+00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, 
+00021 // The original library has been reworked in such a way that this will be
+00022 // the base class implementing all generic methods to command an LCD based
+00023 // on the Hitachi HD44780 and compatible chipsets.
+00024 //
+00025 // This base class is a pure abstract class and needs to be extended. As reference,
+00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
+00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
+00028 //
+00029 // The functionality provided by this class and its base class is identical
+00030 // to the original functionality of the Arduino LiquidCrystal library.
+00031 //
+00032 // @version API 1.1.0
+00033 //
+00034 //
+00035 // @author F. Malpartida - fmalpartida@gmail.com
+00036 // ---------------------------------------------------------------------------
+00037 #ifndef _LCD_H_
+00038 #define _LCD_H_
+00039 
+00040 #if (ARDUINO <  100)
+00041 #include <WProgram.h>
+00042 #else
+00043 #include <Arduino.h>
+00044 #endif
+00045 
+00046 #include <inttypes.h>
+00047 #include <Print.h>
+00048 
+00049 
+00058 #ifdef __AVR__
+00059 #define FAST_MODE
+00060 #endif
+00061 
+00071 inline static void waitUsec ( uint16_t uSec )
+00072 {
+00073 #ifndef FAST_MODE
+00074    delayMicroseconds ( uSec );
+00075 #endif // FAST_MODE
+00076 }
+00077 
+00078 
+00086 // LCD Commands
+00087 // ---------------------------------------------------------------------------
+00088 #define LCD_CLEARDISPLAY        0x01
+00089 #define LCD_RETURNHOME          0x02
+00090 #define LCD_ENTRYMODESET        0x04
+00091 #define LCD_DISPLAYCONTROL      0x08
+00092 #define LCD_CURSORSHIFT         0x10
+00093 #define LCD_FUNCTIONSET         0x20
+00094 #define LCD_SETCGRAMADDR        0x40
+00095 #define LCD_SETDDRAMADDR        0x80
+00096 
+00097 // flags for display entry mode
+00098 // ---------------------------------------------------------------------------
+00099 #define LCD_ENTRYRIGHT          0x00
+00100 #define LCD_ENTRYLEFT           0x02
+00101 #define LCD_ENTRYSHIFTINCREMENT 0x01
+00102 #define LCD_ENTRYSHIFTDECREMENT 0x00
+00103 
+00104 // flags for display on/off and cursor control
+00105 // ---------------------------------------------------------------------------
+00106 #define LCD_DISPLAYON           0x04
+00107 #define LCD_DISPLAYOFF          0x00
+00108 #define LCD_CURSORON            0x02
+00109 #define LCD_CURSOROFF           0x00
+00110 #define LCD_BLINKON             0x01
+00111 #define LCD_BLINKOFF            0x00
+00112 
+00113 // flags for display/cursor shift
+00114 // ---------------------------------------------------------------------------
+00115 #define LCD_DISPLAYMOVE         0x08
+00116 #define LCD_CURSORMOVE          0x00
+00117 #define LCD_MOVERIGHT           0x04
+00118 #define LCD_MOVELEFT            0x00
+00119 
+00120 // flags for function set
+00121 // ---------------------------------------------------------------------------
+00122 #define LCD_8BITMODE            0x10
+00123 #define LCD_4BITMODE            0x00
+00124 #define LCD_2LINE               0x08
+00125 #define LCD_1LINE               0x00
+00126 #define LCD_5x10DOTS            0x04
+00127 #define LCD_5x8DOTS             0x00
+00128 
+00129 
+00130 // Define COMMAND and DATA LCD Rs (used by send method).
+00131 // ---------------------------------------------------------------------------
+00132 #define COMMAND                 0
+00133 #define DATA                    1
+00134 #define FOUR_BITS               2
+00135 
+00136 
+00143 #define HOME_CLEAR_EXEC      2000
+00144 
+00151 #define BACKLIGHT_OFF           0
+00152 
+00159 #define BACKLIGHT_ON          255
+00160 
+00161 
+00167 typedef enum { POSITIVE, NEGATIVE } t_backlighPol;
+00168 
+00169 class LCD : public Print 
+00170 {
+00171 public:
+00172    
+00179    LCD ( );
+00180    
+00196    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
+00197    
+00208    void clear();
+00209    
+00221    void home();
+00222    
+00231    void noDisplay();
+00232    
+00242    void display();
+00243    
+00250    void noBlink();
+00251    
+00260    void blink();
+00261    
+00268    void noCursor();
+00269    
+00278    void cursor();
+00279    
+00287    void scrollDisplayLeft();
+00288    
+00296    void scrollDisplayRight();
+00297    
+00309    void leftToRight();
+00310    
+00322    void rightToLeft();
+00323    
+00330    void moveCursorLeft();
+00331    
+00332    
+00339    void moveCursorRight();
+00340    
+00354    void autoscroll();
+00355    
+00364    void noAutoscroll();
+00365    
+00382    void createChar(uint8_t location, uint8_t charmap[]);
+00383    
+00393    void setCursor(uint8_t col, uint8_t row);
+00394    
+00402    void backlight ( void );
+00403    
+00411    void noBacklight ( void );
+00412    
+00420    void on ( void );
+00421 
+00429    void off ( void );
+00430    
+00431    //
+00432    // virtual class methods
+00433    // --------------------------------------------------------------------------
+00444    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
+00445    
+00463    virtual void setBacklight ( uint8_t value ) { };
+00464    
+00476 #if (ARDUINO <  100)
+00477    virtual void write(uint8_t value);
+00478 #else
+00479    virtual size_t write(uint8_t value);
+00480 #endif
+00481    
+00482 #if (ARDUINO <  100)
+00483    using Print::write;
+00484 #else
+00485    using Print::write;
+00486 #endif   
+00487    
+00488 protected:
+00489    // Internal LCD variables to control the LCD shared between all derived
+00490    // classes.
+00491    uint8_t _displayfunction;  // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or 
+00492                               // LCD_8BITMODE, LCD_1LINE or LCD_2LINE
+00493    uint8_t _displaycontrol;   // LCD base control command LCD on/off, blink, cursor
+00494                               // all commands are "ored" to its contents.
+00495    uint8_t _displaymode;      // Text entry mode to the LCD
+00496    uint8_t _numlines;         // Number of lines of the LCD, initialized with begin()
+00497    uint8_t _cols;             // Number of columns in the LCD
+00498    t_backlighPol _polarity;   // Backlight polarity
+00499    
+00500 private:
+00513    void command(uint8_t value);
+00514 
+00528 #if (ARDUINO <  100)
+00529    virtual void send(uint8_t value, uint8_t mode) { };
+00530 #else
+00531    virtual void send(uint8_t value, uint8_t mode) = 0;
+00532 #endif
+00533    
+00534 };
+00535 
+00536 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html new file mode 100644 index 0000000..c7ad311 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp.html @@ -0,0 +1,146 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal.h"
+
+

Go to the source code of this file.

+ + + + + +

+Defines

#define LCD_4BIT   1
#define LCD_8BIT   0
#define LCD_NOBACKLIGHT   0xFF
+

Define Documentation

+ +
+
+ + + + +
#define LCD_4BIT   1
+
+
+ +

Definition at line 45 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_8BIT   0
+
+
+ +

Definition at line 46 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0xFF
+
+
+ +

Definition at line 42 of file LiquidCrystal.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html new file mode 100644 index 0000000..1760c1c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8cpp_source.html @@ -0,0 +1,383 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal.cpp
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
+00021 // the LCD (4 bit and 8 bit).
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 // @author F. Malpartida - fmalpartida@gmail.com
+00028 // ---------------------------------------------------------------------------
+00029 #include <stdio.h>
+00030 #include <string.h>
+00031 #include <inttypes.h>
+00032 
+00033 #if (ARDUINO <  100)
+00034 #include <WProgram.h>
+00035 #else
+00036 #include <Arduino.h>
+00037 #endif
+00038 #include "LiquidCrystal.h"
+00039 
+00040 // CONSTANT  definitions
+00041 // ---------------------------------------------------------------------------
+00042 #define LCD_NOBACKLIGHT 0xFF
+00043 
+00044 // LCD driver configuration (4bit or 8bit driver control)
+00045 #define LCD_4BIT                1
+00046 #define LCD_8BIT                0
+00047 
+00048 // STATIC helper functions
+00049 // ---------------------------------------------------------------------------
+00050 
+00051 
+00052 // CONSTRUCTORS
+00053 // ---------------------------------------------------------------------------
+00054 
+00055 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00056                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00057                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00058 {
+00059    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00060 }
+00061 
+00062 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00063                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00064                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00065 {
+00066    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00067 }
+00068 
+00069 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00070                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
+00071 {
+00072    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00073 }
+00074 
+00075 LiquidCrystal::LiquidCrystal(uint8_t rs,  uint8_t enable,
+00076                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
+00077 {
+00078    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00079 }
+00080 
+00081 // Contructors with backlight control
+00082 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00083                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00084                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00085                              uint8_t backlightPin, t_backlighPol pol)
+00086 {
+00087    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00088    setBacklightPin ( backlightPin, pol );
+00089 }
+00090 
+00091 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00092                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00093                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00094                              uint8_t backlightPin, t_backlighPol pol)
+00095 {
+00096    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
+00097    setBacklightPin ( backlightPin, pol );
+00098 }
+00099 
+00100 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00101                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00102                              uint8_t backlightPin, t_backlighPol pol)
+00103 {
+00104    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00105    setBacklightPin ( backlightPin, pol );
+00106 }
+00107 
+00108 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
+00109                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00110                              uint8_t backlightPin, t_backlighPol pol)
+00111 {
+00112    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
+00113    setBacklightPin ( backlightPin, pol );
+00114 }
+00115 
+00116 // PUBLIC METHODS
+00117 // ---------------------------------------------------------------------------
+00118 
+00119 /************ low level data pushing commands **********/
+00120 //
+00121 // send
+00122 void LiquidCrystal::send(uint8_t value, uint8_t mode) 
+00123 {
+00124    // Only interested in COMMAND or DATA
+00125    digitalWrite( _rs_pin, ( mode == DATA ) );
+00126    
+00127    // if there is a RW pin indicated, set it low to Write
+00128    // ---------------------------------------------------
+00129    if (_rw_pin != 255) 
+00130    { 
+00131       digitalWrite(_rw_pin, LOW);
+00132    }
+00133    
+00134    if ( mode != FOUR_BITS )
+00135    {   
+00136       if ( (_displayfunction & LCD_8BITMODE ) )
+00137       {
+00138          writeNbits(value, 8); 
+00139       } 
+00140       else 
+00141       {
+00142          writeNbits ( value >> 4, 4 );
+00143          writeNbits ( value, 4 );
+00144       }
+00145    } 
+00146    else 
+00147    {
+00148       writeNbits ( value, 4 );
+00149    }
+00150    waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD
+00151 }
+00152 
+00153 //
+00154 // setBacklightPin
+00155 void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol )
+00156 {
+00157    pinMode ( pin, OUTPUT );       // Difine the backlight pin as output
+00158    _backlightPin = pin;
+00159    _polarity = pol;
+00160    setBacklight(BACKLIGHT_OFF);   // Set the backlight low by default
+00161 }
+00162 
+00163 //
+00164 // setBackligh
+00165 void LiquidCrystal::setBacklight ( uint8_t value )
+00166 {
+00167    // Check if there is a pin assigned to the backlight
+00168    // ---------------------------------------------------
+00169    if ( _backlightPin != LCD_NOBACKLIGHT )
+00170    {
+00171       // Check if the pin is associated to a timer, i.e. PWM
+00172       // ---------------------------------------------------
+00173       if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER)
+00174       {
+00175          // Check for control polarity inversion
+00176          // ---------------------------------------------------
+00177          if ( _polarity == POSITIVE )
+00178          {
+00179             analogWrite ( _backlightPin, value );
+00180          }
+00181          else 
+00182          {
+00183             analogWrite ( _backlightPin, 255 - value );
+00184          }
+00185       }
+00186       // Not a PWM pin, set the backlight pin for POSI or NEG
+00187       // polarity
+00188       // --------------------------------------------------------
+00189       else if (((value > 0) && (_polarity == POSITIVE)) ||
+00190                ((value == 0) && (_polarity == NEGATIVE)))
+00191       {
+00192          digitalWrite( _backlightPin, HIGH);
+00193       }
+00194       else
+00195       {
+00196          digitalWrite( _backlightPin, LOW);
+00197       }
+00198    }
+00199 }
+00200 
+00201 // PRIVATE METHODS
+00202 // ---------------------------------------------------------------------------
+00203 
+00204 
+00205 // init
+00206 void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
+00207                          uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00208                          uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00209 {
+00210    uint8_t i;
+00211    
+00212    // Initialize the IO pins
+00213    // -----------------------
+00214    
+00215    _rs_pin = rs;
+00216    _rw_pin = rw;
+00217    _enable_pin = enable;
+00218    
+00219    _data_pins[0] = d0;
+00220    _data_pins[1] = d1;
+00221    _data_pins[2] = d2;
+00222    _data_pins[3] = d3; 
+00223    _data_pins[4] = d4;
+00224    _data_pins[5] = d5;
+00225    _data_pins[6] = d6;
+00226    _data_pins[7] = d7;
+00227    
+00228    // Initialize the IO port direction to OUTPUT
+00229    // ------------------------------------------
+00230    
+00231    for ( i = 0; i < 4; i++ )
+00232    {
+00233       pinMode ( _data_pins[i], OUTPUT );
+00234    }
+00235    
+00236    // Initialize the rest of the ports if it is an 8bit controlled LCD
+00237    // ----------------------------------------------------------------
+00238    
+00239    if ( !fourbitmode )
+00240    {
+00241       for ( i = 4; i < 8; i++ )
+00242       {
+00243          pinMode ( _data_pins[i], OUTPUT );
+00244       }
+00245    }
+00246    pinMode(_rs_pin, OUTPUT);
+00247    
+00248    // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
+00249    if (_rw_pin != 255) 
+00250    { 
+00251       pinMode(_rw_pin, OUTPUT);
+00252    }
+00253    
+00254    pinMode(_enable_pin, OUTPUT);
+00255    
+00256    // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS
+00257    // -------------------------------------------------------------------------
+00258    if (fourbitmode)
+00259       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00260    else 
+00261       _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00262    
+00263    // Now we pull both RS and R/W low to begin commands
+00264    digitalWrite(_rs_pin, LOW);
+00265    digitalWrite(_enable_pin, LOW);
+00266    
+00267    if (_rw_pin != 255) 
+00268    { 
+00269       digitalWrite(_rw_pin, LOW);
+00270    }
+00271    
+00272    // Initialise the backlight pin no nothing
+00273    _backlightPin = LCD_NOBACKLIGHT;
+00274    _polarity = POSITIVE;
+00275 }
+00276 
+00277 //
+00278 // pulseEnable
+00279 void LiquidCrystal::pulseEnable(void) 
+00280 {
+00281    // There is no need for the delays, since the digitalWrite operation
+00282    // takes longer.
+00283    digitalWrite(_enable_pin, HIGH);   
+00284    waitUsec(1);          // enable pulse must be > 450ns   
+00285    digitalWrite(_enable_pin, LOW);
+00286 }
+00287 
+00288 //
+00289 // write4bits
+00290 void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) 
+00291 {
+00292    for (uint8_t i = 0; i < numBits; i++) 
+00293    {
+00294       digitalWrite(_data_pins[i], (value >> i) & 0x01);
+00295    }
+00296    pulseEnable();
+00297 }
+00298 
+00299 
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h.html new file mode 100644 index 0000000..9a8ca65 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h.html @@ -0,0 +1,117 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  LiquidCrystal

+Defines

#define EXEC_TIME   37
+

Define Documentation

+ +
+
+ + + + +
#define EXEC_TIME   37
+
+
+

Command execution time on the LCD. This defines how long a command takes to execute by the LCD. The time is expressed in micro-seconds.

+ +

Definition at line 42 of file LiquidCrystal.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html new file mode 100644 index 0000000..6df7f1e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal_8h_source.html @@ -0,0 +1,176 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
+00021 // the LCD (4 bit and 8 bit).
+00022 //
+00023 //
+00024 //
+00025 // @author F. Malpartida - fmalpartida@gmail.com
+00026 // ---------------------------------------------------------------------------
+00027 #ifndef LiquidCrystal_4bit_h
+00028 #define LiquidCrystal_4bit_h
+00029 
+00030 #include <inttypes.h>
+00031 
+00032 #include "LCD.h"
+00033 #include "FastIO.h"
+00034 
+00035 
+00042 #define EXEC_TIME 37
+00043 
+00044 class LiquidCrystal : public LCD
+00045 {
+00046 public:
+00053    LiquidCrystal(uint8_t rs, uint8_t enable,
+00054                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00055                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00056    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00057                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00058                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00059    
+00060    // Constructors with backlight control
+00061    LiquidCrystal(uint8_t rs, uint8_t enable,
+00062                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00063                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00064                  uint8_t backlightPin, t_backlighPol pol);
+00065    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00066                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00067                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00068                  uint8_t backlightPin, t_backlighPol pol);   
+00075    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00076                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
+00077    LiquidCrystal(uint8_t rs, uint8_t enable,
+00078                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
+00079    
+00080    // Constructors with backlight control
+00081    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
+00082                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00083                  uint8_t backlightPin, t_backlighPol pol);
+00084    LiquidCrystal(uint8_t rs, uint8_t enable,
+00085                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00086                  uint8_t backlightPin, t_backlighPol pol);
+00099    virtual void send(uint8_t value, uint8_t mode);
+00100    
+00109    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
+00110    
+00125    void setBacklight ( uint8_t value );
+00126    
+00127 private:
+00128    
+00134    void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
+00135              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
+00136              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00137    
+00144    void writeNbits(uint8_t value, uint8_t numBits);
+00145    
+00152    void pulseEnable();
+00153    
+00154    uint8_t _rs_pin;       // LOW: command.  HIGH: character.
+00155    uint8_t _rw_pin;       // LOW: write to LCD.  HIGH: read from LCD.
+00156    uint8_t _enable_pin;   // activated by a HIGH pulse.
+00157    uint8_t _data_pins[8]; // Data pins.
+00158    uint8_t _backlightPin; // Pin associated to control the LCD backlight
+00159 };
+00160 
+00161 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html new file mode 100644 index 0000000..8bc6c3b --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp.html @@ -0,0 +1,247 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp File Reference
+
+
+
#include <WProgram.h>
+#include <inttypes.h>
+#include "I2CIO.h"
+#include "LiquidCrystal_I2C.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   6
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   4
#define RW   5
+

Define Documentation

+ +
+
+ + + + +
#define D4   0
+
+
+

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

+ +

Definition at line 88 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D5   1
+
+
+ +

Definition at line 89 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D6   2
+
+
+ +

Definition at line 90 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define D7   3
+
+
+ +

Definition at line 91 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define EN   6
+
+
+

Enable bit of the LCD Defines the IO of the expander connected to the LCD Enable

+ +

Definition at line 66 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_BACKLIGHT   0xFF
+
+
+

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

+ +

Definition at line 55 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0x00
+
+
+

LCD_NOBACKLIGHT NO BACKLIGHT MASK

+ +

Definition at line 48 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define RS   4
+
+
+

Register bit of the LCD Defines the IO of the expander connected to the LCD Register select pin

+ +

Definition at line 80 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + +
#define RW   5
+
+
+

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD Rw pin

+ +

Definition at line 73 of file LiquidCrystal_I2C.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html new file mode 100644 index 0000000..2820ddd --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8cpp_source.html @@ -0,0 +1,344 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_I2C.c
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using an I2C IO extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
+00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 //
+00028 // @author F. Malpartida - fmalpartida@gmail.com
+00029 // ---------------------------------------------------------------------------
+00030 #if (ARDUINO <  100)
+00031 #include <WProgram.h>
+00032 #else
+00033 #include <Arduino.h>
+00034 #endif
+00035 #include <inttypes.h>
+00036 #include "I2CIO.h"
+00037 #include "LiquidCrystal_I2C.h"
+00038 
+00039 // CONSTANT  definitions
+00040 // ---------------------------------------------------------------------------
+00041 
+00042 // flags for backlight control
+00048 #define LCD_NOBACKLIGHT 0x00
+00049 
+00055 #define LCD_BACKLIGHT   0xFF
+00056 
+00057 
+00058 // Default library configuration parameters used by class constructor with
+00059 // only the I2C address field.
+00060 // ---------------------------------------------------------------------------
+00066 #define EN 6  // Enable bit
+00067 
+00073 #define RW 5  // Read/Write bit
+00074 
+00080 #define RS 4  // Register select bit
+00081 
+00088 #define D4 0
+00089 #define D5 1
+00090 #define D6 2
+00091 #define D7 3
+00092 
+00093 
+00094 // CONSTRUCTORS
+00095 // ---------------------------------------------------------------------------
+00096 LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr )
+00097 {
+00098    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
+00099 }
+00100 
+00101 
+00102 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, 
+00103                                      t_backlighPol pol = POSITIVE)
+00104 {
+00105    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
+00106    setBacklightPin(backlighPin, pol);
+00107 }
+00108 
+00109 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00110                                      uint8_t Rs)
+00111 {
+00112    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
+00113 }
+00114 
+00115 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00116                                      uint8_t Rs, uint8_t backlighPin, 
+00117                                      t_backlighPol pol = POSITIVE)
+00118 {
+00119    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
+00120    setBacklightPin(backlighPin, pol);
+00121 }
+00122 
+00123 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00124                                      uint8_t Rs, uint8_t d4, uint8_t d5,
+00125                                      uint8_t d6, uint8_t d7 )
+00126 {
+00127    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
+00128 }
+00129 
+00130 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
+00131                                      uint8_t Rs, uint8_t d4, uint8_t d5,
+00132                                      uint8_t d6, uint8_t d7, uint8_t backlighPin, 
+00133                                      t_backlighPol pol = POSITIVE )
+00134 {
+00135    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
+00136    setBacklightPin(backlighPin, pol);
+00137 }
+00138 
+00139 // PUBLIC METHODS
+00140 // ---------------------------------------------------------------------------
+00141 
+00142 //
+00143 // begin
+00144 void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
+00145 {
+00146    
+00147    init();     // Initialise the I2C expander interface
+00148    LCD::begin ( cols, lines, dotsize );   
+00149 }
+00150 
+00151 
+00152 // User commands - users can expand this section
+00153 //----------------------------------------------------------------------------
+00154 // Turn the (optional) backlight off/on
+00155 
+00156 //
+00157 // setBacklightPin
+00158 void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
+00159 {
+00160    _backlightPinMask = ( 1 << value );
+00161    _polarity = pol;
+00162    setBacklight(BACKLIGHT_OFF);
+00163 }
+00164 
+00165 //
+00166 // setBacklight
+00167 void LiquidCrystal_I2C::setBacklight( uint8_t value ) 
+00168 {
+00169    // Check if backlight is available
+00170    // ----------------------------------------------------
+00171    if ( _backlightPinMask != 0x0 )
+00172    {
+00173       // Check for polarity to configure mask accordingly
+00174       // ----------------------------------------------------------
+00175       if  (((_polarity == POSITIVE) && (value > 0)) || 
+00176            ((_polarity == NEGATIVE ) && ( value == 0 )))
+00177       {
+00178          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
+00179       }
+00180       else 
+00181       {
+00182          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
+00183       }
+00184       _i2cio.write( _backlightStsMask );
+00185    }
+00186 }
+00187 
+00188 
+00189 // PRIVATE METHODS
+00190 // ---------------------------------------------------------------------------
+00191 
+00192 //
+00193 // init
+00194 int LiquidCrystal_I2C::init()
+00195 {
+00196    int status = 0;
+00197    
+00198    // initialize the backpack IO expander
+00199    // and display functions.
+00200    // ------------------------------------------------------------------------
+00201    if ( _i2cio.begin ( _Addr ) == 1 )
+00202    {
+00203       _i2cio.portMode ( OUTPUT );  // Set the entire IO extender to OUTPUT
+00204       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00205       status = 1;
+00206       _i2cio.write(0);  // Set the entire port to LOW
+00207    }
+00208    return ( status );
+00209 }
+00210 
+00211 //
+00212 // config
+00213 void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00214                                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
+00215 {
+00216    _Addr = lcd_Addr;
+00217    
+00218    _backlightPinMask = 0;
+00219    _backlightStsMask = LCD_NOBACKLIGHT;
+00220    _polarity = POSITIVE;
+00221    
+00222    _En = ( 1 << En );
+00223    _Rw = ( 1 << Rw );
+00224    _Rs = ( 1 << Rs );
+00225    
+00226    // Initialise pin mapping
+00227    _data_pins[0] = ( 1 << d4 );
+00228    _data_pins[1] = ( 1 << d5 );
+00229    _data_pins[2] = ( 1 << d6 );
+00230    _data_pins[3] = ( 1 << d7 );   
+00231 }
+00232 
+00233 
+00234 
+00235 // low level data pushing commands
+00236 //----------------------------------------------------------------------------
+00237 
+00238 //
+00239 // send - write either command or data
+00240 void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) 
+00241 {
+00242    // No need to use the delay routines since the time taken to write takes
+00243    // longer that what is needed both for toggling and enable pin an to execute
+00244    // the command.
+00245    
+00246    if ( mode == FOUR_BITS )
+00247    {
+00248       write4bits( (value & 0x0F), COMMAND );
+00249    }
+00250    else 
+00251    {
+00252       write4bits( (value >> 4), mode );
+00253       write4bits( (value & 0x0F), mode);
+00254    }
+00255 }
+00256 
+00257 //
+00258 // write4bits
+00259 void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) 
+00260 {
+00261    uint8_t pinMapValue = 0;
+00262    
+00263    // Map the value to LCD pin mapping
+00264    // --------------------------------
+00265    for ( uint8_t i = 0; i < 4; i++ )
+00266    {
+00267       if ( ( value & 0x1 ) == 1 )
+00268       {
+00269          pinMapValue |= _data_pins[i];
+00270       }
+00271       value = ( value >> 1 );
+00272    }
+00273    
+00274    // Is it a command or data
+00275    // -----------------------
+00276    if ( mode == DATA )
+00277    {
+00278       mode = _Rs;
+00279    }
+00280    
+00281    pinMapValue |= mode | _backlightStsMask;
+00282    pulseEnable ( pinMapValue );
+00283 }
+00284 
+00285 //
+00286 // pulseEnable
+00287 void LiquidCrystal_I2C::pulseEnable (uint8_t data)
+00288 {
+00289    _i2cio.write (data | _En);   // En HIGH
+00290    _i2cio.write (data & ~_En);  // En LOW
+00291 }
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html new file mode 100644 index 0000000..1f2fd5f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h.html @@ -0,0 +1,97 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h File Reference
+
+
+
#include <inttypes.h>
+#include <Print.h>
+#include "I2CIO.h"
+#include "LCD.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_I2C
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html new file mode 100644 index 0000000..2b32412 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___i2_c_8h_source.html @@ -0,0 +1,172 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_I2C.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using an I2C IO extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
+00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
+00022 //
+00023 // The functionality provided by this class and its base class is identical
+00024 // to the original functionality of the Arduino LiquidCrystal library.
+00025 //
+00026 //
+00027 // @author F. Malpartida - fmalpartida@gmail.com
+00028 // ---------------------------------------------------------------------------
+00029 #ifndef LiquidCrystal_I2C_h
+00030 #define LiquidCrystal_I2C_h
+00031 #include <inttypes.h>
+00032 #include <Print.h>
+00033 
+00034 #include "I2CIO.h"
+00035 #include "LCD.h"
+00036 
+00037 
+00038 class LiquidCrystal_I2C : public LCD 
+00039 {
+00040 public:
+00041    
+00051    LiquidCrystal_I2C (uint8_t lcd_Addr);
+00052    // Constructor with backlight control
+00053    LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
+00054    
+00067    LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs);
+00068    // Constructor with backlight control
+00069    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs,
+00070                      uint8_t backlighPin, t_backlighPol pol);   
+00071    
+00088    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00089                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00090    // Constructor with backlight control
+00091    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00092                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00093                      uint8_t backlighPin, t_backlighPol pol);
+00110    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);   
+00111    
+00124    virtual void send(uint8_t value, uint8_t mode);
+00125    
+00134    void setBacklightPin ( uint8_t value, t_backlighPol pol );
+00135    
+00145    void setBacklight ( uint8_t value );
+00146    
+00147 private:
+00148    
+00154    int  init();
+00155    
+00171    void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
+00172                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00173    
+00182    void write4bits(uint8_t value, uint8_t mode);
+00183    
+00190    void pulseEnable(uint8_t);
+00191    
+00192    
+00193    uint8_t _Addr;             // I2C Address of the IO expander
+00194    uint8_t _backlightPinMask; // Backlight IO pin mask
+00195    uint8_t _backlightStsMask; // Backlight status mask
+00196    I2CIO   _i2cio;            // I2CIO PCF8574* expansion module driver I2CLCDextraIO
+00197    uint8_t _En;               // LCD expander word for enable pin
+00198    uint8_t _Rw;               // LCD expander word for R/W pin
+00199    uint8_t _Rs;               // LCD expander word for Register Select pin
+00200    uint8_t _data_pins[4];     // LCD data lines
+00201    
+00202 };
+00203 
+00204 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html new file mode 100644 index 0000000..a89c8e7 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp.html @@ -0,0 +1,89 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp File Reference
+
+ + + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html new file mode 100644 index 0000000..3af3164 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html @@ -0,0 +1,219 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created/Adapted by Bill Perry 2012-03-16
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR2W.cpp
+00013 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR2W from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 //
+00021 // See the corresponding SR2W header file for full details.
+00022 //
+00023 // History
+00024 // 2012.03.29  bperrybap - Fixed incorrect use of 5x10 for default font 
+00025 //                         (now matches original LQ library)
+00026 //                         Fixed typo in SR2W mask define names
+00027 //                         changed default backlight state to on
+00028 // 2012.03.16  bperrybap - created/modified from SR sources to create SR2W
+00029 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
+00030 // ---------------------------------------------------------------------------
+00031 
+00032 #include "LiquidCrystal_SR2W.h"
+00033 
+00034 // CONSTRUCTORS
+00035 // ---------------------------------------------------------------------------
+00036 // Assuming 1 line 8 pixel high font
+00037 LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol)
+00038 {
+00039         init ( srdata, srclock, blpol, 1, 0 );
+00040 }
+00041 
+00042 
+00043 // PRIVATE METHODS
+00044 // ---------------------------------------------------------------------------
+00045 
+00046 //
+00047 // init
+00048 void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font)
+00049 {
+00050         _srDataRegister = fio_pinToOutputRegister(srdata);
+00051         _srDataMask = fio_pinToBit(srdata);
+00052         _srClockRegister = fio_pinToOutputRegister(srclock);
+00053         _srClockMask = fio_pinToBit(srclock);
+00054    
+00055         _blPolarity = blpol;
+00056    
+00057         _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00058    
+00059         backlight(); // set default backlight state to on
+00060 }
+00061 
+00062 //
+00063 // loadSR
+00064 void LiquidCrystal_SR2W::loadSR(uint8_t val)
+00065 {
+00066         // Clear to keep Enable LOW while clocking in new bits
+00067         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask);
+00068    
+00069    
+00070         // clock out SR data byte
+00071         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST);
+00072    
+00073         
+00074         // strobe LCD enable which can now be toggled by the data line
+00075         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00076         {
+00077                 fio_digitalWrite_HIGH(_srDataRegister, _srDataMask);
+00078                 waitUsec (1);         // enable pulse must be >450ns               
+00079                 fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW);
+00080         } // end critical section
+00081 }
+00082 
+00083 // PUBLIC METHODS
+00084 // ---------------------------------------------------------------------------
+00085 
+00086 
+00087 /************ low level data pushing commands **********/
+00088 //
+00089 // send
+00090 void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode)
+00091 {
+00092         uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; 
+00093    
+00094         myMode = myMode | SR2W_EN_MASK | _blMask;
+00095 
+00096         if ( mode != FOUR_BITS )
+00097         {
+00098                 loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble
+00099         }
+00100 
+00101         loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble
+00102    
+00103         /*
+00104          * Don't call waitUsec()
+00105          * do our own delay optmization since this code is so fast it needs some added delay
+00106          * even on slower AVRs.
+00107          */
+00108 #if (F_CPU <= 16000000)
+00109         delayMicroseconds ( 10 );      // commands & data writes need > 37us to complete
+00110 #else
+00111         delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00112 #endif
+00113 }
+00114 
+00115 //
+00116 // setBacklight
+00117 void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) 
+00118 { 
+00119         // Check for polarity to configure mask accordingly
+00120         // ----------------------------------------------------------
+00121         if  ( ((_blPolarity == POSITIVE) && (value > 0)) || 
+00122         ((_blPolarity == NEGATIVE ) && ( value == 0 )) )
+00123         {
+00124                 _blMask = SR2W_BL_MASK;
+00125         }
+00126         else 
+00127         {
+00128                 _blMask = 0;
+00129         }
+00130    
+00131         // send dummy data of blMask to set BL pin
+00132         // Note: loadSR() will strobe the data line trying to pulse EN
+00133         // but E will not strobe because the EN output bit is not set.
+00134         loadSR(_blMask); 
+00135 }
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html new file mode 100644 index 0000000..8cf84b8 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h.html @@ -0,0 +1,164 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  LiquidCrystal_SR2W

+Defines

#define SR2W_BL_MASK   0x02
#define SR2W_DATA_MASK   0x78
#define SR2W_EN_MASK   0x80
#define SR2W_RS_MASK   0x04
+

Define Documentation

+ +
+
+ + + + +
#define SR2W_BL_MASK   0x02
+
+
+ +

Definition at line 132 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_DATA_MASK   0x78
+
+
+ +

Definition at line 134 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_EN_MASK   0x80
+
+
+ +

Definition at line 135 of file LiquidCrystal_SR2W.h.

+ +
+
+ +
+
+ + + + +
#define SR2W_RS_MASK   0x04
+
+
+ +

Definition at line 133 of file LiquidCrystal_SR2W.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html new file mode 100644 index 0000000..eb5efcc --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r2_w_8h_source.html @@ -0,0 +1,245 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created/Adapted by Bill Perry 2012-03-16
+00003 // Copyright 2012 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // @file LiquidCrystal_SR2W.h
+00010 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
+00011 // ShiftRegister (SR2W from now on).
+00012 // 
+00013 // @brief 
+00014 // This is the 2 wire shift register interface class for the LCD library
+00015 //
+00016 // The functionality provided by this class and its base class is a superset of
+00017 // the original functionality of the Arduino LiquidCrystal library and can
+00018 // be used as such.
+00019 // See the LCD class for a full description of the API functions available.
+00020 //
+00021 // It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00022 // shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode.
+00023 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00024 // 74LS164 and 74HC595 have been exstensively tested.
+00025 //
+00026 //
+00027 // 2 Pins required from the Arduino:
+00028 // - Data/Enable
+00029 // - Clock
+00030 // The Data pin is also used to control the enable signal
+00031 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00032 // Busy Flag (BF, data bit D7) is not read.
+00033 //
+00034 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00035 //
+00036 // Shift register bits
+00037 // Bit  #0   - (cannot be used on 74HC595)
+00038 // Bit  #1   - optional backlight control
+00039 // Bit  #2   - connects to RS (Register Select) on the LCD
+00040 // Bit  #3   - connects to LCD data inputs D4
+00041 // Bit  #4   - connects to LCD data inputs D5
+00042 // Bit  #5   - connects to LCD data inputs D6
+00043 // Bit  #6   - connects to LCD data inputs D7
+00044 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00045 // 
+00046 // Wiring for a 74LS164
+00047 // ---------------------
+00048 //                          1k/4.7k
+00049 //              +--------[ Resistor ]--------+---(LCD Enable)
+00050 //              |                            |
+00051 //              |          74LS164    (VCC)  |
+00052 //              |        +----u----+    |   _V_ diode
+00053 // (data pin)---+---+--1-|A     VCC|-14-+    |
+00054 //                  |    |         |         |
+00055 //                  +--2-|B      Q7|-13------+
+00056 //                     3-|Q0     Q6|-12--(LCD D7)
+00057 // (BL Circuit)--------4-|Q1     Q5|-11--(LCD D6)
+00058 // (LCD RS)------------5-|Q2     Q4|-10--(LCD D5)
+00059 // (LCD D4)------------6-|Q3    /MR|--9--(VCC)
+00060 //                   +-7-|GND    CP|--8--(clock pin)
+00061 //                   |   +---------+ 
+00062 //                   |      0.1uf
+00063 //                 (gnd)-----||----(vcc)
+00064 // 
+00065 // Wiring for a 74HC595
+00066 // --------------------
+00067 // NOTE: the 74HC595 is a latching shift register. In order to get it to operate
+00068 // in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this
+00069 // is that the latched output is one clock behind behind the internal shift register bits.
+00070 // To compensate for this the wiring is offset by one bit position lower.
+00071 // For example, while the backlight is hooked to Q0 it is still using bit 1 of
+00072 // of the shift register because the outputs are 1 clock behind the real internal shift
+00073 // register.
+00074 // 
+00075 //                         74HC595    (VCC)
+00076 //                       +----u----+    |  +-----------------------(BL circuit)
+00077 // (LCD RS)------------1-|Q1    VCC|-16-+  |  +--------------------(data pin)
+00078 // (LCD D4)------------2-|Q2     Q0|-15----+  |      1k/4.7k
+00079 // (LCD D5)------------3-|Q3    SER|-14-------+---[ Resistor ]--+--(LCD Enable)
+00080 // (LCD D6)------------4-|Q4    /OE|-13--(gnd)                  |
+00081 // (LCD D7)------------5-|Q5   RCLK|-12-------+                 |
+00082 //                       |         |          |                 |
+00083 //              +------6-|Q6   SCLK|-11-------+--(clock pin)    |
+00084 //              |      7-|Q7    /MR|-10--(VCC)                  |
+00085 //              |    +-8-|GND   Q6'|--9                         |
+00086 //              |    |   +---------+                    diode  _V_
+00087 //              |    |      0.1uf                               |
+00088 //              |  (gnd)-----||----(vcc)                        |
+00089 //              +-----------------------------------------------+
+00090 // 
+00091 //
+00092 // Backlight Control circuit
+00093 // -------------------------
+00094 // Because the shift resiter is not latching the outputs, the backlight circuitry
+00095 // will "see" the output bits as they are shifted into the shift register which
+00096 // can cause the backlight to flicker rather than remain constantly on/off.
+00097 // The circuit below slows down the transitions to the transistor to remove
+00098 // the visible flicker. When the BL input is HIGH the LCD backlight will turn on.
+00099 //
+00100 //                (value depends on LCD, 100ohm is usually safe)
+00101 // (LCD BL anode)---[ resistor ]---(vcc)
+00102 //
+00103 // (LCD BL cathode)-------------------------------+
+00104 //                                                |
+00105 //                                                D
+00106 //                                                |
+00107 // (BL input)----[ 4.7k Resistor ]----+-------G-|-<  (2N7000 FET)
+00108 //                                    |           |
+00109 //                          (0.1uf)   =           S
+00110 //                                    |           |
+00111 //                                  (gnd)        (gnd)
+00112 // 
+00113 // 
+00114 // 
+00115 //
+00116 // History
+00117 // 2012.03.16  bperrybap - creation/adaption from SR header to create SR2W header.
+00118 //                         Fixed typo in SR2W mask define names
+00119 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
+00120 // --------------------------------------------------------------------------------
+00121 #ifndef _LIQUIDCRYSTAL_SR2W_
+00122 #define _LIQUIDCRYSTAL_SR2W_
+00123 
+00124 #include <inttypes.h>
+00125 #include "LCD.h"
+00126 #include "FastIO.h"
+00127 
+00128 
+00129 // two-wire SR output bit constants
+00130 // ---------------------------------------------------------------------------
+00131 
+00132 #define SR2W_BL_MASK 0x02
+00133 #define SR2W_RS_MASK 0x04
+00134 #define SR2W_DATA_MASK 0x78     // data bits are hard coded to be SR bits 6,5,4,3
+00135 #define SR2W_EN_MASK 0x80       // cannot ever be changed
+00136 
+00137 class LiquidCrystal_SR2W : public LCD
+00138 {
+00139 public:
+00151    LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE);
+00152    
+00165    virtual void send(uint8_t value, uint8_t mode);
+00166    
+00167    
+00177    void setBacklight ( uint8_t mode );
+00178    
+00179 private:
+00180    
+00186    void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font );
+00187    
+00192    void loadSR (uint8_t val);
+00193    
+00194    fio_register _srDataRegister; // Serial Data pin
+00195    fio_bit _srDataMask;
+00196    fio_register _srClockRegister; // Clock Pin
+00197    fio_bit _srClockMask;
+00198 
+00199    uint8_t _blPolarity;
+00200    uint8_t _blMask;
+00201 };
+00202 #endif
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html new file mode 100644 index 0000000..fad12ed --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp.html @@ -0,0 +1,249 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal_SR3W.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   4
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   6
#define RW   5
+

Define Documentation

+ +
+
+ + + + +
#define D4   0
+
+
+

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

+ +

Definition at line 126 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D5   1
+
+
+ +

Definition at line 127 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D6   2
+
+
+ +

Definition at line 128 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define D7   3
+
+
+ +

Definition at line 129 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define EN   4
+
+
+

Enable bit of the LCD Defines the IO of the expander connected to the LCD's Enable

+ +

Definition at line 104 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_BACKLIGHT   0xFF
+
+
+

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

+ +

Definition at line 93 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define LCD_NOBACKLIGHT   0x00
+
+
+

LCD_NOBACKLIGHT No BACKLIGHT MASK

+ +

Definition at line 86 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define RS   6
+
+
+

Register bit of the LCD Defines the IO of the expander connected to the LCD's Register select pin

+ +

Definition at line 118 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + +
#define RW   5
+
+
+

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD's Rw pin

+ +

Definition at line 111 of file LiquidCrystal_SR3W.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html new file mode 100644 index 0000000..535571c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html @@ -0,0 +1,336 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 7.3.2012.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SRG.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
+00021 // shift register. While it has been tested with a 74HC595N shift register
+00022 // it should also work with other latching shift registers such as the MC14094
+00023 // and the HEF4094
+00024 //
+00025 // This particular driver has been created as generic as possible to enable
+00026 // users to configure and connect their LCDs using just 3 digital IOs from the
+00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
+00028 // in any configuration. The library is configured by passing the IO pins
+00029 // that control the strobe, data and clock of the shift register and a map
+00030 // of how the shiftregister is connected to the LCD.
+00031 // 
+00032 //
+00033 //   +--------------------------------------------+
+00034 //   |                 MCU                        |
+00035 //   |   IO1           IO2           IO3          |
+00036 //   +----+-------------+-------------+-----------+
+00037 //        |             |             |
+00038 //        |             |             |
+00039 //   +----+-------------+-------------+-----------+
+00040 //   |    Strobe        Data          Clock       |
+00041 //   |          8-bit shift/latch register        | 74HC595N
+00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
+00043 //   +----+----+----+----+----+----+----+----+----+
+00044 //        |    |    |    |    |    |    |    
+00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
+00046 //   +----+----+----+----+----+----+----+----+----+
+00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
+00048 //   |                 LCD Module                 |
+00049 //
+00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
+00051 //
+00052 // The functionality provided by this class and its base class is identical
+00053 // to the original functionality of the Arduino LiquidCrystal library.
+00054 //
+00055 //
+00056 // History
+00057 // 2012.03.29 bperrybap - fixed constructors not properly using Rs
+00058 //                        Fixed incorrect use of 5x10 for default font 
+00059 //                        - now matches original LQ library.
+00060 //                        moved delay to send() so it is per cmd/write vs shiftout()
+00061 //                        NOTE: delay is on hairy edge of working when FAST_MODE is on.
+00062 //                        because of waitUsec().
+00063 //                        There is margin at 16Mhz AVR but might fail on 20Mhz AVRs.
+00064 //                        
+00065 // @author F. Malpartida - fmalpartida@gmail.com
+00066 // ---------------------------------------------------------------------------
+00067 // flags for backlight control
+00068 #include <stdio.h>
+00069 #include <string.h>
+00070 #include <inttypes.h>
+00071 
+00072 #if (ARDUINO <  100)
+00073 #include <WProgram.h>
+00074 #else
+00075 #include <Arduino.h>
+00076 #endif
+00077 #include "LiquidCrystal_SR3W.h"
+00078 
+00079 #include "FastIO.h"
+00080 
+00086 #define LCD_NOBACKLIGHT 0x00
+00087 
+00093 #define LCD_BACKLIGHT   0xFF
+00094 
+00095 
+00096 // Default library configuration parameters used by class constructor with
+00097 // only the I2C address field.
+00098 // ---------------------------------------------------------------------------
+00104 #define EN 4  // Enable bit
+00105 
+00111 #define RW 5  // Read/Write bit
+00112 
+00118 #define RS 6  // Register select bit
+00119 
+00126 #define D4 0
+00127 #define D5 1
+00128 #define D6 2
+00129 #define D7 3
+00130 
+00131 
+00132 
+00133 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)
+00134 {
+00135    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
+00136 }
+00137 
+00138 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
+00139                                        uint8_t backlighPin, t_backlighPol pol)
+00140 {
+00141    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
+00142    setBacklightPin(backlighPin, pol);
+00143 }
+00144 
+00145 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
+00146                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
+00147                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
+00148 {
+00149    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
+00150 }
+00151 
+00152 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00153                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
+00154                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00155                                        uint8_t backlighPin, t_backlighPol pol)
+00156 {
+00157    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
+00158    setBacklightPin(backlighPin, pol);
+00159 }
+00160 
+00161 
+00162 void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode)
+00163 {
+00164    
+00165    if ( mode != FOUR_BITS )
+00166    {
+00167       write4bits( (value >> 4), mode ); // upper nibble
+00168    }   
+00169    write4bits( (value & 0x0F), mode); // lower nibble
+00170 
+00171 
+00172 #if (F_CPU <= 16000000)
+00173    // No need to use the delay routines on AVR since the time taken to write
+00174    // on AVR with SR pin mapping even with fio is longer than LCD command execution.
+00175    waitUsec(37); //goes away on AVRs
+00176 #else
+00177    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00178 #endif
+00179 
+00180 }
+00181 
+00182 
+00183 void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
+00184 {
+00185    _backlightPinMask = ( 1 << value );
+00186    _backlightStsMask = LCD_NOBACKLIGHT;
+00187    _polarity = pol;
+00188    setBacklight (BACKLIGHT_OFF);     // Set backlight to off as initial setup
+00189 }
+00190 
+00191 void LiquidCrystal_SR3W::setBacklight ( uint8_t value )
+00192 {
+00193    // Check if backlight is available
+00194    // ----------------------------------------------------
+00195    if ( _backlightPinMask != 0x0 )
+00196    {
+00197       // Check for polarity to configure mask accordingly
+00198       // ----------------------------------------------------------
+00199       if  (((_polarity == POSITIVE) && (value > 0)) || 
+00200            ((_polarity == NEGATIVE ) && ( value == 0 )))
+00201       {
+00202          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
+00203       }
+00204       else 
+00205       {
+00206          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
+00207       }
+00208       loadSR( _backlightStsMask );
+00209    }
+00210 }
+00211 
+00212 
+00213 // PRIVATE METHODS
+00214 // -----------------------------------------------------------------------------
+00215 
+00216 int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, 
+00217                              uint8_t Rs, uint8_t Rw, uint8_t En,
+00218                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
+00219 {
+00220    _data       = fio_pinToBit(data);
+00221    _clk        = fio_pinToBit(clk);
+00222    _strobe     = fio_pinToBit(strobe);
+00223    _data_reg   = fio_pinToOutputRegister(data);
+00224    _clk_reg    = fio_pinToOutputRegister(clk);
+00225    _strobe_reg = fio_pinToOutputRegister(strobe);
+00226    
+00227    // LCD pin mapping
+00228    _backlightPinMask = 0;
+00229    _backlightStsMask = LCD_NOBACKLIGHT;
+00230    _polarity = POSITIVE;
+00231    
+00232    _En = ( 1 << En );
+00233    _Rw = ( 1 << Rw );
+00234    _Rs = ( 1 << Rs );
+00235    
+00236    // Initialise pin mapping
+00237    _data_pins[0] = ( 1 << d4 );
+00238    _data_pins[1] = ( 1 << d5 );
+00239    _data_pins[2] = ( 1 << d6 );
+00240    _data_pins[3] = ( 1 << d7 );
+00241    
+00242    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00243    
+00244    return (1);
+00245 }
+00246 
+00247 void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode)
+00248 {
+00249    uint8_t pinMapValue = 0;
+00250    
+00251    // Map the value to LCD pin mapping
+00252    // --------------------------------
+00253    for ( uint8_t i = 0; i < 4; i++ )
+00254    {
+00255       if ( ( value & 0x1 ) == 1 )
+00256       {
+00257          pinMapValue |= _data_pins[i];
+00258       }
+00259       value = ( value >> 1 );
+00260    }
+00261    
+00262    // Is it a command or data
+00263    // -----------------------
+00264    mode = ( mode == DATA ) ? _Rs : 0;
+00265    
+00266    pinMapValue |= mode | _backlightStsMask;
+00267    loadSR ( pinMapValue | _En );  // Send with enable high
+00268    loadSR ( pinMapValue); // Send with enable low
+00269 }
+00270 
+00271 
+00272 void LiquidCrystal_SR3W::loadSR(uint8_t value) 
+00273 {
+00274    // Load the shift register with information
+00275    fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST);
+00276    
+00277    // Strobe the data into the latch
+00278    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00279    {
+00280       fio_digitalWrite_HIGH(_strobe_reg, _strobe);
+00281       fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW);
+00282    }
+00283 }
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html new file mode 100644 index 0000000..2a5f588 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h.html @@ -0,0 +1,96 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_SR3W
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html new file mode 100644 index 0000000..5f3dbed --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r3_w_8h_source.html @@ -0,0 +1,201 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 7.3.2012.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR3W.h
+00013 // This file implements a basic liquid crystal library that comes as standard
+00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
+00015 // 
+00016 // @brief 
+00017 // This is a basic implementation of the LiquidCrystal library of the
+00018 // Arduino SDK. The original library has been reworked in such a way that 
+00019 // this class implements the all methods to command an LCD based
+00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
+00021 // shift register. While it has been tested with a 74HC595N shift register
+00022 // it should also work with other latching shift registers such as the MC14094
+00023 // and the HEF4094
+00024 //
+00025 // This particular driver has been created as generic as possible to enable
+00026 // users to configure and connect their LCDs using just 3 digital IOs from the
+00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
+00028 // in any configuration. The library is configured by passing the IO pins
+00029 // that control the strobe, data and clock of the shift register and a map
+00030 // of how the shiftregister is connected to the LCD.
+00031 // 
+00032 //
+00033 //   +--------------------------------------------+
+00034 //   |                 MCU                        |
+00035 //   |   IO1           IO2           IO3          |
+00036 //   +----+-------------+-------------+-----------+
+00037 //        |             |             |
+00038 //        |             |             |
+00039 //   +----+-------------+-------------+-----------+
+00040 //   |    Strobe        Data          Clock       |
+00041 //   |          8-bit shift/latch register        | 74HC595N
+00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
+00043 //   +----+----+----+----+----+----+----+----+----+
+00044 //        |    |    |    |    |    |    |    
+00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
+00046 //   +----+----+----+----+----+----+----+----+----+
+00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
+00048 //   |                 LCD Module                 |
+00049 //
+00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
+00051 //
+00052 // The functionality provided by this class and its base class is identical
+00053 // to the original functionality of the Arduino LiquidCrystal library.
+00054 //
+00055 //
+00056 // @author F. Malpartida - fmalpartida@gmail.com
+00057 // ---------------------------------------------------------------------------
+00058 #ifndef _LIQUIDCRYSTAL_SR3W_H_
+00059 #define _LIQUIDCRYSTAL_SR3W_H_
+00060 
+00061 #include <inttypes.h>
+00062 #include "LCD.h"
+00063 #include "FastIO.h"
+00064 
+00065 
+00066 class LiquidCrystal_SR3W : public LCD 
+00067 {
+00068 public:
+00069    
+00090    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe);
+00091    // Constructor with backlight control
+00092    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00093                       uint8_t backlighPin, t_backlighPol pol);   
+00094    
+00112    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
+00113                       uint8_t En, uint8_t Rw, uint8_t Rs, 
+00114                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
+00115    // Constructor with backlight control
+00116    LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe,
+00117                       uint8_t En, uint8_t Rw, uint8_t Rs, 
+00118                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
+00119                       uint8_t backlighPin, t_backlighPol pol);
+00120    
+00133    virtual void send(uint8_t value, uint8_t mode);
+00134    
+00143    void setBacklightPin ( uint8_t value, t_backlighPol pol );
+00144    
+00154    void setBacklight ( uint8_t value );
+00155    
+00156 private:
+00157    
+00163    int  init(uint8_t data, uint8_t clk, uint8_t strobe, 
+00164              uint8_t Rs, uint8_t Rw, uint8_t En,
+00165              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
+00166    
+00175    void write4bits(uint8_t value, uint8_t mode);
+00176    
+00183    void loadSR(uint8_t value);
+00184    
+00185    
+00186    fio_bit      _strobe;           // shift register strobe pin
+00187    fio_register _strobe_reg;       // SR strobe pin MCU register
+00188    fio_bit      _data;             // shift register data pin
+00189    fio_register _data_reg;         // SR data pin MCU register
+00190    fio_bit      _clk;              // shift register clock pin
+00191    fio_register _clk_reg;          // SR clock pin MCU register
+00192    uint8_t      _En;               // LCD expander word for enable pin
+00193    uint8_t      _Rw;               // LCD expander word for R/W pin
+00194    uint8_t      _Rs;               // LCD expander word for Register Select pin
+00195    uint8_t      _data_pins[4];     // LCD data lines
+00196    uint8_t      _backlightPinMask; // Backlight IO pin mask
+00197    uint8_t      _backlightStsMask; // Backlight status mask
+00198    
+00199 };
+00200 
+00201 #endif
+00202 
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html new file mode 100644 index 0000000..8eb1854 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp.html @@ -0,0 +1,94 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "LiquidCrystal_SR.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html new file mode 100644 index 0000000..9a78cc1 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8cpp_source.html @@ -0,0 +1,293 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR.h
+00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 // The functionality provided by this class and its base class is identical
+00021 // to the original functionality of the Arduino LiquidCrystal library and can
+00022 // be used as such.
+00023 //
+00024 // Modified to work serially with the shiftOut() function, an 8-bit
+00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
+00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00028 // I used 74LS164, for the reason that's what I had at hand.
+00029 //
+00030 // Connection description:
+00031 //
+00032 // SR output:
+00033 // Bit  #0   - N/C - not connected, used to hold a zero
+00034 // Bit  #1   - N/C
+00035 // Bit  #2   - connects to RS (Register Select) on the LCD
+00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
+00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00038 //
+00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
+00040 // If not using Enable, the Data pin is used for the enable signal by defining
+00041 // the same pin for Enable as for Data. Data and Clock outputs/pins goes to
+00042 // the shiftregister.
+00043 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00044 // Busy Flag (BF, data bit D7) is not read.
+00045 //
+00046 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00047 //
+00048 //
+00049 // History
+00050 // 2012.03.29  bperrybap - Added delays for faster fio shiftout (it got too fast)
+00051 //             AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32.
+00052 //             Added code to support indicating two wire mode by using enable=data pin
+00053 //             (documentation indicated this as working)
+00054 //             Fixed incorrect use of 5x10 for default font - now matches original LQ library.
+00055 //             can now eliminate enable pin in constructor for two wire mode.
+00056 // 2012.01.16  Florian Fida - faster digitalWrite/shiftOut
+00057 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
+00058 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
+00059 //             just a bit more memory efficient.
+00060 //             Thanks to CapnBry (from google code and github) who noticed it.
+00061 //             URL to his version of shiftregLCD:
+00062 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
+00063 // 2009.07.30  raron - minor corrections to the comments.
+00064 //             Fixed timing to datasheet safe. Fixed keyword highlights.
+00065 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
+00066 //             more streamlined interface
+00067 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduino
+00068 //             playgrond forum, the number of wires now required is only two!
+00069 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
+00070 //             posting this, so I had to fix it.
+00071 //             Renamed a function, but no improvements or functional changes.
+00072 // 2009.07.23  Incorporated some proper initialization routines
+00073 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
+00074 //             library improvements from LadyAda.
+00075 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
+00076 //             on the "official" LiquidCrystal library.
+00077 //
+00078 //
+00079 // @author F. Malpartida - fmalpartida@gmail.com
+00080 // ---------------------------------------------------------------------------
+00081 #include <stdio.h>
+00082 #include <string.h>
+00083 #include <inttypes.h>
+00084 
+00085 #if (ARDUINO <  100)
+00086 #include <WProgram.h>
+00087 #else
+00088 #include <Arduino.h>
+00089 #endif
+00090 #include "LiquidCrystal_SR.h"
+00091 
+00092 #include "FastIO.h"
+00093 
+00094 
+00095 // CONSTRUCTORS
+00096 // ---------------------------------------------------------------------------
+00097 // Assuming 1 line 8 pixel high font
+00098 LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, 
+00099                                     uint8_t enable ) 
+00100 {
+00101         init ( srdata, srclock, enable, 1, 0 );
+00102 }
+00103 
+00104 
+00105 // PRIVATE METHODS
+00106 // ---------------------------------------------------------------------------
+00107 
+00108 //
+00109 // init
+00110 void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, 
+00111                             uint8_t lines, uint8_t font)
+00112 {
+00113    // Initialise private variables
+00114    _two_wire = 0;
+00115    
+00116    _srDataRegister = fio_pinToOutputRegister(srdata);
+00117    _srDataBit = fio_pinToBit(srdata);
+00118    _srClockRegister = fio_pinToOutputRegister(srclock);
+00119    _srClockBit = fio_pinToBit(srclock);
+00120    
+00121    if ((enable == TWO_WIRE) || (enable == srdata))
+00122    {
+00123       _two_wire = 1;
+00124       _srEnableRegister = _srDataRegister;
+00125       _srEnableBit = _srDataBit;
+00126    }
+00127    else
+00128    {
+00129       _srEnableRegister = fio_pinToOutputRegister(enable);
+00130       _srEnableBit = fio_pinToBit(enable);
+00131    }
+00132    
+00133    // Configure control pins as outputs
+00134    // ------------------------------------------------------------------------
+00135    
+00136    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
+00137 }
+00138 
+00139 //
+00140 // shiftIt
+00141 void LiquidCrystal_SR::shiftIt(uint8_t val)
+00142 {
+00143    if (_two_wire)
+00144    {
+00145       // Clear to get Enable LOW
+00146       fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit);
+00147    }
+00148    fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST);
+00149    
+00150    // LCD ENABLE PULSE
+00151    //
+00152    // While this library is written with a shift register without an output
+00153    // latch in mind, it can work in 3-wire mode with a shiftregister with a
+00154    // latch. The shiftregister latch pin (STR, RCL or similar) is then
+00155    // connected to the LCD enable pin. The LCD is (very likely) slower
+00156    // to read the Enable pulse, and then reads the new contents of the SR.
+00157    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00158    {
+00159       fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit);
+00160       waitUsec (1);         // enable pulse must be >450ns               
+00161       fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW);
+00162    } // end critical section
+00163 }
+00164 
+00165 // PUBLIC METHODS
+00166 // ---------------------------------------------------------------------------
+00167 
+00168 
+00169 /************ low level data pushing commands **********/
+00170 //
+00171 // send
+00172 void LiquidCrystal_SR::send(uint8_t value, uint8_t mode)
+00173 {
+00174    // Divide byte in two nibbles include the RS signal
+00175    // and format it for shiftregister output wiring to the LCD
+00176    // We are only interested in my COMMAND or DATA for myMode
+00177    uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
+00178    
+00179    if ( mode != FOUR_BITS )
+00180    {
+00181       shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble
+00182    }
+00183 
+00184    shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble
+00185    /*
+00186     * Add some delay since this code is so fast it needs some added delay
+00187     * even on AVRs because the shiftout is shorter than the LCD command execution time.
+00188     */
+00189 #if (F_CPU <= 16000000)
+00190    if(_two_wire)
+00191         delayMicroseconds ( 10 );
+00192    else
+00193         delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer
+00194 #else
+00195    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
+00196 #endif
+00197 
+00198 }
+00199 
+00200 //
+00201 // setBacklightPin
+00202 void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol )
+00203 { }
+00204 
+00205 //
+00206 // setBacklight
+00207 void LiquidCrystal_SR::setBacklight ( uint8_t mode ) 
+00208 { }
+00209 
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html new file mode 100644 index 0000000..5e7f2d7 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h.html @@ -0,0 +1,148 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+#include "FastIO.h"
+
+

Go to the source code of this file.

+ + + + + + + +

+Classes

class  LiquidCrystal_SR

+Defines

#define SR_EN_BIT   0x80
#define SR_RS_BIT   0x04
#define TWO_WIRE   204
+

Define Documentation

+ +
+
+ + + + +
#define SR_EN_BIT   0x80
+
+
+ +

Definition at line 92 of file LiquidCrystal_SR.h.

+ +
+
+ +
+
+ + + + +
#define SR_RS_BIT   0x04
+
+
+ +

Definition at line 91 of file LiquidCrystal_SR.h.

+ +
+
+ +
+
+ + + + +
#define TWO_WIRE   204
+
+
+ +

Definition at line 90 of file LiquidCrystal_SR.h.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html new file mode 100644 index 0000000..71640bf --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r_8h_source.html @@ -0,0 +1,210 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // Thread Safe: No
+00010 // Extendable: Yes
+00011 //
+00012 // @file LiquidCrystal_SR.h
+00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
+00014 // ShiftRegister (SR from now on).
+00015 // 
+00016 // @brief 
+00017 // This is a port of the ShiftRegLCD library from raron and ported to the
+00018 // LCD library.
+00019 //
+00020 // The functionality provided by this class and its base class is identical
+00021 // to the original functionality of the Arduino LiquidCrystal library and can
+00022 // be used as such.
+00023 //
+00024 // Modified to work serially with the shiftOut() function, an 8-bit
+00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
+00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
+00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
+00028 // I used 74LS164, for the reason that's what I had at hand.
+00029 //
+00030 // Connection description:
+00031 //
+00032 // SR output:
+00033 // Bit  #0   - N/C - not connected, used to hold a zero
+00034 // Bit  #1   - N/C
+00035 // Bit  #2   - connects to RS (Register Select) on the LCD
+00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
+00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
+00038 //
+00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
+00040 // If not using Enable, the Data pin will be used for the enable signal.
+00041 // 2 wire mode can be indicated by:
+00042 // - ommitting the enable pin in constructor
+00043 // - defining the same pin for Enable as for Data in constructor
+00044 // - by using the token TWO_WIRE for the enable pin.
+00045 //
+00046 // Data and Clock outputs/pins goes to the shiftregister.
+00047 // LCD RW-pin hardwired to LOW (only writing to LCD).
+00048 // Busy Flag (BF, data bit D7) is not read.
+00049 //
+00050 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
+00051 //
+00052 //
+00053 // History
+00054 // 2012.03.29  bperrybap - can now eliminate enable pin in constructor for two wire mode.
+00055 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
+00056 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
+00057 //             just a bit more memory efficient.
+00058 //             Thanks to CapnBry (from google code and github) who noticed it.
+00059 //             URL to his version of shiftregLCD:
+00060 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
+00061 // 2009.07.30  raron - minor corrections to the comments.
+00062 //             Fixed timing to datasheet safe. Fixed keyword highlights.
+00063 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
+00064 //             more streamlined interface
+00065 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduiono 
+00066 //             playgrond forum, the number of wires now required is only two!
+00067 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
+00068 //             posting this, so I had to fix it.
+00069 //             Renamed a function, but no improvements or functional changes.
+00070 // 2009.07.23  Incorporated some proper initialization routines
+00071 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
+00072 //             library improvements from LadyAda.
+00073 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
+00074 //             on the "official" LiquidCrystal library.
+00075 //
+00076 //
+00077 //
+00078 // @author F. Malpartida - fmalpartida@gmail.com
+00079 // ---------------------------------------------------------------------------
+00080 #ifndef _LIQUIDCRYSTAL_SR_
+00081 #define _LIQUIDCRYSTAL_SR_
+00082 
+00083 #include <inttypes.h>
+00084 #include "LCD.h"
+00085 #include "FastIO.h"
+00086 
+00087 
+00088 // two-wire indicator constant
+00089 // ---------------------------------------------------------------------------
+00090 #define TWO_WIRE  204
+00091 #define SR_RS_BIT 0x04
+00092 #define SR_EN_BIT 0x80
+00093 
+00094 class LiquidCrystal_SR : public LCD
+00095 {
+00096 public:
+00108    LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE );
+00109    
+00122    virtual void send(uint8_t value, uint8_t mode);
+00123    
+00124    
+00134    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
+00135    
+00145    void setBacklight ( uint8_t mode );
+00146    
+00147 private:
+00148    
+00154    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
+00155               uint8_t font );
+00156    
+00161    void shiftIt (uint8_t val);
+00162    
+00163    uint8_t _enable_pin;  // Enable Pin
+00164    uint8_t _two_wire;    // two wire mode
+00165    
+00166    fio_register _srDataRegister; // Serial Data pin
+00167    fio_bit _srDataBit;
+00168    fio_register _srClockRegister; // Clock Pin
+00169    fio_bit _srClockBit;
+00170    fio_register _srEnableRegister; // Enable Pin
+00171    fio_bit _srEnableBit;
+00172    
+00173 };
+00174 
+00175 #endif
+00176 
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html new file mode 100644 index 0000000..8049852 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html @@ -0,0 +1,147 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <WProgram.h>
+#include "FastIO.h"
+#include "LiquidCrystal_SR_LCD3.h"
+
+

Go to the source code of this file.

+ + + + + +

+Defines

#define SR_EN_BIT   B00010000
#define SR_RS_BIT   B01000000
#define SR_RW_BIT   B00100000
+

Define Documentation

+ +
+
+ + + + +
#define SR_EN_BIT   B00010000
+
+
+ +

Definition at line 167 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+ +
+
+ + + + +
#define SR_RS_BIT   B01000000
+
+
+ +

Definition at line 169 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+ +
+
+ + + + +
#define SR_RW_BIT   B00100000
+
+
+ +

Definition at line 168 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html new file mode 100644 index 0000000..310997e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html @@ -0,0 +1,295 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Originally Created by Francisco Malpartida on 2011/08/20.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This software is furnished "as is", without technical support, and with no 
+00007 // warranty, express or implied, as to its usefulness for any purpose.
+00008 //
+00009 // 2012/01/21 - Marc MERLIN
+00010 // This library, LiquidCrystal_SR_LCD3, was forked off LiquidCrystal_SR which
+00011 // used a different wiring than the Pebble and Pebblev2 (just released by
+00012 // freetronics in the arduino miniconf as part of linux.conf.au 2012) and
+00013 // therefore this code organizes the output data differently.
+00014 //
+00015 // Upstream source for this module is
+00016 // https://github.com/marcmerlin/NewLiquidCrystal
+00017 //
+00018 // Thread Safe: No
+00019 // Extendable: Yes
+00020 //
+00021 // @file LiquidCrystal_SR_LCD3.h
+00022 //
+00023 //  Connects an LCD using 3 pins from the Arduino, via an 8-bit 
+00024 //  ShiftRegister (SR from now on).
+00025 //  The original port source for this module is https://github.com/marcmerlin/NewLiquidCrystal
+00026 //  The 'FastIO' merge has madethis code 4 times faster.
+00027 // 
+00028 // @brief 
+00029 // This is a port of the ShiftRegLCD library from raron and ported to the
+00030 // LCD library.
+00031 //
+00032 // The functionality provided by this class and its base class is identical
+00033 // to the original functionality of the Arduino LiquidCrystal library and can
+00034 // be used as such.
+00035 //
+00036 // Pinout for this code is used by derivatives of the original LCD3Wire page:
+00037 // http://www.arduino.cc/playground/Code/LCD3wires
+00038 //
+00039 // This includes the LCA (linux.conf.au) Arduino Miniconf Pebble: 
+00040 // http://shieldlist.org/luke-weston/pebble
+00041 // https://github.com/lukeweston/Pebble
+00042 //
+00043 // It also includes the Pebble v2:
+00044 // http://www.arduinominiconf.org/index.php/Pebble_V2.0_Instructions
+00045 // http://www.freetronics.com/pages/pebble-v2
+00046 // https://github.com/lukeweston/pebble20/blob/master/README.md
+00047 // https://github.com/lukeweston/pebble20/blob/master/pebble-sch.pdf
+00048 //
+00049 // Shiftregister connection description:
+00050 // MC14094 input:  Arduino digital pin 2=Clock, pin 3=Data, pin 4=Strobe
+00051 // MC14094 output: Q8=DB4, Q7=DB5, Q6=DB6, Q5=DB7, Q4=E, Q3=RW, Q2=RS, Q1=None
+00052 //
+00053 //   +--------------------------------------------+
+00054 //   |    Arduino (ATMega 168 or 328)             |
+00055 //   |    D02           D03           D04         |
+00056 //   +----+-------------+-------------+-----------+
+00057 //        |4            |5            |6
+00058 //        |1            |2            |3
+00059 //   +----+-------------+-------------+-----------+
+00060 //   |    Strobe        Data          Clock       |
+00061 //   |    MC14094 8-bit shift/latch register      |
+00062 //   |    Q8   Q7   Q6   Q5   Q4   Q3   Q2   Q1   |
+00063 //   +----+----+----+----+----+----+----+----+----+
+00064 //        |11  |12  |13  |14  |7   |6   |5   |4
+00065 //        |11  |12  |13  |14  |6   |5   |4
+00066 //   +----+----+----+----+----+----+----+---------+
+00067 //   |    DB4  DB5  DB6  DB7  E    RW   RS        |
+00068 //   |               LCD KS0066                   |
+00069 //   +--------------------------------------------+
+00070 //
+00071 // 3 Pins required from the Arduino for Data, Clock, and Enable/Strobe.
+00072 //
+00073 // This code was inspired from LiquidCrystal_SR from
+00074 // http://code.google.com/p/arduinoshiftreglcd/
+00075 // but was written for implementing LiquidCrystal support for the Pebble
+00076 // and Pebblev2 (see below).
+00077 // The Pebbles's LCD and shift register wiring were inspired from this
+00078 // original page:
+00079 // http://www.arduino.cc/playground/Code/LCD3wires
+00080 // 
+00081 // Pebbles and the LCD3Wires design are compatible hardware-wise, but
+00082 // the LCD3Wire code does not work with arduino 1.0 anymore and is generally
+00083 // quite limited in functionality compared to this framework that provides the
+00084 // entire LiquidDisplay functionality.
+00085 // Why not just use the LiquidCrystal_SR pinout?
+00086 // - LCD3Wire was first and therefore have hardware that was designed with 
+00087 //   incompatible (IMO better if you don't mind 3 wires) pinout.
+00088 // - The pinout used here is same saner (the 4 bits for the LCD are all in one 
+00089 //   nibble of the shift register, not spread across 2 like in the
+00090 //   LiquidCrystal_SR pinout)
+00091 //
+00092 // Note however that LiquidCrystal_SR while a bit more complex wiring and code
+00093 // wise, supports non latching shift registers and it a few percent faster than
+00094 // this code since it can address the LCD enable pin without having to send 
+00095 // a pulse through the shift register like the LCD3Wires setup requires.
+00096 //  
+00097 // This code makes sure to properly follow the specifications when talking
+00098 // to the LCD while using minimal delays (it's faster than the LCD3wire and aiko
+00099 // pebble code).
+00100 //
+00101 // @author Marc MERLIN - marc_soft<at>merlins.org.
+00102 // ---------------------------------------------------------------------------
+00103 #include <stdio.h>
+00104 #include <string.h>
+00105 #include <inttypes.h>
+00106 
+00107 #if (ARDUINO <  100)
+00108 #include <WProgram.h>
+00109 #else
+00110 #include <Arduino.h>
+00111 #endif
+00112 #include "FastIO.h"
+00113 #include "LiquidCrystal_SR_LCD3.h"
+00114 
+00115 
+00116 // STATIC helper functions
+00117 // ---------------------------------------------------------------------------
+00118 
+00119 
+00120 // CONSTRUCTORS
+00121 // ---------------------------------------------------------------------------
+00122 // Assuming 1 line 8 pixel high font
+00123 LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, 
+00124                                               uint8_t strobe )
+00125 {
+00126         init ( srdata, srclock, strobe, 1, 0 );
+00127 }
+00128 
+00129 
+00130 // PRIVATE METHODS
+00131 // ---------------------------------------------------------------------------
+00132 
+00133 //
+00134 // init
+00135 void LiquidCrystal_SR_LCD3::init( uint8_t srdata, uint8_t srclock, uint8_t strobe, 
+00136                                  uint8_t lines, uint8_t font )
+00137 {
+00138         // Initialise private variables
+00139         // translate all pins to bits and registers
+00140         // pinMode to OUTPUT, Output LOW
+00141    
+00142    _srdata_bit = fio_pinToBit(srdata);
+00143    _srdata_register = fio_pinToOutputRegister(srdata);
+00144    _srclock_bit = fio_pinToBit(srclock);
+00145    _srclock_register = fio_pinToOutputRegister(srclock);
+00146    _strobe_bit = fio_pinToBit(strobe);
+00147    _strobe_register = fio_pinToOutputRegister(strobe);
+00148    
+00149    // Little trick to force a pulse of the LCD enable bit and make sure it is
+00150    // low before we start further writes since this is assumed.
+00151    
+00152    write4bits(0);
+00153    
+00154    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x10DOTS;
+00155 }
+00156 
+00157 // PUBLIC METHODS
+00158 // ---------------------------------------------------------------------------
+00159 
+00160 
+00161 /************ low level data pushing commands **********/
+00162 
+00163 // Code below was borrowed from LCD3Wire from
+00164 // http://www.arduino.cc/playground/Code/LCD3wires
+00165 
+00166 // bitmasks for control bits on shift register
+00167 #define SR_EN_BIT B00010000   // LCD Data enable bit.
+00168 #define SR_RW_BIT B00100000   // RW can be pinned low since we only send
+00169 #define SR_RS_BIT B01000000   // LOW: command. HIGH: character.
+00170 
+00171 void LiquidCrystal_SR_LCD3::send(uint8_t value, uint8_t mode) 
+00172 {
+00173    uint8_t nibble;
+00174    
+00175    mode = mode ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
+00176    
+00177    nibble = value >> 4; // Get high nibble.
+00178    write4bits(nibble | mode);
+00179    
+00180    //delay(1); // This was in the LCD3 code but does not seem needed -- merlin
+00181    
+00182    nibble = value & 15; // Get low nibble
+00183    write4bits(nibble | mode);
+00184 }
+00185 
+00186 void LiquidCrystal_SR_LCD3::write4bits(uint8_t nibble) 
+00187 {
+00188    nibble &= ~SR_RW_BIT; // set RW LOW (we do this always since we only write).
+00189    
+00190    // Send a High transition to display the data that was pushed
+00191    nibble |=  SR_EN_BIT; // LCD Data Enable HIGH
+00192    _pushOut(nibble);
+00193    nibble &= ~SR_EN_BIT; // LCD Data Enable LOW
+00194    _pushOut(nibble); 
+00195 }
+00196 
+00197 // push byte to shift register and on to LCD
+00198 void LiquidCrystal_SR_LCD3::_pushOut(uint8_t nibble) 
+00199 {
+00200    // Make data available for pushing to the LCD.
+00201    fio_shiftOut(_srdata_register, _srdata_bit, _srclock_register, _srclock_bit, nibble, LSBFIRST);
+00202    
+00203    // Make new data active.
+00204    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+00205    {
+00206       fio_digitalWrite_HIGH(_strobe_register, _strobe_bit);
+00207       waitUsec( 1 ); // strobe pulse must be >450ns (old code had 10ms)
+00208       fio_digitalWrite_SWITCHTO(_strobe_register, _strobe_bit,LOW);
+00209    }
+00210    waitUsec( 40 ); // commands need > 37us to settle
+00211 }
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html new file mode 100644 index 0000000..1b75e74 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html @@ -0,0 +1,95 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference
+
+
+
#include <inttypes.h>
+#include "LCD.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  LiquidCrystal_SR_LCD3
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html new file mode 100644 index 0000000..9888666 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html @@ -0,0 +1,129 @@ + + + + +LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h Source File + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h
+
+
+Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
+00002 // Created by Francisco Malpartida on 20/08/11.
+00003 // Copyright 2011 - Under creative commons license 3.0:
+00004 //        Attribution-ShareAlike CC BY-SA
+00005 //
+00006 // This module is a port by Marc MERLIN <marc_soft<at>merlins.org>
+00007 // See .cpp file for hardware details.
+00008 // ---------------------------------------------------------------------------
+00009 #ifndef _LIQUIDCRYSTAL_SR_LCD3_
+00010 #define _LIQUIDCRYSTAL_SR_LCD3_
+00011 
+00012 #include <inttypes.h>
+00013 #include "LCD.h"
+00014 
+00015 
+00016 class LiquidCrystal_SR_LCD3 : public LCD
+00017 {
+00018 public:
+00030    LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, uint8_t enable );
+00031    
+00044    virtual void send(uint8_t value, uint8_t mode);
+00045    
+00046    
+00047 private:
+00048    
+00054    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
+00055               uint8_t font );
+00061    void write4bits ( uint8_t );
+00062    void _pushOut ( uint8_t );
+00063    
+00064    // Serial Data pin
+00065    fio_bit _srdata_bit;
+00066    fio_register _srdata_register;
+00067    
+00068    // Clock Pin
+00069    fio_bit _srclock_bit;
+00070    fio_register _srclock_register;
+00071    
+00072    // Enable Pin
+00073    fio_bit _strobe_bit;
+00074    fio_register _strobe_register;
+00075 };
+00076 
+00077 #endif
+00078 
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/annotated.html b/libraries/LiquidCrystal/docs/html/annotated.html new file mode 100644 index 0000000..4fab574 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/annotated.html @@ -0,0 +1,95 @@ + + + + +LCD Library: Class List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + +
I2CIO
LCD
LiquidCrystal
LiquidCrystal_I2C
LiquidCrystal_SR
LiquidCrystal_SR2W
LiquidCrystal_SR3W
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/bc_s.png b/libraries/LiquidCrystal/docs/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..e4018628b5b45cb4301037485a29d7d74ac22138 GIT binary patch literal 677 zcmV;W0$TlvP)X?0Pv5h+5!wElpi=&YL!gfY!djl#UDdPKy97F|A-deTa@qo3BWh1YQIvzmHR^g zFjV4I6pLB7_*vEZk^%p7c7Bh>0`4r^X#gpJE_Vz9fSHKqclcZaV^k3gX%h+1`u||O zZ+BY?7(R=ayr^kXE=E0Dw=$Ud3VJ?9^Cz@hP?388Cw5>9TloOJ>^KczCgj zns2=|0!a|)Yq3{hjL{xyy7|Tk0N}Pe+g9PUTL!4{#;eUhrNd@!_T<>Vu+35c)h>sq ztgb?(6W3oFLz#%?OMEV@{j#4LuDvjVGZ~6hpQT8li5b0yjvK8c4efl+vSz5)P6 zle78)00_Iv5)&E~hnOdcd}L}i+MU>k+Q8#@KjqJJN`gRj(~)RmNrck9ht@LelPtVO zwp(J;k!T=gC#%o(13-^E+g@aqc()pf{+j|0w)AH*Mq$54UjLv#jV$RYpz3Vjg$$=u z>yjfBQOhL=^@+#4#$l|{~}HZ-?1Yy{lI*$N}*YDC`<{+;>_#gMXZdz4NI00000 LNkvXXu0mjfx86dR literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/class_i2_c_i_o-members.html b/libraries/LiquidCrystal/docs/html/class_i2_c_i_o-members.html new file mode 100644 index 0000000..01d0efd --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_i2_c_i_o-members.html @@ -0,0 +1,95 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
I2CIO Member List
+
+
+This is the complete list of members for I2CIO, including all inherited members. + + + + + + + + +
begin(uint8_t i2cAddr)I2CIO
digitalRead(uint8_t pin)I2CIO
digitalWrite(uint8_t pin, uint8_t level)I2CIO
I2CIO()I2CIO
pinMode(uint8_t pin, uint8_t dir)I2CIO
portMode(uint8_t dir)I2CIO
read(void)I2CIO
write(uint8_t value)I2CIO
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_i2_c_i_o.html b/libraries/LiquidCrystal/docs/html/class_i2_c_i_o.html new file mode 100644 index 0000000..bee1a49 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_i2_c_i_o.html @@ -0,0 +1,339 @@ + + + + +LCD Library: I2CIO Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
I2CIO Class Reference
+
+
+ +

#include <I2CIO.h>

+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

int begin (uint8_t i2cAddr)
uint8_t digitalRead (uint8_t pin)
int digitalWrite (uint8_t pin, uint8_t level)
 I2CIO ()
void pinMode (uint8_t pin, uint8_t dir)
void portMode (uint8_t dir)
uint8_t read (void)
int write (uint8_t value)
+

Detailed Description

+
+

Definition at line 41 of file I2CIO.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
I2CIO::I2CIO ()
+
+
+

Constructor method Class constructor constructor.

+ +

Definition at line 44 of file I2CIO.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
int I2CIO::begin (uint8_t i2cAddr)
+
+
+

Initializes the device. This method initializes the device allocating an I2C address. This method is the first method that should be call prior to calling any other method form this class. On initialization all pins are configured as INPUT on the device.

+
Parameters:
+ + +
i2cAddr,:I2C Address where the device is located.
+
+
+
Returns:
1 if the device was initialized correctly, 0 otherwise
+ +

Definition at line 57 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
uint8_t I2CIO::digitalRead (uint8_t pin)
+
+
+

Read a pin from the device. Reads a particular pin from the device. To read a particular pin it has to be configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

+
Parameters:
+ + +
pin[in]Pin from the port to read its status. Range (0..7)
+
+
+
Returns:
Returns the pin status (HIGH, LOW) if the pin is configured as an output, reading its value will always return LOW regardless of its real state.
+ +

Definition at line 153 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int I2CIO::digitalWrite (uint8_t pin,
uint8_t level 
)
+
+
+

Writes a digital level to a particular pin. Write a level to the indicated pin of the device. For this method to have effect, the pin has to be configured as OUTPUT using the pinMode or portMode methods.

+
Parameters:
+ + +
pin[in]device pin to change level. Range (0..7). level[in] logic level to set the pin at (HIGH, LOW).
+
+
+
Returns:
1 on success, 0 otherwise.
+ +

Definition at line 170 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void I2CIO::pinMode (uint8_t pin,
uint8_t dir 
)
+
+
+

Sets the mode of a particular pin. Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite has no effect on pins which are not declared as output.

+
Parameters:
+ + + +
pin[in]Pin from the I2C IO expander to be configured. Range 0..7
dir[in]Pin direction (INPUT, OUTPUT).
+
+
+ +

Definition at line 76 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void I2CIO::portMode (uint8_t dir)
+
+
+

Sets all the pins of the device in a particular direction. This method sets all the pins of the device in a particular direction. This method is useful to set all the pins of the device to be either inputs or outputs.

+
Parameters:
+ + +
dir[in]Direction of all the pins of the device (INPUT, OUTPUT).
+
+
+ +

Definition at line 93 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
uint8_t I2CIO::read (void )
+
+
+

Reads all the pins of the device that are configured as INPUT. Reads from the device the status of the pins that are configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 111 of file I2CIO.cpp.

+ +
+
+ +
+
+ + + + + + + + +
int I2CIO::write (uint8_t value)
+
+
+

Write a value to the device. Writes to a set of pins in the device. The value is the binary representation of all the pins in device. The value written is masked with the configuration of the direction of the pins; to change the state of a particular pin with this method, such pin has to be configured as OUTPUT using the portMode or pinMode methods. If no pins have been configured as OUTPUTs this method will have no effect.

+
Parameters:
+ + +
value[in]value to be written to the device.
+
+
+
Returns:
1 on success, 0 otherwise
+ +

Definition at line 130 of file I2CIO.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_l_c_d-members.html b/libraries/LiquidCrystal/docs/html/class_l_c_d-members.html new file mode 100644 index 0000000..95c0aa6 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_l_c_d-members.html @@ -0,0 +1,120 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LCD Member List
+
+
+This is the complete list of members for LCD, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_l_c_d.html b/libraries/LiquidCrystal/docs/html/class_l_c_d.html new file mode 100644 index 0000000..a63437a --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_l_c_d.html @@ -0,0 +1,982 @@ + + + + +LCD Library: LCD Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LCD Class Reference
+
+
+ +

#include <LCD.h>

+
+Inheritance diagram for LCD:
+
+
+ + +LiquidCrystal +LiquidCrystal_I2C +LiquidCrystal_SR +LiquidCrystal_SR2W +LiquidCrystal_SR3W + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void autoscroll ()
void backlight (void)
virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
void blink ()
void clear ()
void createChar (uint8_t location, uint8_t charmap[])
void cursor ()
void display ()
void home ()
 LCD ()
void leftToRight ()
void moveCursorLeft ()
void moveCursorRight ()
void noAutoscroll ()
void noBacklight (void)
void noBlink ()
void noCursor ()
void noDisplay ()
void off (void)
void on (void)
void rightToLeft ()
void scrollDisplayLeft ()
void scrollDisplayRight ()
virtual void setBacklight (uint8_t value)
virtual void setBacklightPin (uint8_t value, t_backlighPol pol)
void setCursor (uint8_t col, uint8_t row)
virtual void write (uint8_t value)

+Protected Attributes

uint8_t _cols
uint8_t _displaycontrol
uint8_t _displayfunction
uint8_t _displaymode
uint8_t _numlines
t_backlighPol _polarity
+

Detailed Description

+
+

Definition at line 169 of file LCD.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
LCD::LCD ()
+
+
+

LiquidCrystal abstract constructor. LiquidCrystal class abstract constructor needed to create the base abstract class.

+ +

Definition at line 49 of file LCD.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void LCD::autoscroll (void )
+
+
+

Turns on automatic scrolling of the LCD. Turns on automatic scrolling of the LCD. This causes each character output to the display to push previous characters over by one space. If the current text direction is left-to-right (the default), the display scrolls to the left; if the current direction is right-to-left, the display scrolls to the right. This has the effect of outputting each new character to the same location on the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 271 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::backlight (void )
+
+
+

Switch-on the LCD backlight. Switch-on the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+ +

Definition at line 301 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void LCD::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
+
+
+

LCD initialization. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class.

+

This method is abstract, a base implementation is available common to all LCD drivers. Should it not be compatible with some other LCD driver, a derived implementation should be done on the driver specif class.

+
Parameters:
+ + + + +
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]character size, default==LCD_5x8DOTS
+
+
+ +

Reimplemented in LiquidCrystal_I2C.

+ +

Definition at line 76 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::blink ()
+
+
+

Display the cursor of the LCD. Display the blinking LCD cursor. If used in combination with the cursor() function, the result will depend on the particular display.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 226 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::clear ()
+
+
+

Clears the LCD. Clears the LCD screen and positions the cursor in the upper-left corner.

+

This operation is time consuming for the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 159 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LCD::createChar (uint8_t location,
uint8_t charmap[] 
)
+
+
+

Creates a custom character for use on the LCD. Create a custom character (glyph) for use on the LCD. Most chipsets only support up to eight characters of 5x8 pixels. Therefore, this methods has been limited to locations (numbered 0 to 7).

+

The appearance of each custom character is specified by an array of eight bytes, one for each row. The five least significant bits of each byte determine the pixels in that row. To display a custom character on screen, write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7.

+
Parameters:
+ + + +
location[in]LCD memory location of the character to create (0 to 7)
charmap[in]the bitmap array representing each row of the character.
+
+
+ +

Definition at line 285 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::cursor ()
+
+
+

Display the LCD cursor. Display the LCD cursor: an underscore (line) at the location where the next character will be written.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 213 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::display ()
+
+
+

Turns on the LCD display. Turns on the LCD display, after it's been turned off with noDisplay(). This will restore the text (and cursor location) that was on the display prior to calling noDisplay().

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 201 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::home ()
+
+
+

Sets the cursor to the upper-left corner. Positions the cursor in the upper-left of the LCD. That is, use that location in outputting subsequent text to the display. To also clear the display, use the clear() function instead.

+

This operation is time consuming for the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 165 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::leftToRight (void )
+
+
+

Set the direction for text written to the LCD to left-to-right. Set the direction for text written to the LCD to left-to-right. All subsequent characters written to the display will go from left to right, but does not affect previously-output text.

+

This is the default configuration.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 244 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::moveCursorLeft (void )
+
+
+

Moves the cursor one space to the left.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 264 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::moveCursorRight (void )
+
+
+

Moves the cursor one space to the right.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 258 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::noAutoscroll (void )
+
+
+

Turns off automatic scrolling of the LCD. Turns off automatic scrolling of the LCD, this is the default configuration of the LCD.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 278 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::noBacklight (void )
+
+
+

Switch-off the LCD backlight. Switch-off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+ +

Definition at line 308 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noBlink ()
+
+
+

Turns off the blinking of the LCD cursor.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 220 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noCursor ()
+
+
+

Hides the LCD cursor.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 208 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + +
void LCD::noDisplay ()
+
+
+

Turns off the LCD display. Turns off the LCD display, without losing the text currently being displayed on it.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 195 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::off (void )
+
+
+

Switch off the LCD module. Switch off the LCD module, it will switch off the LCD controller and the backlight. This method has the same effect of calling noDisplay and noBacklight.

+
See also:
display,
+
+backlight
+ +

Definition at line 323 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::on (void )
+
+
+

Switch on the LCD module. Switch on the LCD module, it will switch on the LCD controller and the backlight. This method has the same effect of calling display and backlight.

+
See also:
display,
+
+backlight
+ +

Definition at line 315 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::rightToLeft (void )
+
+
+

Set the direction for text written to the LCD to right-to-left. Set the direction for text written to the LCD to right-to-left. All subsequent characters written to the display will go from right to left, but does not affect previously-output text.

+

left-to-right is the default configuration.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 251 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::scrollDisplayLeft (void )
+
+
+

Scrolls the contents of the display (text and cursor) one space to the left.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 233 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::scrollDisplayRight (void )
+
+
+

Scrolls the contents of the display (text and cursor) one space to the right.

+
Parameters:
+ + +
none
+
+
+ +

Definition at line 238 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
virtual void LCD::setBacklight (uint8_t value) [inline, virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. The behaviour of this method is very dependent on the device. Some controllers support dimming some don't. Please read the actual header file for each individual device. The setBacklightPin method has to be called before setting the backlight or the adequate backlight control constructor.

+
See also:
setBacklightPin.
+

NOTE: The prefered methods to control the backlight are "backlight" and "noBacklight".

+
Parameters:
+ + +
0..255- the value is very dependent on the LCD. However, BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the backlight on.
+
+
+ +

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_SR, LiquidCrystal_SR2W, and LiquidCrystal_SR3W.

+ +

Definition at line 463 of file LCD.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
virtual void LCD::setBacklightPin (uint8_t value,
t_backlighPol pol 
) [inline, virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This method is device dependent and can be programmed on each subclass. An empty function call is provided that does nothing.

+
Parameters:
+ + + +
value,:pin associated to backlight control.
pol,:backlight polarity control (POSITIVE, NEGATIVE)
+
+
+ +

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_SR, and LiquidCrystal_SR3W.

+ +

Definition at line 444 of file LCD.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LCD::setCursor (uint8_t col,
uint8_t row 
)
+
+
+

Position the LCD cursor. Sets the position of the LCD cursor. Set the location at which subsequent text written to the LCD will be displayed.

+
Parameters:
+ + + +
col[in]LCD column
row[in]LCD row - line.
+
+
+ +

Definition at line 171 of file LCD.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LCD::write (uint8_t value) [virtual]
+
+
+

Writes to the LCD. This method writes character to the LCD in the current cursor position.

+

This is the virtual write method, implemented in the Print class, therefore all Print class methods will end up calling this method.

+
Parameters:
+ + +
value[in]Value to write to the LCD.
+
+
+ +

Definition at line 337 of file LCD.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
uint8_t LCD::_cols [protected]
+
+
+ +

Definition at line 497 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displaycontrol [protected]
+
+
+ +

Definition at line 493 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displayfunction [protected]
+
+
+ +

Definition at line 491 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_displaymode [protected]
+
+
+ +

Definition at line 495 of file LCD.h.

+ +
+
+ +
+
+ + + + +
uint8_t LCD::_numlines [protected]
+
+
+ +

Definition at line 496 of file LCD.h.

+ +
+
+ +
+
+ + + + +
t_backlighPol LCD::_polarity [protected]
+
+
+ +

Definition at line 498 of file LCD.h.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_l_c_d.png b/libraries/LiquidCrystal/docs/html/class_l_c_d.png new file mode 100644 index 0000000000000000000000000000000000000000..da99cfc6e256ad6e8bd9e747b00e1c400bdc6f36 GIT binary patch literal 870 zcmeAS@N?(olHy`uVBq!ia0y~yV44SH2XHV0$@Z(QK0rz$z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op!P!?}UpIsYf8KDzQ^|DNlg&x?syT?&4o`DMxS3&Br16faNc z=qS3OE@iuP_Pjv5W6HKqt*Xw=evx+-s6+&&^3UrkzT-3czf947At~5A>2RUd^5t{Z zKiAjP0~_C2f|?v{B<)^GNF23of1xL+NYt?M_ARjf|_ zf>l7~3r#1e9;GjTW?xqPq*ul*W3h#i-L~+-1vZ&4M;e>wSrlY2^Hn`Mu#nf{MJF>t z##y@Hf-rmEV;TG7MfPSg?0ws1?6(UCZ)arhOXtfy;OKuDr1?drRY8oy`3RY?{e2zB zPxm)pTVJ2yT=r6eji=t8zs6YhrLRW$@mnj>``$f0o%yv|v+sP>zMWP!JLb>JT>AK- zeZ9nw$n!pvIG<-;@z&inRo_43>gU%oxx3Sk=!*4syuA5z-pfzAi`KMOI?CL%4fZ;J zKKf|pZChhcvsX8_{$aD-f9~Rv^d5o7o|-YaSHCjNsEhk`VO_f4%TH1DTcc)u@yT+k zWX`*`Ir?W7v-ErG=EZv+%UeW!jaf6}>dW|=pNYF~ElGEJxr*EU%bCnW8zvsvurTN1 zX78ULi|>3n_h`oanBpa`EcKf=e!2doCcf&P`R~^^FSNWeown}zu}{H`IkwxkFI+$G zbMoZ)cbrR~Pd-<*Z9>TA>1&@q`*eBg(IU(C%yF?#rGzvFF5*hN4kFe9Oj%md4gZv_WGWGa_Mk*s)ME3tC@FO zipp2dn|u0v?9T=1@6CE9Ut0J4m08h;X=%Du)9)R=IQNOL`**jPKIOpkZ(TC0_U%$` zs|h^sta5y-#f^^Bg->4YOx~OFva)35vzIr^#oylpikZB=seCr-!H>l + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal Member List
+
+
+This is the complete list of members for LiquidCrystal, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal [virtual]
setBacklight(uint8_t value)LiquidCrystal [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal.html new file mode 100644 index 0000000..efed1c2 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal.html @@ -0,0 +1,827 @@ + + + + +LCD Library: LiquidCrystal Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal Class Reference
+
+
+ +

#include <LiquidCrystal.h>

+
+Inheritance diagram for LiquidCrystal:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + + + + + +

+Public Member Functions

 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 44 of file LiquidCrystal.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

8 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

+ +

Definition at line 55 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+ +

Definition at line 62 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 82 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 91 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
+
+
+

4 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

+ +

Definition at line 69 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
+
+
+ +

Definition at line 75 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 100 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 108 of file LiquidCrystal.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + +
valueValue to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 122 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin. For dimming control of the backlight, the configuration pin must be a PWM output pin. Dim control is achieved by passing a value from 1 to 255 as a parameter. If the pin configured when calling the setBacklightPin does not support PWM, then: (0) backlight off, (1..255) backlight on.
+
Parameters:
+ + +
value,:backlight value. 0: off, 1..255: dim control of the backlight. For negative logic 255: off, 254..0: dim control.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 165 of file LiquidCrystal.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

+
Parameters:
+ + + +
pin,:pin assigned to the backlight
pol,:backlight pin control polarity (POSITIVE, NEGATIVE).
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 155 of file LiquidCrystal.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..6b24dede9b207104dd4c46f9b02419458cbd892f GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^p+FqK!3-qhpPjr7q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNjDTYAJzX3_Dj46+y~x+Bz~fq-e&~PwCpn#^ zXXjWf37mdgLSRXIklqh1@3xblX5}x5b7|enaN*Q1zu<+gYnKN^pV;X6N_ORD(}1s* zq3idsd+ZfAeR{t3&ME$6{bkc8HTo_D5@#3Mc`+}UNMC3NB}pWdmz z?`bjIR@@RN{g3tg%k7ieR|p6??0$Ib;8ia{1*On%jCg|yL+~&N*HgM9an2~{bvZX-jP10a@9YN qJKqMEyY~cDyH7NKxOj!+H@1V-!b+`=-hT#qox#)9&t;ucLK6T^;h#wW literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html new file mode 100644 index 0000000..987f1e2 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c-members.html @@ -0,0 +1,127 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_I2C Member List
+
+
+This is the complete list of members for LiquidCrystal_I2C, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LiquidCrystal_I2C [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_I2C(uint8_t lcd_Addr)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_I2C [virtual]
setBacklight(uint8_t value)LiquidCrystal_I2C [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_I2C [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html new file mode 100644 index 0000000..1a51edb --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.html @@ -0,0 +1,599 @@ + + + + +LCD Library: LiquidCrystal_I2C Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_I2C Class Reference
+
+
+ +

#include <LiquidCrystal_I2C.h>

+
+Inheritance diagram for LiquidCrystal_I2C:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 38 of file LiquidCrystal_I2C.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
+
+
+ +

Definition at line 96 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 102 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs 
)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
+
+
+ +

Definition at line 109 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 115 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + + + + + +
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
d4[in]LCD data 0 pin map on IO extender module
d5[in]LCD data 1 pin map on IO extender module
d6[in]LCD data 2 pin map on IO extender module
d7[in]LCD data 3 pin map on IO extender module
+
+
+ +

Definition at line 123 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
+
+
+ +

Definition at line 130 of file LiquidCrystal_I2C.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
+
+
+

LCD initialization and associated HW. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class or parent class.

+

The begin method can be overloaded if necessary to initialize any HW that is implemented by a library and can't be done during construction, here we use the Wire class.

+
Parameters:
+ + + + +
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]size of the characters of the LCD: LCD_5x8DOTS or LCD_5x10DOTS.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 144 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 240 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_I2C::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
value,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 167 of file LiquidCrystal_I2C.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_I2C::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

+
Parameters:
+ + +
0,:backlight off, 1..255: backlight on.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 158 of file LiquidCrystal_I2C.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___i2_c.png new file mode 100644 index 0000000000000000000000000000000000000000..3f20cd28a855e5c70c44304f733b3ea0a2f49990 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^`9K`N!3-o7%x`M}DTx4|5ZC|z{{xvX-h3_XKQsZz z0^5`_IcC)8@6loc?6u_j|vt z)Oo+Mzc>HM#O*VuYo`XjTJ>W|L3ye2sraK<8aQ@+5)@I1>b)j|6 zt-Ate-~THwJ@qv8T=BP$|YIC=Oy{fT&G%8*FV~DM#oY%|JT1Y z?2CSFX)&1<9WDJe)5><@uQ&Sr!K!SI|9h>nZcV!VZu9f@-m(|zdB*u)uRZ06QzT{=YsT#Z1{#B>tDnm{r-UW|>A|ym literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html new file mode 100644 index 0000000..ce67c0e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r-members.html @@ -0,0 +1,122 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR Member List
+
+
+This is the complete list of members for LiquidCrystal_SR, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR(uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)LiquidCrystal_SR
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal_SR [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html new file mode 100644 index 0000000..8df2b71 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.html @@ -0,0 +1,271 @@ + + + + +LCD Library: LiquidCrystal_SR Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR Class Reference
+
+
+ +

#include <LiquidCrystal_SR.h>

+
+Inheritance diagram for LiquidCrystal_SR:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

 LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 94 of file LiquidCrystal_SR.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata,
uint8_t srclock,
uint8_t enable = TWO_WIRE 
)
+
+
+

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]optional direct enable pin for the LCD
+
+
+ +

Definition at line 98 of file LiquidCrystal_SR.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + +
value[in]Value to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 172 of file LiquidCrystal_SR.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR::setBacklight (uint8_t mode) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
mode,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 207 of file LiquidCrystal_SR.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

+
Warning:
Currently not supported
+
Parameters:
+ + + +
mode,:backlight mode (HIGH|LOW)
pol,:backlight polarity
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 202 of file LiquidCrystal_SR.cpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h
  • +
  • /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r.png new file mode 100644 index 0000000000000000000000000000000000000000..04adf583574c8aca992be0cbb3cc8a94df81171d GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^IY1o1!3-o%GbCsNDTx4|5ZC|z{{xvX-h3_XKQsZz z0^zYjr#{J0y{n*V!XkBIO*}T z?89f?&b=CFuD|-bPR`+7)jhn$M$vYIcoQv8J_ms!`{hZfXc`LU&{f|jMG%YXWPZGoIgF;U^ Zk7h|Q-kJL90WicEJYD@<);T3K0RV%#t6~5E literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html new file mode 100644 index 0000000..16d73a4 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w-members.html @@ -0,0 +1,122 @@ + + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR2W Member List
+
+
+This is the complete list of members for LiquidCrystal_SR2W, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR2W(uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)LiquidCrystal_SR2W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html new file mode 100644 index 0000000..9db40e9 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.html @@ -0,0 +1,230 @@ + + + + +LCD Library: LiquidCrystal_SR2W Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR2W Class Reference
+
+
+ +

#include <LiquidCrystal_SR2W.h>

+
+Inheritance diagram for LiquidCrystal_SR2W:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

 LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
+

Detailed Description

+
+

Definition at line 137 of file LiquidCrystal_SR2W.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata,
uint8_t srclock,
t_backlighPol blpol = POSITIVE 
)
+
+
+

LCD 2 wire SHIFT REGISTER constructor. Defines the pin assignments that connect to the shift register. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]Arduino pin for shift register data line.
srclock[in]Arduino pin for shift register clock line.
blpol[in]optional backlight polarity (default = POSITIVE)
+
+
+ +

Definition at line 37 of file LiquidCrystal_SR2W.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR2W::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 90 of file LiquidCrystal_SR2W.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR2W::setBacklight (uint8_t mode) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
mode[in]backlight mode (0 off, non-zero on)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 117 of file LiquidCrystal_SR2W.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r2_w.png new file mode 100644 index 0000000000000000000000000000000000000000..774ed614fb08090bf0c6e5165026acf1454333e8 GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^bwC`z!3-o{L>vAAQW60^A+G=b{|AY@`C8h4XabN0 z#s>}@VC}pk59D%`1o;Is02P72)l(rx3=E9Ao-U3d6^w7^-V|y!;Ba-Gd-8vMk$g(; zvDBcY+oo?+bvwkkY40@6&{JQ$L>@HSt1jVHN?Ka`{bA>Sm;2q@m5zizX#9V5s{U`A z^!ty`u*>~e{y2CkkC$xehm@MNEC0lRh?GC`*VjB~WS6Ue5&xt=PSI*L%4WCu&|7rh zSMXxhnrpB3ZT`Av-*YzU6Zx$7dxM-Ty2P{B`+ogUeBh4mvn6#UJ-Zaoou1U)_+tV8 zL(hg!hXlgI=J(hc9y=ub^usyUXF)FBwwqajTynb8I9!DE}jk&E6i?-d` zcjxgBgMz~vuQqgje>U&(!)Z?+eE7T5zI*#CO`AQp_wfh6oL+BnIORU~z5cjI)z+1t yHFmtZaQFM&%@eBsMEz;c + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR3W Member List
+
+
+This is the complete list of members for LiquidCrystal_SR3W, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR3W [virtual]
setBacklight(uint8_t value)LiquidCrystal_SR3W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_SR3W [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html new file mode 100644 index 0000000..8354be6 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.html @@ -0,0 +1,501 @@ + + + + +LCD Library: LiquidCrystal_SR3W Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR3W Class Reference
+
+
+ +

#include <LiquidCrystal_SR3W.h>

+
+Inheritance diagram for LiquidCrystal_SR3W:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + + + + + + +

+Public Member Functions

 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
+

Detailed Description

+
+

Definition at line 66 of file LiquidCrystal_SR3W.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe 
)
+
+
+

Class constructor. Initializes class variables and defines the IO driving the shift register. The constructor does not initialize the LCD. Default configuration: Shift register LCD QA - 0 DB4 QB - 1 DB5 QC - 2 DB6 QD - 3 DB7 QE - 4 E QF - 5 QG - 6 Rs GND Rw

+
Parameters:
+ + + + +
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to the shiftregister data pin.
clk[in]digital IO connected to the shiftregister clock pin.
+
+
+ +

Definition at line 133 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t backlighPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 138 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
+
+
+

Class constructor. Initializes class variables and defines the control lines of the LCD and the shiftregister. The constructor does not initialize the LCD.

+
Parameters:
+ + + + + + + + + + + +
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to shiftregister data pin.
clk[in]digital IO connected to shiftregister clock pin.
En[in]LCD En (Enable) pin connected to SR output pin.
Rw[in]LCD Rw (Read/write) pin connected to SR output pin.
Rs[in]LCD Rs (Reg Select) pin connected to SR output pin.
d4[in]LCD data 4 pin map to the SR output pin.
d5[in]LCD data 5 pin map to the SR output pin.
d6[in]LCD data 6 pin map to the SR output pin.
d7[in]LCD data 7 pin map to the SR output pin.
+
+
+ +

Definition at line 145 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol 
)
+
+
+ +

Definition at line 152 of file LiquidCrystal_SR3W.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR3W::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

+

Users should never call this method.

+
Parameters:
+ + + +
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 162 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + +
void LiquidCrystal_SR3W::setBacklight (uint8_t value) [virtual]
+
+
+

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

+
See also:
setBacklightPin.
+
Parameters:
+ + +
value,:backlight mode (HIGH|LOW)
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 191 of file LiquidCrystal_SR3W.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR3W::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
+
+
+

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

+
Parameters:
+ + +
0,:backlight off, 1..255: backlight on.
+
+
+ +

Reimplemented from LCD.

+ +

Definition at line 183 of file LiquidCrystal_SR3W.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r3_w.png new file mode 100644 index 0000000000000000000000000000000000000000..2d13cf718e3885b492dd215da5be2b7988a87a6f GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^bwC`z!3-o{L>vAAQW60^A+G=b{|AY@`C8h4XabN0 z#s>}@VC}pk59D%`1o;Is02P72)l(rx3=E7qo-U3d6^w7^z7;#9z|ppJ?&H7lMfOiF zpA9{pyQRufG;bll!i)QxmUu=&&+8ZGol`NM(#Sx>#^ zKmTHTuI54GervnXQ%kPgWPR7O-gN5xZV=J)|MMw!xrzskaALop|H>c@_JeuS@{8ivzELXZkUMX4w|cJ1$=OGuJ(?n?ww?aA z@rOa-@fG@eUz~q;uh_!omD=~KhTYrWXxi9B-~Y|~{BQ15`Ev#@t6!_n-hQm#s`9&r x#p?^Td%vA + + + +LCD Library: Member List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
LiquidCrystal_SR_LCD3 Member List
+
+
+This is the complete list of members for LiquidCrystal_SR_LCD3, including all inherited members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
command(uint8_t value)LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR_LCD3(uint8_t srdata, uint8_t srclock, uint8_t enable)LiquidCrystal_SR_LCD3
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR_LCD3 [virtual]
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html new file mode 100644 index 0000000..73b9d1e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.html @@ -0,0 +1,200 @@ + + + + +LCD Library: LiquidCrystal_SR_LCD3 Class Reference + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+ +
+
LiquidCrystal_SR_LCD3 Class Reference
+
+
+ +

#include <LiquidCrystal_SR_LCD3.h>

+
+Inheritance diagram for LiquidCrystal_SR_LCD3:
+
+
+ + +LCD + +
+ +

List of all members.

+ + + + +

+Public Member Functions

 LiquidCrystal_SR_LCD3 (uint8_t srdata, uint8_t srclock, uint8_t enable)
virtual void send (uint8_t value, uint8_t mode)
+

Detailed Description

+
+

Definition at line 16 of file LiquidCrystal_SR_LCD3.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 (uint8_t srdata,
uint8_t srclock,
uint8_t enable 
)
+
+
+

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

+
Parameters:
+ + + + +
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]enable pin for the shiftregister (also called strobe).
+
+
+ +

Definition at line 123 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LiquidCrystal_SR_LCD3::send (uint8_t value,
uint8_t mode 
) [virtual]
+
+
+

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

+

Users should never call this method.

+
Parameters:
+ + +
value[in]Value to send to the LCD.
+
+
+
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
+ +

Reimplemented from LCD.

+ +

Definition at line 171 of file LiquidCrystal_SR_LCD3.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png b/libraries/LiquidCrystal/docs/html/class_liquid_crystal___s_r___l_c_d3.png new file mode 100644 index 0000000000000000000000000000000000000000..966e05cf9e457c77110adb4bac0ccacd89e03711 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^lYuyZgBeI_xo@`xQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;CBIRS^hfzu~p*F??vQ*wj8=YCCD7WLUtHD#5le2AOc6WJLDSkw#}fhw4U zAyjMBN!B7gfViCZ|^Z0iXVSMhbBY8UxdpUImM z#{Jkr@T0+cOK!K_>;1%)zD>A0PfGsCT{|V`<1S8$vfJ*=>DqPmpH0O?<;b*I^XBHg z?>T1C>bU<}aPRxe@{hJ0NjcZ~_T8?Vulx;mwu*b5PA{)L{?%^d<3CS>Rf7Ic$~1hh z^TX@Oudw;IDn8G({CrL{LDQkp(>!v8|K_gZ$W3;?w(T*uxV#`(tbM!D-Jf2|>Y5L- eEVK3b`Gno9Lc!XlKtlx>& + + + +LCD Library: Class Index + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class Index
+
+
+
I | L
+ +
  I  
+
  L  
+
LiquidCrystal   LiquidCrystal_SR   LiquidCrystal_SR3W   
I2CIO   LCD   LiquidCrystal_I2C   LiquidCrystal_SR2W   
I | L
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/closed.png b/libraries/LiquidCrystal/docs/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d4bd9fef2272c74b94762c9e2496177017775e GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VuAVNAAr*{o?>h22DDp4|bgj*t z)u^AqcA-V@guRYpb17F<&b?_~8HV>~XqWvB;^$!VVSTy0!eQcJp_yD7TIQA>7dijs YXf6~H5cs^Q6KEiVr>mdKI;Vst0NsWqGynhq literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/doxygen.css b/libraries/LiquidCrystal/docs/html/doxygen.css new file mode 100644 index 0000000..74445fe --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/doxygen.css @@ -0,0 +1,835 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 12px; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +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: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + padding: 2px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code { + color: #4665A2; +} + +a.codeRef { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +.fragment { + font-family: monospace, fixed; + font-size: 105%; +} + +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%; +} + +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: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 10px; + margin-right: 5px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +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 +} + +/* @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 #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; +} + +.memname { + white-space: nowrap; + font-weight: bold; + margin-left: 6px; +} + +.memproto { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + +} + +.memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 2px 5px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.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; +} + + + + +/* @end */ + +/* @group Directory (tree) */ + +/* for the tree view */ + +.ftvtree { + font-family: sans-serif; + margin: 0px; +} + +/* these are for tree view when used as main index */ + +.directory { + font-size: 9pt; + font-weight: bold; + margin: 5px; +} + +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* +The following two styles can be used to replace the root node title +with an image of your choice. Simply uncomment the next two styles, +specify the name of your image and be sure to set 'height' to the +proper pixel height of your image. +*/ + +/* +.directory h3.swap { + height: 61px; + background-repeat: no-repeat; + background-image: url("yourimage.gif"); +} +.directory h3.swap span { + display: none; +} +*/ + +.directory > h3 { + margin-top: 0; +} + +.directory p { + margin: 0px; + white-space: nowrap; +} + +.directory div { + display: none; + margin: 0px; +} + +.directory img { + vertical-align: -30%; +} + +/* these are for tree view when not used as main index */ + +.directory-alt { + font-size: 100%; + font-weight: bold; +} + +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +.directory-alt > h3 { + margin-top: 0; +} + +.directory-alt p { + margin: 0px; + white-space: nowrap; +} + +.directory-alt div { + display: none; + margin: 0px; +} + +.directory-alt img { + vertical-align: -30%; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; +} + +.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; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + 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:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.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:#364D7C; + 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; + padding-left: 5px; + 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: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +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 +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#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 #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + diff --git a/libraries/LiquidCrystal/docs/html/doxygen.png b/libraries/LiquidCrystal/docs/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..635ed52fce7057ac24df92ec7664088a881fa5d0 GIT binary patch literal 3942 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 A+yDRo literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/files.html b/libraries/LiquidCrystal/docs/html/files.html new file mode 100644 index 0000000..7b5bf54 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/files.html @@ -0,0 +1,102 @@ + + + + +LCD Library: File List + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + + + + + + + + + + + + + + + +
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp [code]
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h [code]
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/functions.html b/libraries/LiquidCrystal/docs/html/functions.html new file mode 100644 index 0000000..7536d38 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/functions.html @@ -0,0 +1,319 @@ + + + + +LCD Library: Class Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- _ -

    +
  • _cols +: LCD +
  • +
  • _displaycontrol +: LCD +
  • +
  • _displayfunction +: LCD +
  • +
  • _displaymode +: LCD +
  • +
  • _numlines +: LCD +
  • +
  • _polarity +: LCD +
  • +
+ + +

- a -

    +
  • autoscroll() +: LCD +
  • +
+ + +

- b -

+ + +

- c -

    +
  • clear() +: LCD +
  • +
  • createChar() +: LCD +
  • +
  • cursor() +: LCD +
  • +
+ + +

- d -

    +
  • digitalRead() +: I2CIO +
  • +
  • digitalWrite() +: I2CIO +
  • +
  • display() +: LCD +
  • +
+ + +

- h -

    +
  • home() +: LCD +
  • +
+ + +

- i -

+ + +

- l -

+ + +

- m -

    +
  • moveCursorLeft() +: LCD +
  • +
  • moveCursorRight() +: LCD +
  • +
+ + +

- n -

    +
  • noAutoscroll() +: LCD +
  • +
  • noBacklight() +: LCD +
  • +
  • noBlink() +: LCD +
  • +
  • noCursor() +: LCD +
  • +
  • noDisplay() +: LCD +
  • +
+ + +

- o -

    +
  • off() +: LCD +
  • +
  • on() +: LCD +
  • +
+ + +

- p -

+ + +

- r -

    +
  • read() +: I2CIO +
  • +
  • rightToLeft() +: LCD +
  • +
+ + +

- s -

+ + +

- w -

+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/functions_func.html b/libraries/LiquidCrystal/docs/html/functions_func.html new file mode 100644 index 0000000..6b7e721 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/functions_func.html @@ -0,0 +1,296 @@ + + + + +LCD Library: Class Members - Functions + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+  + +

- a -

    +
  • autoscroll() +: LCD +
  • +
+ + +

- b -

+ + +

- c -

    +
  • clear() +: LCD +
  • +
  • createChar() +: LCD +
  • +
  • cursor() +: LCD +
  • +
+ + +

- d -

    +
  • digitalRead() +: I2CIO +
  • +
  • digitalWrite() +: I2CIO +
  • +
  • display() +: LCD +
  • +
+ + +

- h -

    +
  • home() +: LCD +
  • +
+ + +

- i -

+ + +

- l -

+ + +

- m -

    +
  • moveCursorLeft() +: LCD +
  • +
  • moveCursorRight() +: LCD +
  • +
+ + +

- n -

    +
  • noAutoscroll() +: LCD +
  • +
  • noBacklight() +: LCD +
  • +
  • noBlink() +: LCD +
  • +
  • noCursor() +: LCD +
  • +
  • noDisplay() +: LCD +
  • +
+ + +

- o -

    +
  • off() +: LCD +
  • +
  • on() +: LCD +
  • +
+ + +

- p -

+ + +

- r -

    +
  • read() +: I2CIO +
  • +
  • rightToLeft() +: LCD +
  • +
+ + +

- s -

+ + +

- w -

+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/functions_vars.html b/libraries/LiquidCrystal/docs/html/functions_vars.html new file mode 100644 index 0000000..835fbb8 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/functions_vars.html @@ -0,0 +1,109 @@ + + + + +LCD Library: Class Members - Variables + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
    +
  • _cols +: LCD +
  • +
  • _displaycontrol +: LCD +
  • +
  • _displayfunction +: LCD +
  • +
  • _displaymode +: LCD +
  • +
  • _numlines +: LCD +
  • +
  • _polarity +: LCD +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals.html b/libraries/LiquidCrystal/docs/html/globals.html new file mode 100644 index 0000000..1df4aa4 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals.html @@ -0,0 +1,419 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+
Here is a list of all file members with links to the files they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- b -

    +
  • BACKLIGHT_OFF +: LCD.h +
  • +
  • BACKLIGHT_ON +: LCD.h +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

    +
  • HOME_CLEAR_EXEC +: LCD.h +
  • +
+ + +

- l -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

    +
  • waitUsec() +: LCD.h +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals_defs.html b/libraries/LiquidCrystal/docs/html/globals_defs.html new file mode 100644 index 0000000..687bef9 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals_defs.html @@ -0,0 +1,350 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + + +
+
+  + +

- _ -

+ + +

- a -

+ + +

- b -

    +
  • BACKLIGHT_OFF +: LCD.h +
  • +
  • BACKLIGHT_ON +: LCD.h +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

    +
  • HOME_CLEAR_EXEC +: LCD.h +
  • +
+ + +

- l -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals_enum.html b/libraries/LiquidCrystal/docs/html/globals_enum.html new file mode 100644 index 0000000..a6254c2 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals_enum.html @@ -0,0 +1,95 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
    +
  • t_backlighPol +: LCD.h +
  • +
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals_eval.html b/libraries/LiquidCrystal/docs/html/globals_eval.html new file mode 100644 index 0000000..426672c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals_eval.html @@ -0,0 +1,98 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals_func.html b/libraries/LiquidCrystal/docs/html/globals_func.html new file mode 100644 index 0000000..8599914 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals_func.html @@ -0,0 +1,128 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/globals_type.html b/libraries/LiquidCrystal/docs/html/globals_type.html new file mode 100644 index 0000000..d480edd --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/globals_type.html @@ -0,0 +1,98 @@ + + + + +LCD Library: File Members + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + + +
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/hierarchy.html b/libraries/LiquidCrystal/docs/html/hierarchy.html new file mode 100644 index 0000000..36aa829 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/hierarchy.html @@ -0,0 +1,97 @@ + + + + +LCD Library: Class Hierarchy + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ + +
+
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/index.html b/libraries/LiquidCrystal/docs/html/index.html new file mode 100644 index 0000000..8ad483a --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/index.html @@ -0,0 +1,78 @@ + + + + +LCD Library: Main Page + + + + + + + + +
+
+ + + + + + + +
+
LCD Library 1.2.1
+
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
+
+
+ +
+
+
+
LCD Library Documentation
+
+
+
+ + + + +
+ +
+ + + + diff --git a/libraries/LiquidCrystal/docs/html/installdox b/libraries/LiquidCrystal/docs/html/installdox new file mode 100644 index 0000000..edf5bbf --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/installdox @@ -0,0 +1,112 @@ +#!/usr/bin/perl + +%subst = ( ); +$quiet = 0; + +while ( @ARGV ) { + $_ = shift @ARGV; + if ( s/^-// ) { + if ( /^l(.*)/ ) { + $v = ($1 eq "") ? shift @ARGV : $1; + ($v =~ /\/$/) || ($v .= "/"); + $_ = $v; + if ( /(.+)\@(.+)/ ) { + if ( exists $subst{$1} ) { + $subst{$1} = $2; + } else { + print STDERR "Unknown tag file $1 given with option -l\n"; + &usage(); + } + } else { + print STDERR "Argument $_ is invalid for option -l\n"; + &usage(); + } + } + elsif ( /^q/ ) { + $quiet = 1; + } + elsif ( /^\?|^h/ ) { + &usage(); + } + else { + print STDERR "Illegal option -$_\n"; + &usage(); + } + } + else { + push (@files, $_ ); + } +} + +foreach $sub (keys %subst) +{ + if ( $subst{$sub} eq "" ) + { + print STDERR "No substitute given for tag file `$sub'\n"; + &usage(); + } + elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) + { + print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; + } +} + +if ( ! @files ) { + if (opendir(D,".")) { + foreach $file ( readdir(D) ) { + $match = ".html"; + next if ( $file =~ /^\.\.?$/ ); + ($file =~ /$match/) && (push @files, $file); + ($file =~ /\.svg/) && (push @files, $file); + ($file =~ "navtree.js") && (push @files, $file); + } + closedir(D); + } +} + +if ( ! @files ) { + print STDERR "Warning: No input files given and none found!\n"; +} + +foreach $f (@files) +{ + if ( ! $quiet ) { + print "Editing: $f...\n"; + } + $oldf = $f; + $f .= ".bak"; + unless (rename $oldf,$f) { + print STDERR "Error: cannot rename file $oldf\n"; + exit 1; + } + if (open(F,"<$f")) { + unless (open(G,">$oldf")) { + print STDERR "Error: opening file $oldf for writing\n"; + exit 1; + } + if ($oldf ne "tree.js") { + while () { + s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; + print G "$_"; + } + } + else { + while () { + s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; + print G "$_"; + } + } + } + else { + print STDERR "Warning file $f does not exist\n"; + } + unlink $f; +} + +sub usage { + print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; + print STDERR "Options:\n"; + print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; + print STDERR " -q Quiet mode\n\n"; + exit 1; +} diff --git a/libraries/LiquidCrystal/docs/html/jquery.js b/libraries/LiquidCrystal/docs/html/jquery.js new file mode 100644 index 0000000..c052173 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/jquery.js @@ -0,0 +1,54 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) +{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() +{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); +/* + * jQuery UI 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,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}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * ui.core.js + */ +(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('
').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=true;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=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{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"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,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}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) +{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; +/** + * jQuery.ScrollTo - Easy element scrolling using jQuery. + * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com + * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). + * Date: 2/8/2008 + * @author Ariel Flesler + * @version 1.3.2 + */ +;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); + diff --git a/libraries/LiquidCrystal/docs/html/logoGoogle.jpg b/libraries/LiquidCrystal/docs/html/logoGoogle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28f6ae16ac04311c6f63cb6bdd49a604a77d611b GIT binary patch literal 17184 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 Kb6Mw<&;$VTdq1fF literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/nav_h.png b/libraries/LiquidCrystal/docs/html/nav_h.png new file mode 100644 index 0000000000000000000000000000000000000000..01f5fa6a596e36bd12c2d6ceff1b0169fda7e699 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1`SUa$B+ufw|6&kG8phMJMJ~w va4>Y+bZ&9QY?(VEUPY_cGd9nQ`um^ZSUyYpAAuKhL7F^W{an^LB{Ts5DmojT literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/open.png b/libraries/LiquidCrystal/docs/html/open.png new file mode 100644 index 0000000000000000000000000000000000000000..7b35d2c2c389743089632fe24c3104f2173d97af GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vww^AIAr*{o=Nbw!DDW^(zOibV zl!F8B0?t?i!vld4k#$~0_AX3zElaokn + + + + + + +
+
Loading...
+
+
+ _cols + LCD +
+
+
+
+ _displaycontrol + LCD +
+
+
+
+ _displayfunction + LCD +
+
+
+
+ _displaymode + LCD +
+
+
+
+ _I2CIO_VERSION + I2CIO.h +
+
+
+
+ _numlines + LCD +
+
+
+
+ _polarity + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_61.html b/libraries/LiquidCrystal/docs/html/search/all_61.html new file mode 100644 index 0000000..77a85bb --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_61.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ ATOMIC_BLOCK + FastIO.h +
+
+
+
+ ATOMIC_RESTORESTATE + FastIO.h +
+
+
+
+ autoscroll + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_62.html b/libraries/LiquidCrystal/docs/html/search/all_62.html new file mode 100644 index 0000000..47c4abb --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_62.html @@ -0,0 +1,54 @@ + + + + + + + +
+
Loading...
+
+
+ backlight + LCD +
+
+
+
+ BACKLIGHT_OFF + LCD.h +
+
+
+
+ BACKLIGHT_ON + LCD.h +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_63.html b/libraries/LiquidCrystal/docs/html/search/all_63.html new file mode 100644 index 0000000..fd37373 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_63.html @@ -0,0 +1,44 @@ + + + + + + + +
+
Loading...
+
+
+ clear + LCD +
+
+
+
+ COMMAND + LCD.h +
+
+
+
+ createChar + LCD +
+
+
+
+ cursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_64.html b/libraries/LiquidCrystal/docs/html/search/all_64.html new file mode 100644 index 0000000..e66c526 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_64.html @@ -0,0 +1,80 @@ + + + + + + + +
+
Loading...
+ + + + +
+
+ DATA + LCD.h +
+
+
+
+ digitalRead + I2CIO +
+
+
+
+ digitalWrite + I2CIO +
+
+
+
+ display + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_65.html b/libraries/LiquidCrystal/docs/html/search/all_65.html new file mode 100644 index 0000000..7ac4e79 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_65.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+ +
+
+ EXEC_TIME + LiquidCrystal.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_66.html b/libraries/LiquidCrystal/docs/html/search/all_66.html new file mode 100644 index 0000000..f615e95 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_66.html @@ -0,0 +1,156 @@ + + + + + + + +
+
Loading...
+
+ +
+
+
+ FastIO.h +
+
+
+
+ fio_bit + FastIO.h +
+
+ + +
+
+ fio_digitalWrite_HIGH + FastIO.h +
+
+
+
+ fio_digitalWrite_LOW + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCH + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCHTO + FastIO.h +
+
+
+
+ FIO_FALLBACK + FastIO.h +
+
+ + + +
+
+ fio_register + FastIO.h +
+
+ + + +
+
+ FOUR_BITS + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_68.html b/libraries/LiquidCrystal/docs/html/search/all_68.html new file mode 100644 index 0000000..b476d6e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_68.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ home + LCD +
+
+
+
+ HOME_CLEAR_EXEC + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_69.html b/libraries/LiquidCrystal/docs/html/search/all_69.html new file mode 100644 index 0000000..2bbba17 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_69.html @@ -0,0 +1,39 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO + +
+
+
+
+ I2CIO.cpp +
+
+
+
+ I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_6c.html b/libraries/LiquidCrystal/docs/html/search/all_6c.html new file mode 100644 index 0000000..2b500de --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_6c.html @@ -0,0 +1,354 @@ + + + + + + + +
+
Loading...
+
+
+ LCD +
+ LCD + LCD::LCD() +
+
+
+
+
+ LCD.cpp +
+
+
+
+ LCD.h +
+
+
+
+ LCD_1LINE + LCD.h +
+
+
+
+ LCD_2LINE + LCD.h +
+
+
+
+ LCD_4BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_4BITMODE + LCD.h +
+
+
+
+ LCD_5x10DOTS + LCD.h +
+
+
+
+ LCD_5x8DOTS + LCD.h +
+
+
+
+ LCD_8BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_8BITMODE + LCD.h +
+
+ +
+
+ LCD_BLINKOFF + LCD.h +
+
+
+
+ LCD_BLINKON + LCD.h +
+
+
+
+ LCD_CLEARDISPLAY + LCD.h +
+
+
+
+ LCD_CURSORMOVE + LCD.h +
+
+
+
+ LCD_CURSOROFF + LCD.h +
+
+
+
+ LCD_CURSORON + LCD.h +
+
+
+
+ LCD_CURSORSHIFT + LCD.h +
+
+
+
+ LCD_DISPLAYCONTROL + LCD.h +
+
+
+
+ LCD_DISPLAYMOVE + LCD.h +
+
+
+
+ LCD_DISPLAYOFF + LCD.h +
+
+
+
+ LCD_DISPLAYON + LCD.h +
+
+
+
+ LCD_ENTRYLEFT + LCD.h +
+
+
+
+ LCD_ENTRYMODESET + LCD.h +
+
+
+
+ LCD_ENTRYRIGHT + LCD.h +
+
+
+ +
+
+ +
+
+
+ LCD_FUNCTIONSET + LCD.h +
+
+
+
+ LCD_MOVELEFT + LCD.h +
+
+
+
+ LCD_MOVERIGHT + LCD.h +
+
+ +
+
+ LCD_RETURNHOME + LCD.h +
+
+
+
+ LCD_SETCGRAMADDR + LCD.h +
+
+
+
+ LCD_SETDDRAMADDR + LCD.h +
+
+
+
+ leftToRight + LCD +
+
+ + + + + + + + + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_6d.html b/libraries/LiquidCrystal/docs/html/search/all_6d.html new file mode 100644 index 0000000..6a0ea3f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_6d.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ moveCursorLeft + LCD +
+
+
+
+ moveCursorRight + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_6e.html b/libraries/LiquidCrystal/docs/html/search/all_6e.html new file mode 100644 index 0000000..f3e1f8b --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_6e.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ NEGATIVE + LCD.h +
+
+
+
+ noAutoscroll + LCD +
+
+
+
+ noBacklight + LCD +
+
+ +
+
+ noCursor + LCD +
+
+
+
+ noDisplay + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_6f.html b/libraries/LiquidCrystal/docs/html/search/all_6f.html new file mode 100644 index 0000000..e5e659c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_6f.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ off + LCD +
+
+
+
+ on + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_70.html b/libraries/LiquidCrystal/docs/html/search/all_70.html new file mode 100644 index 0000000..29b653f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_70.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ pinMode + I2CIO +
+
+
+
+ portMode + I2CIO +
+
+
+
+ POSITIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_72.html b/libraries/LiquidCrystal/docs/html/search/all_72.html new file mode 100644 index 0000000..d2d6cc6 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_72.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ read + I2CIO +
+
+
+
+ rightToLeft + LCD +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_73.html b/libraries/LiquidCrystal/docs/html/search/all_73.html new file mode 100644 index 0000000..94765a5 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_73.html @@ -0,0 +1,117 @@ + + + + + + + +
+
Loading...
+
+
+ scrollDisplayLeft + LCD +
+
+
+
+ scrollDisplayRight + LCD +
+
+ + + +
+
+ setCursor + LCD +
+
+
+
+ SKIP + FastIO.h +
+
+
+
+ SR2W_BL_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_DATA_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_EN_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_RS_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR_EN_BIT + LiquidCrystal_SR.h +
+
+
+
+ SR_RS_BIT + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_74.html b/libraries/LiquidCrystal/docs/html/search/all_74.html new file mode 100644 index 0000000..61cec84 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_74.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ t_backlighPol + LCD.h +
+
+
+
+ TWO_WIRE + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/all_77.html b/libraries/LiquidCrystal/docs/html/search/all_77.html new file mode 100644 index 0000000..d81a974 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/all_77.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+
+
+ waitUsec + LCD.h +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/classes_69.html b/libraries/LiquidCrystal/docs/html/search/classes_69.html new file mode 100644 index 0000000..48921d3 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/classes_69.html @@ -0,0 +1,25 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/classes_6c.html b/libraries/LiquidCrystal/docs/html/search/classes_6c.html new file mode 100644 index 0000000..7054818 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/classes_6c.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ LCD +
+
+
+ +
+ + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/close.png b/libraries/LiquidCrystal/docs/html/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/search/defines_5f.html b/libraries/LiquidCrystal/docs/html/search/defines_5f.html new file mode 100644 index 0000000..8a9b6d1 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_5f.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ _I2CIO_VERSION + I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_61.html b/libraries/LiquidCrystal/docs/html/search/defines_61.html new file mode 100644 index 0000000..64e6e11 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_61.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ ATOMIC_BLOCK + FastIO.h +
+
+
+
+ ATOMIC_RESTORESTATE + FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_62.html b/libraries/LiquidCrystal/docs/html/search/defines_62.html new file mode 100644 index 0000000..e65a734 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_62.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ BACKLIGHT_OFF + LCD.h +
+
+
+
+ BACKLIGHT_ON + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_63.html b/libraries/LiquidCrystal/docs/html/search/defines_63.html new file mode 100644 index 0000000..d74c25d --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_63.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ COMMAND + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_64.html b/libraries/LiquidCrystal/docs/html/search/defines_64.html new file mode 100644 index 0000000..f47ef02 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_64.html @@ -0,0 +1,62 @@ + + + + + + + +
+
Loading...
+ + + + +
+
+ DATA + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_65.html b/libraries/LiquidCrystal/docs/html/search/defines_65.html new file mode 100644 index 0000000..7ac4e79 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_65.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+ +
+
+ EXEC_TIME + LiquidCrystal.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_66.html b/libraries/LiquidCrystal/docs/html/search/defines_66.html new file mode 100644 index 0000000..6225879 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_66.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ fio_digitalWrite_HIGH + FastIO.h +
+
+
+
+ fio_digitalWrite_LOW + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCH + FastIO.h +
+
+
+
+ fio_digitalWrite_SWITCHTO + FastIO.h +
+
+
+
+ FIO_FALLBACK + FastIO.h +
+
+
+
+ FOUR_BITS + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_68.html b/libraries/LiquidCrystal/docs/html/search/defines_68.html new file mode 100644 index 0000000..28e210e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_68.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ HOME_CLEAR_EXEC + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_6c.html b/libraries/LiquidCrystal/docs/html/search/defines_6c.html new file mode 100644 index 0000000..525e0b4 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_6c.html @@ -0,0 +1,219 @@ + + + + + + + +
+
Loading...
+
+
+ LCD_1LINE + LCD.h +
+
+
+
+ LCD_2LINE + LCD.h +
+
+
+
+ LCD_4BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_4BITMODE + LCD.h +
+
+
+
+ LCD_5x10DOTS + LCD.h +
+
+
+
+ LCD_5x8DOTS + LCD.h +
+
+
+
+ LCD_8BIT + LiquidCrystal.cpp +
+
+
+
+ LCD_8BITMODE + LCD.h +
+
+ +
+
+ LCD_BLINKOFF + LCD.h +
+
+
+
+ LCD_BLINKON + LCD.h +
+
+
+
+ LCD_CLEARDISPLAY + LCD.h +
+
+
+
+ LCD_CURSORMOVE + LCD.h +
+
+
+
+ LCD_CURSOROFF + LCD.h +
+
+
+
+ LCD_CURSORON + LCD.h +
+
+
+
+ LCD_CURSORSHIFT + LCD.h +
+
+
+
+ LCD_DISPLAYCONTROL + LCD.h +
+
+
+
+ LCD_DISPLAYMOVE + LCD.h +
+
+
+
+ LCD_DISPLAYOFF + LCD.h +
+
+
+
+ LCD_DISPLAYON + LCD.h +
+
+
+
+ LCD_ENTRYLEFT + LCD.h +
+
+
+
+ LCD_ENTRYMODESET + LCD.h +
+
+
+
+ LCD_ENTRYRIGHT + LCD.h +
+
+
+ +
+
+ +
+
+
+ LCD_FUNCTIONSET + LCD.h +
+
+
+
+ LCD_MOVELEFT + LCD.h +
+
+
+
+ LCD_MOVERIGHT + LCD.h +
+
+ +
+
+ LCD_RETURNHOME + LCD.h +
+
+
+
+ LCD_SETCGRAMADDR + LCD.h +
+
+
+
+ LCD_SETDDRAMADDR + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_72.html b/libraries/LiquidCrystal/docs/html/search/defines_72.html new file mode 100644 index 0000000..091148d --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_72.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_73.html b/libraries/LiquidCrystal/docs/html/search/defines_73.html new file mode 100644 index 0000000..d384df7 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_73.html @@ -0,0 +1,62 @@ + + + + + + + +
+
Loading...
+
+
+ SKIP + FastIO.h +
+
+
+
+ SR2W_BL_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_DATA_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_EN_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR2W_RS_MASK + LiquidCrystal_SR2W.h +
+
+
+
+ SR_EN_BIT + LiquidCrystal_SR.h +
+
+
+
+ SR_RS_BIT + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/defines_74.html b/libraries/LiquidCrystal/docs/html/search/defines_74.html new file mode 100644 index 0000000..ba27d7f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/defines_74.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ TWO_WIRE + LiquidCrystal_SR.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/enums_74.html b/libraries/LiquidCrystal/docs/html/search/enums_74.html new file mode 100644 index 0000000..2c24947 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/enums_74.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ t_backlighPol + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/enumvalues_6e.html b/libraries/LiquidCrystal/docs/html/search/enumvalues_6e.html new file mode 100644 index 0000000..13de3f4 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/enumvalues_6e.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ NEGATIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/enumvalues_70.html b/libraries/LiquidCrystal/docs/html/search/enumvalues_70.html new file mode 100644 index 0000000..ccfeb29 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/enumvalues_70.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ POSITIVE + LCD.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/files_66.html b/libraries/LiquidCrystal/docs/html/search/files_66.html new file mode 100644 index 0000000..2eeecab --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/files_66.html @@ -0,0 +1,30 @@ + + + + + + + +
+
Loading...
+
+ +
+
+
+ FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/files_69.html b/libraries/LiquidCrystal/docs/html/search/files_69.html new file mode 100644 index 0000000..6d0e429 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/files_69.html @@ -0,0 +1,30 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO.cpp +
+
+
+
+ I2CIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/files_6c.html b/libraries/LiquidCrystal/docs/html/search/files_6c.html new file mode 100644 index 0000000..84551ce --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/files_6c.html @@ -0,0 +1,80 @@ + + + + + + + +
+
Loading...
+
+
+ LCD.cpp +
+
+
+
+ LCD.h +
+
+ + + + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_61.html b/libraries/LiquidCrystal/docs/html/search/functions_61.html new file mode 100644 index 0000000..7fb674c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_61.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ autoscroll + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_62.html b/libraries/LiquidCrystal/docs/html/search/functions_62.html new file mode 100644 index 0000000..b75e8f6 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_62.html @@ -0,0 +1,42 @@ + + + + + + + +
+
Loading...
+
+
+ backlight + LCD +
+
+ + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_63.html b/libraries/LiquidCrystal/docs/html/search/functions_63.html new file mode 100644 index 0000000..118cc32 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_63.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ clear + LCD +
+
+
+
+ createChar + LCD +
+
+
+
+ cursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_64.html b/libraries/LiquidCrystal/docs/html/search/functions_64.html new file mode 100644 index 0000000..ba77ba3 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_64.html @@ -0,0 +1,38 @@ + + + + + + + +
+
Loading...
+
+
+ digitalRead + I2CIO +
+
+
+
+ digitalWrite + I2CIO +
+
+
+
+ display + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_65.html b/libraries/LiquidCrystal/docs/html/search/functions_65.html new file mode 100644 index 0000000..86ec5ea --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_65.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ expanderWrite + LiquidCrystal_I2C +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_66.html b/libraries/LiquidCrystal/docs/html/search/functions_66.html new file mode 100644 index 0000000..8cdaa77 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_66.html @@ -0,0 +1,98 @@ + + + + + + + +
+
Loading...
+ + + + + + + + +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_68.html b/libraries/LiquidCrystal/docs/html/search/functions_68.html new file mode 100644 index 0000000..15aec73 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_68.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ home + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_69.html b/libraries/LiquidCrystal/docs/html/search/functions_69.html new file mode 100644 index 0000000..dc3dc28 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_69.html @@ -0,0 +1,26 @@ + + + + + + + +
+
Loading...
+
+
+ I2CIO + I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_6c.html b/libraries/LiquidCrystal/docs/html/search/functions_6c.html new file mode 100644 index 0000000..1de9e5b --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_6c.html @@ -0,0 +1,83 @@ + + + + + + + +
+
Loading...
+
+
+ LCD + LCD +
+
+
+
+ leftToRight + LCD +
+
+ + +
+
+ LiquidCrystal_SR + LiquidCrystal_SR +
+
+
+
+ LiquidCrystal_SR2W + LiquidCrystal_SR2W +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_6d.html b/libraries/LiquidCrystal/docs/html/search/functions_6d.html new file mode 100644 index 0000000..6a0ea3f --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_6d.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ moveCursorLeft + LCD +
+
+
+
+ moveCursorRight + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_6e.html b/libraries/LiquidCrystal/docs/html/search/functions_6e.html new file mode 100644 index 0000000..02acfb2 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_6e.html @@ -0,0 +1,50 @@ + + + + + + + +
+
Loading...
+
+
+ noAutoscroll + LCD +
+
+
+
+ noBacklight + LCD +
+
+ +
+
+ noCursor + LCD +
+
+
+
+ noDisplay + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_6f.html b/libraries/LiquidCrystal/docs/html/search/functions_6f.html new file mode 100644 index 0000000..e5e659c --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_6f.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ off + LCD +
+
+
+
+ on + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_70.html b/libraries/LiquidCrystal/docs/html/search/functions_70.html new file mode 100644 index 0000000..16e8ed0 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_70.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ pinMode + I2CIO +
+
+
+
+ portMode + I2CIO +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_72.html b/libraries/LiquidCrystal/docs/html/search/functions_72.html new file mode 100644 index 0000000..31d4b8e --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_72.html @@ -0,0 +1,32 @@ + + + + + + + +
+
Loading...
+
+
+ read + I2CIO +
+
+
+
+ rightToLeft + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_73.html b/libraries/LiquidCrystal/docs/html/search/functions_73.html new file mode 100644 index 0000000..8bf5e07 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_73.html @@ -0,0 +1,75 @@ + + + + + + + +
+
Loading...
+
+
+ scrollDisplayLeft + LCD +
+
+
+
+ scrollDisplayRight + LCD +
+
+ + + +
+
+ setCursor + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/functions_77.html b/libraries/LiquidCrystal/docs/html/search/functions_77.html new file mode 100644 index 0000000..d81a974 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/functions_77.html @@ -0,0 +1,35 @@ + + + + + + + +
+
Loading...
+
+
+ waitUsec + LCD.h +
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/mag_sel.png b/libraries/LiquidCrystal/docs/html/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/search/nomatches.html b/libraries/LiquidCrystal/docs/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/search.css b/libraries/LiquidCrystal/docs/html/search/search.css new file mode 100644 index 0000000..50249e5 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/search.css @@ -0,0 +1,240 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#searchli { + float: right; + display: block; + width: 170px; + height: 36px; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; +} + +#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 #90A5CE; + background-color: #F9FAFC; + 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: #3D578C; + 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: #EEF1F7; +} + +/* ----------------------------------- */ + + +#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: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + 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; +} + +.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/libraries/LiquidCrystal/docs/html/search/search.js b/libraries/LiquidCrystal/docs/html/search/search.js new file mode 100644 index 0000000..1b2829a --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/search.js @@ -0,0 +1,742 @@ +// 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: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111011001111101110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111101011001111101100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 8: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111010001000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "files", + 3: "functions", + 4: "variables", + 5: "typedefs", + 6: "enums", + 7: "enumvalues", + 8: "defines" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // 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.href = 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 . + 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; + } +} diff --git a/libraries/LiquidCrystal/docs/html/search/search_l.png b/libraries/LiquidCrystal/docs/html/search/search_l.png new file mode 100644 index 0000000000000000000000000000000000000000..c872f4da4a01d0754f923e6c94fd8159c0621bd1 GIT binary patch literal 604 zcmV-i0;BzjP)k7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/search/search_r.png b/libraries/LiquidCrystal/docs/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 + + + + + + +
+
Loading...
+
+
+ fio_bit + FastIO.h +
+
+
+
+ fio_register + FastIO.h +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/search/variables_5f.html b/libraries/LiquidCrystal/docs/html/search/variables_5f.html new file mode 100644 index 0000000..0bac2f1 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/search/variables_5f.html @@ -0,0 +1,56 @@ + + + + + + + +
+
Loading...
+
+
+ _cols + LCD +
+
+
+
+ _displaycontrol + LCD +
+
+
+
+ _displayfunction + LCD +
+
+
+
+ _displaymode + LCD +
+
+
+
+ _numlines + LCD +
+
+
+
+ _polarity + LCD +
+
+
Searching...
+
No Matches
+ +
+ + diff --git a/libraries/LiquidCrystal/docs/html/tab_a.png b/libraries/LiquidCrystal/docs/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..2d99ef23fed78c7683f0b5aa803d937060d288c4 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qo)`sjv*C{Z|CmjY;X`^DSv)) z;hc^cTF;t%XWXdwWP5+kt?jQ5uhqKtjd^EY`^^-S;M%tFAj_l)EwVTK)E@1LSD0{e q?a6($SGQTzz1#QBzr0NMKf^0WCX-0bi?u-G89ZJ6T-G@yGywp8?ljB* literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/tab_b.png b/libraries/LiquidCrystal/docs/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c3d2be3c7e518fbca6bb30f571882e72fc506d GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qk9-Ajv*C{Z|~mbJ)|JfaM8Xd zIP7xAmLwau9@iXhZTrl-TjWj9jM#?{xt`6uU{<)jb9Suc^QnbhJ(o{ib8=j9u0_mE8M7kgF7f<7W7IEf=8(L_qx|g0H;V7iPxm&Q@G7p8W2Kx&iT|YUM=ITC zY<0Qbr;u&AtXD{o@41wH=7&d8=2Z_{M9Tsa=g*t*@A3H$UOlxZk7?f6RUWpx>Fc_L s#LQ{edY3MpIXkMeV^&YV=9fR%8Jv|Kya=#u06K}m)78&qol`;+0RKEt)&Kwi literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/tab_s.png b/libraries/LiquidCrystal/docs/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..978943ac807718de0e69e5a585a8f0a1e5999285 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QZ1e?jv*C{Z|}b5Yzkm-c<7z3 zq^cq0=~}Z;b(!Zvb5Z%sTRFKGlz1=qOFg;myyu?$r`wZb^irPsN1a)6)TwB0r+)wb zPL25;=adu89?fTK`qDR>$D*)b_WOmdKI;Vst02j(hg8%>k literal 0 HcmV?d00001 diff --git a/libraries/LiquidCrystal/docs/html/tabs.css b/libraries/LiquidCrystal/docs/html/tabs.css new file mode 100644 index 0000000..2192056 --- /dev/null +++ b/libraries/LiquidCrystal/docs/html/tabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; +} + +.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: #283A5D; + 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/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde b/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde new file mode 100644 index 0000000..0c06514 --- /dev/null +++ b/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.pde @@ -0,0 +1,78 @@ +#include +#include + + +#define CONTRAST_PIN 9 +#define BACKLIGHT_PIN 7 +#define CONTRAST 110 +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGH_PIN, POSITIVE ); + + +// Creat a set of new characters +byte smiley[8] = { + 0b00000, + 0b00000, + 0b01010, + 0b00000, + 0b00000, + 0b10001, + 0b01110, + 0b00000 +}; + +byte armsUp[8] = { + 0b00100, + 0b01010, + 0b00100, + 0b10101, + 0b01110, + 0b00100, + 0b00100, + 0b01010 +}; + +byte frownie[8] = { + 0b00000, + 0b00000, + 0b01010, + 0b00000, + 0b00000, + 0b00000, + 0b01110, + 0b10001 +}; + +void setup() +{ + Serial.begin ( 57600 ); + + // Switch on the backlight and LCD contrast levels + pinMode(CONTRAST_PIN, OUTPUT); + analogWrite ( CONTRAST_PIN, CONTRAST ); + + //lcd.setBacklightPin ( BACKLIGHT_PIN, POSITIVE ); + //lcd.setBacklight ( HIGH ); + lcd.backlight(); + + lcd.begin(16,2); // initialize the lcd + + lcd.createChar (0, smiley); // load character to the LCD + lcd.createChar (1, armsUp); // load character to the LCD + lcd.createChar (2, frownie); // load character to the LCD + + lcd.home (); // go home + lcd.print("Hello, ARDUINO "); + lcd.setCursor ( 0, 1 ); // go to the next line + lcd.print (" FORUM - fm "); +} + +void loop() +{ + // Do a little animation by writing to the same location + lcd.setCursor ( 14, 1 ); + lcd.print (char(2)); + delay (200); + lcd.setCursor ( 14, 1 ); + lcd.print ( char(0)); + delay (200); +} diff --git a/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde b/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde new file mode 100644 index 0000000..1112e78 --- /dev/null +++ b/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.pde @@ -0,0 +1,36 @@ +#include +#include + +LiquidCrystal_SR lcd(8,7,TWO_WIRE); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin + +// Creat a set of new characters +byte armsUp[8] = {0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010}; +byte armsDown[8] = {0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010}; + +void setup(){ + + lcd.begin(16,2); // initialize the lcd + + lcd.createChar (0, armsUp); // load character to the LCD + lcd.createChar (1, armsDown); // load character to the LCD + + lcd.home (); // go home + lcd.print("LiquidCrystal_SR"); +} + +void loop(){ + // Do a little animation + for(int i = 0; i <= 15; i++) showHappyGuy(i); + for(int i = 15; i >= 0; i--) showHappyGuy(i); +} + +void showHappyGuy(int pos){ + lcd.setCursor ( pos, 1 ); // go to position + lcd.print(char(random(0,2))); // show one of the two custom characters + delay(150); // wait so it can be seen + lcd.setCursor ( pos, 1 ); // go to position again + lcd.print(" "); // delete character +} \ No newline at end of file diff --git a/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde b/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde new file mode 100644 index 0000000..d0fd78c --- /dev/null +++ b/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.pde @@ -0,0 +1,61 @@ +#include +#include + + + +#define BACKLIGHT_PIN 13 + +LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address + +//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address + + +// Creat a set of new characters +const uint8_t charBitmap[][8] = { + { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 }, + { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 }, + { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 }, + { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 }, + { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 }, + { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 }, + { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 } + +}; + +void setup() +{ + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + // Switch on the backlight + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite ( BACKLIGHT_PIN, HIGH ); + + lcd.begin(16,2); // initialize the lcd + + for ( int i = 0; i < charBitmapSize; i++ ) + { + lcd.createChar ( i, (uint8_t *)charBitmap[i] ); + } + + lcd.home (); // go home + lcd.print("Hello, ARDUINO "); + lcd.setCursor ( 0, 1 ); // go to the next line + lcd.print (" FORUM - fm "); + delay ( 1000 ); +} + +void loop() +{ + lcd.home (); + // Do a little animation by writing to the same location + for ( int i = 0; i < 2; i++ ) + { + for ( int j = 0; j < 16; j++ ) + { + lcd.print (char(random(7))); + } + lcd.setCursor ( 0, 1 ); + } + delay (200); +} diff --git a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde new file mode 100644 index 0000000..4edcddc --- /dev/null +++ b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.pde @@ -0,0 +1,274 @@ +static char dummyvar; // dummy declaration for STUPID IDE!!!! +/*---------------------------------------------------------------------------- + * vi:ts=4 + * + * LCDiSpeed - LCD Interface Speed + * + * Created by Bill Perry 2012-03-16 + * Copyright 2012 - Under creative commons license 3.0: + * Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) + * license page: http://creativecommons.org/licenses/by-nc-sa/3.0/ + * + * Sketch to measure and report the speed of the interface to the LCD and + * speed of updating the LCD. + * + * It runs a Frames/Sec (FPS) test which writes a "frame" of each digit 0-9 to + * the display. + * A "frame" is a full display of characters. + * It is created by positioning the cursor to the begining of each row + * and then writing a character to every position on the row, until the + * entire display is filled. + * The FPS test does a frame of 9's then 8's, .... down to 0's + * On fast interfaces it will not normally be seen. + * + * The sketch will then calculate & report transfer speeds and + * LCD update rates to the LCD display. + * + * Reported Information: + * - Single byte transfer speed (ByteXfer) + * This is the time it takes for a single character to be sent from + * the sketch to the LCD display. + * + * - Frame/Sec (FPS) + * This is the number of times the full display can be updated + * in one second. + * + * - Frame Time (Ftime) + * This is the amount of time it takes to update the full LCD display. + * + * + * The sketch will also report "independent" FPS and Ftime values. + * These are timing values that are independent of the size of the LCD under test. + * Currently they represent the timing for a 16x2 LCD + * The value of always having numbers for a 16x2 display + * is that these numbers can be compared to each other since they are + * independent of the size of the actual LCD display that is running the test. + * + * All times & rates are measured and calculeted from what a sketch "sees" + * using the LiquidCrystal API. + * It includes any/all s/w overhead including the time to go through the + * Arduino Print class and LCD library. + * The actual low level hardware times are obviously lower. + * + * History + * 2012.03.15 bperrybap - Original creation + * + * @author Bill Perry - bperrybap@opensource.billsworld.billandterrie.com + *---------------------------------------------------------------------------- + +/* + * Define your LCD size + */ +#define LCD_COLS 16 +#define LCD_ROWS 2 + +/* + * Pick your interface. + */ + +//#define LCDIF_4BIT +//#define LCDIF_I2C +//#define LCDIF_SR2W +//#define LCDIF_SR_2W // SR in 2 wire mode +//#define LCDIF_SR_3W // SR in 3 wire mode +#define LCDIF_SR3W +//#define LCDIF_SR1W + + +/* + * Options + */ + +#define FPS_iter 1 // number of iterations to repeat each "frame" within the test + // (current frame test is 10 full display frames, 1 for each digits 0-9) + // FPS_iter like 100 will allow the frames to be seen + // Note: the only reason other than visual to make this larger than 1 + // might be to compensate for Async serial buffering should a serial interface be tested + // even with 1 iteration, 340 bytes are written for a 16x2 display + // bytes written = FPS_iter * ((LCD_ROWS * LCD_COLS) + LCD_ROWS) * 10 + +#define iLCD // turn on code to calculate speed of "independent" sized display +#define iLCD_ROWS 2 // independent FPS row size +#define iLCD_COLS 16 // independent FPS col size + + +#define DELAY_TIME 3500 // delay time to see information on lcd + +#if defined(LCDIF_4BIT) + +// Include the Liquid Crystal library code: +#include + +// initialize the library with the numbers of the interface pins +// lcd(RS, E, d4, d5, d6, d7, bl, polarity) +#ifdef BACKLIGHT_ON +LiquidCrystal lcd( 8, 9, 4, 5, 6, 7, 10, POSITIVE); // new constructor with backlight support +#else +LiquidCrystal lcd( 8, 9, 4, 5, 6, 7); // old style constructor w/o backlight (to test old library) +#endif + +#elif defined(LCDIF_I2C) +#include +#include + +LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address + + +#elif defined(LCDIF_SR3W) +#include + // d,clk,strb, en,rw,rs,d4,d5,d6,d7,bl,blpol +//LiquidCrystal_SR3W lcd (2, 3, 4, 6, 7, 1, 2, 3, 4, 5, 0, POSITIVE); +LiquidCrystal_SR3W lcd(3, 2, 4); + +#elif defined(LCDIF_SR2W) + +#include + // d, clk, (blPolarity optional, defaults to POSITIVE) +LiquidCrystal_SR2W lcd (2, 3); + +#elif defined(LCDIF_SR1W) + +#include +LiquidCrystal_SR1W lcd (2); + +#elif defined(LCDIF_SR_2W) + +#include + // d, clk +LiquidCrystal_SR lcd (2, 3); + +#elif defined(LCDIF_SR_3W) + +#include + // d,clk,strb +LiquidCrystal_SR lcd (2, 3, 4); + +#endif + +void setup() +{ + // set up the LCD's number of columns and rows: + lcd.begin(LCD_COLS, LCD_ROWS); + +#ifdef BACKLIGHT_ON + lcd.backlight(); // make sure backlight is on with new library +#endif +} + +void loop() +{ +unsigned long etime; +char buf[8]; + + lcd.clear(); + + + /* + * Time an FPS test + */ + + etime = timeFPS(FPS_iter, LCD_COLS, LCD_ROWS); + + /* + * show the average single byte xfer time during the FPS test + */ + showByteXfer(etime); + + /* + * show FPS rate and Frame update time for this display + */ + + sprintf(buf, "%dx%d", LCD_COLS, LCD_ROWS); + showFPS(etime, buf); + +#ifdef iLCD + /* + * calculate Independent FPS and Frame update time + * (rate & time for a "standard" display - default of 16x2) + * This is simply a matter of scaling the time based on the + * ratio of the display sizes. + */ + + etime = etime *iLCD_ROWS * iLCD_COLS / LCD_ROWS / LCD_COLS; + + /* + * show independent FPS rate & Frame update time + */ + sprintf(buf, "%dx%d", iLCD_COLS, iLCD_ROWS); + showFPS(etime, buf); +#endif + +} + +unsigned long timeFPS(uint8_t iter, uint8_t cols, uint8_t rows) +{ +char c; +unsigned long stime, etime; + + stime = micros(); + for(c = '9'; c >= '0'; c--) // do not change this unless you change the FPS/ByteXfer calcuations as well + { + for(uint8_t i = 0; i < iter; i++) + { + for(uint8_t row = 0; row < rows; row++) + { + lcd.setCursor(0, row); + for(uint8_t col = 0; col< cols;col++) + { + lcd.write(c); + } + } + } + } + etime = micros(); + return((etime-stime)); +} +void showFPS(unsigned long etime, const char *type) +{ +float fps; + + + /* + * calculate Frame update time and FPS rate + * The 10.0 is for the 10 frames done per iteration + * one for each digit 0-9 + */ + + fps = (10.0 * FPS_iter) * 1000000.0/(etime); + + + lcd.clear(); + lcd.print(type); + lcd.print("FPS: "); + lcd.print(fps); + + if(LCD_ROWS > 1) + { + lcd.setCursor(0,1); + } + else + { + delay(DELAY_TIME); + lcd.clear(); + } + lcd.print("Ftime: "); + lcd.print((etime)/10.0/FPS_iter/1000); + lcd.print("ms"); + + delay(DELAY_TIME); +} +void showByteXfer(unsigned long etime) +{ + lcd.clear(); + lcd.print("ByteXfer: "); + /* + * Calculate average byte xfer time from time of FPS test + * This takes into consideration the set cursor position commands which + * are single byte commands and take the same amount of time as a data byte write. + * The final result is rounded up to an integer. + */ + lcd.print((int) (etime / (FPS_iter * (10.0 * (LCD_COLS * LCD_ROWS + LCD_ROWS)))+0.5)); + lcd.print("uS"); + + delay(DELAY_TIME); +} diff --git a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt new file mode 100644 index 0000000..b59d013 --- /dev/null +++ b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt @@ -0,0 +1,20 @@ +16Mhz AVR +Interface ByteXfer 16x2FPS Ftime +---------------------------------------------- +4BIT 338uS 86.92 11.51ms (orignal Liquid Crystal) +4BIT 98uS 298.58 3.35ms +SR2W 76uS 388.62 2.57ms +SR_2W 72uS 406.90 2.46ms +SR_3W 61uS 480.03 2.08ms +SR3W 102uS 287.92 3.47ms + + +80Mhz Pic32 (ChipKit Uno32) +Interface ByteXfer 16x2FPS Ftime +---------------------------------------------- +4BIT 232uS 126.73 7.89ms (orignal mpide Liquid Crystal) +4BIT 57uS 517.41 1.93ms +SR2W 53uS 557.35 1.79ms +SR_2W 53uS 554.66 1.80ms +SR_3W 50uS 591.40 1.69ms +SR3W 56uS 524.91 1.91ms diff --git a/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde b/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde new file mode 100644 index 0000000..ce21e1c --- /dev/null +++ b/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.pde @@ -0,0 +1,37 @@ +/* + * Displays text sent over the serial port (e.g. from the Serial Monitor) on + * an attached LCD. + */ +#include +#include + +#define BACKLIGHT_PIN 13 + +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x38 + +void setup() +{ + pinMode ( BACKLIGHT_PIN, OUTPUT ); + lcd.begin (16,2); + digitalWrite ( BACKLIGHT_PIN, HIGH ); + + Serial.begin(57600); +} + +void loop() +{ + // when characters arrive over the serial port... + if (Serial.available()) + { + // wait a bit for the entire message to arrive + delay(100); + // clear the screen + lcd.clear(); + // read all the available characters + while (Serial.available() > 0) + { + // display each character to the LCD + lcd.write(Serial.read()); + } + } +} diff --git a/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde b/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde new file mode 100644 index 0000000..5eaad1f --- /dev/null +++ b/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.pde @@ -0,0 +1,246 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 1/1/12. +// Copyright 2011 - Under creative commons license: +// Attribution-NonCommercial-ShareAlike CC BY-NC-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file i2CLCDextraIO.pde +// Temperature logging to demonstrate the I2CLCDextraIO library. +// +// @brief This application is a demostration file for the I2CLCDextraIO library +// that reads a temperature from the internal ATMEGA328p temperature sensor +// and displays it on the LCD. The application also demonstrates some of the +// methods of the library, such as loading custom characters to the LCD, +// moving around the LCD, and writing to it. +// +// @author F. Malpartida +// --------------------------------------------------------------------------- +#include +#include + +#define _LCD_I2C_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + + +/*! + @defined CHAR_WIDTH + @abstract Character witdth of the display, expressed in pixeles per character. +*/ +#define CHAR_WIDTH 5 + +/*! + @defined BACKLIGHT_PIN + @abstract LCD backlight pin definition. + @discussion AVR pin used for the backlight illumintation of the LCD. +*/ +#define BACKLIGHT_PIN 7 + +/*! + @defined TEMP_CAL_OFFSET + @abstract Temperature calibration offset. + @discussion This is the offset value that has to be modified to get a + correct temperature reading from the internal temperature sensor + of your AVR. +*/ +#define TEMP_CAL_OFFSET 334 + +/*! + @defined FILTER_ALP + @abstract Low pass filter alpha value + @discussion This value defines how much does the current reading, influences + the over all value. The smaller, the less influence the current + reading has over the overall result. +*/ +#define FILTER_ALP 0.1 + +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; + +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); +#endif +const int CONTRAST_PIN = 9; +const int CONTRAST = 65; + + + +LCD *myLCD = &lcd; + +static double tempFilter; + + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. +*/ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, + { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} +}; + +/*! + @function + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @result Free RAM available. +*/ + +static int freeMemory() +{ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +} + +/*! + @function + @abstract Returns AVR328p internal temperature + @discussion Configures the ADC MUX for the temperature ADC channel and + waits for conversion and returns the value of the ADC module + @result The internal temperature reading - in degrees C +*/ + +static int readTemperature() +{ + ADMUX = 0xC8; // activate interal temperature sensor, + // using 1.1V ref. voltage + ADCSRA |= _BV(ADSC); // start the conversion + while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion + // finishes + + // combine bytes & correct for temperature offset (approximate) + return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); +} + +/*! + @function + @abstract Braws a bargraph onto the display representing the value passed. + @discussion Draws a bargraph on the specified row using barLength characters. + @param value[in] Value to represent in the bargraph + @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) + for this display. + @param barlength[in] Length of the bar, expressed in display characters. + @param start[in] Start bar character + @param end [in] End bar character + + @result None +*/ +static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, + char end ) +{ + int numBars; + + // Set initial titles on the display + myLCD->setCursor (0, row); + myLCD->print (start); + + // Calculate the size of the bar + value = map ( value, -30, 50, 0, ( barLength ) * CHAR_WIDTH ); + numBars = value / CHAR_WIDTH; + + // Limit the size of the bargraph to barLength + if ( numBars > barLength ) + { + numBars = barLength; + } + myLCD->setCursor ( 1, row ); + + // Draw the bars + while ( numBars-- ) + { + myLCD->print ( char( 5 ) ); + } + + // Draw the fractions + numBars = value % CHAR_WIDTH; + myLCD->print ( char(numBars) ); + myLCD->setCursor (barLength + 1, row); + myLCD->print (end); + +} + +void setup () +{ + int i; + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + Serial.begin ( 57600 ); + analogReference ( INTERNAL ); + +#ifdef _LCD_4BIT_ + pinMode(CONTRAST_PIN, OUTPUT); + lcd.backlight(); + digitalWrite(BACKLIGHT_PIN, HIGH); + analogWrite (CONTRAST_PIN, CONTRAST); +#else + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite(BACKLIGHT_PIN, HIGH); +#endif + + myLCD->begin ( 16, 2 ); + + // Load custom character set into CGRAM + for ( i = 0; i < charBitmapSize; i++ ) + { + myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); + } + Serial.println ( freeMemory () ); + + myLCD->clear (); + myLCD->print ("Temp:"); + + tempFilter = readTemperature (); // Initialise the temperature Filter + +} + + +void loop () +{ + int temp; + + temp = readTemperature(); + tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); + + myLCD->setCursor ( 8, 0 ); + myLCD->print (" "); + myLCD->setCursor ( 8, 0 ); + myLCD->print ( tempFilter, 1 ); + myLCD->setCursor ( 12, 0 ); + myLCD->print ( "\x07" ); + myLCD->print ("C"); + drawBars ( tempFilter, 1, 14, '-', '+' ); + + delay (200); +} diff --git a/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino b/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino new file mode 100644 index 0000000..f981507 --- /dev/null +++ b/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino @@ -0,0 +1,332 @@ +// --------------------------------------------------------------------------- +// Created by Francisco Malpartida on 1/1/12. +// Copyright 2011 - Under creative commons license: +// Attribution-NonCommercial-ShareAlike CC BY-NC-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file i2CLCDextraIO_tempLeonardo.ino +// Temperature logging to demonstrate the I2CLCDextraIO library. +// +// @brief This application is a demostration file for the I2CLCDextraIO library +// that reads a temperature from the internal ATMEGA32U4 temperature sensor +// and displays it on the LCD. The application also demonstrates some of the +// methods of the library, such as loading custom characters to the LCD, +// moving around the LCD, and writing to it. +// +// @author F. Malpartida +// --------------------------------------------------------------------------- +#include +#include +#include + +#define _LCD_SR3W_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + + +#ifdef _LCD_SR_ +#include +#endif + +#ifdef _LCD_SR3W_ +#include +#endif + + +/*! + @defined CHAR_WIDTH + @abstract Character witdth of the display, expressed in pixeles per character. +*/ +#define CHAR_WIDTH 5 + +/*! + @defined BACKLIGHT_PIN + @abstract LCD backlight pin definition. + @discussion AVR pin used for the backlight illumintation of the LCD. +*/ +#define BACKLIGHT_PIN 12 + +/*! + @defined STATUS_PIN + @abstract Status LED indicator. + @discussion Activity LED blinking indicating that the system is up. +*/ +#define STATUS_PIN 13 + +/*! + @defined LOOP_DELAY + @abstract Main loop delay. + @discussion Main loop delay executing temperature readings and LCD updates. +*/ +#define LOOP_DELAY 300 + +/*! + @defined TEMP_CAL_OFFSET + @abstract Temperature calibration offset. + @discussion This is the offset value that has to be modified to get a + correct temperature reading from the internal temperature sensor + of your AVR. +*/ +#define TEMP_CAL_OFFSET 282 + +/*! + @defined FILTER_ALP + @abstract Low pass filter alpha value + @discussion This value defines how much does the current reading, influences + the over all value. The smaller, the less influence the current + reading has over the overall result. +*/ +#define FILTER_ALP 0.1 + +/*! + @defined MIN_TEMP + @abstract Minimum temperature range for bargraph + +*/ +#define MIN_TEMP -10 + +/*! + @defined MAX_TEMP + @abstract Maximum temperature range for bargraph + +*/ +#define MAX_TEMP 50 + +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; + + +// Initialise LCD module +// ----------------------------------------------------------------------------- +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); +const int CONTRAST_PIN = 9; +const int CONTRAST = 65; +#endif + +#ifdef _LCD_SR_ +LiquidCrystal_SR lcd(3,2,TWO_WIRE); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin +#endif + +#ifdef _LCD_SR3W_ +LiquidCrystal_SR3W lcd(3, 2, 4); +// | | +// | \-- Clock Pin +// \---- Data/Enable Pin +#endif + + +// LCD reference variable +LCD *myLCD = &lcd; + +// Temperature filter variable +static double tempFilter; + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. +*/ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, + { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, + { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} +}; + +/*! + @function + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @result Free RAM available. +*/ +static int freeMemory() +{ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +} + +/*! + @function + @abstract Returns AVR328p internal temperature + @discussion Configures the ADC MUX for the temperature ADC channel and + waits for conversion and returns the value of the ADC module + @result The internal temperature reading - in degrees C +*/ + +static int readTemperature() +{ + ADMUX = 0xC7; // activate interal temperature sensor, + // using 2.56V ref. voltage + ADCSRB |= _BV(MUX5); + + ADCSRA |= _BV(ADSC); // start the conversion + while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion + // finishes + + // combine bytes & correct for temperature offset (approximate) + return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); +} + +/*! + @function + @abstract Braws a bargraph onto the display representing the value passed. + @discussion Draws a bargraph on the specified row using barLength characters. + @param value[in] Value to represent in the bargraph + @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) + for this display. + @param barlength[in] Length of the bar, expressed in display characters. + @param start[in] Start bar character + @param end [in] End bar character + + @result None +*/ +static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, + char end ) +{ + int numBars; + + // Set initial titles on the display + myLCD->setCursor (0, row); + myLCD->print (start); + + // Calculate the size of the bar + value = map ( value, MIN_TEMP, MAX_TEMP, 0, ( barLength ) * CHAR_WIDTH ); + numBars = value / CHAR_WIDTH; + + // Limit the size of the bargraph to barLength + if ( numBars > barLength ) + { + numBars = barLength; + } + myLCD->setCursor ( 1, row ); + + // Draw the bars + while ( numBars-- ) + { + myLCD->print ( char( 5 ) ); + } + + // Draw the fractions + numBars = value % CHAR_WIDTH; + myLCD->print ( char(numBars) ); + myLCD->setCursor (barLength + 1, row); + myLCD->print (end); + +} + +/*! + @function + @abstract Initialise the HW + @discussion Initialise the HW used within this application: UART, LCD & IOs + @param + @result +*/ + +static void initHW ( void ) +{ + int i; + int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); + + Serial.begin ( 57600 ); + + // Hardware initialise + // ------------------------------------ + + //ADCSRA |= (1 << ADEN); // Initialise ADC block (no need done by env) + + // Initialise LCD HW: backlight and LCD + // ------------------------------------- +#ifdef _LCD_4BIT_ + pinMode(CONTRAST_PIN, OUTPUT); + analogWrite (CONTRAST_PIN, CONTRAST); +#endif + +#ifdef _LCD_I2C_ + pinMode ( BACKLIGHT_PIN, OUTPUT ); + digitalWrite (BACKLIGHT_PIN, HIGH); +#endif + pinMode ( STATUS_PIN, OUTPUT ); + + myLCD->begin ( 20, 2 ); + // Load custom character set into CGRAM + // -------------------------------------------------------------------- + for ( i = 0; i < charBitmapSize; i++ ) + { + myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); + } +} + +void setup () +{ + initHW(); + + Serial.println ( freeMemory () ); + myLCD->clear (); + myLCD->print ( F("Free Mem: ")); + myLCD->print ( freeMemory () ); + delay ( 2000 ); + myLCD->clear (); + myLCD->print (F("Temp:")); + myLCD->setCursor ( 8, 0 ); + + tempFilter = 0; + myLCD->print ( readTemperature() ); +} + + +void loop () +{ + int temp; + static byte status = 1; + + status ^= 1; + digitalWrite ( STATUS_PIN, status); + + temp = readTemperature(); + tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); + + // Display the information to the LCD + myLCD->setCursor ( 8, 0 ); + myLCD->print (" "); + myLCD->setCursor ( 8, 0 ); + myLCD->print ( tempFilter, 1 ); + myLCD->setCursor ( 12, 0 ); + myLCD->print ( "\x07" ); + myLCD->print ("C"); + drawBars ( tempFilter, 1, 14, '-', '+' ); + + delay (LOOP_DELAY); +} \ No newline at end of file diff --git a/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.pde b/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.pde new file mode 100644 index 0000000..dea6c50 --- /dev/null +++ b/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.pde @@ -0,0 +1,480 @@ +// Created by Francisco Malpartida on 20/08/11. +// Copyright 2011 - Under creative commons license 3.0: +// Attribution-ShareAlike CC BY-SA +// +// This software is furnished "as is", without technical support, and with no +// warranty, express or implied, as to its usefulness for any purpose. +// +// Thread Safe: No +// Extendable: Yes +// +// @file performanceLCD.h +// This sketch implements a simple benchmark for the New LiquidCrystal library. +// +// @brief +// This sketch provides a simple benchmark for the New LiquidCrystal library. It +// enables to test the varios classes provided by the library giving a performance +// reference. +// +// This library is only compatible with Arduino's SDK version 1.0 +// +// @version API 1.0.0 +// +// @author F. Malpartida - fmalpartida@gmail.com +// Contribution by flo - Florian@Fida.biz - for benchmarking SR +// --------------------------------------------------------------------------- +#include + +#define _LCD_I2C_ + +#ifdef _LCD_I2C_ +#include +#endif + +#ifdef _LCD_4BIT_ +#include +#endif + +#ifdef _LCD_SR_ +#include +#endif + +#ifdef _LCD_SR3W_ +#include +#endif + +#ifdef _LCD_SR1_ +#include +#endif + +// C runtime variables +// ------------------- +#ifdef __AVR__ +extern unsigned int __bss_end; +extern unsigned int __heap_start; +extern void *__brkval; +#endif + +// Constants and definitions +// ------------------------- +// Definitions for compatibility with Arduino SDK prior to version 1.0 +#ifndef F +#define F(str) str +#endif + +/*! + @defined NUM_BENCHMARKS + @abstract Number of benchmarks in the project. + */ +#define NUM_BENCHMARKS 4 + +/*! + @defined ITERATIONS + @abstract Number of benchmarks iterations to perform. + */ +#define ITERATIONS 10 + +/*! + @defined LCD_ROWS + @abstract LCD rows + @discussion Defines the number of rows that the LCD has, normal LCD ranges are (1, 2, 4). + */ +#define LCD_ROWS 2 + +/*! + @defined LCD_COLUMNS + @abstract LCD available columns + @discussion Defines the number of colums that the LCD has, normal LCD ranges are (8, 16, 20). + */ +#define LCD_COLUMNS 16 + +/*! + @const Pin constant definitions + @abstract Define several constants required to manage the LCD backlight and contrast + */ +#ifdef _LCD_I2C_ +const int BACKLIGHT_PIN = 12; +const int CONTRAST_PIN = 0; // none +const int CONTRAST = 0; // none +#endif + +#ifdef _LCD_4BIT_ +const int CONTRAST_PIN = 9; +const int BACKLIGHT_PIN = 7; +const int CONTRAST = 120; +#endif + +#ifdef _LCD_SR_ +const int CONTRAST_PIN = 0; // not connected +const int BACKLIGHT_PIN = 0; // none +const int CONTRAST = 0; +#endif + +#ifdef _LCD_SR1_ +const int CONTRAST_PIN = 0; // not connected +const int BACKLIGHT_PIN = 0; // none +const int CONTRAST = 0; +#endif + +#ifdef _LCD_SR3W_ +const int CONTRAST_PIN = 0; // none +const int BACKLIGHT_PIN = 5; +const int CONTRAST = 0; +#endif + +/*! + @const charBitmap + @abstract Define Character bitmap for the bargraph. + @discussion Defines a character bitmap to represent a bargraph on a text + display. The bitmap goes from a blank character to full black. + */ +const uint8_t charBitmap[][8] = { + { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, + { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, + { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, + { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 } +}; + +/*! + @typedef t_benchmarkOp + @abstract Function pointer associated to each benchmark. + */ +typedef long (*t_benchmarkOp)( uint8_t ); + +/*! + @typedef t_timeBenchMarks + @abstract Structure to store results of the execution time of the benchmark. + @field benchmark: function pointer of the benchmark to be executed. + */ +typedef struct +{ + t_benchmarkOp benchmark; /**< Function pointer associated to the benchmark */ + long benchTime; /**< execution time for benchmark 1 in useconds */ + uint16_t numWrites; /**< Number of write cycles of the benchmark */ +} t_benchMarks; + + +// Main LCD objects +// ---------------- +#ifdef _LCD_I2C_ +LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display +#endif + +#ifdef _LCD_4BIT_ +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); +#endif + +#ifdef _LCD_SR_ +LiquidCrystal_SR lcd(8,7,TWO_WIRE); +#endif + +#ifdef _LCD_SR1_ +LiquidCrystal_SR1 lcd(2); +#endif + +#ifdef _LCD_SR3W_ +LiquidCrystal_SR3W lcd(3, 2, 4); +#endif + +// benchMarks definitions +// ---------------------- +extern long benchmark1 ( uint8_t ); +extern long benchmark2 ( uint8_t ); +extern long benchmark3 ( uint8_t ); +extern long benchmark4 ( uint8_t ); + +//! @brief benchmark structure that will be initialised and +static t_benchMarks myBenchMarks[NUM_BENCHMARKS] = +{ + { benchmark1, 0, (LCD_ROWS * LCD_COLUMNS) + 2 }, + { benchmark2, 0, LCD_ROWS * LCD_COLUMNS * 6 * 2 }, + { benchmark3, 0, 40 + 2 }, + { benchmark4, 0, 40 + 2 } +}; + +// Static methods +// -------------- +/*! + @function freeMemory + @abstract Return available RAM memory + @discussion This routine returns the ammount of RAM memory available after + initialising the C runtime. + @param + @return Free RAM available, -1 for non AVR microcontrollers + */ +static int freeMemory ( void ) +{ +#ifdef __AVR__ + int free_memory; + + if((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + + return free_memory; +#else + return -1; +#endif + +} + +/*! + @function LCDSetup + @abstract Initialise LCD associated pins and initialise the LCD object + with its geometry. + @discussion Initialise the LCD object and make it ready for operation by + setting up the LCD geometry, i.e. LCD character size. Initialise + and configure all associated control pins such as backlight and + contras pin if necessary. + + @param[in] charBitmapSize: contrasts pin associated to the contrast (should be an + analog pin). 0 if contrast pin is not required. + @param[in] backlight: backlight pin associated to the LCD backlight. + @param[in] cols: number of LCD columns normal values (1, 2, 4) + @param[in] rows: number of LCD rows normal values (8, 16, 20) + */ +static void LCDSetup ( uint8_t contrasPin, uint8_t backlight, uint8_t cols, uint8_t rows ) +{ + // If our setup uses a PWM to control the backlight, configure it + // -------------------------------------------------------------- + if ( contrasPin != 0 ) + { + pinMode ( contrasPin, OUTPUT ); + analogWrite ( contrasPin, CONTRAST ); + } + // Setup backlight pin + if ( backlight != 0 ){ + pinMode(backlight, OUTPUT); + digitalWrite(backlight, HIGH); + } + + lcd.begin ( cols, rows ); + lcd.clear ( ); +} + + +/*! + @function LCDLoadCharacters + @abstract Loads onto the LCD the character set for the benchmark. + @discussion Loads onto the LCD the character set that will be used throughout + the benchmark. + + @param[in] charBitmapSize: number of characters to load to the LCD. + */ +static void LCDLoadCharacters ( int numChars ) +{ + // Load custom character set into CGRAM + for ( int i = 0; i < numChars; i++ ) + { + lcd.createChar ( i, (uint8_t *)charBitmap[i] ); + } +} + + +// Benchmarks +// ---------- +/*! + @function benchmark1 + @abstract writes to the LCD a full set of characters loaded on the LCD + memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + memory. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark1 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i, j; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + for ( j = 0; j < LCD_COLUMNS; j++ ) + { + lcd.print (char(5)); + } + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark2 + @abstract writes to the LCD a full set of characters loaded on the LCD + memory one line pixel at the time + @discussion Writes to all the positions of the LCD a fixed pattern from + memory each patern take 6 write operations to the LCD. For every + character it writes it sets the cursor possition. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS * 6. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark2 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i, j, k; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + + for ( i = 0; i < LCD_ROWS; i++ ) + { + for ( j = 0; j < LCD_COLUMNS; j++ ) + { + for ( k = 0; k <= 5; k++ ) + { + lcd.setCursor ( j, i ); + lcd.print (char(k)); + } + } + } + totalTime += ( micros() - time ); + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark3 + @abstract writes to the LCD a full set of characters from memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + RAM. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark3 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + lcd.print ( "####################" ); + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +/*! + @function benchmark4 + @abstract writes to the LCD a full set of characters from memory. + @discussion Writes to all the positions of the LCD a fixed pattern from + flash. For every line it writes, it positions the cursor. + The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. + It returns the cumulative time used by all the iterations. + + @param[in] iterations: number of iterations the benchmark is executed before + returning the time taken by all iterations. + @return The time take to execute iterations number of benchmarks. + */ +long benchmark4 ( uint8_t iterations ) +{ + unsigned long time, totalTime = 0; + int i; + + while ( iterations > 0 ) + { + // Clear the LCD + lcd.clear ( ); + + time = micros (); + for ( i = 0; i < LCD_ROWS; i++ ) + { + lcd.setCursor ( 0, i ); + lcd.print ( F("####################") ); + } + totalTime += ( micros() - time ); + delay ( 200 ); // it doesn't keep up with the LCD refresh rate. + iterations--; + } + return ( totalTime ); +} + +// Main system setup +// ----------------- +void setup () +{ + Serial.begin ( 57600 ); +#ifdef __AVR__ + Serial.print ( F("Free mem: ") ); + Serial.println ( freeMemory () ); +#endif + + // Initialise the LCD + LCDSetup ( CONTRAST_PIN, BACKLIGHT_PIN, LCD_COLUMNS, LCD_ROWS ); + LCDLoadCharacters ( (sizeof(charBitmap ) / sizeof (charBitmap[0])) ); +} + + +// Main system loop +// ---------------- +void loop () +{ + int i; + + lcd.setCursor ( 0, 0 ); + lcd.clear ( ); + + // Run benchmark + for ( i = 0; i < NUM_BENCHMARKS; i++ ) + { + myBenchMarks[i].benchTime = + (myBenchMarks[i].benchmark (ITERATIONS))/ITERATIONS; + Serial.println (i); + } + + float fAllWrites=0.0; + + for ( i = 0; i < NUM_BENCHMARKS; i++ ) + { + Serial.print ( F("benchmark") ); + Serial.print ( i ); + Serial.print ( F(": ") ); + Serial.print ( myBenchMarks[i].benchTime ); + Serial.print ( F(" us - ") ); + Serial.print ( F(" write: ") ); + Serial.print ( myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites ); + Serial.println ( F(" us") ); + fAllWrites += myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites; + } + Serial.print( F("avg. write: ") ); + Serial.println( fAllWrites / (float)NUM_BENCHMARKS ); + } \ No newline at end of file diff --git a/libraries/LiquidCrystal/keywords.txt b/libraries/LiquidCrystal/keywords.txt new file mode 100644 index 0000000..c13f5ae --- /dev/null +++ b/libraries/LiquidCrystal/keywords.txt @@ -0,0 +1,52 @@ +########################################### +# Syntax Coloring Map For LiquidCrystal_I2C +########################################### + +########################################### +# Datatypes (KEYWORD1) +########################################### + +LiquidCrystal_SR KEYWORD1 +LiquidCrystal_I2C KEYWORD1 +LiquidCrystal_SR3W KEYWORD1 +LiquidCrystal KEYWORD1 +LCD KEYWORD1 + +########################################### +# Methods and Functions (KEYWORD2) +########################################### +begin KEYWORD2 +clear KEYWORD2 +home KEYWORD2 +noDisplay KEYWORD2 +display KEYWORD2 +noBlink KEYWORD2 +blink KEYWORD2 +noCursor KEYWORD2 +cursor KEYWORD2 +scrollDisplayLeft KEYWORD2 +scrollDisplayRight KEYWORD2 +leftToRight KEYWORD2 +rightToLeft KEYWORD2 +moveCursorLeft KEYWORD2 +moveCursorRight KEYWORD2 +autoscroll KEYWORD2 +noAutoscroll KEYWORD2 +createChar KEYWORD2 +setCursor KEYWORD2 +print KEYWORD2 +write KEYWORD2 +println KEYWORD2 +backlight KEYWORD2 +noBacklight KEYWORD2 +on KEYWORD2 +off KEYWORD2 +setBacklightPin KEYWORD2 +setBacklight KEYWORD2 +########################################### +# Constants (LITERAL1) +########################################### +POSITIVE LITERAL1 +NEGATIVE LITERAL1 +BACKLIGHT_ON LITERAL1 +BACKLIGHT_OFF LITERAL1 \ No newline at end of file diff --git a/libraries/Timer_lite/FM24I2C.cpp b/libraries/Timer_lite/FM24I2C.cpp new file mode 100644 index 0000000..79eb907 --- /dev/null +++ b/libraries/Timer_lite/FM24I2C.cpp @@ -0,0 +1,27 @@ +#include "FM24I2C.h" + +FM24I2C::FM24I2C(int id_addr) { + id=id_addr; +} + +FM24I2C::~FM24I2C() {} + +void FM24I2C::pack(int addr, void* data, int len) { + Wire.beginTransmission(id); + Wire.write((byte*)&addr,2); + Wire.write((byte*)data,len); + Wire.endTransmission(true); +} + +int FM24I2C::unpack(int addr, void* data, int len) { + int rc; + byte *p; + Wire.beginTransmission(id); + Wire.write((byte*)&addr,2); + Wire.endTransmission(false); + Wire.requestFrom(id,len); + for (rc=0, p=(byte*)data; Wire.available() && rc < len; rc++, p++) { + *p=Wire.read(); + } + return(rc); +} \ No newline at end of file diff --git a/libraries/Timer_lite/FM24I2C.h b/libraries/Timer_lite/FM24I2C.h new file mode 100644 index 0000000..8fd9ea1 --- /dev/null +++ b/libraries/Timer_lite/FM24I2C.h @@ -0,0 +1,29 @@ +#include "Wire.h" + +#if ARDUINO >= 100 + #include +#else + #include +#endif + +#ifndef _FM24I2C_H_ +#define _FM24I2C_H_ + +class FM24I2C { + private: + int id; + public: + FM24I2C(int id_addr); + ~FM24I2C(); + void pack(int addr, void* data, int len); // Pack data into FRAM + int unpack(int addr, void* data, int len); // Unpack data from FRAM. Returns number of bytes read. + void inline writeUnsignedLong(int addr, unsigned long data) { + pack(addr, (void*)&data, sizeof(unsigned long)); + } + unsigned long inline readUnsignedLong(int addr) { + unsigned long data; + return unpack(addr, (void*)&data, sizeof(unsigned long)) == sizeof(unsigned long) ? data : 0UL; + } +}; + +#endif \ No newline at end of file diff --git a/libraries/Timer_lite/RTClib.cpp b/libraries/Timer_lite/RTClib.cpp new file mode 100644 index 0000000..7e7d262 --- /dev/null +++ b/libraries/Timer_lite/RTClib.cpp @@ -0,0 +1,506 @@ +// Code by JeeLabs http://news.jeelabs.org/code/ +// Released to the public domain! Enjoy! + +#include +#include "RTClib.h" +#ifdef __AVR__ + #include +#elif defined(ESP8266) + #include +#elif defined(ARDUINO_ARCH_SAMD) +// nothing special needed +#elif defined(ARDUINO_SAM_DUE) + #define PROGMEM + #define pgm_read_byte(addr) (*(const unsigned char *)(addr)) + #define Wire Wire1 +#endif + + + +#if (ARDUINO >= 100) + #include // capital A so it is error prone on case-sensitive filesystems + // Macro to deal with the difference in I2C write functions from old and new Arduino versions. + #define _I2C_WRITE write + #define _I2C_READ read +#else + #include + #define _I2C_WRITE send + #define _I2C_READ receive +#endif + + +static uint8_t read_i2c_register(uint8_t addr, uint8_t reg) { + Wire.beginTransmission(addr); + Wire._I2C_WRITE((byte)reg); + Wire.endTransmission(); + + Wire.requestFrom(addr, (byte)1); + return Wire._I2C_READ(); +} + +static void write_i2c_register(uint8_t addr, uint8_t reg, uint8_t val) { + Wire.beginTransmission(addr); + Wire._I2C_WRITE((byte)reg); + Wire._I2C_WRITE((byte)val); + Wire.endTransmission(); +} + + +//////////////////////////////////////////////////////////////////////////////// +// utility code, some of this could be exposed in the DateTime API if needed + +const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 }; + +// number of days since 2000/01/01, valid for 2001..2099 +static uint16_t date2days(uint16_t y, uint8_t m, uint8_t d) { + if (y >= 2000) + y -= 2000; + uint16_t days = d; + for (uint8_t i = 1; i < m; ++i) + days += pgm_read_byte(daysInMonth + i - 1); + if (m > 2 && y % 4 == 0) + ++days; + return days + 365 * y + (y + 3) / 4 - 1; +} + +static long time2long(uint16_t days, uint8_t h, uint8_t m, uint8_t s) { + return ((days * 24L + h) * 60 + m) * 60 + s; +} + +//////////////////////////////////////////////////////////////////////////////// +// DateTime implementation - ignores time zones and DST changes +// NOTE: also ignores leap seconds, see http://en.wikipedia.org/wiki/Leap_second + +DateTime::DateTime (uint32_t t) { + t -= SECONDS_FROM_1970_TO_2000; // bring to 2000 timestamp from 1970 + + ss = t % 60; + t /= 60; + mm = t % 60; + t /= 60; + hh = t % 24; + uint16_t days = t / 24; + uint8_t leap; + for (yOff = 0; ; ++yOff) { + leap = yOff % 4 == 0; + if (days < 365 + leap) + break; + days -= 365 + leap; + } + for (m = 1; ; ++m) { + uint8_t daysPerMonth = pgm_read_byte(daysInMonth + m - 1); + if (leap && m == 2) + ++daysPerMonth; + if (days < daysPerMonth) + break; + days -= daysPerMonth; + } + d = days + 1; +} + +DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) { + if (year >= 2000) + year -= 2000; + yOff = year; + m = month; + d = day; + hh = hour; + mm = min; + ss = sec; +} + +DateTime::DateTime (const DateTime& copy): + yOff(copy.yOff), + m(copy.m), + d(copy.d), + hh(copy.hh), + mm(copy.mm), + ss(copy.ss) +{} + +static uint8_t conv2d(const char* p) { + uint8_t v = 0; + if ('0' <= *p && *p <= '9') + v = *p - '0'; + return 10 * v + *++p - '0'; +} + +// A convenient constructor for using "the compiler's time": +// DateTime now (__DATE__, __TIME__); +// NOTE: using F() would further reduce the RAM footprint, see below. +DateTime::DateTime (const char* date, const char* time) { + // sample input: date = "Dec 26 2009", time = "12:34:56" + yOff = conv2d(date + 9); + // Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + switch (date[0]) { + case 'J': m = (date[1] == 'a') ? 1 : ((date[2] == 'n') ? 6 : 7); break; + case 'F': m = 2; break; + case 'A': m = date[2] == 'r' ? 4 : 8; break; + case 'M': m = date[2] == 'r' ? 3 : 5; break; + case 'S': m = 9; break; + case 'O': m = 10; break; + case 'N': m = 11; break; + case 'D': m = 12; break; + } + d = conv2d(date + 4); + hh = conv2d(time); + mm = conv2d(time + 3); + ss = conv2d(time + 6); +} + +// A convenient constructor for using "the compiler's time": +// This version will save RAM by using PROGMEM to store it by using the F macro. +// DateTime now (F(__DATE__), F(__TIME__)); +DateTime::DateTime (const __FlashStringHelper* date, const __FlashStringHelper* time) { + // sample input: date = "Dec 26 2009", time = "12:34:56" + char buff[11]; + memcpy_P(buff, date, 11); + yOff = conv2d(buff + 9); + // Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec + switch (buff[0]) { + case 'J': m = (buff[1] == 'a') ? 1 : ((buff[2] == 'n') ? 6 : 7); break; + case 'F': m = 2; break; + case 'A': m = buff[2] == 'r' ? 4 : 8; break; + case 'M': m = buff[2] == 'r' ? 3 : 5; break; + case 'S': m = 9; break; + case 'O': m = 10; break; + case 'N': m = 11; break; + case 'D': m = 12; break; + } + d = conv2d(buff + 4); + memcpy_P(buff, time, 8); + hh = conv2d(buff); + mm = conv2d(buff + 3); + ss = conv2d(buff + 6); +} + +uint8_t DateTime::dayOfTheWeek() const { + uint16_t day = date2days(yOff, m, d); + return (day + 6) % 7; // Jan 1, 2000 is a Saturday, i.e. returns 6 +} + +uint32_t DateTime::unixtime(void) const { + uint32_t t; + uint16_t days = date2days(yOff, m, d); + t = time2long(days, hh, mm, ss); + t += SECONDS_FROM_1970_TO_2000; // seconds from 1970 to 2000 + + return t; +} + +long DateTime::secondstime(void) const { + long t; + uint16_t days = date2days(yOff, m, d); + t = time2long(days, hh, mm, ss); + return t; +} + +DateTime DateTime::operator+(const TimeSpan& span) { + return DateTime(unixtime()+span.totalseconds()); +} + +DateTime DateTime::operator-(const TimeSpan& span) { + return DateTime(unixtime()-span.totalseconds()); +} + +TimeSpan DateTime::operator-(const DateTime& right) { + return TimeSpan(unixtime()-right.unixtime()); +} + +//////////////////////////////////////////////////////////////////////////////// +// TimeSpan implementation + +TimeSpan::TimeSpan (int32_t seconds): + _seconds(seconds) +{} + +TimeSpan::TimeSpan (int16_t days, int8_t hours, int8_t minutes, int8_t seconds): + _seconds((int32_t)days*86400L + (int32_t)hours*3600 + (int32_t)minutes*60 + seconds) +{} + +TimeSpan::TimeSpan (const TimeSpan& copy): + _seconds(copy._seconds) +{} + +TimeSpan TimeSpan::operator+(const TimeSpan& right) { + return TimeSpan(_seconds+right._seconds); +} + +TimeSpan TimeSpan::operator-(const TimeSpan& right) { + return TimeSpan(_seconds-right._seconds); +} + +//////////////////////////////////////////////////////////////////////////////// +// RTC_DS1307 implementation + +static uint8_t bcd2bin (uint8_t val) { return val - 6 * (val >> 4); } +static uint8_t bin2bcd (uint8_t val) { return val + 6 * (val / 10); } + +boolean RTC_DS1307::begin(void) { + Wire.begin(); + return true; +} + +uint8_t RTC_DS1307::isrunning(void) { + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE((byte)0); + Wire.endTransmission(); + + Wire.requestFrom(DS1307_ADDRESS, 1); + uint8_t ss = Wire._I2C_READ(); + return !(ss>>7); +} + +void RTC_DS1307::adjust(const DateTime& dt) { + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE((byte)0); // start at location 0 + Wire._I2C_WRITE(bin2bcd(dt.second())); + Wire._I2C_WRITE(bin2bcd(dt.minute())); + Wire._I2C_WRITE(bin2bcd(dt.hour())); + Wire._I2C_WRITE(bin2bcd(0)); + Wire._I2C_WRITE(bin2bcd(dt.day())); + Wire._I2C_WRITE(bin2bcd(dt.month())); + Wire._I2C_WRITE(bin2bcd(dt.year() - 2000)); + Wire.endTransmission(); +} + +DateTime RTC_DS1307::now() { + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE((byte)0); + Wire.endTransmission(); + + Wire.requestFrom(DS1307_ADDRESS, 7); + uint8_t ss = bcd2bin(Wire._I2C_READ() & 0x7F); + uint8_t mm = bcd2bin(Wire._I2C_READ()); + uint8_t hh = bcd2bin(Wire._I2C_READ()); + Wire._I2C_READ(); + uint8_t d = bcd2bin(Wire._I2C_READ()); + uint8_t m = bcd2bin(Wire._I2C_READ()); + uint16_t y = bcd2bin(Wire._I2C_READ()) + 2000; + + return DateTime (y, m, d, hh, mm, ss); +} + +Ds1307SqwPinMode RTC_DS1307::readSqwPinMode() { + int mode; + + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE(DS1307_CONTROL); + Wire.endTransmission(); + + Wire.requestFrom((uint8_t)DS1307_ADDRESS, (uint8_t)1); + mode = Wire._I2C_READ(); + + mode &= 0x93; + return static_cast(mode); +} + +void RTC_DS1307::writeSqwPinMode(Ds1307SqwPinMode mode) { + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE(DS1307_CONTROL); + Wire._I2C_WRITE(mode); + Wire.endTransmission(); +} + +void RTC_DS1307::readnvram(uint8_t* buf, uint8_t size, uint8_t address) { + int addrByte = DS1307_NVRAM + address; + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE(addrByte); + Wire.endTransmission(); + + Wire.requestFrom((uint8_t) DS1307_ADDRESS, size); + for (uint8_t pos = 0; pos < size; ++pos) { + buf[pos] = Wire._I2C_READ(); + } +} + +void RTC_DS1307::writenvram(uint8_t address, uint8_t* buf, uint8_t size) { + int addrByte = DS1307_NVRAM + address; + Wire.beginTransmission(DS1307_ADDRESS); + Wire._I2C_WRITE(addrByte); + for (uint8_t pos = 0; pos < size; ++pos) { + Wire._I2C_WRITE(buf[pos]); + } + Wire.endTransmission(); +} + +uint8_t RTC_DS1307::readnvram(uint8_t address) { + uint8_t data; + readnvram(&data, 1, address); + return data; +} + +void RTC_DS1307::writenvram(uint8_t address, uint8_t data) { + writenvram(address, &data, 1); +} + +//////////////////////////////////////////////////////////////////////////////// +// RTC_Millis implementation + +long RTC_Millis::offset = 0; + +void RTC_Millis::adjust(const DateTime& dt) { + offset = dt.unixtime() - millis() / 1000; +} + +DateTime RTC_Millis::now() { + return (uint32_t)(offset + millis() / 1000); +} + +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// RTC_PCF8563 implementation + +boolean RTC_PCF8523::begin(void) { + Wire.begin(); + return true; +} + +boolean RTC_PCF8523::initialized(void) { + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE((byte)PCF8523_CONTROL_3); + Wire.endTransmission(); + + Wire.requestFrom(PCF8523_ADDRESS, 1); + uint8_t ss = Wire._I2C_READ(); + return ((ss & 0xE0) != 0xE0); +} + +void RTC_PCF8523::adjust(const DateTime& dt) { + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE((byte)3); // start at location 3 + Wire._I2C_WRITE(bin2bcd(dt.second())); + Wire._I2C_WRITE(bin2bcd(dt.minute())); + Wire._I2C_WRITE(bin2bcd(dt.hour())); + Wire._I2C_WRITE(bin2bcd(dt.day())); + Wire._I2C_WRITE(bin2bcd(0)); // skip weekdays + Wire._I2C_WRITE(bin2bcd(dt.month())); + Wire._I2C_WRITE(bin2bcd(dt.year() - 2000)); + Wire.endTransmission(); + + // set to battery switchover mode + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE((byte)PCF8523_CONTROL_3); + Wire._I2C_WRITE((byte)0x00); + Wire.endTransmission(); +} + +DateTime RTC_PCF8523::now() { + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE((byte)3); + Wire.endTransmission(); + + Wire.requestFrom(PCF8523_ADDRESS, 7); + uint8_t ss = bcd2bin(Wire._I2C_READ() & 0x7F); + uint8_t mm = bcd2bin(Wire._I2C_READ()); + uint8_t hh = bcd2bin(Wire._I2C_READ()); + uint8_t d = bcd2bin(Wire._I2C_READ()); + Wire._I2C_READ(); // skip 'weekdays' + uint8_t m = bcd2bin(Wire._I2C_READ()); + uint16_t y = bcd2bin(Wire._I2C_READ()) + 2000; + + return DateTime (y, m, d, hh, mm, ss); +} + +Pcf8523SqwPinMode RTC_PCF8523::readSqwPinMode() { + int mode; + + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE(PCF8523_CLKOUTCONTROL); + Wire.endTransmission(); + + Wire.requestFrom((uint8_t)PCF8523_ADDRESS, (uint8_t)1); + mode = Wire._I2C_READ(); + + mode >>= 3; + mode &= 0x7; + return static_cast(mode); +} + +void RTC_PCF8523::writeSqwPinMode(Pcf8523SqwPinMode mode) { + Wire.beginTransmission(PCF8523_ADDRESS); + Wire._I2C_WRITE(PCF8523_CLKOUTCONTROL); + Wire._I2C_WRITE(mode << 3); + Wire.endTransmission(); +} + + + + +//////////////////////////////////////////////////////////////////////////////// +// RTC_DS3231 implementation + +boolean RTC_DS3231::begin(void) { + Wire.begin(); + return true; +} + +bool RTC_DS3231::lostPower(void) { + return (read_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG) >> 7); +} + +void RTC_DS3231::adjust(const DateTime& dt) { + Wire.beginTransmission(DS3231_ADDRESS); + Wire._I2C_WRITE((byte)0); // start at location 0 + Wire._I2C_WRITE(bin2bcd(dt.second())); + Wire._I2C_WRITE(bin2bcd(dt.minute())); + Wire._I2C_WRITE(bin2bcd(dt.hour())); + Wire._I2C_WRITE(bin2bcd(0)); + Wire._I2C_WRITE(bin2bcd(dt.day())); + Wire._I2C_WRITE(bin2bcd(dt.month())); + Wire._I2C_WRITE(bin2bcd(dt.year() - 2000)); + Wire.endTransmission(); + + uint8_t statreg = read_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG); + statreg &= ~0x80; // flip OSF bit + write_i2c_register(DS3231_ADDRESS, DS3231_STATUSREG, statreg); +} + +DateTime RTC_DS3231::now() { + Wire.beginTransmission(DS3231_ADDRESS); + Wire._I2C_WRITE((byte)0); + Wire.endTransmission(); + + Wire.requestFrom(DS3231_ADDRESS, 7); + uint8_t ss = bcd2bin(Wire._I2C_READ() & 0x7F); + uint8_t mm = bcd2bin(Wire._I2C_READ()); + uint8_t hh = bcd2bin(Wire._I2C_READ()); + Wire._I2C_READ(); + uint8_t d = bcd2bin(Wire._I2C_READ()); + uint8_t m = bcd2bin(Wire._I2C_READ()); + uint16_t y = bcd2bin(Wire._I2C_READ()) + 2000; + + return DateTime (y, m, d, hh, mm, ss); +} + +Ds3231SqwPinMode RTC_DS3231::readSqwPinMode() { + int mode; + + Wire.beginTransmission(DS3231_ADDRESS); + Wire._I2C_WRITE(DS3231_CONTROL); + Wire.endTransmission(); + + Wire.requestFrom((uint8_t)DS3231_ADDRESS, (uint8_t)1); + mode = Wire._I2C_READ(); + + mode &= 0x93; + return static_cast(mode); +} + +void RTC_DS3231::writeSqwPinMode(Ds3231SqwPinMode mode) { + uint8_t ctrl; + ctrl = read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL); + + ctrl &= ~0x04; // turn off INTCON + ctrl &= ~0x18; // set freq bits to 0 + + if (mode == DS3231_OFF) { + ctrl |= 0x04; // turn on INTCN + } else { + ctrl |= mode; + } + write_i2c_register(DS3231_ADDRESS, DS3231_CONTROL, ctrl); + + //Serial.println( read_i2c_register(DS3231_ADDRESS, DS3231_CONTROL), HEX); +} diff --git a/libraries/Timer_lite/RTClib.h b/libraries/Timer_lite/RTClib.h new file mode 100644 index 0000000..ee0212f --- /dev/null +++ b/libraries/Timer_lite/RTClib.h @@ -0,0 +1,135 @@ +// Code by JeeLabs http://news.jeelabs.org/code/ +// Released to the public domain! Enjoy! + +#ifndef _RTCLIB_H_ +#define _RTCLIB_H_ + +#include +class TimeSpan; + + +#define PCF8523_ADDRESS 0x68 +#define PCF8523_CLKOUTCONTROL 0x0F +#define PCF8523_CONTROL_3 0x02 + +#define DS1307_ADDRESS 0x68 +#define DS1307_CONTROL 0x07 +#define DS1307_NVRAM 0x08 + +#define DS3231_ADDRESS 0x68 +#define DS3231_CONTROL 0x0E +#define DS3231_STATUSREG 0x0F + +#define SECONDS_PER_DAY 86400L + +#define SECONDS_FROM_1970_TO_2000 946684800 + + + +// Simple general-purpose date/time class (no TZ / DST / leap second handling!) +class DateTime { +public: + DateTime (uint32_t t =0); + DateTime (uint16_t year, uint8_t month, uint8_t day, + uint8_t hour =0, uint8_t min =0, uint8_t sec =0); + DateTime (const DateTime& copy); + DateTime (const char* date, const char* time); + DateTime (const __FlashStringHelper* date, const __FlashStringHelper* time); + uint16_t year() const { return 2000 + yOff; } + uint8_t month() const { return m; } + uint8_t day() const { return d; } + uint8_t hour() const { return hh; } + uint8_t minute() const { return mm; } + uint8_t second() const { return ss; } + uint8_t dayOfTheWeek() const; + + // 32-bit times as seconds since 1/1/2000 + long secondstime() const; + // 32-bit times as seconds since 1/1/1970 + uint32_t unixtime(void) const; + + DateTime operator+(const TimeSpan& span); + DateTime operator-(const TimeSpan& span); + TimeSpan operator-(const DateTime& right); + +protected: + uint8_t yOff, m, d, hh, mm, ss; +}; + +// Timespan which can represent changes in time with seconds accuracy. +class TimeSpan { +public: + TimeSpan (int32_t seconds = 0); + TimeSpan (int16_t days, int8_t hours, int8_t minutes, int8_t seconds); + TimeSpan (const TimeSpan& copy); + int16_t days() const { return _seconds / 86400L; } + int8_t hours() const { return _seconds / 3600 % 24; } + int8_t minutes() const { return _seconds / 60 % 60; } + int8_t seconds() const { return _seconds % 60; } + int32_t totalseconds() const { return _seconds; } + + TimeSpan operator+(const TimeSpan& right); + TimeSpan operator-(const TimeSpan& right); + +protected: + int32_t _seconds; +}; + +// RTC based on the DS1307 chip connected via I2C and the Wire library +enum Ds1307SqwPinMode { OFF = 0x00, ON = 0x80, SquareWave1HZ = 0x10, SquareWave4kHz = 0x11, SquareWave8kHz = 0x12, SquareWave32kHz = 0x13 }; + +class RTC_DS1307 { +public: + boolean begin(void); + static void adjust(const DateTime& dt); + uint8_t isrunning(void); + static DateTime now(); + static Ds1307SqwPinMode readSqwPinMode(); + static void writeSqwPinMode(Ds1307SqwPinMode mode); + uint8_t readnvram(uint8_t address); + void readnvram(uint8_t* buf, uint8_t size, uint8_t address); + void writenvram(uint8_t address, uint8_t data); + void writenvram(uint8_t address, uint8_t* buf, uint8_t size); +}; + +// RTC based on the DS3231 chip connected via I2C and the Wire library +enum Ds3231SqwPinMode { DS3231_OFF = 0x01, DS3231_SquareWave1Hz = 0x00, DS3231_SquareWave1kHz = 0x08, DS3231_SquareWave4kHz = 0x10, DS3231_SquareWave8kHz = 0x18 }; + +class RTC_DS3231 { +public: + boolean begin(void); + static void adjust(const DateTime& dt); + bool lostPower(void); + static DateTime now(); + static Ds3231SqwPinMode readSqwPinMode(); + static void writeSqwPinMode(Ds3231SqwPinMode mode); +}; + + +// RTC based on the PCF8523 chip connected via I2C and the Wire library +enum Pcf8523SqwPinMode { PCF8523_OFF = 7, PCF8523_SquareWave1HZ = 6, PCF8523_SquareWave32HZ = 5, PCF8523_SquareWave1kHz = 4, PCF8523_SquareWave4kHz = 3, PCF8523_SquareWave8kHz = 2, PCF8523_SquareWave16kHz = 1, PCF8523_SquareWave32kHz = 0 }; + +class RTC_PCF8523 { +public: + boolean begin(void); + void adjust(const DateTime& dt); + boolean initialized(void); + static DateTime now(); + + Pcf8523SqwPinMode readSqwPinMode(); + void writeSqwPinMode(Pcf8523SqwPinMode mode); +}; + +// RTC using the internal millis() clock, has to be initialized before use +// NOTE: this clock won't be correct once the millis() timer rolls over (>49d?) +class RTC_Millis { +public: + static void begin(const DateTime& dt) { adjust(dt); } + static void adjust(const DateTime& dt); + static DateTime now(); + +protected: + static long offset; +}; + +#endif // _RTCLIB_H diff --git a/libraries/Timer_lite/Timer_lite.cpp b/libraries/Timer_lite/Timer_lite.cpp new file mode 100644 index 0000000..46bca1b --- /dev/null +++ b/libraries/Timer_lite/Timer_lite.cpp @@ -0,0 +1,401 @@ +#include "Timer_lite.h" + +//** CONSTRUCTOR ** +Timer_lite::Timer_lite(uint8_t relay_pin) +{ + setRelayPin(relay_pin); + _init(); +} + +Timer_lite::Timer_lite(uint8_t relay_pin, uint8_t initial_eeprom_address) +{ + setRelayPin(relay_pin); + _init(initial_eeprom_address); +} + +//** DESTRUCTOR ** +Timer_lite::~Timer_lite() +{ +} + + +//** MÉTODOS PRIVADOS** +// Para constructor + void Timer_lite::_init(uint8_t initial_eeprom_address = 0) + { + _instancia_num = ++_instancias_num; + + _eeprom_address_tiempo_inicio_espera = initial_eeprom_address; + _eeprom_address_tiempo_arranque = initial_eeprom_address +4; + _eeprom_address_tiempo_arranque_espera = initial_eeprom_address +8; + _eeprom_address_tiempo_encendido = initial_eeprom_address +12; + _eeprom_address_tiempo_encendido_espera = initial_eeprom_address +16; + _eeprom_address_timer_detenido = initial_eeprom_address +20; + } + + +// EEPROM + void Timer_lite::EEPROMWritelong(uint8_t address, uint32_t value) + { + //Decomposition from a long to 4 bytes by using bitshift. + //One = Most significant -> Four = Least significant byte + uint8_t four = (value & 0xFF); + uint8_t three = ((value >> 8) & 0xFF); + uint8_t two = ((value >> 16) & 0xFF); + uint8_t one = ((value >> 24) & 0xFF); + + //Write the 4 bytes into the eeprom memory. + EEPROM.write(address, four); + EEPROM.write(address + 1, three); + EEPROM.write(address + 2, two); + EEPROM.write(address + 3, one); + } + + uint32_t Timer_lite::EEPROMReadlong(uint8_t address) + { + //Read the 4 bytes from the eeprom memory. + uint32_t four = EEPROM.read(address); + uint32_t three = EEPROM.read(address + 1); + uint32_t two = EEPROM.read(address + 2); + uint32_t one = EEPROM.read(address + 3); + + //Return the recomposed long by using bitshift. + return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); + } + + +// Proximo periodo +/* + void Timer_lite::proximoPeriodo() + { + switch (getPeriodo()){ + case TIMER_INICIO_ESPERA: + _periodo = TIMER_ARRANQUE; + _periodo_time = getTiempoArranque(); + break; + + case TIMER_ARRANQUE: + _periodo = TIMER_ARRANQUE_ESPERA; + _periodo_time = getTiempoArranqueEspera(); + break; + + case TIMER_ARRANQUE_ESPERA: + _periodo = TIMER_ENCENDIDO; + _periodo_time = getTiempoEncendido(); + break; + + case TIMER_ENCENDIDO: + _periodo = TIMER_ENCENDIDO_ESPERA; + _periodo_time = getTiempoEncendidoEspera(); + break; + + case TIMER_ENCENDIDO_ESPERA: + _periodo = TIMER_ENCENDIDO; + _periodo_time = getTiempoEncendido(); + break; + } + + // Si Retraso o Arranque igual a 0, recalculamos + if((status_temporizador == TIMER_RETARDO || status_temporizador == TIMER_ARRANQUE) && periodo_time == 0) + procesar_proximo_periodo(); + } +*/ + + +//** MÉTODOS PUBLICOS ** +// Set Fecha y Hora + void Timer_lite::setFechaHoraSistema() + { + _RTC.adjust(DateTime(__DATE__, __TIME__)); + } + + void Timer_lite::setFecha(uint16_t anho, uint8_t mes, uint8_t dia) + { + _RTC.adjust(DateTime(anho, mes, dia, _now.hour(), _now.minute(), _now.second())); + } + + void Timer_lite::setHora(uint8_t hrs, uint8_t min, uint8_t seg) + { + _RTC.adjust(DateTime(_now.year(), _now.month(), _now.day(), hrs, min, seg)); + } + + void Timer_lite::setFechaHora(uint16_t anho, uint8_t mes, uint8_t dia, uint8_t hrs, uint8_t min, uint8_t seg) + { + _RTC.adjust(DateTime(anho, mes, dia, hrs, min, seg)); + } + + +// Get Fecha y Hora + String Timer_lite::getFecha() + { + String year = (String) _now.year(); + String month = (_now.month() < 10? "0": "") + (String) _now.month(); + String day = (_now.day() < 10? "0": "") + (String) _now.day(); + + return day + "/" + month + '/' + year; + } + + String Timer_lite::getHora() + { + String hour = (_now.hour() < 10? "0": "") + (String) _now.hour(); + String minute = (_now.minute() < 10? "0": "") + (String) _now.minute(); + String second = (_now.second() < 10? "0": "") + (String) _now.second(); + + return hour + ":" + minute + ':' + second; + } + + +// Configuraciones Hardware + void Timer_lite::setRelayPin(uint8_t relay_pin) + { + _relay_pin = relay_pin; + } + + void Timer_lite::setRelaySatus(uint8_t relay_status) + { + _status_relay = relay_status; + + digitalWrite(_relay_pin, relay_status); + } + + uint8_t Timer_lite::getStatusRelay() + { + return _status_relay; + } + + +// Set Configuraciones Timer_lite + void Timer_lite::setTiempoInicioEspera(uint32_t segundos) + { + EEPROMWritelong(_eeprom_address_tiempo_inicio_espera, segundos); + } + + void Timer_lite::setTiempoInicioEspera(uint8_t minutos, uint8_t segundos) + { + uint32_t _segundos = (minutos * 60) + segundos; + + EEPROMWritelong(_eeprom_address_tiempo_inicio_espera, _segundos); + } + + void Timer_lite::setTiempoArranque(uint32_t segundos) + { + EEPROMWritelong(_eeprom_address_tiempo_arranque, segundos); + } + + void Timer_lite::setTiempoArranque(uint8_t horas, uint8_t minutos, uint8_t segundos) + { + uint32_t _segundos = (horas * 3600) + (minutos * 60) + segundos; + + EEPROMWritelong(_eeprom_address_tiempo_arranque, _segundos); + } + + void Timer_lite::setTiempoArranqueEspera(uint32_t segundos) + { + EEPROMWritelong(_eeprom_address_tiempo_arranque_espera, segundos); + } + + void Timer_lite::setTiempoArranqueEspera(uint8_t horas, uint8_t minutos, uint8_t segundos) + { + uint32_t _segundos = (horas * 3600) + (minutos * 60) + segundos; + + EEPROMWritelong(_eeprom_address_tiempo_arranque_espera, _segundos); + } + + void Timer_lite::setTiempoEncendido(uint32_t segundos) + { + EEPROMWritelong(_eeprom_address_tiempo_encendido, segundos); + } + + void Timer_lite::setTiempoEncendido(uint8_t horas, uint8_t minutos, uint8_t segundos) + { + uint32_t _segundos = (horas * 3600) + (minutos * 60) + segundos; + + EEPROMWritelong(_eeprom_address_tiempo_encendido, _segundos); + } + + void Timer_lite::setTiempoEncendidoEspera(uint32_t segundos) + { + EEPROMWritelong(_eeprom_address_tiempo_encendido_espera, segundos); + } + + void Timer_lite::setTiempoEncendidoEspera(uint8_t horas, uint8_t minutos, uint8_t segundos) + { + uint32_t _segundos = (horas * 3600) + (minutos * 60) + segundos; + + EEPROMWritelong(_eeprom_address_tiempo_encendido_espera, _segundos); + } + + +// Get Timer_lite EEPROM + uint32_t Timer_lite::getTiempoInicioEspera() + { + return EEPROMReadlong(_eeprom_address_tiempo_inicio_espera); + } + + uint32_t Timer_lite::getTiempoArranque() + { + return EEPROMReadlong(_eeprom_address_tiempo_arranque); + } + + uint32_t Timer_lite::getTiempoArranqueEspera() + { + return EEPROMReadlong(_eeprom_address_tiempo_arranque_espera); + } + + uint32_t Timer_lite::getTiempoEncendido() + { + return EEPROMReadlong(_eeprom_address_tiempo_encendido); + } + + uint32_t Timer_lite::getTiempoEncendidoEspera() + { + return EEPROMReadlong(_eeprom_address_tiempo_encendido_espera); + } + + uint8_t Timer_lite::getTimerDetenido() + { + return EEPROM.read(_eeprom_address_timer_detenido); + } + + +// Get Status Timer_lite + uint8_t Timer_lite::getInstanciasNum() + { + return _instancias_num; + } + + uint8_t Timer_lite::getInstanciaNum() + { + return _instancia_num; + } + + + + + uint8_t Timer_lite::getPeriodo() + { + return _periodo; + } + + uint32_t Timer_lite::getFinPeriodoSeg() + { + return _fin_de_periodo_seg; + } + + uint32_t Timer_lite::getRestantePeriodoSeg() + { + return _fin_de_periodo_seg - _now.unixtime(); + } + + + + + +// PROCESO DEL TEMPORIZADOR + void Timer_lite::initialize() + { + if(_instancia_num == 1){ + Wire.begin(); + + if(!_RTC.begin()) + //Serial.println("Couldn't find RTC"); + serialPrintln("Couldn't find RTC"); + + if(_RTC.lostPower()){ + //Serial.println("RTC lost power, lets set the time!"); + serialPrintln("RTC lost power, lets set the time!"); + + //_RTC.adjust(DateTime(2021, 1, 1, 0, 0, 0)); + } + + _now = _RTC.now(); + } + + pinMode(_relay_pin, OUTPUT); + + reiniciar(); + } + + void Timer_lite::process_loop() + { + if(_instancia_num == 1) + _now = _RTC.now(); + + if(getTimerDetenido()){ + setRelaySatus(RELAY_OFF); + + }else{ + if(_now.unixtime() >= _fin_de_periodo_seg){ + switch(_periodo){ + case TIMER_INICIO_ESPERA: + _periodo = TIMER_ARRANQUE; + _fin_de_periodo_seg = _now.unixtime() + getTiempoArranque(); + + setRelaySatus(RELAY_ON); + break; + + case TIMER_ARRANQUE: + _periodo = TIMER_ARRANQUE_ESPERA; + _fin_de_periodo_seg = _now.unixtime() + getTiempoArranqueEspera(); + + setRelaySatus(RELAY_OFF); + break; + + case TIMER_ENCENDIDO: + _periodo = TIMER_ENCENDIDO_ESPERA; + _fin_de_periodo_seg = _now.unixtime() + getTiempoEncendidoEspera(); + + setRelaySatus(RELAY_OFF); + break; + + case TIMER_ARRANQUE_ESPERA: + case TIMER_ENCENDIDO_ESPERA: + _periodo = TIMER_ENCENDIDO; + _fin_de_periodo_seg = _now.unixtime() + getTiempoEncendido(); + + setRelaySatus(RELAY_ON); + break; + } + } + + /* + // Una vez cada segundo por Instancia + if(_now.unixtime() >= _T[2] +1) { + writeMemory(_memory_address_periodo_time, --_periodo_time, 4); + + if(_periodo_time <= 0) + proximoPeriodo(); + + // Estatus del relevador + _status_relay = (_periodo == TIMER_ARRANQUE || _periodo == TIMER_ENCENDIDO) && _periodo_time > 0; + digitalWrite(_relay_pin, _status_relay); + + _T[2] = _now.unixtime(); + } + */ + } + } + + +// Reinicio y detener del temporizador + void Timer_lite::detener() + { + EEPROM.write(_eeprom_address_timer_detenido, 1); + + _restante_del_periodo_seg = _fin_de_periodo_seg - _now.unixtime(); + } + + void Timer_lite::reanudar() + { + EEPROM.write(_eeprom_address_timer_detenido, 0); + + _fin_de_periodo_seg = _now.unixtime() + _restante_del_periodo_seg; + } + + void Timer_lite::reiniciar() + { + setRelaySatus(RELAY_OFF); + + _periodo = TIMER_INICIO_ESPERA; + _fin_de_periodo_seg = _now.unixtime() + getTiempoInicioEspera(); + } diff --git a/libraries/Timer_lite/Timer_lite.h b/libraries/Timer_lite/Timer_lite.h new file mode 100644 index 0000000..b40b23d --- /dev/null +++ b/libraries/Timer_lite/Timer_lite.h @@ -0,0 +1,153 @@ +/* + Timer_lite.h - Librería para temporizador ligero + Copyright (c) 2021 Koneko Microcontroladores. Todos los derechos reservados. + + Autor: Arturo Corro arturo@koneko.mx + Versiones: 0.1.0 + + v0.0.1 - May 2, 2021 - Versión inicial + + RTClib + https://github.com/adafruit/RTClib + Direcciones de memoria 0x07-0x0D (0-6) +*/ + +#ifndef Timer_lite_H +#define Timer_lite_H + +#include +#include +#include +#include "RTClib.h" + +//#define DEBUG_SERIAL_ENABLE + +#define dbSerial Serial + +#ifdef DEBUG_SERIAL_ENABLE + #define serialPrint(a) dbSerial.print(a) + #define serialPrintln(a) dbSerial.println(a) + #define serialBegin(a) dbSerial.begin(a) + #define serialBeginWhile(a) while(!dbSerial) delay(1) +#else + #define serialPrint(a) do{}while(0) + #define serialPrintln(a) do{}while(0) + #define serialBegin(a) do{}while(0) + #define serialBeginWhile(a) do{}while(0) +#endif + +#define RELAY_OFF HIGH +#define RELAY_ON LOW + +#define TIMER_DETENIDO 0 +#define TIMER_INICIO_ESPERA 1 +#define TIMER_ARRANQUE 2 +#define TIMER_ARRANQUE_ESPERA 3 +#define TIMER_ENCENDIDO 4 +#define TIMER_ENCENDIDO_ESPERA 5 + +class Timer_lite +{ + private: + // Numero de instancias + static uint8_t _instancias_num; + uint8_t _instancia_num; + + // Direcciones de Hardware + uint8_t _relay_pin; + + // EEPROM ADDRESS + uint8_t _eeprom_address_tiempo_inicio_espera; + uint8_t _eeprom_address_tiempo_arranque; + uint8_t _eeprom_address_tiempo_arranque_espera; + uint8_t _eeprom_address_tiempo_encendido; + uint8_t _eeprom_address_tiempo_encendido_espera; + uint8_t _eeprom_address_timer_detenido; + + + // Uso del temporizador + uint8_t _periodo; + uint32_t _fin_de_periodo_seg; + uint32_t _restante_del_periodo_seg; + + uint8_t _status_relay; + + // Contador para ciclo + //uint32_t _T[3]; + + + //** MÉTODOS PRIVADOS** + void _init(uint8_t initial_eeprom_address = 0); + + void EEPROMWritelong(uint8_t address, uint32_t value); + uint32_t EEPROMReadlong(uint8_t address); + + //void proximoPeriodo(); + + public: + // Fecha y hora, Reloj de Tiempo Real + static DateTime _now; + static RTC_DS3231 _RTC; + + //** CONSTRUCTOR ** + Timer_lite(uint8_t relay_pin); + Timer_lite(uint8_t relay_pin, uint8_t initial_eeprom_address); + + //** DESTRUCTOR ** + ~Timer_lite(); + + // Relay + void setRelayPin(uint8_t relay_pin); + void setRelaySatus(uint8_t relay_status); + + // Configuraciones Timer_lite + void setTiempoInicioEspera(uint32_t segundos); + void setTiempoInicioEspera(uint8_t minutos, uint8_t segundos); + void setTiempoArranque(uint32_t segundos); + void setTiempoArranque(uint8_t horas, uint8_t minutos, uint8_t segundos); + void setTiempoArranqueEspera(uint32_t segundos); + void setTiempoArranqueEspera(uint8_t horas, uint8_t minutos, uint8_t segundos); + void setTiempoEncendido(uint32_t segundos); + void setTiempoEncendido(uint8_t horas, uint8_t minutos, uint8_t segundos); + void setTiempoEncendidoEspera(uint32_t segundos); + void setTiempoEncendidoEspera(uint8_t horas, uint8_t minutos, uint8_t segundos); + + // Set Fecha y Hora + void setFecha(uint16_t anho, uint8_t mes, uint8_t dia); + void setHora(uint8_t hrs, uint8_t min, uint8_t seg); + void setFechaHora(uint16_t anho, uint8_t mes, uint8_t dia, uint8_t hrs, uint8_t min, uint8_t seg); + void setFechaHoraSistema(); + + // Get Fecha y Hora + String getFecha(); + String getHora(); + + // Status Timer_lite + uint8_t getInstanciasNum(); + uint8_t getInstanciaNum(); + + uint8_t getPeriodo(); + uint32_t getFinPeriodoSeg(); + uint32_t getRestantePeriodoSeg(); + + uint8_t getStatusRelay(); + + uint32_t getTiempoInicioEspera(); + uint32_t getTiempoArranque(); + uint32_t getTiempoArranqueEspera(); + uint32_t getTiempoEncendido(); + uint32_t getTiempoEncendidoEspera(); + uint8_t getTimerDetenido(); + + // Metodos de control + void detener(); + void reanudar(); + + void reiniciar(); + + // PROCESO DEL TEMPORIZADOR + void initialize(); + void process_loop(); +}; + +#endif diff --git a/libraries/Timer_lite/keywords.txt b/libraries/Timer_lite/keywords.txt new file mode 100644 index 0000000..5811a02 --- /dev/null +++ b/libraries/Timer_lite/keywords.txt @@ -0,0 +1,49 @@ +####################################### +# Syntax Coloring Map For ExampleLibrary +####################################### + + +####################################### +# Datatypes (KEYWORD1) +####################################### + Temporizador KEYWORD1 + ~Temporizador KEYWORD1 + + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + procesar_proximo_periodo KEYWORD2 + proceso_temporizador KEYWORD2 + reiniciar_temporizador KEYWORD2 + instancias_num KEYWORD2 + + setEepromAddressTiempoInicioEspera KEYWORD2 + setEepromAddressTiempoArranque KEYWORD2 + setEepromAddressTiempoArranqueEspera KEYWORD2 + setEepromAddressTiempoActivo KEYWORD2 + setEepromAddressTiempoActivoEspera KEYWORD2 + + setFmramAddressStatusTemporizador KEYWORD2 + setFmramAddressPeriodoTime KEYWORD2 + + setDS3231Adress KEYWORD2 + setFmramAdress KEYWORD2 + setRelayPin KEYWORD2 + + inizializar KEYWORD2 + procesarTemporizador KEYWORD2 + setAutoinicio KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + + +####################################### +# Constants (LITERAL1) +####################################### + AUTOINICIO_CONFIRMACION LITERAL1 + AUTOINICIO_ESPERA LITERAL1 + AUTOINICIO_INMEDIATO LITERAL1 + diff --git a/libraries/Timer_lite/library.properties b/libraries/Timer_lite/library.properties new file mode 100644 index 0000000..7302258 --- /dev/null +++ b/libraries/Timer_lite/library.properties @@ -0,0 +1,10 @@ +name=Temporizador +version=0.0.1 +author=FaradayBits +maintainer=FaradayBits +sentence=Temporizador Diken International +paragraph=Temporizador Diken International +category=Device Control +url= +architectures=avr +includes=EEPROM.h,Wire.h,RTClib.h,FM24I2C.h diff --git a/libraries/Timer_lite/readme.txt b/libraries/Timer_lite/readme.txt new file mode 100644 index 0000000..789263d --- /dev/null +++ b/libraries/Timer_lite/readme.txt @@ -0,0 +1,5 @@ +Temporizador con Sensor + + +Arturo Corro Pacheco +arturo@elitesystems.mx diff --git a/libraries/libraries.zip b/libraries/libraries.zip new file mode 100644 index 0000000000000000000000000000000000000000..5b1bdd7e9a93b8f44624be7cf003c3de9fff5d57 GIT binary patch literal 1007436 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

FA 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�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

M`NZrwd>;5AO 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%0DSw1Y+e#*(Yrh2`q0ZD?K1NoRuY{-_ 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�%>hr>txon9q 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∓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 z zvO3n$kxFpZqBmVdoQdxZ*?4Z7cfbs-tabFxHa+}GMdjKWI~TXi+3k8PN~-0?oYNwN z9pk76FOdmQ5#Z=zymn^)u4Gp9<(+AY;?7v6%hR6LdRb;Bt#8ER$+fV8h)V^!ad^(r zMuq)VrQR)e3s{BDr*b}y7eor8I#NGZ3LnsDV0OFP0G%eOqW!Go8sH-E7*DT9*!Ny2yUjCCXfd>^I?ImKN7HKbb2Mt>*6Vv z!-oGmZ(~XRyFcubl9vVq#VDE(Jktn;uKqyMS#I{D=dta}b}l!U5{!3GCI94FaZn1H zM?g9bd2S_${6(7#3JH}nCKRfO{lSM!9OsxgBo(nOn$imv8nw?ofG=D(3AhNW6NQ{F zMxYahoKUe^e_er+PGj@H+f8#61`8-0lX505X=BB3bl;#Ve+K_I@kAXlX57@$>cYgi zho9+Rlr!32NHes^DLdnni^Yr!%*fk$*(qHNUT~Xm0A3jDH;r06w@ zdM#f1iqcEscaleSeyvn51z|Ta63cbDN%2k{i zpk@7@%44r_ET1;^u&GI-%yH+tbskR$xa;H+L7CRNQOd(J;jU(IXH*Nyq^!#A_>@`G zA>E>yXv=;Vx=eAGn{^XD32LiWgy_Es78$x= z;8?hqnA2BkNhDQb52=}($2iIop)A#{LgUd$Ptev5OyZkF}5cQc5* z@N_c6F&s+5b(8Dd=ZL7xrj1qxgA9PNIup|~%#oJrYph)2gi95TpXDO|8nvIj*$lI& z^ffT%NWGXeG{9}OW69qL#4uj~Tk;lTl!XSuW*)0`Rv)3hCCdhE8cm zj%!m(I5eF3_M62v(A><^79xON_#*)(bzS3R12=};5hkXtr5hb0Na**(QB}kfWRy~4 zE8RRb{Cz|1QA>jxI{M33bg>=b+0m%;EOp!sG4=dq8P)K2oOr}!Mj%fZ-m<9>7zYCM zFB{f*cP_<=UqGI2nK((Pz^-msWVy3K#=HKzH6$6_U@#77vTVi^{yaqaDPUKa1MXL` z{?q{VW+29({=Kf6iv6-gHDo`JX|4hglpSP@hjhn2bKs{7#ucjkqp;3a36gd$8lU32O#zWdsZp=0)=s+nDGnv$_FL5<+m{Dp?+Q^k<(zJ^dn*1Vxv#TvO=PqBqrHm zJ0-LeN~AA1#~UX_7A~#mRk!*6`kIUM^dexVZp1koKf$oa;fD2!YukOh&dDJ_7wJ?r z)}G5YZIXjOUfYy6RzAX*-0bhVRKD}Aur)i~o>4$p+>*mbftc5i7y(Nvw8^)Yj#VlL zHJ+AxErM&fekIFlx2>%l#HKEqmDJvy0(?+hmITg{Z(VfXF0<4hgkm$O5^)1+J9mO_ z1Ku?UPs!PThs5LpCVqH5NLE|yL)GpMF&Nesmq5A^P?sv7feYNdH7Vo)yN8j$|Fo)# zHiKi&Bq3^owV(c2KYy&bhz8JIHvNH092@*j8??sEzqItP5VXCDi7Mnz z$I|hExi50^=$!9WmRAb4^ism1YSc#cFMbm9SjsKvG_v>WGjf2Kp8rEW^k~6h0QEgLxEr8M|G-0te6i)*n!f%Sl27- zJ*|HC@ipwo0etrTZAog>PW?!8@M`~+wC*IE*V)_7j)RfE2o z%jz5x(Zzyk*TdDV4Uvte?9ID;~JfdBbqGHjry`P1!zxzAhq zUP%cp+zFA&kdxprs-z0db4M(Ygz#j*V|!i#mG7l3$soq%zQ^xp{|=qA|ni@=cP0{Tu1ACSi1=j)h%XVYzij0utfp|}uaRVYuw-Z5d31%E}Jxrgo&BP@g0rW98I8C14 zkAL~=x@(qYuIWlZ)lYJ&nkrw;rjdf5K=45rOGk__QO+0@46AkN$C|{nn%Cln?c0=z7 zDp3)#+NFIIwD)LJyS|^pm;Y21*dA+7LLcY*y4F_`-HMTh`GL(n${gx@Di#xqifwed zp$5918C#Ew+8NrLL7VBtZpF#v%+gnny=IKrl!+DS+NuE9Sw9PX=sXdp9=vuYzG#$0 zJX#lOCfEWo+`>_kr6mi#xojeW%;uteNiCRyF;?NYloEj$n`Qm81f7EE4orb0THz$L z&I%Os;@M{}AXLY(EoowxF3ON6A20isH3JA>c4zUgh2CT-s4f!bxtTl;#1 zSzC;_@bWHT+J;dEZ){n+lwVu?A`VGryuBeT{A88F2JNzXQ%M9p#qVBr%`39-+6#o=G{NJ7k|F?4UpC`gS z>R$isfxmuv2lPnr5v(=_M%FeYXYSI`Vfx+QmD@*|nH;Y5IksOfZwb_p*ZLwq_JHB1 z_iLBgEZ#1sCmYAt%QpwL^yvOqnHkv_@~<57j|Y1s5wS9{yXTejEaWpcFZ;^!`DuCz z^0>lNJIMGDhIav!oV+}@Iega=$)Y9rg^dC!k#b595rcj+|WVAx?%>s=;=WeRDI`giiZi}cU{1!5Bd$)iD1L0ivN z+0%hE2~~W6L`KvtDBbL#@Ke@XIJSXB4(Xpi5U>Fi8z_$*8`l+= zzx19YX*6bNCV{FA6^IDI9TvCphS#A@2%nD=5AHO{!rP8LezVKB-7tt1D!z`SZU{P= z%^bS>PqRr{?Z6=roz*#`Ply$ddvlOYB95lPg^6K`@Ke}}F=qnO=%fd)?@H6d;Uw%z zcSr0<{9TjLE?uG$XY!-j7<~`NO2K!Qq$!r-bp3uz7Dj86kVHfMizEG}N z`0Gp&8i`qGaXO8w?bEAgs9;5+`7F{pG&1^gN1%-_db<(TI>Y9OQwipjrga{W>p`NL zI4oVM#$Z661H9TFypk4&A_EvXpZ=6tG_8O>4Qd*wASE01@P;H(AN*B*AMwgoFT3nY z>X&sss&mDWM;-_}fnHArwafr^(~oF_{s+nIkbvg#N3@~qEJ%dyQQ4Iz4MhCCghD4H za?NLk?IBN4?7%U9z~r!~pf{60h>k8{FR5fh_pDRN#|-vG9E&^f`H9O@b}Y0kMa-qj&K0oVMuc-*)^fmR_VTu_M| z@LEyH>8m~d^z}w>qLAM2=q{3^eU{*eBx2JuqT3veYH|4iR45lgT~T-am|pCkY~vG3 z#nl3MtUVgSVgRi*a~-19W2PMN3R!KJdoTE9P)8M<#ik`L;(L5E5g3VbyN?vo@w-(J z)3gRbzIC_7sDE*x)a9Q?U;?nl@|~Z0OTn8@+rFS@z01)Tiq$cC$}R;tT`Z~X|Fju^ z$_0e4ngXpOT1_QC_co{iD|8av7TDERbupQ*@*~}#rOt5RKutyLxa15bI&u{Kp`^8& zPkAy`X;*B!Fz}!NX+@N6uyn z$e9jm8W!`#3Aa+JBf9@>x;Uyn`&9-uFYuW&G6|;I#vjVbaLCBpgcoTNc(^4!+%1l9 zWA8K`>~K8%aVKjD7nV?lF{`W`HEtCqx1oFN5O9hf1~!8%3}HBTi!%=X+J?y@dOBQ0V}YQ~GA6H`S=)m4 z)(E;s)C+b+t3a#b=I}MILbr6RZ?OlHPWN%^r#@QF6cX;l>oNFdtm`vK2j_~k`S;du zFBHC;r2A!Tvyb=pu(+SxElv{P?A6;i!Av2q>Z_MQs~XQD0jES8^ z#cb=cu$htW1S)U&y1>Oj$M6_8zl_X10S0J@6iaUh1hn9RRteV(V3kYI;2TbpTnV)R zr!(`aXHF!sJT#8i8mGYIs$3W+VJ{3CMYTi$n_1dx(JdtuXexI|>MG*L*9DtfNZ%&$ zUjnf9;6$k!zvUxrA9d?q=S^pa0_e^iZzAVhxyRd|3J&L=NvZ;OeBS`rUu%HQLYnO= z=mJy=1wa|yEYCI*tY|FEnZ{@J+;aT3tX6r_Q|P|iuUTpVcja9~C$H$X!ppL`>i$^4e9_P=e~rlOVOR$Zu|lu~9qg-; zL+z*8f=m?I#Cw-UE^NSV7`tH;--s@(&SL{Mw!y}q7LLm=U_Z_s_5l*D$nbCc29j*L zq_grMKe4Vg53Mo88xDX17ivG9b=&7$@J!$A_{4_xzWgO|(1UBi4a^SD2l`8h17y6fV1nOWseE^@` z;y>Zzb8kMnna*6cX|%6b$!X4Ly+1Ur>CLdwHM{=V?~EbDDBo7VFRIFTVAj#yhbscu zkOfW2K3HkVPGZ=7hy0(TdQ)%mP8=El;EVkK;acK<8P)%*#WJjJ5%)8(zh>(&qK8Xt z7E`U_TtS^R%A0Wv(E;;RZ5d@?VsWj@#{R=%3262QAzY;7HQn{X^BO&mwax9x(f09u z1yW3MaDUx@A8`gMMi0fumma*kx`5&B>Gbpg49bUB`@anR`_O-ee%z3Khc?(0c!08m z`!laLM|FTxZ6?ps9gHDz(h@e2T>E7E{2^TWz`}yU`L#{L=u1jL!Jf6(TaA7cLx#A4 zeERMRrx=jJ1~zgKl@e#3Fog=%%-hh4$8CHt+A#gl{ga_182Z0?jW6^jP_(%JpYu9B zlz}$>XI}q&Gw#JIdM~m?F?8vraOIXYu_x=wh9o!^aq9h++617|8s!lOIS$#Ocxp;c zrM*Lx_qQjDnQ($t7gtJ)0atN`2Mrq46!pmpXQ zll@f};>PuuIdDTt1hfRG)hd z$Fa=atLHruDCK2+m?oC&lwx{_ToCwzwa=AAS=`|mP?dU;Kn4iy!Q)cDH0!c)KxJG< z`ZDdqftRgvw#%zQ33X=0;AvfjKUcG}NXIMLCN zVK$VvUz^VSsl_K4cs#ReWV7S4qq#p`KD21)l#s}4w010G|0eE1+mhAX|f}X{uwMqbdY8i0(6P2?2&{pWR*dV7=`EJZ9uE*7*PMHS@BSr}L0eOb@)1`L83iij z?g%K9Qyp%|MS4rDzoCR?PQYd?YZ24_kHG?GuX7k@iGpU`a^|=(+I6jp#4z)ntYIIyo)+?!o_^7FOIJD7Hp)a4g zLP+)gB5{01>fR47{89#CO0nm!bUbW_lDJ^Vj>kN_uI`u|_ zpD&mQ_$I%t)yBn5ON1~4Z*O_Bg0@o`s!d?rrqao`e-1IJC<#l6AnV$^z!m%J@n7JF z27aBLc*s9;uMZJDw$#C)+0y&tc_T1ThU4&P{bJXmV75mqn1_H5{B~gbJ(PL7Z`*s} zVH$1NG-%^+%UA-H=kS916L)=@=an|siHWxY6X(k4+{Ig~gMW+Wb}XBj>eSR6*`L!X z2wAEWz5miCn2B6@ZNBkyy2DiA{0b{tp^tc+AH|(Ei35PzkOxLkpf#VQIiIu>SPdr< zqJa-k>lmULq}<<_%@j=&<;pP>9V&R(y*G$CUDEhuH4dH9CAlTzr@n;$Z9pDpxmM&; zpe%0GUhMR9rqPIOIZs#M?Zmbml_G$+gxMyZr{E?8YgxWCv2)E?t@BEJq@)&*PwBP8 zuQK|6LI;-t{D>W4s|_52xk4RyzBSXvj*=NMtTybH^f)9YhsWt?rGJ>9lvcb$h__1k zQf!di$bAM@-Z;(X2JHN)YH^a~C3x;i?kn!&l9RDts683i?) zvhP3q74~w#zw~-xLz^yoy|nTcq@dhhY%YIwpg(rZRTe)^@S!RcXV_jL3PN`LKu-l8 zzi$K%rLHUz6-I$CS7ek+itWDp=+bUmG%ae98DcuNOSNJ2qhQ9X!l``maqS`mJ!Y=_wEnQu9Z*t1vsbsN8 zD~YRgQ6DahnDX4Di;g8fSsUPW*E`U&_i?%o` zKW)AfzuL{$+41^$yq+7e|JoNGIzSZUMmlKP(wL{1d^<~Z8>gyYjYl$GW0Sd5HGAW; z7IFGR=~+L*)c;;ZgUCc~uVb&rQr*!SS@&rhTfpMUEu7 zizGIUFrm!>Qq_&4r*v*LJkb>WaD%vbUJF!p1H`I=?T)!#&Okl<(Mi5qNP(cl&0=s@ zHfqR&X#Fs7nKBf#FO#3bD&UtdG_}U}WQS|N=siRl{KlF7=mB$9p3J#yK9NT%RB6bZ zaw-K;$~g1{$Z2%fGzRQYel?$e8XkfB$J0w3RoHZM`20wGM#S_q<1`X&IUra+eHtP9 zcDUf=51O4scnDC(g(_^BWE~xDFScI1kX^{}mKmg`W$uuJ%8|1BKK!wqwQVd5kxJU@ zpWCm5XxO7?1*=}nIG7BK#!PA?&z&GLi(}K|zysD)S`i5E z4iB)L|G8D!{bI`l_^VeWvw8_)%warSC>90`btdwU#%ndFrb}OG1S^wA=Ti$+l$QNm zKUVPUklb{+?(cjUfm#8hO+PA%Ny|g6aUX{JorraL19G=(;^>v2B-9!um+JCc{y!gi zE4!b1UK!wARLz>nk7B}EwoE`NexL>qmD6;3wXwS(5S_yXTIQYbtv%W~*U6Fd*maea zmxF&}0%ivgls8E1>p9r@M>W7e^Fj=@iYyR`4dD{&T4`)r<+H{)#5=1bXVIeo6rB9K zD+ER@uMNM7jKNl)y0RcuLO)oegGzd-{@&7(XtdB*yC}Y~hdRT| zfA(FkNLx6#SQraAdN?^7SkoEX89CAYM_H<#^$%cc{NJ6Y|KIUiNv*`k_l~jCu1As~ zFRwh(F}~PceoIC;F+Dx}D>?tCp}V7dVwl(1*S*ir!y#Y{5H0)a{}j;RhuH8T0A)TT$2b1 z4V=H+n+=>0F(wS=(|;X`#DWn1WhMlpi^=={#n-Mn|2JPNp{3stL_W7qa|n^=5DFy{ zJT$L$1IvMY8c&(6QR-Y7B>rFW*n_X(zOcMvHwZeHWxPpoy}APQVG!m z1)$%R`0oBv6FNdvhCf>PA)ey!JX^xDx_W&3uEW!30!CKzrzJiYY#3C;bLMSn#lqvA z&^e`vi5f*FPqRlG{8~NfnP*9kV*(c=Sc&3EDmDVj<{qYW%8bDe7lmt&F#mfax0%Lo zH|q; z5hjI*a)_}ILdg_>I7`U{eUPM}V`r@iqMV2ZzfzByfaIkSU)BDjYt<88D1S2^F$8cN zhv2?20x?I*Upi^4FF>XK(6y@}xVEsHT5O#L$^ls*sbv4?+Vo4P{fmiI#RNSruSCU! zJ+N7Y^qE@pO8U#-pN0IwD8EE(Yd6EbB0(8&d-*MA)VJau^JgLFH6V2Tys$b#n)OXZ zNS8$I0@%0!Q$0eNtgmdFHyM5a!je!ry_z$N?W1b%>Z+}^cDtB-(F{2*#d!%i?w{2x zt0&f$rRak@M$nO1)5%}4s-k=Gli9_6EtkBRI(Wz@-hoWH;&U;Iz0EsQ+bO<@f0E!j zX5?(Ui8PKr{FD~%4oAeZZ>o}+Hjd{NpT41|4hvHlK%4p;iu731&AdrA64DhI2g}+73}eANlBudi)31 zCR~r~+4IjUW${ibO;4srGaO`6ktb(1UMJ5yfk98|Ll2SFLzrlV}K z#kvkYARbPE{lK*p4{c^*N=h|84u{R~?d4LJ?Q7QhOM-Re$xai7TN=n#qzBZT_z6E{ zDwSx?1{o+}${YQ!D+QF$b?k0h&vhIyt0(i$f^Gvpa4lZ1^Db=ESev0jxZ{~@I(G+b zlASUGXAe;xcMmM`YsjzBjT{6IS8T%nW@|&EmE8o6M{LTk_M;*3$yI1xN3v&7X6luu zdpP8K7lL5d>fYyoe{$ARY-*|Raz^J>X0S9xs@Bxt*mw+=0HLY=;-*q(J%A^-8Qxx~ zlvKWqNlOMzwxlt~qFV0Y+V4)0pB|ndhojhMquo)e-J!I$fo;*dH!!*PJ|1bj!)^QK z4tF9Hy*{pwuitK7-RcZ#(P4Id z++Cb_Lh~1_eXpXkW~REN-mcTS*w_$4Xxfv4sVXb>f?2ZaeuE)Qx6H<7%^W*o(sC8V zH=XQ!o+OP#Ry%oY%wy*oR4(oP$x;$~Yu4A!QRx>hS}4DBbxJ5cu?ooa&)MqdbNX;c ziw0dAcR938F#wRbzoedjD~3KzGL|hC^m*C8sbql31QS-8x%*@44avrwDqI^|@GelG zJaZmcA1yAUv?zU#m@$q9RwrTnp)d}fk^qv$wk%&})S;MJ|9Sb+jRSVRnT!=9zSlpOWoUx zBS4a9>bdj)?m;|a4j@U|HSSlw_orDydR;X>vTOzBJHP)xk!E~2xn2uqR^Wt1vHS`G6pi}(B^!nW@vD4N1|jiy zhAg(^x!FL~Jzq0onW*2Uc-fZNNNxlJpbN>sKgDPGLUnmOIqMRm>70?$k$m(E($m2j zcskSm^htMYCvF`OHf|g}&fW_dUx@5?&J9ws)?+ z%wUCPvj$+TV>8gPT0fVEX6#ZMAB>(099;1O(F@lua2NJK6JPE)s^78XzA&au1rPHg zaQxB;)-#Vpg{Y+sI(g}IPqkyM(sxQxL(#zMCoCx};1kF9^2c`6OPOQog6OznXRT4}=0Kay6mVFulvO};DflUGY!U31%qfQirg^&LZk9d^0Lg(wf|LVxV&_NAkv%CVtQDGfr42{O0loZKaO+KY74`zJXxp%j3DH7?njmB9 zUNuhdTccak7Ix{3s2zMLyAp%Rlu3Ygx$STv;I37hSgb`A)Mu9NxpT1a5^A)a=pq?HUS(?k*1tEWiHEMqCW|C-T0K`NLww{r)QtT-9i zv87LQ$Up$6m}SI&KtRalV7B{P3INlY*XzYE5J0X~5%rfz7b^ZDo);MsYI*q_->^RyY^_`^JTx%>vOwR z7g6n{xdF^@hY&P3ocuxGIexP(jNsdGe%9+fKKl@!MaJ1Lgw_Vp4j9>9(K|thC<{R3v4s9F_3a%tCxO@ zC8T1c^Duy(l9-x416g)uF!O49`$Z(?q^t%<1xiUD4nd4wKmwBK_ifxSm?2A&1U00U zYrepEXVG`jg=tuY=y8Dq#c^=yD#1fIbg9Yo49%MSYt-dt@Fw3ZFZFeAAVpqa!+EoD zg+&mw@>4>UOMne*(0x|+S+1JY`FkWwtf)PaR3({24xd?9A%hCWLW^mHXbPqBm0Wi> zo|W$#h3n17+MW-^=LE_s)+rL8h?G>~g^+>slW>u0Luy6V5$0fM6Dnwu2aveRmZzT7 z%vqrpxkQ$36R8rO59gdzB?wFu8aLlF}s-@)ZTaPJb)p)^m%z<(?y#C{Yf+zcTqK#%#Wpf1&3~D)G70 z1H*H@8LCgV`1~%u@DIathu~^WXp6a!D6_Y}|9%*H-qI3-L1@toO9|d-yxKOwH9!9< zvHE(Gjm#j9%4~5ZlEYo81k*e3R3nck>g4)q0_;HiAHFXhu@yxAw`&a5mVVNqgNQ`r$hC8NE!6c#@A4Vz(y=c#L+T(a#Q*61M?^-?bLm4!oU^WmpW?3CKim{AUB+x$Q zc9{DO^~|6g_&jCpoYrCoOJ}zSQ;3YgYKYBIs~{^87>^|LqA!NWRXO5om9IsHz=Cn? zTURNth1aYD?Wy9QIYdw_xW!aV9H9WKH1Ldf7Ykm;f#>>%6>=A4>HK5DSTDW{uT=}* zxNM^c`^<7USL|wqFcx~)fi@+c#oq^hy$;k{1)$e3nNOa#DgeiQJX1@KEqG0PD#dHK zYHGP4411Nb+g2B?!gB^WV%6~Xftc6N)3_=_b5WputNLdyo#(<}y?J6?)sPB< zrz=F5&KdYjxApoZw^f%CaeK31L4Svc+yDEgVvr3EFyFC2i8OWK{V@p`huyFqo*2PL zknJIy2w>d=C$;5vfV4VL)$YQ+t>!B2+SWUL;)0GB~sY? zpyTDCNLXmX3d-`b*Q?{ctfQCgQ>?o3vIBxCUQ;(sQ_`di4V^tf&P-gICL#DR8+!OG zcdc$YvWZP4@u9k!g$XDM>FI5HDwzVXL2R_5SM638k8wJgI%&!SWTFWS$<@XAIU;s3 z_TQpc{lQ>U>Mt_w?vXXg2p;W}V7n}y6Ca*3{drgFbL8elz)xRoXrh=o`* zPlJk;#prq8#(8Lts&wFrFR#-Xf0>jgi|I$`Yvl7ieXNpfXQi}HjDKgF#dYWP)DEOv zwJcyCKolK~B)OeacxZPH)3}|7!W6|fQzpA5Wxh&S5!bN2bPok3B>`t`Hp^&S6mx)_ zz?PpO%_!2RHBI7KCbraJsAF;p!gZL@$u>_duE^z5$MU{78_5GLJvv9(f5v%qz6PQX zD~cEujz?tZha62XjW`1JE<+Wm(BPW2VT@8=vv-+5+-6JAh|%j=xU-QWJ6 zpm4Z7b7tsf>}Kb7GWWP$oIG8iIv#EwO+RfvNq=7QudP?}I~tO3pbIv1rJ~GiQk2Zx zq&5UBZ(4};w#Zo?z^o{eV#Lbop5BH;?gvddC(O@S zTFOeR%eC2$vI}-^1nCcAb)+^5~UkW|Nd$83wB{fC!rYJ zC-=Ay_rEYo4p)G~5R)VK7OW|HXQi1ndj>H}P4!MrF7iNa$HO;>39u?I1-E25!!5ln zXYbs<;7SFN3G_mBA1Bqkpk|Y{2hJ4Ji={ZN-R=Codvabskc)Pw9~XLjF!|H|hj`k| zi(*>xhzG{eh1$a5MPuQok!SAZV^EXWxNFkv>^8bq={vBg@`{#a6ajs!Ow%#_O1{Im zT4yu?wpZ$!F(6o2ughPqAB>he?r7nPKQCQa*)h-YZ@n$5V}WnE7U{Vgou#+JtBc7U zWE1ZbH=Rq|t60|9+V%C8r=4C98sz%zbkgn5H$#A<6GyMO@emw?x8BrGdL0j!Xg|ET zt;;^(j<2Q5oo#!AOJXGTlFRVDZs?fm(bE?}0}*X1t~j6=g;cT`X@j(1i8Z3u6Lr!?TZh#0o+ zZ$t56;=iXO^5kWMgJ6R!gDztGU<0O)G>?0Y={uXzErTw}#cKQNeiYP;^?&C$qg5a= zB>jEsEc78vtFAwuaX#OpzAx8qxd#hJG``=;Y0bos7t)B6+7R9UV-HW!AKX0iC` z$*NcPS{M{8M;P-JLu>7oK1M^lMnW7XAWC}xZi84RB#wbyv>~z4q&!_c4>wDc-0E}( zKz9Jz_Hs4s2SrZHi*~6l1tqyD%1Dgc`h8ATpRv{I^myECskZkz_J5W8#|KivETIf2 z-X^c8P8Gm-bTZ@6!j<>6Aq7x1s%YqWRtl9eW)LUADV7t)z{G}9$JC8%83<^CTjG!c z#8W#*D-pW8nAF5rQ(Fo7WGRJ9*$^4HPHqbORPs>@ijx*wJ3q|U1DG6R-S>K9MO?&s zgAG&-Z9D57I<-F0DDpkh+_1|<4d2*bTTh#jgog;{rZ()X-6(8wEvkiyEV^R5nAdi@ zObT0SM2lkXr%Q+$?@PxL=0mRh^hA zINqG7@(K==8oM-xILwcNpyjwIN=h}!^}p`-Iv9A~oNP>FTqaE&-`-ZeNE?c$R8>Vx zjrwWIYCIv^Odt?!`BG5|o(&f=Pm_)@tpI6*3(s6g~QUF2@rBg)EbIj@%3+7|> zl_Qp_MQgR%NokRMPR}QwWrYejpVYB{tvlXbzk<$$I)f`AUQ)DGg!?djYDu7SwiO;e z1R6s8ffR!k5V!Qn2iOLd+Qu#|PG$%|qj(^IY-i?h@fl|f&4%-{dhH)T)DrBTp3|iA<1(ZwjSQLrU-m|N zHb1^fie;)$q{HX=NW(HotS&FbxQQ-~-{a><0`(WdI0R{1({nO^C%LoCI_4asrWJb{ z=RLV|Ws?)^Ih?f*&#~!coY|b>+A=DofREV)R)D9Mk{MEh?pWy~oFU0n4EzJ*7>srI$X(1^}-4^?llAx$9)d#Sc1$y%Ol%5uGew|B@>iakv-#`_4lj@A*Yb>& z>--!P^RK+SByU~EN3ja~&HW}F5}heBrCWW_B%}=MvNl9@0(F~hx;muhjDaLBY;P_` zQ)Qx}&LyXLuzjKTc83loxV~h!njQyag@3J=AdrX!t&hI`ktpPJ0u>+-yuX4^B+y$o z%$p>zA@8?3@Wy&()?*Hd;mCz04X-ukayod&oKC;|b#*lY?++jEjoYlo--a5}Ew~m1 z!jP%=9pCO?MBWx{iH^h{w{uEQ-pE1C$64tXqhz*-9mQrg2Zp=uV+n`mVY=SCVc#&> zh8AG@7*W$QKHf06Uq-h(O4ygNkY;?3!2^5|h@{z&?k}HpmB>5pLz#q{jfQ`+=^-_V zOGspR-3$Pm<@31TzxU1o|M1vV`U2ot^5XRN?FH$*UWVo}L-Yh<4qDsOiN&w6K@AU++$-#yZ_|8Wsx;(awwc+s zgv*LR1G!K$Vx<>r2kMiPmql$|BRPCFA0z$7vCZw?aMSdXF8~K$=vsleIQCkfs=9D^ zd^P;KVzGino0~>go!)f^>l+QIWCmYDMr=XeSU0!njSra16&TxSvg5L#xf}~%r$K9i zd&c|;IhiUQG!NU+rSr`?Ln`=gJ|+x#b0wf3oJVvKo`d)~z@-cBL&LH9Xs68RPmJ)Y z0u&`iQ-Wj8M^I*=VK)4Dz$)ExI4Rx{ErpH$m<=(|35v+d@DUz3y26o}1iMx)+y>2W zho4rIIPB=31_H`z-dS!7nH?TMFjOQZHByumR?Ibm z6STZPslP0rBp+E^_^e`_tWU32#XNo-m#v{!HYPE2O=OosT8KCjCR9^q*prfQ25gkm zqBVxME8|2xgJ8(-6qcuzb19d;i9CjaF1=xxVnI`aSGPrAW}%`sbgiU4uZ(Gx9N3`8 zJru1%5pD>j+j5gYT`%1w;R+m_Qeqvbyv0+>Cd2=mDZ^X8{l}fu)46hb2}@3QhvOwwmzhR9;zf^SUA!aaZ8seibWYBasCKvk1GUfSA!8I zK^uB}T$Rn4mE7=0PKwAG!o`x36eZ?{h}X!+B5alHl4_Zr$3zGhJTCJSV+rW+C1%Xn z<^>_-Y80?c4I_#6lVo?m)V3-v#nwtOca_n=pa0}kDtAHZ(Qw+%OO9FW*}wliuo_>~ zl!9#!v6AApU(p;?jFrf&W_o!3tn2$@nOq-O_-ZbrK7e5Se^7Rg&7lMhn~rVUwoh!^ zwr%sowr$(CZQHh!lVtPmTU)!&m#y7DFg4RP)zi~`-`6D*>@f89gm>f7NSo-{X_NKP zfjbtQs;&W}zQ*{0^ecp<`g=caO4<}5Al7D|9(JU{z)6kH??*Zhs?2E9USnERt?|Lrub6g|A~>OjPZ3?^j`CfNkB5dp_;flXIiJXFv}BocSj zhIBmTkjh`ikVS$H>`oRa#?Cm7Y442|kX|6%KGZhZbX+h*i-K9?-pDV>d-J|`}!R*Y`2C@=WWE**e903QHHQ57BTyC@!JU- zx>3QBc;kKcW{C#?95@bg$!G-0U{9U1)!l9v9g0ODXm`Fr9@_e#KzliA5EU7i=(L^& z-c?FHtsG`x-b#p6Mlu1#7Y!#{38EpXT<)R~3-Vb~pdN|Iud<7N8;GR?CyXF3_EUU1 zbTso_luoZ?tcc>S)X3^|19d^w$|ZXc4h_!yS1w zuQ|rwg|7FXX5>7Db1PPu0!$*+Ud7K*7s+6oXT|0+%uFIv})TMI__5*(`A5~z9 zL#JvG?ZD~=yBMii5z_{kq!Can)TF@J0s}c_jU|Aqj`s3jyuZlR8@nO5t6QVbF!mfh zD~XByGAMQhgFsp#44vNX;=Ve#tf^gj{up1as>P|zBP16p^kOx2x zj80zGXwk6#q{9uSbYAJ@&YWUG{ca@w$Eno|(A{20wZ7Xw?g4iF*|FleH7%XUt+tX> zr!vb50~+DMadx|ZZQiy}cGPMgDceM~;rRpe%DZh5Gu^I;M=jp%J;qbK8Km)ZUQbgF zcu@-_auy$7UWWhvx_hSiOxkm?0*74)lBi7$dmo^L#8z!!W!VE7H?XphDOtleoU*%) z(}S%+3?jg(V1Z})94qALt*Hl!s=~&@`5&KYC>Z|cSyM?9mY5>R9aej0xO3A2@I>~su)f+0a%fHR!tt;e92$ob)D+6sA2H0V>8n+1uQKK4rLvX6H`~j zu$mI17~hbq9fG5r!yz0u90?Ck?#OV8pt@_oaF!r0xHe~_l>$wtacz%>%0&iSN_d0> zm==^VM51O2d5qktJE^XndZJ#Z+w#{h>B|nPH(^5g1S|D@WT~Jii4Sv74;o3y&Sf-i z!gC*G(q=(8b(f~hkowtDx`wepsACwN7gDsWFt%)>>;M#=_QaBTA*Kn= z!`FIasT_O{_36RN)jrTQe1HlaVvS#-Nv%E6^K}ng>7yz| zQ1w+LNd=D4+@@(CVPsx6UZ{2xoyLUE)C@CHAu1hGJW}LBs!?Mu&OdhsQ38J?v?8)N zegmCHd1pEdvVPkqgiYFfzs>D?qbg-$_LPv-Sp^7?;cPy!@R8%=FYV1GTkvhJ1YMiM zmhY|wv)w2@)8LckzoJ+IJcsTdVt)ss9b7!WU$eh=JK^#A|bp z7suGdiephOaNnr5=Bf@3yG!{MzV-VA}4@uhjzcy}(d7I9MP z{W?6J@7DJ-|9k_i@UGR`a<9wmye?Cf{J9A{1$==gxBDc^_KB1IEsNbY!`*hT`0L#+ zMCOS5wJCugN>vtai(OB`ZKQbVlU1qh&yIT8mBh5R>6%=f6b%+d)=}%~_#XtZt9@JAzUk*D@tv5b z%0SdX5_+#%`x(yCu7mU2r|#iO=V~thixh?|{zWKI2WJP(pqNhlM!=^Gx7AN88?VPH z{(pw)KEZ}vhL8aOY-0cb$o?O)4*y+6UD7{6C5at3}i4iY=3 zR4Asv*UJC+fSN3~8l}q^Ym|zsYr z2{RMu=I!dJ`_nv^?e_Tegh-~I7wP&wWOgNATmP+4^s9PrrCQs)ZUxeTmUj4I2>SQ< zdNb=?2KD$if}6T%{j+5IM8;vabE=jQSSNRd;Tz5G^#hyy<9G(n6PhEb0W5F{nA7r) zi*b|}%=J}OVAHLNw*$4*Qyb!j5XV;j<@?*_-o3&dPX=tjZS@q@+jpkwRpza(-#(ib zCq&{-!BQJ+q(mL}6I}|aINy0zCg4JxNe;UO?-sQETon02n(Nikob7dN(Yt)X34#tc zKPS#|EkZ2WYi)O&mw5&)naMr&87Fl}aA0aosJLm&y_xTp=NzA>7Rn%uXRl1i%@ywR zl=QIn&s0D*Ow}gnD|^(YP26Zhmjc}=0*%<@s$M)q?~Y5_L(GMLHg`D}l0^0k)N%}t;(FVkrNw3U;G7MdH0`LxC1GJc{M%XErqV^hT@__spJ z&FzFnR#ChEr*7t`Yo-!Ms>Kf80T)NmXko(5A1SqqI1k+=UNBBixUU;|o@#yD+?*8B zBbPdP^F^477^c)J-f}9|$ECPpr@TpD9zU3}bpu+t>=VV+b6OhuC$4Ey9_Z8@!XuCF zsumg8Z5Y;+!Az)z9TI#nTZ_}uvC-kCfCIFN?z|vR&6BcBOEk?|vEl93U7m77&D!NV zAxr(>5Hh+zUvxFzbUN}%eavGCsC3A=>Zy_&2QGAia#rPKaCdtp>Z+#ToDSlvwU#;8 zgIr&&RHZjMem}jc28(vnYPq0FbgsmbL~=F!7-QZbyZsf$+s+%xDf5+l{__W&P+(nI zy4)E9Rb_-Jh_12wTC~qUNNVyjjU6BB!`ZJ^nZ!ROr_S6kaa59rkO7@T3%Ysv%Ui*` zM5+MpSsF(ieC9-@Uo6xAN=qN0u8&YZG{Q}EU|PeEr>Z})hM1$U!JYI;#U<5ppQ`JEVVwm zmArBvI_F1fVKX+lG~%9#+h^EL#G-#x7-?Cj);?PJUFNkvuUQ^65m214axOp zbNs7)m?T2qxfk;{U4KJP(d?FmGgeyphZUXDs4hBDU&*|wfz~-Vnc*)>re??Dht;|m z9e6I}Q@`(rx)_3>{xHHKss&{&10)(`Dsgep$Z~}}+s(;WwLf;U;Hz@>&WD6p6R425gu#e}!u6;y zPK1Utf3c)&>V5`~-|wgQ*YEq6r|;=UL*)R5-5<#We#uPENF2^@)%i8tNh47T!w~YMVS`h!b?hLEoK3W-F~2^CY}|hx z)B2S4>_f_yq5~AaJR_q)+DH$esS#_im#^jL1AOHsPd{$NF9hVDoL6^tLk1%y4i3-CR#ySim>_}np zS;J|M1whZQ!Siwb$XiUKWcj5psPN!$Atc8sX_|D@a0#SM!)%kH!O6(}<>PfWwVtJs zm{CQI^1(S#5Gfm2x4(&L>LFbAI;I;ZRJjirC_{{^iladWHlWD~2E;7(BPQUNuB9dH z1qLJnK_se#N|NM2B(X^&38DrCo$~Z8ZF8aOVuZ3)Az_A9(o+`3_5q}c0hr9hclD8r zdb2TdU|Lzh9CC&PAxOMj@=M|qPzuB$tczvY z*TM{ji4j8=X#Be$^sa0jsti*A*jLF0^wFU6!{ft`X13R;^qnCso!aqm@pW-?@%5~k zO(mL1!L-PP5&+;?N5WgsAP}QO;=eH-&xc_i(SBeF`k@3!ht?1#K~_V8lo4zb(u9NJ z&>qJ>BM1A>kB7+zQf>YHs*&PZps*`R{lhZDs4o!6X%c2uX;t;)+KRfSg;!F@B?LiA z3^2&mIpQP&DAj?r*VgF%ey}u8W2W1eWXlDI6*91_iIPbK0hlHcrNpO8)y9C|*3$iJ z{io%h2N<+n(ZfdJeGDkVsSfv)Vx=~NLpH`uBMehMxorY7fak~ynCz=$Rpq`arD zNF!|+G{+c7aRRagbTvPZRR{Ew=vV88t<*I`pVFa}bIEt*n`&l7{ibydsc%G;WWpG2 zPEvFfM`9rOFJJN4w*Es@;)~EptBaZ`7V*nJN2qZq-vEZXxN0CuvJwj3 zyTn7LAQMZbR=}_IZ`)E57uDx?k*SaFS=pS@F8lJ3gcF0*OmaIOs>!Bud&^HD&vD84 z)}O{z$2X{ExHaeux=OWLPFNy9OM=?fNMjD?5s(^z?oHd{rqUblz}{)ui2^z_8((}k zYK{BM`YUd$0=U1W8ANCipU~6WHD|pV)=;=CHkx*(h`NOXn!7#M>M5&Z ze-mvIF$HIK!HV0xI8`lnWOs_6%dU35OUIDSV7&-_Um4L@~wDB#xJ9B9rNZN#fh8MtJ%MG7`6;qycDMdJ;s zA#k9lp9pQnwYz-Z(>lOns#0rJKyPgI62aaTWgvW#hR{oayzBs8W!|s%smmYq%*IZ} z#*5Z-Xte<$Pdf$iQjo2(Db=10kNu$4GOb$el9+mf7`Skq|Iz(7#rc`3IV^4VENhT? zUxopk(B6t@d>)xwkF5d$D{9fKO-ZY~RIZh@|WE{w_SG%Z6BUU8y7YF*>rDa&zfoi?od&t@n(&=|}d_I5*Jx)sc!`Jlr9A zG+P9!GiO*m6HS$hb(mWeyau7kAQze1O|st!W<+3dn$H_}A3HT<2n_;?^d%j;e@(^Oh(5wWJKM@KqPQ!~@vnVmGd5{Q^`C3|^HAU~LxynZms zWSzaTWiy;VrV!ETO6KwssD2R9eOSuo^;>m_|4ilYJ^mU6?Adpkh>;b{?U|cZP}t8I zuESD^`t`&Qjyh58UUQ%(cP)bBoTNphOdw;cWzXr?_g{KJz|PXLlzEe5VUY))w}YYL7jV=$3QMw(FdN_M0Pu*eb}7 zw#=8cFz=$2SoB|!Er>y5)b@W-hVZmb(oo^nq4Q_FBT=T3^Qz0GaeEUEIQ=h|{$*{DG7pC``CnUZWe(!F-ncT#nqDqI zymMr$`3IrRT*Un|qh8BF_He?tKXBENE#`O~lwg)4C2ibXvXa*KPB=RRY`lH>n?3<| z3y#RFR1DgfS-ygHms2rg&vx*l{CA@K794?Dt@zk+cocQ_QP?ix&c1VwG#tX*U0oU! z3a?4q6?keMV8jX&et+NfGu6~CZ{J{%3nM75K!d2L#oq?z{sbVQT`MZC2%SaLS`{W5 zL6bo$hyr>|R-o%0=WgG%G0GS!|9)PEw7_4mx$kbdBv)oX5@R=WukO$_Fo;O=95($_ z4b6BAZB0gxOB(YC=7Brz9+AoRRZ=_$3yX;@{uj|no4#%JMvKhp;m$6MY6qt@+P?W} zY2k{GMF{&9>km$ug3WFDg&E84`}fn_7T$(JvASN2{FaT#YG4h3-hQjLek%F$PZgTx@XS@1nlEMKI4@+d zAJ`+YZsND-I_4eVn0oXEN9Ud>$Fhp+*-EgG_!(|ZJ7^w>k8$7nD#T*d@)>ZRewmzc`}zc2EMQN&~Kx)zIr>1e5W zhbaZ`YvwNeR#;7bIDk$OJnmZ*g&oR&)I&{*aSAPD7>ooXXlg@spAF=Qkng>9oJxh= z7?%f@I?zAaC4|d7i6$6mjZ$}{NL7JDD>XywYg{{_liV7o z-L-}1aM!C9lO$TeGua$a$?)Z*F$x9EOWOC}FISd3BU(gCk}WmB|5~esR{=aHVRjtT zzTx*4OhiWa3f71B`m?EkyG6Fa7Cf>m!1_x$ri-fcc+(7x$^wqqlm=Xw^_ztF-i{x- z-S+O~TYZH!%=aLqie`1xK_v>m^6Px@$hI;?3`&xX3lvwY6F*@K*H#%T=xPE#!9Er@ z>BqQ)PQTWFQvbaJm-pi>=)EB8v>u>ZQZv>o7?E3B4j~`2Oj% zQnA?awO5Ou<%uK?pJjc1%Ku98z6$0}YxuaXm(~;h-iaZ4#}Kylauc1Kq6$~jyKeZJ zE_9Er0k#VlS?z{`ra-nGVBZPQFkPcQUFpBg4=hLJ3&Kmp^VDDeXVBEPD+bMcjVYW6 z?!)qqfacJKGe!>oX&z8%5Ox(v!E~J;rZEh=!q?cVKt>%RPkNRgfv3YFf1zFz=+QO8 zxD0jD!J#nbn5xWfAl|@PiQ>r~G<)L=_SX9G%{egWLfoP5vRO*ks=7SNK@u}lYAA*) zV?c~vk!%_hUWt4d>yo0##3kUal~u8-24O%_#CM$F=x=!voSqKXKj*JcFI(d>Fheh6dv$fA2+T$1 zOK&J5W^8BoYTa7ZQV~LJ+Ej%9ODGT|HowUS1fgiu5J;g(gSKCQEy)^f%O?yENA23b zY%*CT60$V6cNAI}aAz7?L3Q`h<^r*#4WKWc1kA5VvZ405U?EQKz{x0 z)~d%FR}BhZ0-!t`@@JC%(rz*UqPAt5p<4+yV3x#{6GV?!TZzwv>!+$_y$PKZW5DuM z9#GyR;bdb99Q#XvsPI#iPdJ+YgE5BrEx(B58i zvNO?<4hIJig|}eF$tXDie05*#&(Ss{Hsy^a{R;@+cci+0S+j-;+H~w~dR>O>DBms0 za)jwMUL)bCc&{X)5IhL63<85-&EW)nrt z8Zsb{iY5AE6Hcp6d!f#lW!)zTy_J2bN6JBxWe!UzbPT5t*`l9#?Mf#oO zk<0svAh3Pff#C2}l05A7D&8s{Z0X0=Tuv=Ambvk!H2CN*f#a-i0S_OH+tU zXh!^bwkV#dAy!iUH}SCa3Dz;rvP0h7kz`-Vvink|GTqLVb@149Bg8GnFji0jeW1CM z9?|6LG?n`9F^7;Wa2j&X=D8ycKmtkGGY{RheDp-Pv}5J~tPS4v)^rae)o3~JJstf4C4o%e%EyaYTOHd7Q&(2@`dtNiX9;cXstj{#D^UIn#7du-s>g5}b*b0QNXZ!mg7&hRF z`kw>Xs-#mB-|7}m1Lv0Sv=lDi)UEkW0Zr1AKaiqmau}9g1LcJO#k?{6W!|`<vhIxpih2ZT8~V8yLW#(MRV3Vgm{ShUObN0<@@u!Df(9 zu=256;4j`ib81_&Yd^BE3fI`(#I`yl!UvRQZV*L@-=3W=PnvS_Z!tf#FfW8&z0Y=B z9a?J^nzGV@RX}Pk97)q;;|D5xoh;zOTMCbl>1fgd)I6*`Gql>(4N zE>)hoB0}hl3+gtMM4ZS-wz9tPRtBGWwEeiWeXeq1x2?vk?zv2$hk8QS{K!hDO6w=8 z{DQc@jt`u)WL6sCxj$dX*2N7eiwEdPDYN2+#Dh^z%APU^DCanS%SX>ZA-a8cq@m{_ z&N)RXz5*2=24K$nILIL#46x2V#~{lIZr)C=SQ(3B$(R03R47wb*hu|PQ!?$z?T?~? zFDovwH9;12^a!2yff0zdy?j@K-BD|kVVRNu0#s}!hS%0glT4y0dG>_MJPR3JNp|Sa zBkekxwRwlAEN_9^UDSLur{1tkzh#m6QVRKc5L0tSiDxPlCv#R8^m(V=h&1}S*ecd=^3}vK`qt<& zB_b++vaZmAugG)|`Bud~btM8rqa_@3*ZFqw$wa{I%4z(G&~FJ>Ytpvfp3l7Jc5lD5 z?>5t0;n7kG0v0nP=Tic4-Ejla@vi1V;WEAK6C#WL{V+32jU{Ckj^=y^-=c5Fz}tBCs`KE=*3uKe9oFf@ zt~{G>qeGp)&+R}9eeyQ#)`2HzIVsuW)%+-1^l#iw>y#-`4W0p5Ix0$ZqNOtel3+sGbCFO95qXwENCZH!mz&FEe0jG$=J! zH>Td1qn}yR*OWxy4mJ~9XPC8BF}O{NwQaG6?hjFO$DGOH@#((F{^U3a=;473kt%3N zqz~<=eGm?vj&{g)xHmJhLErbf1^gVZ+-|&_Lfg{E8mFDwTlmEurxh9R^OMp)X78sO zPRBnSSw0vqhKpeP69fYRx77ou_KQ$6*X~V5f;5J<5^askHUJ_-&h0w|# z_3B3tRNg+$DLdVm?mJyGx8OO5hac^0TZWIj%hnFp8@mZEw0WKU4ZE{Cbk~j=SzIO8 zYaWF2Y*jb9h1Ry`a3fq@=RDNOXky>HnqtjnmLqJV5=*q(ynfV=8-In<{#HxaPrkAUL zrwSLWvz8to#xBl3Z}W}-7Tl%@qeAfTji~|Ys6LP-0qRicG#dz&$aUCw@Q)8Pv9fBj zD~Wf;9vkj|OFTM)cvs7Q1Fl&7jW7f-NuF!!$_?gK@o94hn|I4?1dc5otMxBvh zR2>F|wEQ>#WrbP+by7wzERU%!Zg4qO^3lq~&rmlxzso;C7I>S3$dW3o`4GlcMOjRm zg=6c`oWeLBS6$q0xj494czF2Lo7MMexZF#lhm!KHRJ?>Iit6K9$_M@l(=EH^x;g%b zdpj2^g<5VmRao%Xd;7dTz;k6Q6ygkd>t@R&%2^C4ZO8lT9$*QN+#P|X>BVl_lcMz3 z7d&Vhdco+2iM8G@-`90G8ZcrzKHJtCGNa3AYCpNpA9T#bnNgAbD5uK#AxG`XVhHQy zYjLB7v8F4;*Oh}_uW~KC45zGLL(AcT{LV0;f%vFsdZ|JJe_Ul3R zvCl;Msm^K2j6%iw^XM&*eWjYv1xOsJqB-f+mV=E7FN1}F%MbH+uQSDnf~hKi?}}Y0 zwV2|{$R~Ti%wA>nahM*aEfph9X6x>*&zmb1Z1`Tq!2TP{OT@T#x_Vwpmv2i)hn)t0 zb2q;i2ko&#elimX+Hy7`nOA}f&`32S7(HnHb)*rZ8htk>ZL54%3ohQyX4AzM*Cpjz zLW+lo1}I4c0+g47_~Ten$>5AynCwcwkJ`Oni6+W;xaTE;+iUGL=KW8ISvXtk!7DLhrNf!E8@oT5U0Z=$t$YHtqqgucMGgGM~j zv7$ml$b~MBgek;ZRXPV}e~kID1%)jKdTG?$T{;18v;BO2uk9ltmNi@ZX=Sq- zO!1XH^Q*rF2~2?Y4nG7OsKTOeXcSQoZCESl8bFaup5cT>s&i%q!Dq*-!y3hBgmu}$ z6nV*a4`*CO5IDM0852wf(h$pchIi@j&#MGS#^<1o${>xRp@0%(fmC!^kKF5*04b$8 zVn6fgkKYTN?R|d;5N)Xy9q4Of$hd6C*`}Gdw`I0Wu}qm}KBJglXB*OIY~dtra#F1X zY8T|2RDGMfSf8={G&+lX?e+TE763lr-yLdgpy1Gg^jz7{QKl8_FEfmRa$F(QLM6n^ z4_I!f-O}V$o^zYo{d!Amk#EDe&XN{7Hfaxe5BShP)f0A2QLYfJDA)7;UKZ2yd%FIF z{a#lb#u^&|p|z^ps4!+Rx2tAZ*4)p|H{|pB8GO{Kuk1ymN@ekxuequ{KR-gxbUFMw z8GDGa3dUZID3mGuEC*l8Kd-)tRqy`f?aK9FP|6s0rpd+A|G4tdetd4bIXM=GnVcSp zSk5IbFfQ;GN0bwL_kR?!>LPA1Yp^>C4VU4m2t#yCItvEHG;Bar7N_a}Ss@vX@Nn@C zl;K2M3-^)sUXhU~z>E7xoxGlYtkXR>*za*yZ*J5mAuD=WIa7>=z$yygSUO=PMf1d( z*YDY|#qEfEX|nh6Y1!~8RC{#maf$Jv`=K~mG%0T$&K~9uWK?ZvtrF=hHQp<&Od`1$ z_^9l6*Au3>CT1u;P%NKG!N`)PY8p`;Xj$Ba;DDH&`^W3JgHdqwFeatIY22jZo+R(` zvI7`L``4GIn(M>i(J37Su5U~qpPk8`8}Ke-rvgX%Wo8%v(-??0J_r)Yxbb!Qq}zAW z7l{XGFq6MFtxDhHi4!WbVs02!$9loMse%(UzQT20A$d%!j@sD1EmkMee=A|qXw4n>4Qgx>7=AbM;e{99tR@BT2la^j>kw`k(6FOG-_WSvKKc%NzV;vH$peVjq(PsKZ$zX_94h*pYJ0ctCPsJef{SP6nI0-iS} z;!*S#KwLCoW;b#$%;LeBCF$tF@~C^TOk`x)l!%n`C0WMTEd`0Jr;V0ZGXvk^yT#-k z@%dscAjr>N65}TFDG13K>P^k$+mNzERFZ)zh_nP{fp98BA;th4@cA0t-2-lzjUgC4 za!teqsQrVqwQ_x0;s_R5uFV{;m)(TGMfk@tj)NfjjME6b$a3>SAoV1X#w95%fN8Zh?`?4v}oAC<+KMMGi7%7 z$oH+L-=28A2k)jK_q>FLPqdRLSXCp}LZA^{XdKd1b!}#1q4imavk>|mP@Txlk9A8h zw4c+W?5;^qFAN8?nX7|@$`Jzaj$B3k#fOE$2 zQd8wQ0P>s4G%UmNy46TGXbkxqGOT8gCS-QSN32G?q(ipW ztZ4xhi_`-r=P}_6rjd;-h(~Q7PfGMI`0D<}CrJ`S`hO})dPt>^tFsI6Cn=zo_Z1Wn z5hCh>BrkOMd00VrD?!;E&-jp`);K7iEkfhQ5=$B}geX9# zAx7Fe7cPY?A@TM&i$i`l1`yi3SD>}NPJ!@TwYb^-U5 z!`t1wxW*8%UpcB`TACjGjc?ia>kvPvkT@%C)=!W2QNDJb>cgEwsBfn{FF6{2R6XWy zyc09i!PnVNx>iwlbK9r58#Hm6-r!=vA%c!eY>si?=KefUq50FB;<(%{Fjd^XGMQ+3 zw>8(z4wnBD{tsHFG5&GnQ!#iHqppJ}m_^@OnTUiRSGd?uj+5UJoZNi{|TVGe7fsdo$VWwU!FmK~tnJBV@ULRsq9%{4=U{?*>8OlSzkjh9#~+0EMDi zvsfPNX{EwEdvXIyL&c5&2iu(Eg$o$=xwCcFVftwXHWY?SE;pK?i=IczWmL&*5PQ*r zhq5KXvnqMuqvh=qm36c~(Zxx8vlI+}p|g%R6e~H$j2W8jLth(B_v9*SkU+;lov|&0 z@tJMWD3f;7*R1gbIPcGz1CNi4F57JzEJ5{EN4&Ney|h&=|C~2sq`ap7O;A+Bh9U%zml>`t*4%0Dps2H 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
t?lkk0ugao~5k-)?Re#(~E$ZRvw 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

AbJ8lAHdg=*eNP<%%E%TXbAO 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¾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
  1. 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≠Ou17a=%$pp>x#trGS>;rAn@(=c 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 EKhbDaj{pDw literal 0 HcmV?d00001 diff --git a/libraries/readme.txt b/libraries/readme.txt new file mode 100644 index 0000000..6548f7c --- /dev/null +++ b/libraries/readme.txt @@ -0,0 +1 @@ +Para más información de cómo instalar librerías, mire: http://www.arduino.cc/en/Guide/Libraries