From 4a4768a7f80f32828d763efdec9103a534322569 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Wed, 17 Sep 2025 19:25:14 +0000 Subject: [PATCH 01/29] deploy: d637b60fb7dea4a2665c020a93cab9f85e87613e --- .nojekyll | 0 annotated.html | 110 ++ annotated_dup.js | 4 + bc_s.png | Bin 0 -> 676 bytes bc_sd.png | Bin 0 -> 635 bytes classSerialProtocol-members.html | 117 ++ classSerialProtocol.html | 142 ++ classes.html | 111 ++ closed.png | Bin 0 -> 132 bytes dir_64032a4eeedb86ab5d4dd10c6c32e421.html | 112 ++ dir_64032a4eeedb86ab5d4dd10c6c32e421.js | 4 + doc.svg | 12 + docd.svg | 12 + doxygen.css | 2045 +++++++++++++++++++++ doxygen.svg | 28 + dynsections.js | 192 ++ files.html | 111 ++ files_dup.js | 4 + folderclosed.svg | 11 + folderclosedd.svg | 11 + folderopen.svg | 17 + folderopend.svg | 12 + frame_8h_source.html | 142 ++ graph_legend.html | 165 ++ graph_legend.md5 | 1 + graph_legend.svg | 167 ++ index.html | 105 ++ jquery.js | 34 + menu.js | 136 ++ menudata.js | 31 + minus.svg | 8 + minusd.svg | 8 + nav_f.png | Bin 0 -> 153 bytes nav_fd.png | Bin 0 -> 169 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes nav_hd.png | Bin 0 -> 114 bytes navtree.css | 149 ++ navtree.js | 559 ++++++ navtreedata.js | 44 + navtreeindex0.js | 11 + open.png | Bin 0 -> 123 bytes plus.svg | 9 + plusd.svg | 9 + resize.js | 155 ++ search/all_0.js | 4 + search/classes_0.js | 4 + search/close.svg | 18 + search/mag.svg | 24 + search/mag_d.svg | 24 + search/mag_sel.svg | 31 + search/mag_seld.svg | 31 + search/search.css | 291 +++ search/search.js | 840 +++++++++ search/searchdata.js | 18 + splitbar.png | Bin 0 -> 314 bytes splitbard.png | Bin 0 -> 282 bytes svg.min.js | 46 + sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_ad.png | Bin 0 -> 135 bytes tab_b.png | Bin 0 -> 169 bytes tab_bd.png | Bin 0 -> 173 bytes tab_h.png | Bin 0 -> 177 bytes tab_hd.png | Bin 0 -> 180 bytes tab_s.png | Bin 0 -> 184 bytes tab_sd.png | Bin 0 -> 188 bytes tabs.css | 1 + 69 files changed, 6120 insertions(+) create mode 100644 .nojekyll create mode 100644 annotated.html create mode 100644 annotated_dup.js create mode 100644 bc_s.png create mode 100644 bc_sd.png create mode 100644 classSerialProtocol-members.html create mode 100644 classSerialProtocol.html create mode 100644 classes.html create mode 100644 closed.png create mode 100644 dir_64032a4eeedb86ab5d4dd10c6c32e421.html create mode 100644 dir_64032a4eeedb86ab5d4dd10c6c32e421.js create mode 100644 doc.svg create mode 100644 docd.svg create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 files_dup.js create mode 100644 folderclosed.svg create mode 100644 folderclosedd.svg create mode 100644 folderopen.svg create mode 100644 folderopend.svg create mode 100644 frame_8h_source.html create mode 100644 graph_legend.html create mode 100644 graph_legend.md5 create mode 100644 graph_legend.svg create mode 100644 index.html create mode 100644 jquery.js create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 minus.svg create mode 100644 minusd.svg create mode 100644 nav_f.png create mode 100644 nav_fd.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 nav_hd.png create mode 100644 navtree.css create mode 100644 navtree.js create mode 100644 navtreedata.js create mode 100644 navtreeindex0.js create mode 100644 open.png create mode 100644 plus.svg create mode 100644 plusd.svg create mode 100644 resize.js create mode 100644 search/all_0.js create mode 100644 search/classes_0.js create mode 100644 search/close.svg create mode 100644 search/mag.svg create mode 100644 search/mag_d.svg create mode 100644 search/mag_sel.svg create mode 100644 search/mag_seld.svg create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/searchdata.js create mode 100644 splitbar.png create mode 100644 splitbard.png create mode 100644 svg.min.js create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_ad.png create mode 100644 tab_b.png create mode 100644 tab_bd.png create mode 100644 tab_h.png create mode 100644 tab_hd.png create mode 100644 tab_s.png create mode 100644 tab_sd.png create mode 100644 tabs.css diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..ccaf676 --- /dev/null +++ b/annotated.html @@ -0,0 +1,110 @@ + + + + + + + +ModuloArduino: Class List + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + +
 CSerialProtocol
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 0000000..a876583 --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,4 @@ +var annotated_dup = +[ + [ "SerialProtocol", "classSerialProtocol.html", null ] +]; \ No newline at end of file diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/classSerialProtocol-members.html b/classSerialProtocol-members.html new file mode 100644 index 0000000..d6074e6 --- /dev/null +++ b/classSerialProtocol-members.html @@ -0,0 +1,117 @@ + + + + + + + +ModuloArduino: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SerialProtocol Member List
+
+
+ +

This is the complete list of members for SerialProtocol, including all inherited members.

+ + + + + + + + + + +
machState (defined in SerialProtocol)SerialProtocol
receivedChars (defined in SerialProtocol)SerialProtocol
receiveFrame() (defined in SerialProtocol)SerialProtocol
removeAccentMarker(char *str) (defined in SerialProtocol)SerialProtocol
sendChars (defined in SerialProtocol)SerialProtocol
sendFrame(char *message) (defined in SerialProtocol)SerialProtocol
SerialProtocol() (defined in SerialProtocol)SerialProtocol
setBaudRate(int baudRate) (defined in SerialProtocol)SerialProtocol
~SerialProtocol() (defined in SerialProtocol)SerialProtocolvirtual
+
+ + + + diff --git a/classSerialProtocol.html b/classSerialProtocol.html new file mode 100644 index 0000000..731aed1 --- /dev/null +++ b/classSerialProtocol.html @@ -0,0 +1,142 @@ + + + + + + + +ModuloArduino: SerialProtocol Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SerialProtocol Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

+void receiveFrame ()
 
+void sendFrame (char *message)
 
+void removeAccentMarker (char *str)
 
+void setBaudRate (int baudRate)
 
+ + + + + + + +

+Public Attributes

+byte machState
 
+char receivedChars [MAX_PROTOCOL_MESSAGE+1]
 
+char sendChars [MAX_PROTOCOL_MESSAGE+1]
 
+
The documentation for this class was generated from the following files:
    +
  • CristalLiq-serial/frame.h
  • +
  • CristalLiq-serial/frame.cpp
  • +
+
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..995e666 --- /dev/null +++ b/classes.html @@ -0,0 +1,111 @@ + + + + + + + +ModuloArduino: Class Index + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+ + +
+
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html new file mode 100644 index 0000000..28c7dd3 --- /dev/null +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html @@ -0,0 +1,112 @@ + + + + + + + +ModuloArduino: CristalLiq-serial Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CristalLiq-serial Directory Reference
+
+
+ + + + +

+Files

 frame.h
 
+
+
+ + + + diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.js b/dir_64032a4eeedb86ab5d4dd10c6c32e421.js new file mode 100644 index 0000000..caf43f7 --- /dev/null +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.js @@ -0,0 +1,4 @@ +var dir_64032a4eeedb86ab5d4dd10c6c32e421 = +[ + [ "frame.h", "frame_8h_source.html", null ] +]; \ No newline at end of file diff --git a/doc.svg b/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..009a9b5 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + 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; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.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: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..b73c828 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/files.html b/files.html new file mode 100644 index 0000000..43c09e3 --- /dev/null +++ b/files.html @@ -0,0 +1,111 @@ + + + + + + + +ModuloArduino: File List + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12]
+ + +
  CristalLiq-serial
 frame.h
+
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 0000000..9228142 --- /dev/null +++ b/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "CristalLiq-serial", "dir_64032a4eeedb86ab5d4dd10c6c32e421.html", "dir_64032a4eeedb86ab5d4dd10c6c32e421" ] +]; \ No newline at end of file diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/frame_8h_source.html b/frame_8h_source.html new file mode 100644 index 0000000..1470243 --- /dev/null +++ b/frame_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +ModuloArduino: CristalLiq-serial/frame.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
frame.h
+
+
+
1#ifndef FRAME_H // começa o include guard
+
2#define FRAME_H
+
3
+
4#include <Arduino.h>
+
5#define MAX_STRING 80
+
6#define MAX_PROTOCOL_MESSAGE MAX_STRING + 4 // ddd,maior string já desprezados os caracteres de inicio e fim '<' e '>'
+
7
+
8enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
+
9
+
10//extern byte machState;
+
11//extern char receivedChars[];
+
12//void receiveFrame();
+
13
+
+ +
15 public:
+
16 byte machState;
+
17 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
+
18 char sendChars[MAX_PROTOCOL_MESSAGE+1];
+
19
+ +
21 virtual ~SerialProtocol();
+
22 void receiveFrame();
+
23 void sendFrame(char* message);
+
24 void removeAccentMarker(char* str);
+
25 void setBaudRate(int baudRate);
+
26};
+
+
27
+
28#endif // FRAME_H
+
Definition frame.h:14
+
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 0000000..3186419 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,165 @@ + + + + + + + +ModuloArduino: Graph Legend + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 0000000..34a71d6 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +238bc3d95adc1929b3259d0c39010ed6 \ No newline at end of file diff --git a/graph_legend.svg b/graph_legend.svg new file mode 100644 index 0000000..f90d1bf --- /dev/null +++ b/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..a526c8a --- /dev/null +++ b/index.html @@ -0,0 +1,105 @@ + + + + + + + +ModuloArduino: Main Page + + + + + + + + + + + + + +
+
+ + + + + + +
+
ModuloArduino +
+
Módulo Arduino - IFSPresente
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ModuloArduino Documentation
+
+
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",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("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",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(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,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}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..b7ed917 --- /dev/null +++ b/menudata.js @@ -0,0 +1,31 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/navtree.css b/navtree.css new file mode 100644 index 0000000..69211d4 --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/navtree.js b/navtree.js new file mode 100644 index 0000000..93dd3d4 --- /dev/null +++ b/navtree.js @@ -0,0 +1,559 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, setFocus) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 0000000..aaeb6fc --- /dev/null +++ b/resize.js @@ -0,0 +1,155 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var once=1; +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + + function readSetting(cookie) + { + if (window.chrome) { + var val = localStorage.getItem(cookie_namespace+'_width'); + if (val) return val; + } else { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + } + return 250; + } + + function writeSetting(cookie, val) + { + if (window.chrome) { + localStorage.setItem(cookie_namespace+"_width",val); + } else { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + writeSetting('width',sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() + { + var newWidth; + if (sidenav.width()>0) { + newWidth=0; + } + else { + var width = readSetting('width'); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + var sidenavWidth = $(sidenav).outerWidth(); + writeSetting('width',sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readSetting('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + if (once) { + $(".ui-resizable-handle").dblclick(collapseExpand); + once=0 + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..bbef636 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..bbef636 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + 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 var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + 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 var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..6fd40c6 --- /dev/null +++ b/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +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) + { + e.stopPropagation(); + 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 idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- 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'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// 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.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == '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 + { + 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 + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + 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 + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/svg.min.js b/svg.min.js new file mode 100644 index 0000000..916732f --- /dev/null +++ b/svg.min.js @@ -0,0 +1,46 @@ +/*! +* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG. +* @version 3.1.2 +* https://svgjs.dev/ +* +* @copyright Wout Fierens +* @license MIT +* +* BUILT: Wed Jan 26 2022 23:19:07 GMT+0100 (Mitteleuropäische Normalzeit) +*/var SVG=function(){"use strict";const methods$1={};const names=[];function registerMethods(name,m){if(Array.isArray(name)){for(const _name of name){registerMethods(_name,m)}return}if(typeof name==="object"){for(const _name in name){registerMethods(_name,name[_name])}return}addMethodNames(Object.getOwnPropertyNames(m));methods$1[name]=Object.assign(methods$1[name]||{},m)}function getMethodsFor(name){return methods$1[name]||{}}function getMethodNames(){return[...new Set(names)]}function addMethodNames(_names){names.push(..._names)}function map(array,block){let i;const il=array.length;const result=[];for(i=0;i=0;i--){assignNewId(node.children[i])}if(node.id){node.id=eid(node.nodeName);return node}return node}function extend(modules,methods){let key,i;modules=Array.isArray(modules)?modules:[modules];for(i=modules.length-1;i>=0;i--){for(key in methods){modules[i].prototype[key]=methods[key]}}}function wrapWithAttrCheck(fn){return function(...args){const o=args[args.length-1];if(o&&o.constructor===Object&&!(o instanceof Array)){return fn.apply(this,args.slice(0,-1)).attr(o)}else{return fn.apply(this,args)}}}function siblings(){return this.parent().children()}function position(){return this.parent().index(this)}function next(){return this.siblings()[this.position()+1]}function prev(){return this.siblings()[this.position()-1]}function forward(){const i=this.position();const p=this.parent();p.add(this.remove(),i+1);return this}function backward(){const i=this.position();const p=this.parent();p.add(this.remove(),i?i-1:0);return this}function front(){const p=this.parent();p.add(this.remove());return this}function back(){const p=this.parent();p.add(this.remove(),0);return this}function before(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i);return this}function after(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i+1);return this}function insertBefore(element){element=makeInstance(element);element.before(this);return this}function insertAfter(element){element=makeInstance(element);element.after(this);return this}registerMethods("Dom",{siblings:siblings,position:position,next:next,prev:prev,forward:forward,backward:backward,front:front,back:back,before:before,after:after,insertBefore:insertBefore,insertAfter:insertAfter});const numberAndUnit=/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i;const hex=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;const rgb=/rgb\((\d+),(\d+),(\d+)\)/;const reference=/(#[a-z_][a-z0-9\-_]*)/i;const transforms=/\)\s*,?\s*/;const whitespace=/\s/g;const isHex=/^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;const isRgb=/^rgb\(/;const isBlank=/^(\s+)?$/;const isNumber=/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;const isImage=/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i;const delimiter=/[\s,]+/;const isPathLetter=/[MLHVCSQTAZ]/i;var regex={__proto__:null,numberAndUnit:numberAndUnit,hex:hex,rgb:rgb,reference:reference,transforms:transforms,whitespace:whitespace,isHex:isHex,isRgb:isRgb,isBlank:isBlank,isNumber:isNumber,isImage:isImage,delimiter:delimiter,isPathLetter:isPathLetter};function classes(){const attr=this.attr("class");return attr==null?[]:attr.trim().split(delimiter)}function hasClass(name){return this.classes().indexOf(name)!==-1}function addClass(name){if(!this.hasClass(name)){const array=this.classes();array.push(name);this.attr("class",array.join(" "))}return this}function removeClass(name){if(this.hasClass(name)){this.attr("class",this.classes().filter(function(c){return c!==name}).join(" "))}return this}function toggleClass(name){return this.hasClass(name)?this.removeClass(name):this.addClass(name)}registerMethods("Dom",{classes:classes,hasClass:hasClass,addClass:addClass,removeClass:removeClass,toggleClass:toggleClass});function css(style,val){const ret={};if(arguments.length===0){this.node.style.cssText.split(/\s*;\s*/).filter(function(el){return!!el.length}).forEach(function(el){const t=el.split(/\s*:\s*/);ret[t[0]]=t[1]});return ret}if(arguments.length<2){if(Array.isArray(style)){for(const name of style){const cased=camelCase(name);ret[name]=this.node.style[cased]}return ret}if(typeof style==="string"){return this.node.style[camelCase(style)]}if(typeof style==="object"){for(const name in style){this.node.style[camelCase(name)]=style[name]==null||isBlank.test(style[name])?"":style[name]}}}if(arguments.length===2){this.node.style[camelCase(style)]=val==null||isBlank.test(val)?"":val}return this}function show(){return this.css("display","")}function hide(){return this.css("display","none")}function visible(){return this.css("display")!=="none"}registerMethods("Dom",{css:css,show:show,hide:hide,visible:visible});function data(a,v,r){if(a==null){return this.data(map(filter(this.node.attributes,el=>el.nodeName.indexOf("data-")===0),el=>el.nodeName.slice(5)))}else if(a instanceof Array){const data={};for(const key of a){data[key]=this.data(key)}return data}else if(typeof a==="object"){for(v in a){this.data(v,a[v])}}else if(arguments.length<2){try{return JSON.parse(this.attr("data-"+a))}catch(e){return this.attr("data-"+a)}}else{this.attr("data-"+a,v===null?null:r===true||typeof v==="string"||typeof v==="number"?v:JSON.stringify(v))}return this}registerMethods("Dom",{data:data});function remember(k,v){if(typeof arguments[0]==="object"){for(const key in k){this.remember(key,k[key])}}else if(arguments.length===1){return this.memory()[k]}else{this.memory()[k]=v}return this}function forget(){if(arguments.length===0){this._memory={}}else{for(let i=arguments.length-1;i>=0;i--){delete this.memory()[arguments[i]]}}return this}function memory(){return this._memory=this._memory||{}}registerMethods("Dom",{remember:remember,forget:forget,memory:memory});function sixDigitHex(hex){return hex.length===4?["#",hex.substring(1,2),hex.substring(1,2),hex.substring(2,3),hex.substring(2,3),hex.substring(3,4),hex.substring(3,4)].join(""):hex}function componentHex(component){const integer=Math.round(component);const bounded=Math.max(0,Math.min(255,integer));const hex=bounded.toString(16);return hex.length===1?"0"+hex:hex}function is(object,space){for(let i=space.length;i--;){if(object[space[i]]==null){return false}}return true}function getParameters(a,b){const params=is(a,"rgb")?{_a:a.r,_b:a.g,_c:a.b,_d:0,space:"rgb"}:is(a,"xyz")?{_a:a.x,_b:a.y,_c:a.z,_d:0,space:"xyz"}:is(a,"hsl")?{_a:a.h,_b:a.s,_c:a.l,_d:0,space:"hsl"}:is(a,"lab")?{_a:a.l,_b:a.a,_c:a.b,_d:0,space:"lab"}:is(a,"lch")?{_a:a.l,_b:a.c,_c:a.h,_d:0,space:"lch"}:is(a,"cmyk")?{_a:a.c,_b:a.m,_c:a.y,_d:a.k,space:"cmyk"}:{_a:0,_b:0,_c:0,space:"rgb"};params.space=b||params.space;return params}function cieSpace(space){if(space==="lab"||space==="xyz"||space==="lch"){return true}else{return false}}function hueToRgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p}class Color{constructor(...inputs){this.init(...inputs)}static isColor(color){return color&&(color instanceof Color||this.isRgb(color)||this.test(color))}static isRgb(color){return color&&typeof color.r==="number"&&typeof color.g==="number"&&typeof color.b==="number"}static random(mode="vibrant",t,u){const{random,round,sin,PI:pi}=Math;if(mode==="vibrant"){const l=(81-57)*random()+57;const c=(83-45)*random()+45;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="sine"){t=t==null?random():t;const r=round(80*sin(2*pi*t/.5+.01)+150);const g=round(50*sin(2*pi*t/.5+4.6)+200);const b=round(100*sin(2*pi*t/.5+2.3)+150);const color=new Color(r,g,b);return color}else if(mode==="pastel"){const l=(94-86)*random()+86;const c=(26-9)*random()+9;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="dark"){const l=10+10*random();const c=(125-75)*random()+86;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="rgb"){const r=255*random();const g=255*random();const b=255*random();const color=new Color(r,g,b);return color}else if(mode==="lab"){const l=100*random();const a=256*random()-128;const b=256*random()-128;const color=new Color(l,a,b,"lab");return color}else if(mode==="grey"){const grey=255*random();const color=new Color(grey,grey,grey);return color}else{throw new Error("Unsupported random color mode")}}static test(color){return typeof color==="string"&&(isHex.test(color)||isRgb.test(color))}cmyk(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const k=Math.min(1-r,1-g,1-b);if(k===1){return new Color(0,0,0,1,"cmyk")}const c=(1-r-k)/(1-k);const m=(1-g-k)/(1-k);const y=(1-b-k)/(1-k);const color=new Color(c,m,y,k,"cmyk");return color}hsl(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;const isGrey=max===min;const delta=max-min;const s=isGrey?0:l>.5?delta/(2-max-min):delta/(max+min);const h=isGrey?0:max===r?((g-b)/delta+(gparseInt(v));Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else if(isHex.test(a)){const hexParse=v=>parseInt(v,16);const[,_a,_b,_c]=hex.exec(sixDigitHex(a)).map(hexParse);Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else throw Error("Unsupported string format, can't construct Color")}const{_a,_b,_c,_d}=this;const components=this.space==="rgb"?{r:_a,g:_b,b:_c}:this.space==="xyz"?{x:_a,y:_b,z:_c}:this.space==="hsl"?{h:_a,s:_b,l:_c}:this.space==="lab"?{l:_a,a:_b,b:_c}:this.space==="lch"?{l:_a,c:_b,h:_c}:this.space==="cmyk"?{c:_a,m:_b,y:_c,k:_d}:{};Object.assign(this,components)}lab(){const{x,y,z}=this.xyz();const l=116*y-16;const a=500*(x-y);const b=200*(y-z);const color=new Color(l,a,b,"lab");return color}lch(){const{l,a,b}=this.lab();const c=Math.sqrt(a**2+b**2);let h=180*Math.atan2(b,a)/Math.PI;if(h<0){h*=-1;h=360-h}const color=new Color(l,c,h,"lch");return color}rgb(){if(this.space==="rgb"){return this}else if(cieSpace(this.space)){let{x,y,z}=this;if(this.space==="lab"||this.space==="lch"){let{l,a,b}=this;if(this.space==="lch"){const{c,h}=this;const dToR=Math.PI/180;a=c*Math.cos(dToR*h);b=c*Math.sin(dToR*h)}const yL=(l+16)/116;const xL=a/500+yL;const zL=yL-b/200;const ct=16/116;const mx=.008856;const nm=7.787;x=.95047*(xL**3>mx?xL**3:(xL-ct)/nm);y=1*(yL**3>mx?yL**3:(yL-ct)/nm);z=1.08883*(zL**3>mx?zL**3:(zL-ct)/nm)}const rU=x*3.2406+y*-1.5372+z*-.4986;const gU=x*-.9689+y*1.8758+z*.0415;const bU=x*.0557+y*-.204+z*1.057;const pow=Math.pow;const bd=.0031308;const r=rU>bd?1.055*pow(rU,1/2.4)-.055:12.92*rU;const g=gU>bd?1.055*pow(gU,1/2.4)-.055:12.92*gU;const b=bU>bd?1.055*pow(bU,1/2.4)-.055:12.92*bU;const color=new Color(255*r,255*g,255*b);return color}else if(this.space==="hsl"){let{h,s,l}=this;h/=360;s/=100;l/=100;if(s===0){l*=255;const color=new Color(l,l,l);return color}const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;const r=255*hueToRgb(p,q,h+1/3);const g=255*hueToRgb(p,q,h);const b=255*hueToRgb(p,q,h-1/3);const color=new Color(r,g,b);return color}else if(this.space==="cmyk"){const{c,m,y,k}=this;const r=255*(1-Math.min(1,c*(1-k)+k));const g=255*(1-Math.min(1,m*(1-k)+k));const b=255*(1-Math.min(1,y*(1-k)+k));const color=new Color(r,g,b);return color}else{return this}}toArray(){const{_a,_b,_c,_d,space}=this;return[_a,_b,_c,_d,space]}toHex(){const[r,g,b]=this._clamped().map(componentHex);return`#${r}${g}${b}`}toRgb(){const[rV,gV,bV]=this._clamped();const string=`rgb(${rV},${gV},${bV})`;return string}toString(){return this.toHex()}xyz(){const{_a:r255,_b:g255,_c:b255}=this.rgb();const[r,g,b]=[r255,g255,b255].map(v=>v/255);const rL=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92;const gL=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92;const bL=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92;const xU=(rL*.4124+gL*.3576+bL*.1805)/.95047;const yU=(rL*.2126+gL*.7152+bL*.0722)/1;const zU=(rL*.0193+gL*.1192+bL*.9505)/1.08883;const x=xU>.008856?Math.pow(xU,1/3):7.787*xU+16/116;const y=yU>.008856?Math.pow(yU,1/3):7.787*yU+16/116;const z=zU>.008856?Math.pow(zU,1/3):7.787*zU+16/116;const color=new Color(x,y,z,"xyz");return color}_clamped(){const{_a,_b,_c}=this.rgb();const{max,min,round}=Math;const format=v=>max(0,min(round(v),255));return[_a,_b,_c].map(format)}}class Point{constructor(...args){this.init(...args)}clone(){return new Point(this)}init(x,y){const base={x:0,y:0};const source=Array.isArray(x)?{x:x[0],y:x[1]}:typeof x==="object"?{x:x.x,y:x.y}:{x:x,y:y};this.x=source.x==null?base.x:source.x;this.y=source.y==null?base.y:source.y;return this}toArray(){return[this.x,this.y]}transform(m){return this.clone().transformO(m)}transformO(m){if(!Matrix.isMatrixLike(m)){m=new Matrix(m)}const{x,y}=this;this.x=m.a*x+m.c*y+m.e;this.y=m.b*x+m.d*y+m.f;return this}}function point(x,y){return new Point(x,y).transform(this.screenCTM().inverse())}function closeEnough(a,b,threshold){return Math.abs(b-a)<(threshold||1e-6)}class Matrix{constructor(...args){this.init(...args)}static formatTransforms(o){const flipBoth=o.flip==="both"||o.flip===true;const flipX=o.flip&&(flipBoth||o.flip==="x")?-1:1;const flipY=o.flip&&(flipBoth||o.flip==="y")?-1:1;const skewX=o.skew&&o.skew.length?o.skew[0]:isFinite(o.skew)?o.skew:isFinite(o.skewX)?o.skewX:0;const skewY=o.skew&&o.skew.length?o.skew[1]:isFinite(o.skew)?o.skew:isFinite(o.skewY)?o.skewY:0;const scaleX=o.scale&&o.scale.length?o.scale[0]*flipX:isFinite(o.scale)?o.scale*flipX:isFinite(o.scaleX)?o.scaleX*flipX:flipX;const scaleY=o.scale&&o.scale.length?o.scale[1]*flipY:isFinite(o.scale)?o.scale*flipY:isFinite(o.scaleY)?o.scaleY*flipY:flipY;const shear=o.shear||0;const theta=o.rotate||o.theta||0;const origin=new Point(o.origin||o.around||o.ox||o.originX,o.oy||o.originY);const ox=origin.x;const oy=origin.y;const position=new Point(o.position||o.px||o.positionX||NaN,o.py||o.positionY||NaN);const px=position.x;const py=position.y;const translate=new Point(o.translate||o.tx||o.translateX,o.ty||o.translateY);const tx=translate.x;const ty=translate.y;const relative=new Point(o.relative||o.rx||o.relativeX,o.ry||o.relativeY);const rx=relative.x;const ry=relative.y;return{scaleX:scaleX,scaleY:scaleY,skewX:skewX,skewY:skewY,shear:shear,theta:theta,rx:rx,ry:ry,tx:tx,ty:ty,ox:ox,oy:oy,px:px,py:py}}static fromArray(a){return{a:a[0],b:a[1],c:a[2],d:a[3],e:a[4],f:a[5]}}static isMatrixLike(o){return o.a!=null||o.b!=null||o.c!=null||o.d!=null||o.e!=null||o.f!=null}static matrixMultiply(l,r,o){const a=l.a*r.a+l.c*r.b;const b=l.b*r.a+l.d*r.b;const c=l.a*r.c+l.c*r.d;const d=l.b*r.c+l.d*r.d;const e=l.e+l.a*r.e+l.c*r.f;const f=l.f+l.b*r.e+l.d*r.f;o.a=a;o.b=b;o.c=c;o.d=d;o.e=e;o.f=f;return o}around(cx,cy,matrix){return this.clone().aroundO(cx,cy,matrix)}aroundO(cx,cy,matrix){const dx=cx||0;const dy=cy||0;return this.translateO(-dx,-dy).lmultiplyO(matrix).translateO(dx,dy)}clone(){return new Matrix(this)}decompose(cx=0,cy=0){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const determinant=a*d-b*c;const ccw=determinant>0?1:-1;const sx=ccw*Math.sqrt(a*a+b*b);const thetaRad=Math.atan2(ccw*b,ccw*a);const theta=180/Math.PI*thetaRad;const ct=Math.cos(thetaRad);const st=Math.sin(thetaRad);const lam=(a*c+b*d)/determinant;const sy=c*sx/(lam*a-b)||d*sx/(lam*b+a);const tx=e-cx+cx*ct*sx+cy*(lam*ct*sx-st*sy);const ty=f-cy+cx*st*sx+cy*(lam*st*sx+ct*sy);return{scaleX:sx,scaleY:sy,shear:lam,rotate:theta,translateX:tx,translateY:ty,originX:cx,originY:cy,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}equals(other){if(other===this)return true;const comp=new Matrix(other);return closeEnough(this.a,comp.a)&&closeEnough(this.b,comp.b)&&closeEnough(this.c,comp.c)&&closeEnough(this.d,comp.d)&&closeEnough(this.e,comp.e)&&closeEnough(this.f,comp.f)}flip(axis,around){return this.clone().flipO(axis,around)}flipO(axis,around){return axis==="x"?this.scaleO(-1,1,around,0):axis==="y"?this.scaleO(1,-1,0,around):this.scaleO(-1,-1,axis,around||axis)}init(source){const base=Matrix.fromArray([1,0,0,1,0,0]);source=source instanceof Element?source.matrixify():typeof source==="string"?Matrix.fromArray(source.split(delimiter).map(parseFloat)):Array.isArray(source)?Matrix.fromArray(source):typeof source==="object"&&Matrix.isMatrixLike(source)?source:typeof source==="object"?(new Matrix).transform(source):arguments.length===6?Matrix.fromArray([].slice.call(arguments)):base;this.a=source.a!=null?source.a:base.a;this.b=source.b!=null?source.b:base.b;this.c=source.c!=null?source.c:base.c;this.d=source.d!=null?source.d:base.d;this.e=source.e!=null?source.e:base.e;this.f=source.f!=null?source.f:base.f;return this}inverse(){return this.clone().inverseO()}inverseO(){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const det=a*d-b*c;if(!det)throw new Error("Cannot invert "+this);const na=d/det;const nb=-b/det;const nc=-c/det;const nd=a/det;const ne=-(na*e+nc*f);const nf=-(nb*e+nd*f);this.a=na;this.b=nb;this.c=nc;this.d=nd;this.e=ne;this.f=nf;return this}lmultiply(matrix){return this.clone().lmultiplyO(matrix)}lmultiplyO(matrix){const r=this;const l=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}multiply(matrix){return this.clone().multiplyO(matrix)}multiplyO(matrix){const l=this;const r=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}rotate(r,cx,cy){return this.clone().rotateO(r,cx,cy)}rotateO(r,cx=0,cy=0){r=radians(r);const cos=Math.cos(r);const sin=Math.sin(r);const{a,b,c,d,e,f}=this;this.a=a*cos-b*sin;this.b=b*cos+a*sin;this.c=c*cos-d*sin;this.d=d*cos+c*sin;this.e=e*cos-f*sin+cy*sin-cx*cos+cx;this.f=f*cos+e*sin-cx*sin-cy*cos+cy;return this}scale(x,y,cx,cy){return this.clone().scaleO(...arguments)}scaleO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}const{a,b,c,d,e,f}=this;this.a=a*x;this.b=b*y;this.c=c*x;this.d=d*y;this.e=e*x-cx*x+cx;this.f=f*y-cy*y+cy;return this}shear(a,cx,cy){return this.clone().shearO(a,cx,cy)}shearO(lx,cx=0,cy=0){const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.c=c+d*lx;this.e=e+f*lx-cy*lx;return this}skew(x,y,cx,cy){return this.clone().skewO(...arguments)}skewO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}x=radians(x);y=radians(y);const lx=Math.tan(x);const ly=Math.tan(y);const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.b=b+a*ly;this.c=c+d*lx;this.d=d+c*ly;this.e=e+f*lx-cy*lx;this.f=f+e*ly-cx*ly;return this}skewX(x,cx,cy){return this.skew(x,0,cx,cy)}skewY(y,cx,cy){return this.skew(0,y,cx,cy)}toArray(){return[this.a,this.b,this.c,this.d,this.e,this.f]}toString(){return"matrix("+this.a+","+this.b+","+this.c+","+this.d+","+this.e+","+this.f+")"}transform(o){if(Matrix.isMatrixLike(o)){const matrix=new Matrix(o);return matrix.multiplyO(this)}const t=Matrix.formatTransforms(o);const current=this;const{x:ox,y:oy}=new Point(t.ox,t.oy).transform(current);const transformer=(new Matrix).translateO(t.rx,t.ry).lmultiplyO(current).translateO(-ox,-oy).scaleO(t.scaleX,t.scaleY).skewO(t.skewX,t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox,oy);if(isFinite(t.px)||isFinite(t.py)){const origin=new Point(ox,oy).transform(transformer);const dx=isFinite(t.px)?t.px-origin.x:0;const dy=isFinite(t.py)?t.py-origin.y:0;transformer.translateO(dx,dy)}transformer.translateO(t.tx,t.ty);return transformer}translate(x,y){return this.clone().translateO(x,y)}translateO(x,y){this.e+=x||0;this.f+=y||0;return this}valueOf(){return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}}function ctm(){return new Matrix(this.node.getCTM())}function screenCTM(){if(typeof this.isRoot==="function"&&!this.isRoot()){const rect=this.rect(1,1);const m=rect.node.getScreenCTM();rect.remove();return new Matrix(m)}return new Matrix(this.node.getScreenCTM())}register(Matrix,"Matrix");function parser(){if(!parser.nodes){const svg=makeInstance().size(2,0);svg.node.style.cssText=["opacity: 0","position: absolute","left: -100%","top: -100%","overflow: hidden"].join(";");svg.attr("focusable","false");svg.attr("aria-hidden","true");const path=svg.path().node;parser.nodes={svg:svg,path:path}}if(!parser.nodes.svg.node.parentNode){const b=globals.document.body||globals.document.documentElement;parser.nodes.svg.addTo(b)}return parser.nodes}function isNulledBox(box){return!box.width&&!box.height&&!box.x&&!box.y}function domContains(node){return node===globals.document||(globals.document.documentElement.contains||function(node){while(node.parentNode){node=node.parentNode}return node===globals.document}).call(globals.document.documentElement,node)}class Box{constructor(...args){this.init(...args)}addOffset(){this.x+=globals.window.pageXOffset;this.y+=globals.window.pageYOffset;return new Box(this)}init(source){const base=[0,0,0,0];source=typeof source==="string"?source.split(delimiter).map(parseFloat):Array.isArray(source)?source:typeof source==="object"?[source.left!=null?source.left:source.x,source.top!=null?source.top:source.y,source.width,source.height]:arguments.length===4?[].slice.call(arguments):base;this.x=source[0]||0;this.y=source[1]||0;this.width=this.w=source[2]||0;this.height=this.h=source[3]||0;this.x2=this.x+this.w;this.y2=this.y+this.h;this.cx=this.x+this.w/2;this.cy=this.y+this.h/2;return this}isNulled(){return isNulledBox(this)}merge(box){const x=Math.min(this.x,box.x);const y=Math.min(this.y,box.y);const width=Math.max(this.x+this.width,box.x+box.width)-x;const height=Math.max(this.y+this.height,box.y+box.height)-y;return new Box(x,y,width,height)}toArray(){return[this.x,this.y,this.width,this.height]}toString(){return this.x+" "+this.y+" "+this.width+" "+this.height}transform(m){if(!(m instanceof Matrix)){m=new Matrix(m)}let xMin=Infinity;let xMax=-Infinity;let yMin=Infinity;let yMax=-Infinity;const pts=[new Point(this.x,this.y),new Point(this.x2,this.y),new Point(this.x,this.y2),new Point(this.x2,this.y2)];pts.forEach(function(p){p=p.transform(m);xMin=Math.min(xMin,p.x);xMax=Math.max(xMax,p.x);yMin=Math.min(yMin,p.y);yMax=Math.max(yMax,p.y)});return new Box(xMin,yMin,xMax-xMin,yMax-yMin)}}function getBox(el,getBBoxFn,retry){let box;try{box=getBBoxFn(el.node);if(isNulledBox(box)&&!domContains(el.node)){throw new Error("Element not in the dom")}}catch(e){box=retry(el)}return box}function bbox(){const getBBox=node=>node.getBBox();const retry=el=>{try{const clone=el.clone().addTo(parser().svg).show();const box=clone.node.getBBox();clone.remove();return box}catch(e){throw new Error(`Getting bbox of element "${el.node.nodeName}" is not possible: ${e.toString()}`)}};const box=getBox(this,getBBox,retry);const bbox=new Box(box);return bbox}function rbox(el){const getRBox=node=>node.getBoundingClientRect();const retry=el=>{throw new Error(`Getting rbox of element "${el.node.nodeName}" is not possible`)};const box=getBox(this,getRBox,retry);const rbox=new Box(box);if(el){return rbox.transform(el.screenCTM().inverseO())}return rbox.addOffset()}function inside(x,y){const box=this.bbox();return x>box.x&&y>box.y&&x{return fnOrMethodName.call(el,el,i,arr)})}else{return this.map(el=>{return el[fnOrMethodName](...args)})}},toArray(){return Array.prototype.concat.apply([],this)}});const reserved=["toArray","constructor","each"];List.extend=function(methods){methods=methods.reduce((obj,name)=>{if(reserved.includes(name))return obj;if(name[0]==="_")return obj;obj[name]=function(...attrs){return this.each(name,...attrs)};return obj},{});extend([List],methods)};function baseFind(query,parent){return new List(map((parent||globals.document).querySelectorAll(query),function(node){return adopt(node)}))}function find(query){return baseFind(query,this.node)}function findOne(query){return adopt(this.node.querySelector(query))}let listenerId=0;const windowEvents={};function getEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(!n.events)n.events={};return n.events}function getEventTarget(instance){return instance.getEventTarget()}function clearEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(n.events)n.events={}}function on(node,events,listener,binding,options){const l=listener.bind(binding||node);const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);events=Array.isArray(events)?events:events.split(delimiter);if(!listener._svgjsListenerId){listener._svgjsListenerId=++listenerId}events.forEach(function(event){const ev=event.split(".")[0];const ns=event.split(".")[1]||"*";bag[ev]=bag[ev]||{};bag[ev][ns]=bag[ev][ns]||{};bag[ev][ns][listener._svgjsListenerId]=l;n.addEventListener(ev,l,options||false)})}function off(node,events,listener,options){const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);if(typeof listener==="function"){listener=listener._svgjsListenerId;if(!listener)return}events=Array.isArray(events)?events:(events||"").split(delimiter);events.forEach(function(event){const ev=event&&event.split(".")[0];const ns=event&&event.split(".")[1];let namespace,l;if(listener){if(bag[ev]&&bag[ev][ns||"*"]){n.removeEventListener(ev,bag[ev][ns||"*"][listener],options||false);delete bag[ev][ns||"*"][listener]}}else if(ev&&ns){if(bag[ev]&&bag[ev][ns]){for(l in bag[ev][ns]){off(n,[ev,ns].join("."),l)}delete bag[ev][ns]}}else if(ns){for(event in bag){for(namespace in bag[event]){if(ns===namespace){off(n,[event,ns].join("."))}}}}else if(ev){if(bag[ev]){for(namespace in bag[ev]){off(n,[ev,namespace].join("."))}delete bag[ev]}}else{for(event in bag){off(n,event)}clearEvents(instance)}})}function dispatch(node,event,data,options){const n=getEventTarget(node);if(event instanceof globals.window.Event){n.dispatchEvent(event)}else{event=new globals.window.CustomEvent(event,{detail:data,cancelable:true,...options});n.dispatchEvent(event)}return event}class EventTarget extends Base{addEventListener(){}dispatch(event,data,options){return dispatch(this,event,data,options)}dispatchEvent(event){const bag=this.getEventHolder().events;if(!bag)return true;const events=bag[event.type];for(const i in events){for(const j in events[i]){events[i][j](event)}}return!event.defaultPrevented}fire(event,data,options){this.dispatch(event,data,options);return this}getEventHolder(){return this}getEventTarget(){return this}off(event,listener,options){off(this,event,listener,options);return this}on(event,listener,binding,options){on(this,event,listener,binding,options);return this}removeEventListener(){}}register(EventTarget,"EventTarget");function noop(){}const timeline={duration:400,ease:">",delay:0};const attrs={"fill-opacity":1,"stroke-opacity":1,"stroke-width":0,"stroke-linejoin":"miter","stroke-linecap":"butt",fill:"#000000",stroke:"#000000",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,"stop-opacity":1,"stop-color":"#000000","text-anchor":"start"};var defaults={__proto__:null,noop:noop,timeline:timeline,attrs:attrs};class SVGArray extends Array{constructor(...args){super(...args);this.init(...args)}clone(){return new this.constructor(this)}init(arr){if(typeof arr==="number")return this;this.length=0;this.push(...this.parse(arr));return this}parse(array=[]){if(array instanceof Array)return array;return array.trim().split(delimiter).map(parseFloat)}toArray(){return Array.prototype.concat.apply([],this)}toSet(){return new Set(this)}toString(){return this.join(" ")}valueOf(){const ret=[];ret.push(...this);return ret}}class SVGNumber{constructor(...args){this.init(...args)}convert(unit){return new SVGNumber(this.value,unit)}divide(number){number=new SVGNumber(number);return new SVGNumber(this/number,this.unit||number.unit)}init(value,unit){unit=Array.isArray(value)?value[1]:unit;value=Array.isArray(value)?value[0]:value;this.value=0;this.unit=unit||"";if(typeof value==="number"){this.value=isNaN(value)?0:!isFinite(value)?value<0?-34e37:+34e37:value}else if(typeof value==="string"){unit=value.match(numberAndUnit);if(unit){this.value=parseFloat(unit[1]);if(unit[5]==="%"){this.value/=100}else if(unit[5]==="s"){this.value*=1e3}this.unit=unit[5]}}else{if(value instanceof SVGNumber){this.value=value.valueOf();this.unit=value.unit}}return this}minus(number){number=new SVGNumber(number);return new SVGNumber(this-number,this.unit||number.unit)}plus(number){number=new SVGNumber(number);return new SVGNumber(this+number,this.unit||number.unit)}times(number){number=new SVGNumber(number);return new SVGNumber(this*number,this.unit||number.unit)}toArray(){return[this.value,this.unit]}toJSON(){return this.toString()}toString(){return(this.unit==="%"?~~(this.value*1e8)/1e6:this.unit==="s"?this.value/1e3:this.value)+this.unit}valueOf(){return this.value}}const hooks=[];function registerAttrHook(fn){hooks.push(fn)}function attr(attr,val,ns){if(attr==null){attr={};val=this.node.attributes;for(const node of val){attr[node.nodeName]=isNumber.test(node.nodeValue)?parseFloat(node.nodeValue):node.nodeValue}return attr}else if(attr instanceof Array){return attr.reduce((last,curr)=>{last[curr]=this.attr(curr);return last},{})}else if(typeof attr==="object"&&attr.constructor===Object){for(val in attr)this.attr(val,attr[val])}else if(val===null){this.node.removeAttribute(attr)}else if(val==null){val=this.node.getAttribute(attr);return val==null?attrs[attr]:isNumber.test(val)?parseFloat(val):val}else{val=hooks.reduce((_val,hook)=>{return hook(attr,_val,this)},val);if(typeof val==="number"){val=new SVGNumber(val)}else if(Color.isColor(val)){val=new Color(val)}else if(val.constructor===Array){val=new SVGArray(val)}if(attr==="leading"){if(this.leading){this.leading(val)}}else{typeof ns==="string"?this.node.setAttributeNS(ns,attr,val.toString()):this.node.setAttribute(attr,val.toString())}if(this.rebuild&&(attr==="font-size"||attr==="x")){this.rebuild()}}return this}class Dom extends EventTarget{constructor(node,attrs){super();this.node=node;this.type=node.nodeName;if(attrs&&node!==attrs){this.attr(attrs)}}add(element,i){element=makeInstance(element);if(element.removeNamespace&&this.node instanceof globals.window.SVGElement){element.removeNamespace()}if(i==null){this.node.appendChild(element.node)}else if(element.node!==this.node.childNodes[i]){this.node.insertBefore(element.node,this.node.childNodes[i])}return this}addTo(parent,i){return makeInstance(parent).put(this,i)}children(){return new List(map(this.node.children,function(node){return adopt(node)}))}clear(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.lastChild)}return this}clone(deep=true){this.writeDataToDom();return new this.constructor(assignNewId(this.node.cloneNode(deep)))}each(block,deep){const children=this.children();let i,il;for(i=0,il=children.length;i=0}html(htmlOrFn,outerHTML){return this.xml(htmlOrFn,outerHTML,html)}id(id){if(typeof id==="undefined"&&!this.node.id){this.node.id=eid(this.type)}return this.attr("id",id)}index(element){return[].slice.call(this.node.childNodes).indexOf(element.node)}last(){return adopt(this.node.lastChild)}matches(selector){const el=this.node;const matcher=el.matches||el.matchesSelector||el.msMatchesSelector||el.mozMatchesSelector||el.webkitMatchesSelector||el.oMatchesSelector||null;return matcher&&matcher.call(el,selector)}parent(type){let parent=this;if(!parent.node.parentNode)return null;parent=adopt(parent.node.parentNode);if(!type)return parent;do{if(typeof type==="string"?parent.matches(type):parent instanceof type)return parent}while(parent=adopt(parent.node.parentNode));return parent}put(element,i){element=makeInstance(element);this.add(element,i);return element}putIn(parent,i){return makeInstance(parent).add(this,i)}remove(){if(this.parent()){this.parent().removeElement(this)}return this}removeElement(element){this.node.removeChild(element.node);return this}replace(element){element=makeInstance(element);if(this.node.parentNode){this.node.parentNode.replaceChild(element.node,this.node)}return element}round(precision=2,map=null){const factor=10**precision;const attrs=this.attr(map);for(const i in attrs){if(typeof attrs[i]==="number"){attrs[i]=Math.round(attrs[i]*factor)/factor}}this.attr(attrs);return this}svg(svgOrFn,outerSVG){return this.xml(svgOrFn,outerSVG,svg)}toString(){return this.id()}words(text){this.node.textContent=text;return this}wrap(node){const parent=this.parent();if(!parent){return this.addTo(node)}const position=parent.index(this);return parent.put(node,position).put(this)}writeDataToDom(){this.each(function(){this.writeDataToDom()});return this}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){outerXML=outerXML==null?true:outerXML;this.writeDataToDom();let current=this;if(xmlOrFn!=null){current=adopt(current.node.cloneNode(true));if(outerXML){const result=xmlOrFn(current);current=result||current;if(result===false)return""}current.each(function(){const result=xmlOrFn(this);const _this=result||this;if(result===false){this.remove()}else if(result&&this!==_this){this.replace(_this)}},true)}return outerXML?current.node.outerHTML:current.node.innerHTML}outerXML=outerXML==null?false:outerXML;const well=create("wrapper",ns);const fragment=globals.document.createDocumentFragment();well.innerHTML=xmlOrFn;for(let len=well.children.length;len--;){fragment.appendChild(well.firstElementChild)}const parent=this.parent();return outerXML?this.replace(fragment)&&parent:this.add(fragment)}}extend(Dom,{attr:attr,find:find,findOne:findOne});register(Dom,"Dom");class Element extends Dom{constructor(node,attrs){super(node,attrs);this.dom={};this.node.instance=this;if(node.hasAttribute("svgjs:data")){this.setData(JSON.parse(node.getAttribute("svgjs:data"))||{})}}center(x,y){return this.cx(x).cy(y)}cx(x){return x==null?this.x()+this.width()/2:this.x(x-this.width()/2)}cy(y){return y==null?this.y()+this.height()/2:this.y(y-this.height()/2)}defs(){const root=this.root();return root&&root.defs()}dmove(x,y){return this.dx(x).dy(y)}dx(x=0){return this.x(new SVGNumber(x).plus(this.x()))}dy(y=0){return this.y(new SVGNumber(y).plus(this.y()))}getEventHolder(){return this}height(height){return this.attr("height",height)}move(x,y){return this.x(x).y(y)}parents(until=this.root()){const isSelector=typeof until==="string";if(!isSelector){until=makeInstance(until)}const parents=new List;let parent=this;while((parent=parent.parent())&&parent.node!==globals.document&&parent.nodeName!=="#document-fragment"){parents.push(parent);if(!isSelector&&parent.node===until.node){break}if(isSelector&&parent.matches(until)){break}if(parent.node===this.root().node){return null}}return parents}reference(attr){attr=this.attr(attr);if(!attr)return null;const m=(attr+"").match(reference);return m?makeInstance(m[1]):null}root(){const p=this.parent(getClass(root));return p&&p.root()}setData(o){this.dom=o;return this}size(width,height){const p=proportionalSize(this,width,height);return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height))}width(width){return this.attr("width",width)}writeDataToDom(){this.node.removeAttribute("svgjs:data");if(Object.keys(this.dom).length){this.node.setAttribute("svgjs:data",JSON.stringify(this.dom))}return super.writeDataToDom()}x(x){return this.attr("x",x)}y(y){return this.attr("y",y)}}extend(Element,{bbox:bbox,rbox:rbox,inside:inside,point:point,ctm:ctm,screenCTM:screenCTM});register(Element,"Element");const sugar={stroke:["color","width","opacity","linecap","linejoin","miterlimit","dasharray","dashoffset"],fill:["color","opacity","rule"],prefix:function(t,a){return a==="color"?t:t+"-"+a}};["fill","stroke"].forEach(function(m){const extension={};let i;extension[m]=function(o){if(typeof o==="undefined"){return this.attr(m)}if(typeof o==="string"||o instanceof Color||Color.isRgb(o)||o instanceof Element){this.attr(m,o)}else{for(i=sugar[m].length-1;i>=0;i--){if(o[sugar[m][i]]!=null){this.attr(sugar.prefix(m,sugar[m][i]),o[sugar[m][i]])}}}return this};registerMethods(["Element","Runner"],extension)});registerMethods(["Element","Runner"],{matrix:function(mat,b,c,d,e,f){if(mat==null){return new Matrix(this)}return this.attr("transform",new Matrix(mat,b,c,d,e,f))},rotate:function(angle,cx,cy){return this.transform({rotate:angle,ox:cx,oy:cy},true)},skew:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({skew:x,ox:y,oy:cx},true):this.transform({skew:[x,y],ox:cx,oy:cy},true)},shear:function(lam,cx,cy){return this.transform({shear:lam,ox:cx,oy:cy},true)},scale:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({scale:x,ox:y,oy:cx},true):this.transform({scale:[x,y],ox:cx,oy:cy},true)},translate:function(x,y){return this.transform({translate:[x,y]},true)},relative:function(x,y){return this.transform({relative:[x,y]},true)},flip:function(direction="both",origin="center"){if("xybothtrue".indexOf(direction)===-1){origin=direction;direction="both"}return this.transform({flip:direction,origin:origin},true)},opacity:function(value){return this.attr("opacity",value)}});registerMethods("radius",{radius:function(x,y=x){const type=(this._element||this).type;return type==="radialGradient"?this.attr("r",new SVGNumber(x)):this.rx(x).ry(y)}});registerMethods("Path",{length:function(){return this.node.getTotalLength()},pointAt:function(length){return new Point(this.node.getPointAtLength(length))}});registerMethods(["Element","Runner"],{font:function(a,v){if(typeof a==="object"){for(v in a)this.font(v,a[v]);return this}return a==="leading"?this.leading(v):a==="anchor"?this.attr("text-anchor",v):a==="size"||a==="family"||a==="weight"||a==="stretch"||a==="variant"||a==="style"?this.attr("font-"+a,v):this.attr(a,v)}});const methods=["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","touchstart","touchmove","touchleave","touchend","touchcancel"].reduce(function(last,event){const fn=function(f){if(f===null){this.off(event)}else{this.on(event,f)}return this};last[event]=fn;return last},{});registerMethods("Element",methods);function untransform(){return this.attr("transform",null)}function matrixify(){const matrix=(this.attr("transform")||"").split(transforms).slice(0,-1).map(function(str){const kv=str.trim().split("(");return[kv[0],kv[1].split(delimiter).map(function(str){return parseFloat(str)})]}).reverse().reduce(function(matrix,transform){if(transform[0]==="matrix"){return matrix.lmultiply(Matrix.fromArray(transform[1]))}return matrix[transform[0]].apply(matrix,transform[1])},new Matrix);return matrix}function toParent(parent,i){if(this===parent)return this;const ctm=this.screenCTM();const pCtm=parent.screenCTM().inverse();this.addTo(parent,i).untransform().transform(pCtm.multiply(ctm));return this}function toRoot(i){return this.toParent(this.root(),i)}function transform(o,relative){if(o==null||typeof o==="string"){const decomposed=new Matrix(this).decompose();return o==null?decomposed:decomposed[o]}if(!Matrix.isMatrixLike(o)){o={...o,origin:getOrigin(o,this)}}const cleanRelative=relative===true?this:relative||false;const result=new Matrix(cleanRelative).transform(o);return this.attr("transform",result)}registerMethods("Element",{untransform:untransform,matrixify:matrixify,toParent:toParent,toRoot:toRoot,transform:transform});class Container extends Element{flatten(parent=this,index){this.each(function(){if(this instanceof Container){return this.flatten().ungroup()}});return this}ungroup(parent=this.parent(),index=parent.index(this)){index=index===-1?parent.children().length:index;this.each(function(i,children){return children[children.length-i-1].toParent(parent,index)});return this.remove()}}register(Container,"Container");class Defs extends Container{constructor(node,attrs=node){super(nodeOrNew("defs",node),attrs)}flatten(){return this}ungroup(){return this}}register(Defs,"Defs");class Shape extends Element{}register(Shape,"Shape");function rx(rx){return this.attr("rx",rx)}function ry(ry){return this.attr("ry",ry)}function x$3(x){return x==null?this.cx()-this.rx():this.cx(x+this.rx())}function y$3(y){return y==null?this.cy()-this.ry():this.cy(y+this.ry())}function cx$1(x){return this.attr("cx",x)}function cy$1(y){return this.attr("cy",y)}function width$2(width){return width==null?this.rx()*2:this.rx(new SVGNumber(width).divide(2))}function height$2(height){return height==null?this.ry()*2:this.ry(new SVGNumber(height).divide(2))}var circled={__proto__:null,rx:rx,ry:ry,x:x$3,y:y$3,cx:cx$1,cy:cy$1,width:width$2,height:height$2};class Ellipse extends Shape{constructor(node,attrs=node){super(nodeOrNew("ellipse",node),attrs)}size(width,height){const p=proportionalSize(this,width,height);return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2))}}extend(Ellipse,circled);registerMethods("Container",{ellipse:wrapWithAttrCheck(function(width=0,height=width){return this.put(new Ellipse).size(width,height).move(0,0)})});register(Ellipse,"Ellipse");class Fragment extends Dom{constructor(node=globals.document.createDocumentFragment()){super(node)}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){const wrapper=new Dom(create("wrapper",ns));wrapper.add(this.node.cloneNode(true));return wrapper.xml(false,ns)}return super.xml(xmlOrFn,false,ns)}}register(Fragment,"Fragment");function from(x,y){return(this._element||this).type==="radialGradient"?this.attr({fx:new SVGNumber(x),fy:new SVGNumber(y)}):this.attr({x1:new SVGNumber(x),y1:new SVGNumber(y)})}function to(x,y){return(this._element||this).type==="radialGradient"?this.attr({cx:new SVGNumber(x),cy:new SVGNumber(y)}):this.attr({x2:new SVGNumber(x),y2:new SVGNumber(y)})}var gradiented={__proto__:null,from:from,to:to};class Gradient extends Container{constructor(type,attrs){super(nodeOrNew(type+"Gradient",typeof type==="string"?null:type),attrs)}attr(a,b,c){if(a==="transform")a="gradientTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}extend(Gradient,gradiented);registerMethods({Container:{gradient(...args){return this.defs().gradient(...args)}},Defs:{gradient:wrapWithAttrCheck(function(type,block){return this.put(new Gradient(type)).update(block)})}});register(Gradient,"Gradient");class Pattern extends Container{constructor(node,attrs=node){super(nodeOrNew("pattern",node),attrs)}attr(a,b,c){if(a==="transform")a="patternTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}registerMethods({Container:{pattern(...args){return this.defs().pattern(...args)}},Defs:{pattern:wrapWithAttrCheck(function(width,height,block){return this.put(new Pattern).update(block).attr({x:0,y:0,width:width,height:height,patternUnits:"userSpaceOnUse"})})}});register(Pattern,"Pattern");class Image extends Shape{constructor(node,attrs=node){super(nodeOrNew("image",node),attrs)}load(url,callback){if(!url)return this;const img=new globals.window.Image;on(img,"load",function(e){const p=this.parent(Pattern);if(this.width()===0&&this.height()===0){this.size(img.width,img.height)}if(p instanceof Pattern){if(p.width()===0&&p.height()===0){p.size(this.width(),this.height())}}if(typeof callback==="function"){callback.call(this,e)}},this);on(img,"load error",function(){off(img)});return this.attr("href",img.src=url,xlink)}}registerAttrHook(function(attr,val,_this){if(attr==="fill"||attr==="stroke"){if(isImage.test(val)){val=_this.root().defs().image(val)}}if(val instanceof Image){val=_this.root().defs().pattern(0,0,pattern=>{pattern.add(val)})}return val});registerMethods({Container:{image:wrapWithAttrCheck(function(source,callback){return this.put(new Image).size(0,0).load(source,callback)})}});register(Image,"Image");class PointArray extends SVGArray{bbox(){let maxX=-Infinity;let maxY=-Infinity;let minX=Infinity;let minY=Infinity;this.forEach(function(el){maxX=Math.max(el[0],maxX);maxY=Math.max(el[1],maxY);minX=Math.min(el[0],minX);minY=Math.min(el[1],minY)});return new Box(minX,minY,maxX-minX,maxY-minY)}move(x,y){const box=this.bbox();x-=box.x;y-=box.y;if(!isNaN(x)&&!isNaN(y)){for(let i=this.length-1;i>=0;i--){this[i]=[this[i][0]+x,this[i][1]+y]}}return this}parse(array=[0,0]){const points=[];if(array instanceof Array){array=Array.prototype.concat.apply([],array)}else{array=array.trim().split(delimiter).map(parseFloat)}if(array.length%2!==0)array.pop();for(let i=0,len=array.length;i=0;i--){if(box.width)this[i][0]=(this[i][0]-box.x)*width/box.width+box.x;if(box.height)this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}return this}toLine(){return{x1:this[0][0],y1:this[0][1],x2:this[1][0],y2:this[1][1]}}toString(){const array=[];for(let i=0,il=this.length;i":function(pos){return-Math.cos(pos*Math.PI)/2+.5},">":function(pos){return Math.sin(pos*Math.PI/2)},"<":function(pos){return-Math.cos(pos*Math.PI/2)+1},bezier:function(x1,y1,x2,y2){return function(t){if(t<0){if(x1>0){return y1/x1*t}else if(x2>0){return y2/x2*t}else{return 0}}else if(t>1){if(x2<1){return(1-y2)/(1-x2)*t+(y2-x2)/(1-x2)}else if(x1<1){return(1-y1)/(1-x1)*t+(y1-x1)/(1-x1)}else{return 1}}else{return 3*t*(1-t)**2*y1+3*t**2*(1-t)*y2+t**3}}},steps:function(steps,stepPosition="end"){stepPosition=stepPosition.split("-").reverse()[0];let jumps=steps;if(stepPosition==="none"){--jumps}else if(stepPosition==="both"){++jumps}return(t,beforeFlag=false)=>{let step=Math.floor(t*steps);const jumping=t*step%1===0;if(stepPosition==="start"||stepPosition==="both"){++step}if(beforeFlag&&jumping){--step}if(t>=0&&step<0){step=0}if(t<=1&&step>jumps){step=jumps}return step/jumps}}};class Stepper{done(){return false}}class Ease extends Stepper{constructor(fn=timeline.ease){super();this.ease=easing[fn]||fn}step(from,to,pos){if(typeof from!=="number"){return pos<1?from:to}return from+(to-from)*this.ease(pos)}}class Controller extends Stepper{constructor(fn){super();this.stepper=fn}done(c){return c.done}step(current,target,dt,c){return this.stepper(current,target,dt,c)}}function recalculate(){const duration=(this._duration||500)/1e3;const overshoot=this._overshoot||0;const eps=1e-10;const pi=Math.PI;const os=Math.log(overshoot/100+eps);const zeta=-os/Math.sqrt(pi*pi+os*os);const wn=3.9/(zeta*duration);this.d=2*zeta*wn;this.k=wn*wn}class Spring extends Controller{constructor(duration=500,overshoot=0){super();this.duration(duration).overshoot(overshoot)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;if(dt>100)dt=16;dt/=1e3;const velocity=c.velocity||0;const acceleration=-this.d*velocity-this.k*(current-target);const newPosition=current+velocity*dt+acceleration*dt*dt/2;c.velocity=velocity+acceleration*dt;c.done=Math.abs(target-newPosition)+Math.abs(velocity)<.002;return c.done?target:newPosition}}extend(Spring,{duration:makeSetterGetter("_duration",recalculate),overshoot:makeSetterGetter("_overshoot",recalculate)});class PID extends Controller{constructor(p=.1,i=.01,d=0,windup=1e3){super();this.p(p).i(i).d(d).windup(windup)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;const p=target-current;let i=(c.integral||0)+p*dt;const d=(p-(c.error||0))/dt;const windup=this._windup;if(windup!==false){i=Math.max(-windup,Math.min(i,windup))}c.error=p;c.integral=i;c.done=Math.abs(p)<.001;return c.done?target:current+(this.P*p+this.I*i+this.D*d)}}extend(PID,{windup:makeSetterGetter("_windup"),p:makeSetterGetter("P"),i:makeSetterGetter("I"),d:makeSetterGetter("D")});const segmentParameters={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};const pathHandlers={M:function(c,p,p0){p.x=p0.x=c[0];p.y=p0.y=c[1];return["M",p.x,p.y]},L:function(c,p){p.x=c[0];p.y=c[1];return["L",c[0],c[1]]},H:function(c,p){p.x=c[0];return["H",c[0]]},V:function(c,p){p.y=c[0];return["V",c[0]]},C:function(c,p){p.x=c[4];p.y=c[5];return["C",c[0],c[1],c[2],c[3],c[4],c[5]]},S:function(c,p){p.x=c[2];p.y=c[3];return["S",c[0],c[1],c[2],c[3]]},Q:function(c,p){p.x=c[2];p.y=c[3];return["Q",c[0],c[1],c[2],c[3]]},T:function(c,p){p.x=c[0];p.y=c[1];return["T",c[0],c[1]]},Z:function(c,p,p0){p.x=p0.x;p.y=p0.y;return["Z"]},A:function(c,p){p.x=c[5];p.y=c[6];return["A",c[0],c[1],c[2],c[3],c[4],c[5],c[6]]}};const mlhvqtcsaz="mlhvqtcsaz".split("");for(let i=0,il=mlhvqtcsaz.length;i=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]+=x;this[i][2]+=y}else if(l==="H"){this[i][1]+=x}else if(l==="V"){this[i][1]+=y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]+=x;this[i][2]+=y;this[i][3]+=x;this[i][4]+=y;if(l==="C"){this[i][5]+=x;this[i][6]+=y}}else if(l==="A"){this[i][6]+=x;this[i][7]+=y}}}return this}parse(d="M0 0"){if(Array.isArray(d)){d=Array.prototype.concat.apply([],d).toString()}return pathParser(d)}size(width,height){const box=this.bbox();let i,l;box.width=box.width===0?1:box.width;box.height=box.height===0?1:box.height;for(i=this.length-1;i>=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y}else if(l==="H"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x}else if(l==="V"){this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y;this[i][3]=(this[i][3]-box.x)*width/box.width+box.x;this[i][4]=(this[i][4]-box.y)*height/box.height+box.y;if(l==="C"){this[i][5]=(this[i][5]-box.x)*width/box.width+box.x;this[i][6]=(this[i][6]-box.y)*height/box.height+box.y}}else if(l==="A"){this[i][1]=this[i][1]*width/box.width;this[i][2]=this[i][2]*height/box.height;this[i][6]=(this[i][6]-box.x)*width/box.width+box.x;this[i][7]=(this[i][7]-box.y)*height/box.height+box.y}}return this}toString(){return arrayToString(this)}}const getClassForType=value=>{const type=typeof value;if(type==="number"){return SVGNumber}else if(type==="string"){if(Color.isColor(value)){return Color}else if(delimiter.test(value)){return isPathLetter.test(value)?PathArray:SVGArray}else if(numberAndUnit.test(value)){return SVGNumber}else{return NonMorphable}}else if(morphableTypes.indexOf(value.constructor)>-1){return value.constructor}else if(Array.isArray(value)){return SVGArray}else if(type==="object"){return ObjectBag}else{return NonMorphable}};class Morphable{constructor(stepper){this._stepper=stepper||new Ease("-");this._from=null;this._to=null;this._type=null;this._context=null;this._morphObj=null}at(pos){return this._morphObj.morph(this._from,this._to,pos,this._stepper,this._context)}done(){const complete=this._context.map(this._stepper.done).reduce(function(last,curr){return last&&curr},true);return complete}from(val){if(val==null){return this._from}this._from=this._set(val);return this}stepper(stepper){if(stepper==null)return this._stepper;this._stepper=stepper;return this}to(val){if(val==null){return this._to}this._to=this._set(val);return this}type(type){if(type==null){return this._type}this._type=type;return this}_set(value){if(!this._type){this.type(getClassForType(value))}let result=new this._type(value);if(this._type===Color){result=this._to?result[this._to[4]]():this._from?result[this._from[4]]():result}if(this._type===ObjectBag){result=this._to?result.align(this._to):this._from?result.align(this._from):result}result=result.toConsumable();this._morphObj=this._morphObj||new this._type;this._context=this._context||Array.apply(null,Array(result.length)).map(Object).map(function(o){o.done=true;return o});return result}}class NonMorphable{constructor(...args){this.init(...args)}init(val){val=Array.isArray(val)?val[0]:val;this.value=val;return this}toArray(){return[this.value]}valueOf(){return this.value}}class TransformBag{constructor(...args){this.init(...args)}init(obj){if(Array.isArray(obj)){obj={scaleX:obj[0],scaleY:obj[1],shear:obj[2],rotate:obj[3],translateX:obj[4],translateY:obj[5],originX:obj[6],originY:obj[7]}}Object.assign(this,TransformBag.defaults,obj);return this}toArray(){const v=this;return[v.scaleX,v.scaleY,v.shear,v.rotate,v.translateX,v.translateY,v.originX,v.originY]}}TransformBag.defaults={scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0};const sortByKey=(a,b)=>{return a[0]b[0]?1:0};class ObjectBag{constructor(...args){this.init(...args)}align(other){const values=this.values;for(let i=0,il=values.length;ilast.concat(curr),[]);return this}toArray(){return this.values}valueOf(){const obj={};const arr=this.values;while(arr.length){const key=arr.shift();const Type=arr.shift();const num=arr.shift();const values=arr.splice(0,num);obj[key]=new Type(values)}return obj}}const morphableTypes=[NonMorphable,TransformBag,ObjectBag];function registerMorphableType(type=[]){morphableTypes.push(...[].concat(type))}function makeMorphable(){extend(morphableTypes,{to(val){return(new Morphable).type(this.constructor).from(this.toArray()).to(val)},fromArray(arr){this.init(arr);return this},toConsumable(){return this.toArray()},morph(from,to,pos,stepper,context){const mapper=function(i,index){return stepper.step(i,to[index],pos,context[index],context)};return this.fromArray(from.map(mapper))}})}class Path extends Shape{constructor(node,attrs=node){super(nodeOrNew("path",node),attrs)}array(){return this._array||(this._array=new PathArray(this.attr("d")))}clear(){delete this._array;return this}height(height){return height==null?this.bbox().height:this.size(this.bbox().width,height)}move(x,y){return this.attr("d",this.array().move(x,y))}plot(d){return d==null?this.array():this.clear().attr("d",typeof d==="string"?d:this._array=new PathArray(d))}size(width,height){const p=proportionalSize(this,width,height);return this.attr("d",this.array().size(p.width,p.height))}width(width){return width==null?this.bbox().width:this.size(width,this.bbox().height)}x(x){return x==null?this.bbox().x:this.move(x,this.bbox().y)}y(y){return y==null?this.bbox().y:this.move(this.bbox().x,y)}}Path.prototype.MorphArray=PathArray;registerMethods({Container:{path:wrapWithAttrCheck(function(d){return this.put(new Path).plot(d||new PathArray)})}});register(Path,"Path");function array(){return this._array||(this._array=new PointArray(this.attr("points")))}function clear(){delete this._array;return this}function move$2(x,y){return this.attr("points",this.array().move(x,y))}function plot(p){return p==null?this.array():this.clear().attr("points",typeof p==="string"?p:this._array=new PointArray(p))}function size$1(width,height){const p=proportionalSize(this,width,height);return this.attr("points",this.array().size(p.width,p.height))}var poly={__proto__:null,array:array,clear:clear,move:move$2,plot:plot,size:size$1};class Polygon extends Shape{constructor(node,attrs=node){super(nodeOrNew("polygon",node),attrs)}}registerMethods({Container:{polygon:wrapWithAttrCheck(function(p){return this.put(new Polygon).plot(p||new PointArray)})}});extend(Polygon,pointed);extend(Polygon,poly);register(Polygon,"Polygon");class Polyline extends Shape{constructor(node,attrs=node){super(nodeOrNew("polyline",node),attrs)}}registerMethods({Container:{polyline:wrapWithAttrCheck(function(p){return this.put(new Polyline).plot(p||new PointArray)})}});extend(Polyline,pointed);extend(Polyline,poly);register(Polyline,"Polyline");class Rect extends Shape{constructor(node,attrs=node){super(nodeOrNew("rect",node),attrs)}}extend(Rect,{rx:rx,ry:ry});registerMethods({Container:{rect:wrapWithAttrCheck(function(width,height){return this.put(new Rect).size(width,height)})}});register(Rect,"Rect");class Queue{constructor(){this._first=null;this._last=null}first(){return this._first&&this._first.value}last(){return this._last&&this._last.value}push(value){const item=typeof value.next!=="undefined"?value:{value:value,next:null,prev:null};if(this._last){item.prev=this._last;this._last.next=item;this._last=item}else{this._last=item;this._first=item}return item}remove(item){if(item.prev)item.prev.next=item.next;if(item.next)item.next.prev=item.prev;if(item===this._last)this._last=item.prev;if(item===this._first)this._first=item.next;item.prev=null;item.next=null}shift(){const remove=this._first;if(!remove)return null;this._first=remove.next;if(this._first)this._first.prev=null;this._last=this._first?this._last:null;return remove.value}}const Animator={nextDraw:null,frames:new Queue,timeouts:new Queue,immediates:new Queue,timer:()=>globals.window.performance||globals.window.Date,transforms:[],frame(fn){const node=Animator.frames.push({run:fn});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},timeout(fn,delay){delay=delay||0;const time=Animator.timer().now()+delay;const node=Animator.timeouts.push({run:fn,time:time});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},immediate(fn){const node=Animator.immediates.push(fn);if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},cancelFrame(node){node!=null&&Animator.frames.remove(node)},clearTimeout(node){node!=null&&Animator.timeouts.remove(node)},cancelImmediate(node){node!=null&&Animator.immediates.remove(node)},_draw(now){let nextTimeout=null;const lastTimeout=Animator.timeouts.last();while(nextTimeout=Animator.timeouts.shift()){if(now>=nextTimeout.time){nextTimeout.run()}else{Animator.timeouts.push(nextTimeout)}if(nextTimeout===lastTimeout)break}let nextFrame=null;const lastFrame=Animator.frames.last();while(nextFrame!==lastFrame&&(nextFrame=Animator.frames.shift())){nextFrame.run(now)}let nextImmediate=null;while(nextImmediate=Animator.immediates.shift()){nextImmediate()}Animator.nextDraw=Animator.timeouts.first()||Animator.frames.first()?globals.window.requestAnimationFrame(Animator._draw):null}};const makeSchedule=function(runnerInfo){const start=runnerInfo.start;const duration=runnerInfo.runner.duration();const end=start+duration;return{start:start,duration:duration,end:end,runner:runnerInfo.runner}};const defaultSource=function(){const w=globals.window;return(w.performance||w.Date).now()};class Timeline extends EventTarget{constructor(timeSource=defaultSource){super();this._timeSource=timeSource;this._startTime=0;this._speed=1;this._persist=0;this._nextFrame=null;this._paused=true;this._runners=[];this._runnerIds=[];this._lastRunnerId=-1;this._time=0;this._lastSourceTime=0;this._lastStepTime=0;this._step=this._stepFn.bind(this,false);this._stepImmediate=this._stepFn.bind(this,true)}active(){return!!this._nextFrame}finish(){this.time(this.getEndTimeOfTimeline()+1);return this.pause()}getEndTime(){const lastRunnerInfo=this.getLastRunnerInfo();const lastDuration=lastRunnerInfo?lastRunnerInfo.runner.duration():0;const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;return lastStartTime+lastDuration}getEndTimeOfTimeline(){const endTimes=this._runners.map(i=>i.start+i.runner.duration());return Math.max(0,...endTimes)}getLastRunnerInfo(){return this.getRunnerInfoById(this._lastRunnerId)}getRunnerInfoById(id){return this._runners[this._runnerIds.indexOf(id)]||null}pause(){this._paused=true;return this._continue()}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}play(){this._paused=false;return this.updateTime()._continue()}reverse(yes){const currentSpeed=this.speed();if(yes==null)return this.speed(-currentSpeed);const positive=Math.abs(currentSpeed);return this.speed(yes?-positive:positive)}schedule(runner,delay,when){if(runner==null){return this._runners.map(makeSchedule)}let absoluteStartTime=0;const endTime=this.getEndTime();delay=delay||0;if(when==null||when==="last"||when==="after"){absoluteStartTime=endTime}else if(when==="absolute"||when==="start"){absoluteStartTime=delay;delay=0}else if(when==="now"){absoluteStartTime=this._time}else if(when==="relative"){const runnerInfo=this.getRunnerInfoById(runner.id);if(runnerInfo){absoluteStartTime=runnerInfo.start+delay;delay=0}}else if(when==="with-last"){const lastRunnerInfo=this.getLastRunnerInfo();const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;absoluteStartTime=lastStartTime}else{throw new Error('Invalid value for the "when" parameter')}runner.unschedule();runner.timeline(this);const persist=runner.persist();const runnerInfo={persist:persist===null?this._persist:persist,start:absoluteStartTime+delay,runner:runner};this._lastRunnerId=runner.id;this._runners.push(runnerInfo);this._runners.sort((a,b)=>a.start-b.start);this._runnerIds=this._runners.map(info=>info.runner.id);this.updateTime()._continue();return this}seek(dt){return this.time(this._time+dt)}source(fn){if(fn==null)return this._timeSource;this._timeSource=fn;return this}speed(speed){if(speed==null)return this._speed;this._speed=speed;return this}stop(){this.time(0);return this.pause()}time(time){if(time==null)return this._time;this._time=time;return this._continue(true)}unschedule(runner){const index=this._runnerIds.indexOf(runner.id);if(index<0)return this;this._runners.splice(index,1);this._runnerIds.splice(index,1);runner.timeline(null);return this}updateTime(){if(!this.active()){this._lastSourceTime=this._timeSource()}return this}_continue(immediateStep=false){Animator.cancelFrame(this._nextFrame);this._nextFrame=null;if(immediateStep)return this._stepImmediate();if(this._paused)return this;this._nextFrame=Animator.frame(this._step);return this}_stepFn(immediateStep=false){const time=this._timeSource();let dtSource=time-this._lastSourceTime;if(immediateStep)dtSource=0;const dtTime=this._speed*dtSource+(this._time-this._lastStepTime);this._lastSourceTime=time;if(!immediateStep){this._time+=dtTime;this._time=this._time<0?0:this._time}this._lastStepTime=this._time;this.fire("time",this._time);for(let k=this._runners.length;k--;){const runnerInfo=this._runners[k];const runner=runnerInfo.runner;const dtToStart=this._time-runnerInfo.start;if(dtToStart<=0){runner.reset()}}let runnersLeft=false;for(let i=0,len=this._runners.length;i0){this._continue()}else{this.pause();this.fire("finished")}return this}}registerMethods({Element:{timeline:function(timeline){if(timeline==null){this._timeline=this._timeline||new Timeline;return this._timeline}else{this._timeline=timeline;return this}}}});class Runner extends EventTarget{constructor(options){super();this.id=Runner.id++;options=options==null?timeline.duration:options;options=typeof options==="function"?new Controller(options):options;this._element=null;this._timeline=null;this.done=false;this._queue=[];this._duration=typeof options==="number"&&options;this._isDeclarative=options instanceof Controller;this._stepper=this._isDeclarative?options:new Ease;this._history={};this.enabled=true;this._time=0;this._lastTime=0;this._reseted=true;this.transforms=new Matrix;this.transformId=1;this._haveReversed=false;this._reverse=false;this._loopsDone=0;this._swing=false;this._wait=0;this._times=1;this._frameId=null;this._persist=this._isDeclarative?true:null}static sanitise(duration,delay,when){let times=1;let swing=false;let wait=0;duration=duration||timeline.duration;delay=delay||timeline.delay;when=when||"last";if(typeof duration==="object"&&!(duration instanceof Stepper)){delay=duration.delay||delay;when=duration.when||when;swing=duration.swing||swing;times=duration.times||times;wait=duration.wait||wait;duration=duration.duration||timeline.duration}return{duration:duration,delay:delay,swing:swing,times:times,wait:wait,when:when}}active(enabled){if(enabled==null)return this.enabled;this.enabled=enabled;return this}addTransform(transform,index){this.transforms.lmultiplyO(transform);return this}after(fn){return this.on("finished",fn)}animate(duration,delay,when){const o=Runner.sanitise(duration,delay,when);const runner=new Runner(o.duration);if(this._timeline)runner.timeline(this._timeline);if(this._element)runner.element(this._element);return runner.loop(o).schedule(o.delay,o.when)}clearTransform(){this.transforms=new Matrix;return this}clearTransformsFromQueue(){if(!this.done||!this._timeline||!this._timeline._runnerIds.includes(this.id)){this._queue=this._queue.filter(item=>{return!item.isTransform})}}delay(delay){return this.animate(0,delay)}duration(){return this._times*(this._wait+this._duration)-this._wait}during(fn){return this.queue(null,fn)}ease(fn){this._stepper=new Ease(fn);return this}element(element){if(element==null)return this._element;this._element=element;element._prepareRunner();return this}finish(){return this.step(Infinity)}loop(times,swing,wait){if(typeof times==="object"){swing=times.swing;wait=times.wait;times=times.times}this._times=times||Infinity;this._swing=swing||false;this._wait=wait||0;if(this._times===true){this._times=Infinity}return this}loops(p){const loopDuration=this._duration+this._wait;if(p==null){const loopsDone=Math.floor(this._time/loopDuration);const relativeTime=this._time-loopsDone*loopDuration;const position=relativeTime/this._duration;return Math.min(loopsDone+position,this._times)}const whole=Math.floor(p);const partial=p%1;const time=loopDuration*whole+this._duration*partial;return this.time(time)}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}position(p){const x=this._time;const d=this._duration;const w=this._wait;const t=this._times;const s=this._swing;const r=this._reverse;let position;if(p==null){const f=function(x){const swinging=s*Math.floor(x%(2*(w+d))/(w+d));const backwards=swinging&&!r||!swinging&&r;const uncliped=Math.pow(-1,backwards)*(x%(w+d))/d+backwards;const clipped=Math.max(Math.min(uncliped,1),0);return clipped};const endTime=t*(w+d)-w;position=x<=0?Math.round(f(1e-5)):x=0;this._lastPosition=position;const duration=this.duration();const justStarted=this._lastTime<=0&&this._time>0;const justFinished=this._lastTime=duration;this._lastTime=this._time;if(justStarted){this.fire("start",this)}const declarative=this._isDeclarative;this.done=!declarative&&!justFinished&&this._time>=duration;this._reseted=false;let converged=false;if(running||declarative){this._initialise(running);this.transforms=new Matrix;converged=this._run(declarative?dt:position);this.fire("step",this)}this.done=this.done||converged&&declarative;if(justFinished){this.fire("finished",this)}return this}time(time){if(time==null){return this._time}const dt=time-this._time;this.step(dt);return this}timeline(timeline){if(typeof timeline==="undefined")return this._timeline;this._timeline=timeline;return this}unschedule(){const timeline=this.timeline();timeline&&timeline.unschedule(this);return this}_initialise(running){if(!running&&!this._isDeclarative)return;for(let i=0,len=this._queue.length;ilast.lmultiplyO(curr);const getRunnerTransform=runner=>runner.transforms;function mergeTransforms(){const runners=this._transformationRunners.runners;const netTransform=runners.map(getRunnerTransform).reduce(lmultiply,new Matrix);this.transform(netTransform);this._transformationRunners.merge();if(this._transformationRunners.length()===1){this._frameId=null}}class RunnerArray{constructor(){this.runners=[];this.ids=[]}add(runner){if(this.runners.includes(runner))return;const id=runner.id+1;this.runners.push(runner);this.ids.push(id);return this}clearBefore(id){const deleteCnt=this.ids.indexOf(id+1)||1;this.ids.splice(0,deleteCnt,0);this.runners.splice(0,deleteCnt,new FakeRunner).forEach(r=>r.clearTransformsFromQueue());return this}edit(id,newRunner){const index=this.ids.indexOf(id+1);this.ids.splice(index,1,id+1);this.runners.splice(index,1,newRunner);return this}getByID(id){return this.runners[this.ids.indexOf(id+1)]}length(){return this.ids.length}merge(){let lastRunner=null;for(let i=0;irunner.id<=current.id).map(getRunnerTransform).reduce(lmultiply,new Matrix)},_addRunner(runner){this._transformationRunners.add(runner);Animator.cancelImmediate(this._frameId);this._frameId=Animator.immediate(mergeTransforms.bind(this))},_prepareRunner(){if(this._frameId==null){this._transformationRunners=(new RunnerArray).add(new FakeRunner(new Matrix(this)))}}}});const difference=(a,b)=>a.filter(x=>!b.includes(x));extend(Runner,{attr(a,v){return this.styleAttr("attr",a,v)},css(s,v){return this.styleAttr("css",s,v)},styleAttr(type,nameOrAttrs,val){if(typeof nameOrAttrs==="string"){return this.styleAttr(type,{[nameOrAttrs]:val})}let attrs=nameOrAttrs;if(this._tryRetarget(type,attrs))return this;let morpher=new Morphable(this._stepper).to(attrs);let keys=Object.keys(attrs);this.queue(function(){morpher=morpher.from(this.element()[type](keys))},function(pos){this.element()[type](morpher.at(pos).valueOf());return morpher.done()},function(newToAttrs){const newKeys=Object.keys(newToAttrs);const differences=difference(newKeys,keys);if(differences.length){const addedFromAttrs=this.element()[type](differences);const oldFromAttrs=new ObjectBag(morpher.from()).valueOf();Object.assign(oldFromAttrs,addedFromAttrs);morpher.from(oldFromAttrs)}const oldToAttrs=new ObjectBag(morpher.to()).valueOf();Object.assign(oldToAttrs,newToAttrs);morpher.to(oldToAttrs);keys=newKeys;attrs=newToAttrs});this._rememberMorpher(type,morpher);return this},zoom(level,point){if(this._tryRetarget("zoom",level,point))return this;let morpher=new Morphable(this._stepper).to(new SVGNumber(level));this.queue(function(){morpher=morpher.from(this.element().zoom())},function(pos){this.element().zoom(morpher.at(pos),point);return morpher.done()},function(newLevel,newPoint){point=newPoint;morpher.to(newLevel)});this._rememberMorpher("zoom",morpher);return this},transform(transforms,relative,affine){relative=transforms.relative||relative;if(this._isDeclarative&&!relative&&this._tryRetarget("transform",transforms)){return this}const isMatrix=Matrix.isMatrixLike(transforms);affine=transforms.affine!=null?transforms.affine:affine!=null?affine:!isMatrix;const morpher=new Morphable(this._stepper).type(affine?TransformBag:Matrix);let origin;let element;let current;let currentAngle;let startTransform;function setup(){element=element||this.element();origin=origin||getOrigin(transforms,element);startTransform=new Matrix(relative?undefined:element);element._addRunner(this);if(!relative){element._clearTransformRunnersBefore(this)}}function run(pos){if(!relative)this.clearTransform();const{x,y}=new Point(origin).transform(element._currentTransform(this));let target=new Matrix({...transforms,origin:[x,y]});let start=this._isDeclarative&¤t?current:startTransform;if(affine){target=target.decompose(x,y);start=start.decompose(x,y);const rTarget=target.rotate;const rCurrent=start.rotate;const possibilities=[rTarget-360,rTarget,rTarget+360];const distances=possibilities.map(a=>Math.abs(a-rCurrent));const shortest=Math.min(...distances);const index=distances.indexOf(shortest);target.rotate=possibilities[index]}if(relative){if(!isMatrix){target.rotate=transforms.rotate||0}if(this._isDeclarative&¤tAngle){start.rotate=currentAngle}}morpher.from(start);morpher.to(target);const affineParameters=morpher.at(pos);currentAngle=affineParameters.rotate;current=new Matrix(affineParameters);this.addTransform(current);element._addRunner(this);return morpher.done()}function retarget(newTransforms){if((newTransforms.origin||"center").toString()!==(transforms.origin||"center").toString()){origin=getOrigin(newTransforms,element)}transforms={...newTransforms,origin:origin}}this.queue(setup,run,retarget,true);this._isDeclarative&&this._rememberMorpher("transform",morpher);return this},x(x,relative){return this._queueNumber("x",x)},y(y){return this._queueNumber("y",y)},dx(x=0){return this._queueNumberDelta("x",x)},dy(y=0){return this._queueNumberDelta("y",y)},dmove(x,y){return this.dx(x).dy(y)},_queueNumberDelta(method,to){to=new SVGNumber(to);if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);let from=null;this.queue(function(){from=this.element()[method]();morpher.from(from);morpher.to(from+to)},function(pos){this.element()[method](morpher.at(pos));return morpher.done()},function(newTo){morpher.to(from+new SVGNumber(newTo))});this._rememberMorpher(method,morpher);return this},_queueObject(method,to){if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);this.queue(function(){morpher.from(this.element()[method]())},function(pos){this.element()[method](morpher.at(pos));return morpher.done()});this._rememberMorpher(method,morpher);return this},_queueNumber(method,value){return this._queueObject(method,new SVGNumber(value))},cx(x){return this._queueNumber("cx",x)},cy(y){return this._queueNumber("cy",y)},move(x,y){return this.x(x).y(y)},center(x,y){return this.cx(x).cy(y)},size(width,height){let box;if(!width||!height){box=this._element.bbox()}if(!width){width=box.width/box.height*height}if(!height){height=box.height/box.width*width}return this.width(width).height(height)},width(width){return this._queueNumber("width",width)},height(height){return this._queueNumber("height",height)},plot(a,b,c,d){if(arguments.length===4){return this.plot([a,b,c,d])}if(this._tryRetarget("plot",a))return this;const morpher=new Morphable(this._stepper).type(this._element.MorphArray).to(a);this.queue(function(){morpher.from(this._element.array())},function(pos){this._element.plot(morpher.at(pos));return morpher.done()});this._rememberMorpher("plot",morpher);return this},leading(value){return this._queueNumber("leading",value)},viewbox(x,y,width,height){return this._queueObject("viewbox",new Box(x,y,width,height))},update(o){if(typeof o!=="object"){return this.update({offset:arguments[0],color:arguments[1],opacity:arguments[2]})}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",o.offset);return this}});extend(Runner,{rx:rx,ry:ry,from:from,to:to});register(Runner,"Runner");class Svg extends Container{constructor(node,attrs=node){super(nodeOrNew("svg",node),attrs);this.namespace()}defs(){if(!this.isRoot())return this.root().defs();return adopt(this.node.querySelector("defs"))||this.put(new Defs)}isRoot(){return!this.node.parentNode||!(this.node.parentNode instanceof globals.window.SVGElement)&&this.node.parentNode.nodeName!=="#document-fragment"}namespace(){if(!this.isRoot())return this.root().namespace();return this.attr({xmlns:svg,version:"1.1"}).attr("xmlns:xlink",xlink,xmlns).attr("xmlns:svgjs",svgjs,xmlns)}removeNamespace(){return this.attr({xmlns:null,version:null}).attr("xmlns:xlink",null,xmlns).attr("xmlns:svgjs",null,xmlns)}root(){if(this.isRoot())return this;return super.root()}}registerMethods({Container:{nested:wrapWithAttrCheck(function(){return this.put(new Svg)})}});register(Svg,"Svg",true);class Symbol extends Container{constructor(node,attrs=node){super(nodeOrNew("symbol",node),attrs)}}registerMethods({Container:{symbol:wrapWithAttrCheck(function(){return this.put(new Symbol)})}});register(Symbol,"Symbol");function plain(text){if(this._build===false){this.clear()}this.node.appendChild(globals.document.createTextNode(text));return this}function length(){return this.node.getComputedTextLength()}function x$1(x,box=this.bbox()){if(x==null){return box.x}return this.attr("x",this.attr("x")+x-box.x)}function y$1(y,box=this.bbox()){if(y==null){return box.y}return this.attr("y",this.attr("y")+y-box.y)}function move$1(x,y,box=this.bbox()){return this.x(x,box).y(y,box)}function cx(x,box=this.bbox()){if(x==null){return box.cx}return this.attr("x",this.attr("x")+x-box.cx)}function cy(y,box=this.bbox()){if(y==null){return box.cy}return this.attr("y",this.attr("y")+y-box.cy)}function center(x,y,box=this.bbox()){return this.cx(x,box).cy(y,box)}function ax(x){return this.attr("x",x)}function ay(y){return this.attr("y",y)}function amove(x,y){return this.ax(x).ay(y)}function build(build){this._build=!!build;return this}var textable={__proto__:null,plain:plain,length:length,x:x$1,y:y$1,move:move$1,cx:cx,cy:cy,center:center,ax:ax,ay:ay,amove:amove,build:build};class Text extends Shape{constructor(node,attrs=node){super(nodeOrNew("text",node),attrs);this.dom.leading=new SVGNumber(1.3);this._rebuild=true;this._build=false}leading(value){if(value==null){return this.dom.leading}this.dom.leading=new SVGNumber(value);return this.rebuild()}rebuild(rebuild){if(typeof rebuild==="boolean"){this._rebuild=rebuild}if(this._rebuild){const self=this;let blankLineOffset=0;const leading=this.dom.leading;this.each(function(i){const fontSize=globals.window.getComputedStyle(this.node).getPropertyValue("font-size");const dy=leading*new SVGNumber(fontSize);if(this.dom.newLined){this.attr("x",self.attr("x"));if(this.text()==="\n"){blankLineOffset+=dy}else{this.attr("dy",i?dy+blankLineOffset:0);blankLineOffset=0}}});this.fire("rebuild")}return this}setData(o){this.dom=o;this.dom.leading=new SVGNumber(o.leading||1.3);return this}text(text){if(text===undefined){const children=this.node.childNodes;let firstLine=0;text="";for(let i=0,len=children.length;i{let bbox;try{bbox=child.bbox()}catch(e){return}const m=new Matrix(child);const matrix=m.translate(dx,dy).transform(m.inverse());const p=new Point(bbox.x,bbox.y).transform(matrix);child.move(p.x,p.y)});return this}function dx(dx){return this.dmove(dx,0)}function dy(dy){return this.dmove(0,dy)}function height(height,box=this.bbox()){if(height==null)return box.height;return this.size(box.width,height,box)}function move(x=0,y=0,box=this.bbox()){const dx=x-box.x;const dy=y-box.y;return this.dmove(dx,dy)}function size(width,height,box=this.bbox()){const p=proportionalSize(this,width,height,box);const scaleX=p.width/box.width;const scaleY=p.height/box.height;this.children().forEach((child,i)=>{const o=new Point(box).transform(new Matrix(child).inverse());child.scale(scaleX,scaleY,o.x,o.y)});return this}function width(width,box=this.bbox()){if(width==null)return box.width;return this.size(width,box.height,box)}function x(x,box=this.bbox()){if(x==null)return box.x;return this.move(x,box.y,box)}function y(y,box=this.bbox()){if(y==null)return box.y;return this.move(box.x,y,box)}var containerGeometry={__proto__:null,dmove:dmove,dx:dx,dy:dy,height:height,move:move,size:size,width:width,x:x,y:y};class G extends Container{constructor(node,attrs=node){super(nodeOrNew("g",node),attrs)}}extend(G,containerGeometry);registerMethods({Container:{group:wrapWithAttrCheck(function(){return this.put(new G)})}});register(G,"G");class A extends Container{constructor(node,attrs=node){super(nodeOrNew("a",node),attrs)}target(target){return this.attr("target",target)}to(url){return this.attr("href",url,xlink)}}extend(A,containerGeometry);registerMethods({Container:{link:wrapWithAttrCheck(function(url){return this.put(new A).to(url)})},Element:{unlink(){const link=this.linker();if(!link)return this;const parent=link.parent();if(!parent){return this.remove()}const index=parent.index(link);parent.add(this,index);link.remove();return this},linkTo(url){let link=this.linker();if(!link){link=new A;this.wrap(link)}if(typeof url==="function"){url.call(link,link)}else{link.to(url)}return this},linker(){const link=this.parent();if(link&&link.node.nodeName.toLowerCase()==="a"){return link}return null}}});register(A,"A");class Mask extends Container{constructor(node,attrs=node){super(nodeOrNew("mask",node),attrs)}remove(){this.targets().forEach(function(el){el.unmask()});return super.remove()}targets(){return baseFind('svg [mask*="'+this.id()+'"]')}}registerMethods({Container:{mask:wrapWithAttrCheck(function(){return this.defs().put(new Mask)})},Element:{masker(){return this.reference("mask")},maskWith(element){const masker=element instanceof Mask?element:this.parent().mask().add(element);return this.attr("mask",'url("#'+masker.id()+'")')},unmask(){return this.attr("mask",null)}}});register(Mask,"Mask");class Stop extends Element{constructor(node,attrs=node){super(nodeOrNew("stop",node),attrs)}update(o){if(typeof o==="number"||o instanceof SVGNumber){o={offset:arguments[0],color:arguments[1],opacity:arguments[2]}}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",new SVGNumber(o.offset));return this}}registerMethods({Gradient:{stop:function(offset,color,opacity){return this.put(new Stop).update(offset,color,opacity)}}});register(Stop,"Stop");function cssRule(selector,rule){if(!selector)return"";if(!rule)return selector;let ret=selector+"{";for(const i in rule){ret+=unCamelCase(i)+":"+rule[i]+";"}ret+="}";return ret}class Style extends Element{constructor(node,attrs=node){super(nodeOrNew("style",node),attrs)}addText(w=""){this.node.textContent+=w;return this}font(name,src,params={}){return this.rule("@font-face",{fontFamily:name,src:src,...params})}rule(selector,obj){return this.addText(cssRule(selector,obj))}}registerMethods("Dom",{style(selector,obj){return this.put(new Style).rule(selector,obj)},fontface(name,src,params){return this.put(new Style).font(name,src,params)}});register(Style,"Style");class TextPath extends Text{constructor(node,attrs=node){super(nodeOrNew("textPath",node),attrs)}array(){const track=this.track();return track?track.array():null}plot(d){const track=this.track();let pathArray=null;if(track){pathArray=track.plot(d)}return d==null?pathArray:this}track(){return this.reference("href")}}registerMethods({Container:{textPath:wrapWithAttrCheck(function(text,path){if(!(text instanceof Text)){text=this.text(text)}return text.path(path)})},Text:{path:wrapWithAttrCheck(function(track,importNodes=true){const textPath=new TextPath;if(!(track instanceof Path)){track=this.defs().path(track)}textPath.attr("href","#"+track,xlink);let node;if(importNodes){while(node=this.node.firstChild){textPath.node.appendChild(node)}}return this.put(textPath)}),textPath(){return this.findOne("textPath")}},Path:{text:wrapWithAttrCheck(function(text){if(!(text instanceof Text)){text=(new Text).addTo(this.parent()).text(text)}return text.path(this)}),targets(){return baseFind("svg textPath").filter(node=>{return(node.attr("href")||"").includes(this.id())})}}});TextPath.prototype.MorphArray=PathArray;register(TextPath,"TextPath");class Use extends Shape{constructor(node,attrs=node){super(nodeOrNew("use",node),attrs)}use(element,file){return this.attr("href",(file||"")+"#"+element,xlink)}}registerMethods({Container:{use:wrapWithAttrCheck(function(element,file){return this.put(new Use).use(element,file)})}});register(Use,"Use");const SVG$1=makeInstance;extend([Svg,Symbol,Image,Pattern,Marker],getMethodsFor("viewbox"));extend([Line,Polyline,Polygon,Path],getMethodsFor("marker"));extend(Text,getMethodsFor("Text"));extend(Path,getMethodsFor("Path"));extend(Defs,getMethodsFor("Defs"));extend([Text,Tspan],getMethodsFor("Tspan"));extend([Rect,Ellipse,Gradient,Runner],getMethodsFor("radius"));extend(EventTarget,getMethodsFor("EventTarget"));extend(Dom,getMethodsFor("Dom"));extend(Element,getMethodsFor("Element"));extend(Shape,getMethodsFor("Shape"));extend([Container,Fragment],getMethodsFor("Container"));extend(Gradient,getMethodsFor("Gradient"));extend(Runner,getMethodsFor("Runner"));List.extend(getMethodNames());registerMorphableType([SVGNumber,Color,Box,Matrix,SVGArray,PointArray,PathArray,Point]);makeMorphable();var svgMembers={__proto__:null,Morphable:Morphable,registerMorphableType:registerMorphableType,makeMorphable:makeMorphable,TransformBag:TransformBag,ObjectBag:ObjectBag,NonMorphable:NonMorphable,defaults:defaults,utils:utils,namespaces:namespaces,regex:regex,SVG:SVG$1,parser:parser,find:baseFind,getWindow:getWindow,registerWindow:registerWindow,restoreWindow:restoreWindow,saveWindow:saveWindow,withWindow:withWindow,Animator:Animator,Controller:Controller,Ease:Ease,PID:PID,Spring:Spring,easing:easing,Queue:Queue,Runner:Runner,Timeline:Timeline,Array:SVGArray,Box:Box,Color:Color,EventTarget:EventTarget,Matrix:Matrix,Number:SVGNumber,PathArray:PathArray,Point:Point,PointArray:PointArray,List:List,Circle:Circle,ClipPath:ClipPath,Container:Container,Defs:Defs,Dom:Dom,Element:Element,Ellipse:Ellipse,ForeignObject:ForeignObject,Fragment:Fragment,Gradient:Gradient,G:G,A:A,Image:Image,Line:Line,Marker:Marker,Mask:Mask,Path:Path,Pattern:Pattern,Polygon:Polygon,Polyline:Polyline,Rect:Rect,Shape:Shape,Stop:Stop,Style:Style,Svg:Svg,Symbol:Symbol,Text:Text,TextPath:TextPath,Tspan:Tspan,Use:Use,windowEvents:windowEvents,getEvents:getEvents,getEventTarget:getEventTarget,clearEvents:clearEvents,on:on,off:off,dispatch:dispatch,root:root,create:create,makeInstance:makeInstance,nodeOrNew:nodeOrNew,adopt:adopt,mockAdopt:mockAdopt,register:register,getClass:getClass,eid:eid,assignNewId:assignNewId,extend:extend,wrapWithAttrCheck:wrapWithAttrCheck};function SVG(element,isHTML){return makeInstance(element,isHTML)}Object.assign(SVG,svgMembers);return SVG}(); +/*! + @licstart The following is the entire license notice for the JavaScript code in this file. + The code below is based on SVGPan Library 1.2 and was modified for doxygen + to support both zooming and panning via the mouse and via embedded buttons. + + This code is licensed under the following BSD license: + + Copyright 2009-2010 Andrea Leofreddi . All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are those of the + authors and should not be interpreted as representing official policies, either expressed + or implied, of Andrea Leofreddi. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var root=document.documentElement;var state="none";var stateOrigin;var stateTf=root.createSVGMatrix();var cursorGrab=' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';var zoomSteps=10;var zoomInFactor;var zoomOutFactor;var windowWidth;var windowHeight;var svgDoc;var minZoom;var maxZoom;if(!window)window=this;function show(){if(window.innerHeight){windowWidth=window.innerWidth;windowHeight=window.innerHeight}else if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}if(!windowWidth||!windowHeight){windowWidth=800;windowHeight=600}minZoom=Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);maxZoom=minZoom+1.5;zoomInFactor=Math.pow(maxZoom/minZoom,1/zoomSteps);zoomOutFactor=1/zoomInFactor;var g=svgDoc.getElementById("viewport");try{var bb=g.getBBox();var tx=(windowWidth-viewWidth*minZoom+8)/(2*minZoom);var ty=viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);var a="scale("+minZoom+") rotate(0) translate("+tx+" "+ty+")";g.setAttribute("transform",a)}catch(e){}}function init(evt){svgDoc=evt.target.ownerDocument;try{if(top.window&&top.window.registerShow){top.window.registerShow(sectionId,show)}}catch(e){}show();setAttributes(root,{onmousedown:"handleMouseDown(evt)",onmousemove:"handleMouseMove(evt)",onmouseup:"handleMouseUp(evt)"});if(window.addEventListener){if(navigator.userAgent.toLowerCase().indexOf("webkit")>=0||navigator.userAgent.toLowerCase().indexOf("opera")>=0||navigator.appVersion.indexOf("MSIE")!=-1){window.addEventListener("mousewheel",handleMouseWheel,false)}else{window.addEventListener("DOMMouseScroll",handleMouseWheel,false)}}}window.onresize=function(){if(svgDoc){show()}};function getEventPoint(evt){var p=root.createSVGPoint();p.x=evt.clientX;p.y=evt.clientY;return p}function setCTM(element,matrix){var s="matrix("+matrix.a+","+matrix.b+","+matrix.c+","+matrix.d+","+matrix.e+","+matrix.f+")";element.setAttribute("transform",s)}function setAttributes(element,attributes){for(i in attributes)element.setAttributeNS(null,i,attributes[i])}function doZoom(g,point,zoomFactor){var p=point.matrixTransform(g.getCTM().inverse());var k=root.createSVGMatrix().translate(p.x,p.y).scale(zoomFactor).translate(-p.x,-p.y);var n=g.getCTM().multiply(k);var s=Math.max(n.a,n.d);if(s>maxZoom)n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);else if(s');d.write("Print SVG");d.write('');d.write('
    '+xs+"
    ");d.write("");d.write("");d.close()}catch(e){alert("Failed to open popup window needed for printing!\n"+e.message)}}function highlightEdges(){var elems=document.getElementsByTagName("g");if(elems){for(var i=0;i g");function findEnclosingG(domEl){let curEl=domEl;while(curEl.nodeName!="g"||curEl.id.substr(0,4)!="Node"){curEl=curEl.parentElement}return curEl}function onMouseOverElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>{if(SVG(e)!=s)SVG(e).attr("data-mouse-over-selected","false")});walk(e,e=>SVG(e).attr("data-mouse-over-selected","true"));let{nodes,edges}=getEdgesAndDistance1Nodes(SVG(e),s);for(let node of nodes){walk(node,e=>SVG(e).attr("data-mouse-over-selected","true"))}for(let edge of edges){walk(edge,e=>SVG(e).attr("data-mouse-over-selected","true"))}}function onMouseOutElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>e.attr("data-mouse-over-selected",null))}let gs=s.find("g[id^=Node]");for(let g of gs){g.on("mouseover",onMouseOverElem);g.on("mouseout",onMouseOutElem)}} diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..df7944b --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:none}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} From 85f08c6a629971118abc4cb841dca05638a6f7a8 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 00:31:58 +0000 Subject: [PATCH 02/29] deploy: a5f469fe5a8cfa65e6e83126bba148037f81de86 --- CristalLiq-serial_8ino.html | 258 ++++++++++++++++++++++ CristalLiq-serial_8ino.js | 5 + CristalLiq-serial_8ino__incl.map | 11 + CristalLiq-serial_8ino__incl.md5 | 1 + CristalLiq-serial_8ino__incl.svg | 119 ++++++++++ CristalLiq-serial_8ino__incl_org.svg | 94 ++++++++ annotated.html | 4 +- annotated_dup.js | 2 + classes.html | 8 +- dir_64032a4eeedb86ab5d4dd10c6c32e421.html | 3 + dir_64032a4eeedb86ab5d4dd10c6c32e421.js | 1 + files.html | 3 +- navtreedata.js | 2 +- navtreeindex0.js | 9 +- search/all_0.js | 2 +- search/all_1.js | 4 + search/all_2.js | 4 + search/all_3.js | 4 + search/classes_0.js | 2 +- search/classes_1.js | 4 + search/classes_2.js | 4 + search/files_0.js | 4 + search/searchdata.js | 11 +- structDisplay-members.html | 116 ++++++++++ structDisplay.html | 140 ++++++++++++ structProtocolMessage-members.html | 111 ++++++++++ structProtocolMessage.html | 125 +++++++++++ 27 files changed, 1038 insertions(+), 13 deletions(-) create mode 100644 CristalLiq-serial_8ino.html create mode 100644 CristalLiq-serial_8ino.js create mode 100644 CristalLiq-serial_8ino__incl.map create mode 100644 CristalLiq-serial_8ino__incl.md5 create mode 100644 CristalLiq-serial_8ino__incl.svg create mode 100644 CristalLiq-serial_8ino__incl_org.svg create mode 100644 search/all_1.js create mode 100644 search/all_2.js create mode 100644 search/all_3.js create mode 100644 search/classes_1.js create mode 100644 search/classes_2.js create mode 100644 search/files_0.js create mode 100644 structDisplay-members.html create mode 100644 structDisplay.html create mode 100644 structProtocolMessage-members.html create mode 100644 structProtocolMessage.html diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html new file mode 100644 index 0000000..dd4fa8a --- /dev/null +++ b/CristalLiq-serial_8ino.html @@ -0,0 +1,258 @@ + + + + + + + +ModuloArduino: CristalLiq-serial/CristalLiq-serial.ino File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    CristalLiq-serial.ino File Reference
    +
    +
    + +

    O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer. +More...

    +
    #include <Wire.h>
    +#include <LiquidCrystal_I2C.h>
    +#include "frame.h"
    +
    +Include dependency graph for CristalLiq-serial.ino:
    +
    +
    +
    +
    + + + + + +

    +Classes

    struct  ProtocolMessage
     
    struct  Display
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define PING   100
     
    +#define TIME   200
     
    +#define LECTURE_NAME   300
     
    +#define SPEAKER   400
     
    +#define ATTENDEE   500
     
    +#define SUCCESS   600
     
    +#define FAIL   601
     
    +#define BUZZER   2
     
    +#define COL   20
     
    +#define ROW   4
     
    +#define ADDRESS   0x27
     
    +#define DISPLAY_UPDATE_DELAY   500
     
    +#define LOOP_DELAY   10
     
    +#define KEEP_AT_ZERO   1
     
    +#define KEEP_AT_LAST   1
     
    + + + + + + + + + + + + + +

    +Functions

    +LiquidCrystal_I2C lcd (ADDRESS, COL, ROW)
     
    +void copiaN (char dest[], int sizeDest, char origem[], int sizeOrigem, int start)
     
    +void atualizaDisplay (int lines)
     
    +void parseMessage ()
     
    +void setup ()
     
    +void loop ()
     
    + + + + + + + + + + + + + +

    +Variables

    +ProtocolMessage netMessage
     
    Display dispArray [ROW]
     
    +char strReply [80]
     
    +char auxStr [80]
     
    +unsigned long uptime
     
    +SerialProtocol usbProto
     
    +

    Detailed Description

    +

    O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer.

    +

    O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '> e que aceitam caracteres de escape para <, > e \. A semântica das mensagens é específica para a aplicação IFSPresente. No IFSP podem há seis tipos de mensagens.

      +
    • <100,0,0> --> PING
      +
    • +
    • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
      +
    • +
    • <300,TEXTO,TIMEOUT> --> LECTURE_NAME (Linha 1, para nome da palestra)
      +
    • +
    • <400,TEXTO,TIMEOUT> --> SPEAKER (Linha 2, para nome do palestrante)
      +
    • +
    • <500,TEXTO,TIEMOUT> --> ATTENDEE (Linha 3, aponta participante registrado
    • +
    • <600,0,0> --> SUCCESS (Beep de sucesso no registro)
      +
    • +
    • <601,0,0> --> FAIL (Beep de falha no registro)
      +
    • +
    +

    Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

    +

    Variable Documentation

    + +

    ◆ dispArray

    + +
    +
    + + + + +
    Display dispArray[ROW]
    +
    +Initial value:
    = {
    +
    {"", "IFSPresente", "", 0, 0, 0, KEEP_AT_ZERO, 0},
    +
    {"", "Local Disponivel", "", 0, 0, 0, KEEP_AT_ZERO, 0},
    +
    {"", "Sem reserva de palestrante", "", 0, 0, 0, KEEP_AT_ZERO, 0},
    +
    {"", "Aguardando Registro", "", 0, 0, 0, KEEP_AT_ZERO, 0}
    +
    }
    +
    +
    +
    +
    +
    + + + + diff --git a/CristalLiq-serial_8ino.js b/CristalLiq-serial_8ino.js new file mode 100644 index 0000000..fd88e09 --- /dev/null +++ b/CristalLiq-serial_8ino.js @@ -0,0 +1,5 @@ +var CristalLiq_serial_8ino = +[ + [ "ProtocolMessage", "structProtocolMessage.html", null ], + [ "Display", "structDisplay.html", null ] +]; \ No newline at end of file diff --git a/CristalLiq-serial_8ino__incl.map b/CristalLiq-serial_8ino__incl.map new file mode 100644 index 0000000..f99e433 --- /dev/null +++ b/CristalLiq-serial_8ino__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino__incl.md5 b/CristalLiq-serial_8ino__incl.md5 new file mode 100644 index 0000000..c438d1d --- /dev/null +++ b/CristalLiq-serial_8ino__incl.md5 @@ -0,0 +1 @@ +5512761b0428ac8af1917bb32cedac1c \ No newline at end of file diff --git a/CristalLiq-serial_8ino__incl.svg b/CristalLiq-serial_8ino__incl.svg new file mode 100644 index 0000000..92668fe --- /dev/null +++ b/CristalLiq-serial_8ino__incl.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + +CristalLiq-serial/CristalLiq-serial.ino + + +Node1 + + +CristalLiq-serial/Cristal +Liq-serial.ino + + + + + +Node2 + + +Wire.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +LiquidCrystal_I2C.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +frame.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +Arduino.h + + + + + +Node4->Node5 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino__incl_org.svg b/CristalLiq-serial_8ino__incl_org.svg new file mode 100644 index 0000000..8a7af82 --- /dev/null +++ b/CristalLiq-serial_8ino__incl_org.svg @@ -0,0 +1,94 @@ + + + + + + +CristalLiq-serial/CristalLiq-serial.ino + + +Node1 + + +CristalLiq-serial/Cristal +Liq-serial.ino + + + + + +Node2 + + +Wire.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +LiquidCrystal_I2C.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +frame.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +Arduino.h + + + + + +Node4->Node5 + + + + + + + + diff --git a/annotated.html b/annotated.html index ccaf676..d15df53 100644 --- a/annotated.html +++ b/annotated.html @@ -95,7 +95,9 @@
    Here are the classes, structs, unions and interfaces with brief descriptions:
    diff --git a/annotated_dup.js b/annotated_dup.js index a876583..02ab237 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -1,4 +1,6 @@ var annotated_dup = [ + [ "Display", "structDisplay.html", null ], + [ "ProtocolMessage", "structProtocolMessage.html", null ], [ "SerialProtocol", "classSerialProtocol.html", null ] ]; \ No newline at end of file diff --git a/classes.html b/classes.html index 995e666..1bb1612 100644 --- a/classes.html +++ b/classes.html @@ -93,9 +93,15 @@
    Class Index
  • - +
    D | P | S
    diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html index 28c7dd3..a0acf82 100644 --- a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html @@ -96,6 +96,9 @@ + + +

    Files

     CristalLiq-serial.ino
     O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer.
     
     frame.h
     
    diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.js b/dir_64032a4eeedb86ab5d4dd10c6c32e421.js index caf43f7..ceae897 100644 --- a/dir_64032a4eeedb86ab5d4dd10c6c32e421.js +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.js @@ -1,4 +1,5 @@ var dir_64032a4eeedb86ab5d4dd10c6c32e421 = [ + [ "CristalLiq-serial.ino", "CristalLiq-serial_8ino.html", "CristalLiq-serial_8ino" ], [ "frame.h", "frame_8h_source.html", null ] ]; \ No newline at end of file diff --git a/files.html b/files.html index 43c09e3..ac1cbe5 100644 --- a/files.html +++ b/files.html @@ -96,7 +96,8 @@
    Here is a list of all documented files with brief descriptions:
    [detail level 12]
    - + +
      CristalLiq-serial
     frame.h
     CristalLiq-serial.inoO Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer
     frame.h
    diff --git a/navtreedata.js b/navtreedata.js index 22a8576..d011258 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -37,7 +37,7 @@ var NAVTREE = var NAVTREEINDEX = [ -"annotated.html" +"CristalLiq-serial_8ino.html" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/navtreeindex0.js b/navtreeindex0.js index e59d43f..1feb565 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,11 +1,14 @@ var NAVTREEINDEX0 = { +"CristalLiq-serial_8ino.html":[1,0,0,0], "annotated.html":[0,0], -"classSerialProtocol.html":[0,0,0], +"classSerialProtocol.html":[0,0,2], "classes.html":[0,1], "dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[1,0,0], "files.html":[1,0], -"frame_8h_source.html":[1,0,0,0], +"frame_8h_source.html":[1,0,0,1], "index.html":[], -"pages.html":[] +"pages.html":[], +"structDisplay.html":[0,0,0], +"structProtocolMessage.html":[0,0,1] }; diff --git a/search/all_0.js b/search/all_0.js index bbef636..f2e92e0 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] + ['cristalliq_2dserial_2eino_0',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..04363a1 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['display_0',['Display',['../structDisplay.html',1,'']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..cc50fcc --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..bbef636 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js index bbef636..04363a1 100644 --- a/search/classes_0.js +++ b/search/classes_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] + ['display_0',['Display',['../structDisplay.html',1,'']]] ]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..cc50fcc --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..bbef636 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] +]; diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..f2e92e0 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cristalliq_2dserial_2eino_0',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index d9b3123..da9e94f 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,18 +1,21 @@ var indexSectionsWithContent = { - 0: "s", - 1: "s" + 0: "cdps", + 1: "dps", + 2: "c" }; var indexSectionNames = { 0: "all", - 1: "classes" + 1: "classes", + 2: "files" }; var indexSectionLabels = { 0: "All", - 1: "Classes" + 1: "Classes", + 2: "Files" }; diff --git a/structDisplay-members.html b/structDisplay-members.html new file mode 100644 index 0000000..4e0e92d --- /dev/null +++ b/structDisplay-members.html @@ -0,0 +1,116 @@ + + + + + + + +ModuloArduino: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Display Member List
    +
    +
    + +

    This is the complete list of members for Display, including all inherited members.

    + + + + + + + + + +
    defaultMessage (defined in Display)Display
    defaultMessageSize (defined in Display)Display
    keepAtZeroPosition (defined in Display)Display
    message (defined in Display)Display
    messageSize (defined in Display)Display
    startPosition (defined in Display)Display
    toPrint (defined in Display)Display
    TTL (defined in Display)Display
    +
    + + + + diff --git a/structDisplay.html b/structDisplay.html new file mode 100644 index 0000000..ee0cf8f --- /dev/null +++ b/structDisplay.html @@ -0,0 +1,140 @@ + + + + + + + +ModuloArduino: Display Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Display Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +char message [MAX_STRING+1]
     
    +char defaultMessage [MAX_STRING+1]
     
    +char toPrint [COL+1]
     
    +int messageSize
     
    +int defaultMessageSize
     
    +int startPosition
     
    +byte keepAtZeroPosition
     
    +unsigned long TTL
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structProtocolMessage-members.html b/structProtocolMessage-members.html new file mode 100644 index 0000000..5cb6cd6 --- /dev/null +++ b/structProtocolMessage-members.html @@ -0,0 +1,111 @@ + + + + + + + +ModuloArduino: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ProtocolMessage Member List
    +
    +
    + +

    This is the complete list of members for ProtocolMessage, including all inherited members.

    + + + + +
    code (defined in ProtocolMessage)ProtocolMessage
    message (defined in ProtocolMessage)ProtocolMessage
    TTL (defined in ProtocolMessage)ProtocolMessage
    +
    + + + + diff --git a/structProtocolMessage.html b/structProtocolMessage.html new file mode 100644 index 0000000..ac6ee47 --- /dev/null +++ b/structProtocolMessage.html @@ -0,0 +1,125 @@ + + + + + + + +ModuloArduino: ProtocolMessage Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ProtocolMessage Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +int code
     
    +int TTL
     
    +char message [MAX_STRING+1]
     
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + From 5bd3a16f78f0a408d7315e9a4e3c842543373b39 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 00:40:47 +0000 Subject: [PATCH 03/29] deploy: e44511e03fbc73c4aa0ca9677ef5c1d62670ade7 --- index.html | 34 +++++++++++++++++++++++++++++++--- index.js | 8 ++++++++ navtreedata.js | 1 + navtreeindex0.js | 24 +++++++++++++++--------- search/all_0.js | 3 ++- search/all_1.js | 3 ++- search/all_2.js | 3 ++- search/all_3.js | 2 +- search/all_4.js | 4 ++++ search/all_5.js | 4 ++++ search/all_6.js | 4 ++++ search/all_7.js | 4 ++++ search/all_8.js | 4 ++++ search/pages_0.js | 4 ++++ search/pages_1.js | 4 ++++ search/pages_2.js | 4 ++++ search/searchdata.js | 11 +++++++---- 17 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 index.js create mode 100644 search/all_4.js create mode 100644 search/all_5.js create mode 100644 search/all_6.js create mode 100644 search/all_7.js create mode 100644 search/all_8.js create mode 100644 search/pages_0.js create mode 100644 search/pages_1.js create mode 100644 search/pages_2.js diff --git a/index.html b/index.html index a526c8a..5f18d5c 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ -ModuloArduino: Main Page +ModuloArduino: Módulo Arduino - CristalLiq @@ -89,10 +89,38 @@ -
    -
    ModuloArduino Documentation
    +
    +
    Módulo Arduino - CristalLiq
    +

    +Introdução

    +

    Este projeto implementa a comunicação entre o display de cristal líquido e o Arduino via porta serial, utilizando a classe Frame para estruturar mensagens.

    +

    +Funcionalidades

    +
      +
    • Exibição de mensagens em display LCD 4 linhas.
    • +
    • Emissão de sinais sonoros via buzzer.
    • +
    • Recepção de comandos da TV-Box através de protocolo serial.
    • +
    +

    +Arquitetura

    +

    O sistema é dividido em:

    +

    +Uso

    +
      +
    1. Carregue o código no Arduino Nano.
    2. +
    3. Conecte o display LCD e o buzzer conforme o diagrama de hardware.
    4. +
    5. Estabeleça a comunicação serial via USB com a TV-Box.
    6. +
    +

    +Diagrama

    +

    Arquitetura do Módulo

    +
    diff --git a/index.js b/index.js new file mode 100644 index 0000000..1cd660c --- /dev/null +++ b/index.js @@ -0,0 +1,8 @@ +var index = +[ + [ "Introdução", "index.html#intro_sec", null ], + [ "Funcionalidades", "index.html#features_sec", null ], + [ "Arquitetura", "index.html#arch_sec", null ], + [ "Uso", "index.html#usage_sec", null ], + [ "Diagrama", "index.html#img_sec", null ] +]; \ No newline at end of file diff --git a/navtreedata.js b/navtreedata.js index d011258..2b04ddd 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -25,6 +25,7 @@ var NAVTREE = [ [ "ModuloArduino", "index.html", [ + [ "Módulo Arduino - CristalLiq", "index.html", "index" ], [ "Classes", "annotated.html", [ [ "Class List", "annotated.html", "annotated_dup" ], [ "Class Index", "classes.html", null ] diff --git a/navtreeindex0.js b/navtreeindex0.js index 1feb565..c69a91a 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,14 +1,20 @@ var NAVTREEINDEX0 = { -"CristalLiq-serial_8ino.html":[1,0,0,0], -"annotated.html":[0,0], -"classSerialProtocol.html":[0,0,2], -"classes.html":[0,1], -"dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[1,0,0], -"files.html":[1,0], -"frame_8h_source.html":[1,0,0,1], +"CristalLiq-serial_8ino.html":[2,0,0,0], +"annotated.html":[1,0], +"classSerialProtocol.html":[1,0,2], +"classes.html":[1,1], +"dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[2,0,0], +"files.html":[2,0], +"frame_8h_source.html":[2,0,0,1], +"index.html":[0], "index.html":[], +"index.html#arch_sec":[0,2], +"index.html#features_sec":[0,1], +"index.html#img_sec":[0,4], +"index.html#intro_sec":[0,0], +"index.html#usage_sec":[0,3], "pages.html":[], -"structDisplay.html":[0,0,0], -"structProtocolMessage.html":[0,0,1] +"structDisplay.html":[1,0,0], +"structProtocolMessage.html":[1,0,1] }; diff --git a/search/all_0.js b/search/all_0.js index f2e92e0..33a6e1f 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,4 +1,5 @@ var searchData= [ - ['cristalliq_2dserial_2eino_0',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] + ['arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['arquitetura_1',['Arquitetura',['../index.html#arch_sec',1,'']]] ]; diff --git a/search/all_1.js b/search/all_1.js index 04363a1..e33f0ae 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['display_0',['Display',['../structDisplay.html',1,'']]] + ['cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['cristalliq_2dserial_2eino_1',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_2.js b/search/all_2.js index cc50fcc..e7c62af 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,4 +1,5 @@ var searchData= [ - ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]] + ['diagrama_0',['Diagrama',['../index.html#img_sec',1,'']]], + ['display_1',['Display',['../structDisplay.html',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index bbef636..33e1b1f 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] + ['funcionalidades_0',['Funcionalidades',['../index.html#features_sec',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..b244952 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..9eb2294 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['módulo_20arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..cc50fcc --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..bbef636 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..e4bf29c --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] +]; diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..ca6bdf4 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] +]; diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..e211994 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] +]; diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 0000000..9eb2294 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['módulo_20arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index da9e94f..24967e2 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,21 +1,24 @@ var indexSectionsWithContent = { - 0: "cdps", + 0: "acdfimpsu", 1: "dps", - 2: "c" + 2: "c", + 3: "acm" }; var indexSectionNames = { 0: "all", 1: "classes", - 2: "files" + 2: "files", + 3: "pages" }; var indexSectionLabels = { 0: "All", 1: "Classes", - 2: "Files" + 2: "Files", + 3: "Pages" }; From 0af7525371a68ebcf8535828367541d61f3b05b2 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 00:55:29 +0000 Subject: [PATCH 04/29] deploy: de90701d9ff6f57a561a98ce6ab2a535506e113c --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 5f18d5c..ef5d64b 100644 --- a/index.html +++ b/index.html @@ -107,7 +107,7 @@

    Arquitetura

    O sistema é dividido em:

    From 647ad78f0588e7e7f92b9a17239c0cf4f1e647e7 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 23:08:18 +0000 Subject: [PATCH 05/29] deploy: 8be419dd6a30fae4546e6299ee906ea826cafd1b --- CristalLiq-serial_8ino.html | 6 +++++- MaquinaEstadoProtocolo.png | Bin 0 -> 30971 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 MaquinaEstadoProtocolo.png diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index dd4fa8a..8500201 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -208,7 +208,11 @@

    Detailed Description

    O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer.

    -

    O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '> e que aceitam caracteres de escape para <, > e \. A semântica das mensagens é específica para a aplicação IFSPresente. No IFSP podem há seis tipos de mensagens.

      +
      + +
      +Máquina de Estados
      +

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '> e que aceitam caracteres de escape para <, > e \. A semântica das mensagens é específica para a aplicação IFSPresente. No IFSP podem há seis tipos de mensagens.

      • <100,0,0> --> PING
      • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
        diff --git a/MaquinaEstadoProtocolo.png b/MaquinaEstadoProtocolo.png new file mode 100644 index 0000000000000000000000000000000000000000..4b6d30b7e34291126dc8f628df373c4ad89a8e4c GIT binary patch literal 30971 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�BoQLbsrT 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 N;=(fEQXw7R{{v3NeQ5vy literal 0 HcmV?d00001 From 003a002f83fc810c1130fe66862e8fee083134f9 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 23:51:00 +0000 Subject: [PATCH 06/29] deploy: a572822d8865229ce59e023eb1dfbf65dbae0f63 --- CristalLiq-serial_8ino.html | 6 +++--- CristalLiq-serial_8ino__incl.map | 2 +- CristalLiq-serial_8ino__incl.md5 | 2 +- CristalLiq-serial_8ino__incl.svg | 2 +- CristalLiq-serial_8ino__incl_org.svg | 2 +- dir_64032a4eeedb86ab5d4dd10c6c32e421.html | 2 +- files.html | 2 +- index.html | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 8500201..83ee2e5 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -99,7 +99,7 @@
    -

    O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer. +

    O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer. More...

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    @@ -207,12 +207,12 @@  

    Detailed Description

    -

    O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer.

    +

    O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer.

    Máquina de Estados
    -

    O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '> e que aceitam caracteres de escape para <, > e \. A semântica das mensagens é específica para a aplicação IFSPresente. No IFSP podem há seis tipos de mensagens.

      +

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

      • <100,0,0> --> PING
      • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
        diff --git a/CristalLiq-serial_8ino__incl.map b/CristalLiq-serial_8ino__incl.map index f99e433..7dd67e5 100644 --- a/CristalLiq-serial_8ino__incl.map +++ b/CristalLiq-serial_8ino__incl.map @@ -1,5 +1,5 @@ - + diff --git a/CristalLiq-serial_8ino__incl.md5 b/CristalLiq-serial_8ino__incl.md5 index c438d1d..c009bd3 100644 --- a/CristalLiq-serial_8ino__incl.md5 +++ b/CristalLiq-serial_8ino__incl.md5 @@ -1 +1 @@ -5512761b0428ac8af1917bb32cedac1c \ No newline at end of file +f840db4e82b24b47805e3152ed3ed86c \ No newline at end of file diff --git a/CristalLiq-serial_8ino__incl.svg b/CristalLiq-serial_8ino__incl.svg index 92668fe..4cb292f 100644 --- a/CristalLiq-serial_8ino__incl.svg +++ b/CristalLiq-serial_8ino__incl.svg @@ -21,7 +21,7 @@ Node1 - + CristalLiq-serial/Cristal Liq-serial.ino diff --git a/CristalLiq-serial_8ino__incl_org.svg b/CristalLiq-serial_8ino__incl_org.svg index 8a7af82..459c2fd 100644 --- a/CristalLiq-serial_8ino__incl_org.svg +++ b/CristalLiq-serial_8ino__incl_org.svg @@ -11,7 +11,7 @@ Node1 - + CristalLiq-serial/Cristal Liq-serial.ino diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html index a0acf82..3d99979 100644 --- a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html @@ -97,7 +97,7 @@

        Files

         CristalLiq-serial.ino - O Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer.
        + O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer.
           frame.h   diff --git a/files.html b/files.html index ac1cbe5..0d4733c 100644 --- a/files.html +++ b/files.html @@ -96,7 +96,7 @@
        Here is a list of all documented files with brief descriptions:
        [detail level 12]
        - +
          CristalLiq-serial
         CristalLiq-serial.inoO Arduino Nano cuida da exibição no Display de quatro linhas e do buzzer
         CristalLiq-serial.inoO Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer
         frame.h
        diff --git a/index.html b/index.html index ef5d64b..83f9542 100644 --- a/index.html +++ b/index.html @@ -106,7 +106,7 @@

        Arquitetura

        O sistema é dividido em:

        From 53ea5ef05c888b4651fe55d61594a94caa999fef Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Fri, 19 Sep 2025 23:57:24 +0000 Subject: [PATCH 07/29] deploy: 8100b731686f924be0b0783276315e502a346e4a --- CristalLiq-serial_8ino.html | 6 +----- index.html | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 83ee2e5..1e6aedb 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -208,11 +208,7 @@

        Detailed Description

        O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer.

        -
        - -
        -Máquina de Estados
        -

        O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

          +

          O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

          • <100,0,0> --> PING
          • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
            diff --git a/index.html b/index.html index 83f9542..7482520 100644 --- a/index.html +++ b/index.html @@ -119,7 +119,7 @@

            Diagrama

            -

            Arquitetura do Módulo

            +

            !

    From d66ef68adde5ef8982e2281ae14f6a6291a32321 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sat, 20 Sep 2025 00:05:40 +0000 Subject: [PATCH 08/29] deploy: 75d4dd00ca0667821c5d21ebddc9baee0a104efa --- index.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index 7482520..d2eeec6 100644 --- a/index.html +++ b/index.html @@ -95,13 +95,13 @@

    Introdução

    -

    Este projeto implementa a comunicação entre o display de cristal líquido e o Arduino via porta serial, utilizando a classe Frame para estruturar mensagens.

    +

    Este módulo implementa a comunicação entre o display de cristal líquido e o Arduino via porta serial sobre USB, utilizando a classe SerialProtocol para cuidar da transmissão dos quadros.

    Funcionalidades

      -
    • Exibição de mensagens em display LCD 4 linhas.
    • -
    • Emissão de sinais sonoros via buzzer.
    • -
    • Recepção de comandos da TV-Box através de protocolo serial.
    • +
    • Exibição de mensagens em display LCD de 4 linhas.
    • +
    • Emissão de sinais sonoros via buzzer.
    • +
    • Recepção de comandos da TV-Box por meio de protocolo serial sobre USB.

    Arquitetura

    @@ -113,9 +113,8 @@

    Uso

      -
    1. Carregue o código no Arduino Nano.
    2. -
    3. Conecte o display LCD e o buzzer conforme o diagrama de hardware.
    4. -
    5. Estabeleça a comunicação serial via USB com a TV-Box.
    6. +
    7. Carregue o código no Arduino Nano com o Arduino IDE.
    8. +
    9. Conecte o display LCD de 4 linhas e o buzzer conforme o diagrama de hardware.

    Diagrama

    From 0ec64dd028183c646a257d0407d85f4c4e1800cd Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sat, 20 Sep 2025 00:51:34 +0000 Subject: [PATCH 09/29] deploy: 4905c8a429f81555fd285fc1ad46ff248e64722d --- index.html | 4 ++-- index.js | 2 +- search/all_2.js | 5 +++-- search/all_3.js | 2 +- search/all_4.js | 2 +- search/all_5.js | 2 +- search/all_6.js | 3 ++- search/all_7.js | 3 ++- search/all_8.js | 2 +- search/all_9.js | 4 ++++ search/searchdata.js | 2 +- 11 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 search/all_9.js diff --git a/index.html b/index.html index d2eeec6..ee7c37b 100644 --- a/index.html +++ b/index.html @@ -114,10 +114,10 @@

    Uso

    1. Carregue o código no Arduino Nano com o Arduino IDE.
    2. -
    3. Conecte o display LCD de 4 linhas e o buzzer conforme o diagrama de hardware.
    4. +
    5. Conecte o display LCD de 4 linhas e o buzzer.

    -Diagrama

    +Máquina de Estado do protocolo

    !

    diff --git a/index.js b/index.js index 1cd660c..2bec491 100644 --- a/index.js +++ b/index.js @@ -4,5 +4,5 @@ var index = [ "Funcionalidades", "index.html#features_sec", null ], [ "Arquitetura", "index.html#arch_sec", null ], [ "Uso", "index.html#usage_sec", null ], - [ "Diagrama", "index.html#img_sec", null ] + [ "Máquina de Estado do protocolo", "index.html#img_sec", null ] ]; \ No newline at end of file diff --git a/search/all_2.js b/search/all_2.js index e7c62af..fedaba7 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,5 +1,6 @@ var searchData= [ - ['diagrama_0',['Diagrama',['../index.html#img_sec',1,'']]], - ['display_1',['Display',['../structDisplay.html',1,'']]] + ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['display_1',['Display',['../structDisplay.html',1,'']]], + ['do_20protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 33e1b1f..b89442e 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['funcionalidades_0',['Funcionalidades',['../index.html#features_sec',1,'']]] + ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js index b244952..33e1b1f 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] + ['funcionalidades_0',['Funcionalidades',['../index.html#features_sec',1,'']]] ]; diff --git a/search/all_5.js b/search/all_5.js index 9eb2294..b244952 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['módulo_20arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] ]; diff --git a/search/all_6.js b/search/all_6.js index cc50fcc..da8d46b 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,4 +1,5 @@ var searchData= [ - ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]] + ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] ]; diff --git a/search/all_7.js b/search/all_7.js index bbef636..5bec702 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,4 +1,5 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] + ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], + ['protocolo_1',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_8.js b/search/all_8.js index e4bf29c..bbef636 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] ]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..e4bf29c --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index 24967e2..300c6d1 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,6 +1,6 @@ var indexSectionsWithContent = { - 0: "acdfimpsu", + 0: "acdefimpsu", 1: "dps", 2: "c", 3: "acm" From 30070f154c17f009b9cbb78c4ef53b1684bc3694 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sat, 20 Sep 2025 01:03:20 +0000 Subject: [PATCH 10/29] deploy: 1f49cd0256da812f8bb0b65845909ebb6ffa7732 --- frame_8h_source.html | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/frame_8h_source.html b/frame_8h_source.html index 1470243..c6d78ab 100644 --- a/frame_8h_source.html +++ b/frame_8h_source.html @@ -107,28 +107,24 @@
    7
    8enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
    9
    -
    10//extern byte machState;
    -
    11//extern char receivedChars[];
    -
    12//void receiveFrame();
    -
    13
    -
    - -
    15 public:
    -
    16 byte machState;
    -
    17 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
    -
    18 char sendChars[MAX_PROTOCOL_MESSAGE+1];
    -
    19
    - -
    21 virtual ~SerialProtocol();
    -
    22 void receiveFrame();
    -
    23 void sendFrame(char* message);
    -
    24 void removeAccentMarker(char* str);
    -
    25 void setBaudRate(int baudRate);
    -
    26};
    +
    + +
    11 public:
    +
    12 byte machState;
    +
    13 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
    +
    14 char sendChars[MAX_PROTOCOL_MESSAGE+1];
    +
    15
    + +
    17 virtual ~SerialProtocol();
    +
    18 void receiveFrame();
    +
    19 void sendFrame(char* message);
    +
    20 void removeAccentMarker(char* str);
    +
    21 void setBaudRate(int baudRate);
    +
    22};
    -
    27
    -
    28#endif // FRAME_H
    -
    Definition frame.h:14
    +
    23
    +
    24#endif // FRAME_H
    +
    Definition frame.h:10
    From 079ecdc4edbce934911452655f49eb50a1bc6995 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sat, 20 Sep 2025 23:39:52 +0000 Subject: [PATCH 11/29] deploy: ea49c6e9cfbc99a413ac4083ecbf156aaec4fea8 --- CristalLiq-serial_8ino.html | 19 +++++++++++++------ CristalLiq-serial_8ino__incl.map | 2 +- CristalLiq-serial_8ino__incl.md5 | 2 +- CristalLiq-serial_8ino__incl.svg | 2 +- CristalLiq-serial_8ino__incl_org.svg | 2 +- dir_64032a4eeedb86ab5d4dd10c6c32e421.html | 2 +- files.html | 2 +- index.html | 13 +++++++------ 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 1e6aedb..6c2a27a 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -99,7 +99,7 @@
    -

    O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer. +

    O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC. More...

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    @@ -140,6 +140,12 @@ #define FAIL   601   + +#define SETTIME   700 +  + +#define GETTIME   701 +  #define BUZZER   2   @@ -207,8 +213,8 @@  

    Detailed Description

    -

    O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer.

    -

    O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

      +

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      +

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

      • <100,0,0> --> PING
      • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
        @@ -220,10 +226,11 @@
      • <500,TEXTO,TIEMOUT> --> ATTENDEE (Linha 3, aponta participante registrado
      • <600,0,0> --> SUCCESS (Beep de sucesso no registro)
      • -
      • <601,0,0> --> FAIL (Beep de falha no registro)
        -
      • +
      • <601,0,0> --> FAIL (Beep de falha no registro)
      • +
      • <700,HH:MM:SS,0> --> SETTIME (Define a hora do RTC)
      • +
      • <701,0,0> --> GETTIME (Recebe a hora do RTC)
        + Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.
      -

      Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

      Variable Documentation

      ◆ dispArray

      diff --git a/CristalLiq-serial_8ino__incl.map b/CristalLiq-serial_8ino__incl.map index 7dd67e5..a5f70db 100644 --- a/CristalLiq-serial_8ino__incl.map +++ b/CristalLiq-serial_8ino__incl.map @@ -1,5 +1,5 @@ - + diff --git a/CristalLiq-serial_8ino__incl.md5 b/CristalLiq-serial_8ino__incl.md5 index c009bd3..cdb92f1 100644 --- a/CristalLiq-serial_8ino__incl.md5 +++ b/CristalLiq-serial_8ino__incl.md5 @@ -1 +1 @@ -f840db4e82b24b47805e3152ed3ed86c \ No newline at end of file +8c620018c1b952aaf192a48ea50fc59c \ No newline at end of file diff --git a/CristalLiq-serial_8ino__incl.svg b/CristalLiq-serial_8ino__incl.svg index 4cb292f..8385bcb 100644 --- a/CristalLiq-serial_8ino__incl.svg +++ b/CristalLiq-serial_8ino__incl.svg @@ -21,7 +21,7 @@ Node1 - + CristalLiq-serial/Cristal Liq-serial.ino diff --git a/CristalLiq-serial_8ino__incl_org.svg b/CristalLiq-serial_8ino__incl_org.svg index 459c2fd..36aa22c 100644 --- a/CristalLiq-serial_8ino__incl_org.svg +++ b/CristalLiq-serial_8ino__incl_org.svg @@ -11,7 +11,7 @@ Node1 - + CristalLiq-serial/Cristal Liq-serial.ino diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html index 3d99979..61c6d23 100644 --- a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html @@ -97,7 +97,7 @@

      Files

       CristalLiq-serial.ino - O Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer.
      + O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.
         frame.h   diff --git a/files.html b/files.html index 0d4733c..afc7e0a 100644 --- a/files.html +++ b/files.html @@ -96,7 +96,7 @@
      Here is a list of all documented files with brief descriptions:
      [detail level 12]
      - +
        CristalLiq-serial
       CristalLiq-serial.inoO Arduino Nano gerencia tanto a exibição no Display de quatro linhas quanto o buzzer
       CristalLiq-serial.inoO Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC
       frame.h
      diff --git a/index.html b/index.html index ee7c37b..f66e8a0 100644 --- a/index.html +++ b/index.html @@ -99,22 +99,23 @@

      Funcionalidades

        -
      • Exibição de mensagens em display LCD de 4 linhas.
      • -
      • Emissão de sinais sonoros via buzzer.
      • Recepção de comandos da TV-Box por meio de protocolo serial sobre USB.
      • +
      • Exibição das mensagens no display LCD de 4 linhas.
      • +
      • Emissão de sinais sonoros via buzzer.
      • +
      • Ajuste e leitura do RTC.

      Arquitetura

      O sistema é dividido em:

      Uso

        -
      1. Carregue o código no Arduino Nano com o Arduino IDE.
      2. -
      3. Conecte o display LCD de 4 linhas e o buzzer.
      4. +
      5. Carregar o código no Arduino Nano com o Arduino IDE.
      6. +
      7. Conectar o display LCD de 4 linhas, o buzzer e o RTC.

      Máquina de Estado do protocolo

      From dbfea413dca59091b6b2c1da9644ffff6c6ce0b2 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sat, 20 Sep 2025 23:53:38 +0000 Subject: [PATCH 12/29] deploy: 868948b1e6a973a5a1842051eaa4328442776499 --- CristalLiq-serial_8ino.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 6c2a27a..37f789f 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -215,20 +215,20 @@

      Detailed Description

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        -
      • <100,0,0> --> PING
        +
      • <100,0,0> &rarr PING
      • -
      • <200,TEXTO,TIMEOUT> --> TIME (Linha 0, para sala, data e hora)
        +
      • <200,TEXTO,TIMEOUT> &rarr TIME (Linha 0, para sala, data e hora)
      • -
      • <300,TEXTO,TIMEOUT> --> LECTURE_NAME (Linha 1, para nome da palestra)
        +
      • <300,TEXTO,TIMEOUT> &rarr LECTURE_NAME (Linha 1, para nome da palestra)
      • -
      • <400,TEXTO,TIMEOUT> --> SPEAKER (Linha 2, para nome do palestrante)
        +
      • <400,TEXTO,TIMEOUT> &rarr SPEAKER (Linha 2, para nome do palestrante)
      • -
      • <500,TEXTO,TIEMOUT> --> ATTENDEE (Linha 3, aponta participante registrado
      • -
      • <600,0,0> --> SUCCESS (Beep de sucesso no registro)
        +
      • <500,TEXTO,TIEMOUT> &rarr ATTENDEE (Linha 3, aponta participante registrado
      • +
      • <600,0,0> &rarr SUCCESS (Beep de sucesso no registro)
      • -
      • <601,0,0> --> FAIL (Beep de falha no registro)
      • -
      • <700,HH:MM:SS,0> --> SETTIME (Define a hora do RTC)
      • -
      • <701,0,0> --> GETTIME (Recebe a hora do RTC)
        +
      • <601,0,0> &rarr FAIL (Beep de falha no registro)
      • +
      • <700,HH:MM:SS,0> &rarr SETTIME (Define a hora do RTC)
      • +
      • <701,0,0> &rarr GETTIME (Recebe a hora do RTC)
        Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

      Variable Documentation

      From 3f1e76e060a2527783dfb832d9d525400db4659c Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 00:11:37 +0000 Subject: [PATCH 13/29] deploy: b5c5b38d6d966ea89b9f882681f980a05145ae02 --- CristalLiq-serial_8ino.html | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 37f789f..5255510 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -215,22 +215,23 @@

      Detailed Description

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        -
      • <100,0,0> &rarr PING
        +
      • <100,0,0> &rarr PING
      • -
      • <200,TEXTO,TIMEOUT> &rarr TIME (Linha 0, para sala, data e hora)
        +
      • <200,TEXTO,TIMEOUT> &rarr TIME (Linha 0, para sala, data e hora)
      • -
      • <300,TEXTO,TIMEOUT> &rarr LECTURE_NAME (Linha 1, para nome da palestra)
        +
      • <300,TEXTO,TIMEOUT> &rarr LECTURE_NAME (Linha 1, para nome da palestra)
      • -
      • <400,TEXTO,TIMEOUT> &rarr SPEAKER (Linha 2, para nome do palestrante)
        +
      • <400,TEXTO,TIMEOUT> &rarr SPEAKER (Linha 2, para nome do palestrante)
      • -
      • <500,TEXTO,TIEMOUT> &rarr ATTENDEE (Linha 3, aponta participante registrado
      • -
      • <600,0,0> &rarr SUCCESS (Beep de sucesso no registro)
        +
      • <500,TEXTO,TIEMOUT> &rarr ATTENDEE (Linha 3, aponta participante registrado
      • +
      • <600,0,0> &rarr SUCCESS (Beep de sucesso no registro)
        +
      • +
      • <601,0,0> &rarr FAIL (Beep de falha no registro)
      • +
      • <700,HH:MM:SS,0> &rarr SETTIME (Define a hora do RTC)
      • +
      • <701,0,0> &rarr GETTIME (Recebe a hora do RTC)
      • -
      • <601,0,0> &rarr FAIL (Beep de falha no registro)
      • -
      • <700,HH:MM:SS,0> &rarr SETTIME (Define a hora do RTC)
      • -
      • <701,0,0> &rarr GETTIME (Recebe a hora do RTC)
        - Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.
      +

      Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

      Variable Documentation

      ◆ dispArray

      From b5fed15697c9f64aacc88732abeed71290bdb93f Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 00:16:19 +0000 Subject: [PATCH 14/29] deploy: a06b8b1a55977139948bdcccf7abb3a230b5b35a --- CristalLiq-serial_8ino.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 5255510..91e5fb0 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -215,20 +215,20 @@

      Detailed Description

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        -
      • <100,0,0> &rarr PING
        +
      • <100,0,0> → PING
      • -
      • <200,TEXTO,TIMEOUT> &rarr TIME (Linha 0, para sala, data e hora)
        +
      • <200,TEXTO,TIMEOUT> &rar; TIME (Linha 0, para sala, data e hora)
      • -
      • <300,TEXTO,TIMEOUT> &rarr LECTURE_NAME (Linha 1, para nome da palestra)
        +
      • <300,TEXTO,TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
      • -
      • <400,TEXTO,TIMEOUT> &rarr SPEAKER (Linha 2, para nome do palestrante)
        +
      • <400,TEXTO,TIMEOUT> → SPEAKER (Linha 2, para nome do palestrante)
      • -
      • <500,TEXTO,TIEMOUT> &rarr ATTENDEE (Linha 3, aponta participante registrado
      • -
      • <600,0,0> &rarr SUCCESS (Beep de sucesso no registro)
        +
      • <500,TEXTO,TIEMOUT> → ATTENDEE (Linha 3, aponta participante registrado
      • +
      • <600,0,0> → SUCCESS (Beep de sucesso no registro)
      • -
      • <601,0,0> &rarr FAIL (Beep de falha no registro)
      • -
      • <700,HH:MM:SS,0> &rarr SETTIME (Define a hora do RTC)
      • -
      • <701,0,0> &rarr GETTIME (Recebe a hora do RTC)
        +
      • <601,0,0> → FAIL (Beep de falha no registro)
      • +
      • <700,HH:MM:SS,0> → SETTIME (Define a hora do RTC)
      • +
      • <701,0,0> → GETTIME (Recebe a hora do RTC)

      Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

      From 1ebf5fb8c76557f605266571c71ac747a4d1b512 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 00:20:24 +0000 Subject: [PATCH 15/29] deploy: 8425b606d16f328c0ac600f495791dc138095bed --- CristalLiq-serial_8ino.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 91e5fb0..81314c6 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -215,9 +215,9 @@

      Detailed Description

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        -
      • <100,0,0> → PING
        +
      • <100,0,0> → PING
      • -
      • <200,TEXTO,TIMEOUT> &rar; TIME (Linha 0, para sala, data e hora)
        +
      • <200,TEXTO,TIMEOUT> → TIME (Linha 0, para sala, data e hora)
      • <300,TEXTO,TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
      • From e0fc032e294d6c4b6bc61f0dd7878fb4bd859fc2 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 00:26:11 +0000 Subject: [PATCH 16/29] deploy: 54e9932857a0a684983cd26af312478161399d30 --- CristalLiq-serial_8ino.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 81314c6..0b7d08c 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -217,18 +217,18 @@

        O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        • <100,0,0> → PING
        • -
        • <200,TEXTO,TIMEOUT> → TIME (Linha 0, para sala, data e hora)
          +
        • <200,TEXTO,TIMEOUT> → TIME (Linha 0, para sala, data e hora)
        • -
        • <300,TEXTO,TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
          +
        • <300,TEXTO,TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
        • -
        • <400,TEXTO,TIMEOUT> → SPEAKER (Linha 2, para nome do palestrante)
          +
        • <400,TEXTO,TIMEOUT> → SPEAKER (Linha 2, para nome do palestrante)
        • -
        • <500,TEXTO,TIEMOUT> → ATTENDEE (Linha 3, aponta participante registrado
        • -
        • <600,0,0> → SUCCESS (Beep de sucesso no registro)
          +
        • <500,TEXTO,TIEMOUT> → ATTENDEE (Linha 3, aponta participante registrado
        • +
        • <600,0,0> → SUCCESS (Beep de sucesso no registro)
        • -
        • <601,0,0> → FAIL (Beep de falha no registro)
        • -
        • <700,HH:MM:SS,0> → SETTIME (Define a hora do RTC)
        • -
        • <701,0,0> → GETTIME (Recebe a hora do RTC)
          +
        • <601,0,0> → FAIL (Beep de falha no registro)
        • +
        • <700,HH:MM:SS,0> → SETTIME (Define a hora do RTC)
        • +
        • <701,0,0> → GETTIME (Recebe a hora do RTC)

        Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

        From d3f70686973ed4a6d84dfba87429fe9fd8002172 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 00:51:40 +0000 Subject: [PATCH 17/29] deploy: 243db8e7ca52a6dcfe1148c2a34fb2655bf0b5ef --- CristalLiq-serial_8ino.html | 187 ++++++++++++++++++++++++++++++------ CristalLiq-serial_8ino.js | 11 ++- globals.html | 113 ++++++++++++++++++++++ globals_defs.html | 113 ++++++++++++++++++++++ menudata.js | 5 +- navtreedata.js | 6 +- navtreeindex0.js | 13 ++- search/all_0.js | 3 +- search/all_4.js | 3 +- search/all_5.js | 2 +- search/all_6.js | 3 +- search/all_7.js | 3 +- search/all_8.js | 3 +- search/all_9.js | 4 +- search/all_a.js | 7 ++ search/all_b.js | 4 + search/all_c.js | 4 + search/defines_0.js | 4 + search/defines_1.js | 4 + search/defines_2.js | 4 + search/defines_3.js | 4 + search/defines_4.js | 4 + search/defines_5.js | 6 ++ search/defines_6.js | 4 + search/searchdata.js | 11 ++- 25 files changed, 480 insertions(+), 45 deletions(-) create mode 100644 globals.html create mode 100644 globals_defs.html create mode 100644 search/all_a.js create mode 100644 search/all_b.js create mode 100644 search/all_c.js create mode 100644 search/defines_0.js create mode 100644 search/defines_1.js create mode 100644 search/defines_2.js create mode 100644 search/defines_3.js create mode 100644 search/defines_4.js create mode 100644 search/defines_5.js create mode 100644 search/defines_6.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 0b7d08c..7ec3dca 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -119,33 +119,6 @@ - - - - - - - - - - - - - - - - - - @@ -170,6 +143,28 @@ + + + + + + + + + + + + + + + + + + + +

        Macros

        -#define PING   100
         
        -#define TIME   200
         
        -#define LECTURE_NAME   300
         
        -#define SPEAKER   400
         
        -#define ATTENDEE   500
         
        -#define SUCCESS   600
         
        -#define FAIL   601
         
        -#define SETTIME   700
         
        -#define GETTIME   701
         
        #define BUZZER   2
         
        #define KEEP_AT_LAST   1
         
        Códigos de Mensagens do Protocolo.

        Constantes usadas na comunicação serial com a TV-Box.

        +

        Cada constante representa um tipo de mensagem disparada pelo master (TV-Box).

        +
        #define PING   100
         
        #define TIME   200
         
        #define LECTURE_NAME   300
         
        #define SPEAKER   400
         
        #define ATTENDEE   500
         
        #define SUCCESS   600
         
        #define FAIL   601
         
        #define SETTIME   700
         
        #define GETTIME   701
         
        @@ -232,7 +227,143 @@

        Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

        -

        Variable Documentation

        +

        Macro Definition Documentation

        + +

        ◆ ATTENDEE

        + +
        +
        +

        Functions

        + + + +
        #define ATTENDEE   500
        +
      +

      Linha 3: estudante que aponta sua presença.

      + +
      +
      + +

      ◆ FAIL

      + +
      +
      + + + + +
      #define FAIL   601
      +
      +

      Beep de falha no registro, seja por leitor biométrico de digital ou por senha no teclado numérico. .

      + +
      +
      + +

      ◆ GETTIME

      + +
      +
      + + + + +
      #define GETTIME   701
      +
      +

      Comando para solicitar data/hora do RTC ligado ao Arduino.

      + +
      +
      + +

      ◆ LECTURE_NAME

      + +
      +
      + + + + +
      #define LECTURE_NAME   300
      +
      +

      Linha 1: nome da palestra.

      + +
      +
      + +

      ◆ PING

      + +
      +
      + + + + +
      #define PING   100
      +
      +

      Obtém o timestamp do uptime e a versão do firmware.

      + +
      +
      + +

      ◆ SETTIME

      + +
      +
      + + + + +
      #define SETTIME   700
      +
      +

      Comando para ajustar data/hora do RTC ligado ao Arduino.

      + +
      +
      + +

      ◆ SPEAKER

      + +
      +
      + + + + +
      #define SPEAKER   400
      +
      +

      Linha 2: nome do professor responsável pela aula em curso.

      + +
      +
      + +

      ◆ SUCCESS

      + +
      +
      + + + + +
      #define SUCCESS   600
      +
      +

      Beep de sucesso no registro, seja por leitor biométrico de digital ou por senha no teclado numérico.

      + +
      +
      + +

      ◆ TIME

      + +
      +
      + + + + +
      #define TIME   200
      +
      +

      Linha 0: sala, data e hora.

      + +
      +
      +

      Variable Documentation

      ◆ dispArray

      diff --git a/CristalLiq-serial_8ino.js b/CristalLiq-serial_8ino.js index fd88e09..6429bac 100644 --- a/CristalLiq-serial_8ino.js +++ b/CristalLiq-serial_8ino.js @@ -1,5 +1,14 @@ var CristalLiq_serial_8ino = [ [ "ProtocolMessage", "structProtocolMessage.html", null ], - [ "Display", "structDisplay.html", null ] + [ "Display", "structDisplay.html", null ], + [ "ATTENDEE", "CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f", null ], + [ "FAIL", "CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e", null ], + [ "GETTIME", "CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805", null ], + [ "LECTURE_NAME", "CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93", null ], + [ "PING", "CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d", null ], + [ "SETTIME", "CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a", null ], + [ "SPEAKER", "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26", null ], + [ "SUCCESS", "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58", null ], + [ "TIME", "CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276", null ] ]; \ No newline at end of file diff --git a/globals.html b/globals.html new file mode 100644 index 0000000..6ff2b76 --- /dev/null +++ b/globals.html @@ -0,0 +1,113 @@ + + + + + + + +ModuloArduino: File Members + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      ModuloArduino +
      +
      Módulo Arduino - IFSPresente
      +
      +
      + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      Here is a list of all documented file members with links to the documentation:
      +
      +
      + + + + diff --git a/globals_defs.html b/globals_defs.html new file mode 100644 index 0000000..c8e4f20 --- /dev/null +++ b/globals_defs.html @@ -0,0 +1,113 @@ + + + + + + + +ModuloArduino: File Members + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      ModuloArduino +
      +
      Módulo Arduino - IFSPresente
      +
      +
      + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      Here is a list of all documented macros with links to the documentation:
      +
      +
      + + + + diff --git a/menudata.js b/menudata.js index b7ed917..ae183cd 100644 --- a/menudata.js +++ b/menudata.js @@ -28,4 +28,7 @@ var menudata={children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}]}, {text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}]}]} +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/navtreedata.js b/navtreedata.js index 2b04ddd..54cdfce 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -31,7 +31,11 @@ var NAVTREE = [ "Class Index", "classes.html", null ] ] ], [ "Files", "files.html", [ - [ "File List", "files.html", "files_dup" ] + [ "File List", "files.html", "files_dup" ], + [ "File Members", "globals.html", [ + [ "All", "globals.html", null ], + [ "Macros", "globals_defs.html", null ] + ] ] ] ] ] ] ]; diff --git a/navtreeindex0.js b/navtreeindex0.js index c69a91a..21e7f87 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,14 +1,25 @@ var NAVTREEINDEX0 = { "CristalLiq-serial_8ino.html":[2,0,0,0], +"CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[2,0,0,0,10], +"CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[2,0,0,0,2], +"CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,7], +"CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,5], +"CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,6], +"CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,8], +"CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,9], +"CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805":[2,0,0,0,4], +"CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,3], "annotated.html":[1,0], "classSerialProtocol.html":[1,0,2], "classes.html":[1,1], "dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[2,0,0], "files.html":[2,0], "frame_8h_source.html":[2,0,0,1], -"index.html":[0], +"globals.html":[2,1,0], +"globals_defs.html":[2,1,1], "index.html":[], +"index.html":[0], "index.html#arch_sec":[0,2], "index.html#features_sec":[0,1], "index.html#img_sec":[0,4], diff --git a/search/all_0.js b/search/all_0.js index 33a6e1f..56affa0 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,5 +1,6 @@ var searchData= [ ['arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['arquitetura_1',['Arquitetura',['../index.html#arch_sec',1,'']]] + ['arquitetura_1',['Arquitetura',['../index.html#arch_sec',1,'']]], + ['attendee_2',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_4.js b/search/all_4.js index 33e1b1f..3d02f19 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,4 +1,5 @@ var searchData= [ - ['funcionalidades_0',['Funcionalidades',['../index.html#features_sec',1,'']]] + ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]], + ['funcionalidades_1',['Funcionalidades',['../index.html#features_sec',1,'']]] ]; diff --git a/search/all_5.js b/search/all_5.js index b244952..12306d5 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] + ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_6.js b/search/all_6.js index da8d46b..b244952 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,5 +1,4 @@ var searchData= [ - ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] ]; diff --git a/search/all_7.js b/search/all_7.js index 5bec702..7d593e2 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,5 +1,4 @@ var searchData= [ - ['protocolmessage_0',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], - ['protocolo_1',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_8.js b/search/all_8.js index bbef636..da8d46b 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,4 +1,5 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]] + ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] ]; diff --git a/search/all_9.js b/search/all_9.js index e4bf29c..2c9d0f4 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,4 +1,6 @@ var searchData= [ - ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] + ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], + ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], + ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..2ad0e3a --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], + ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['success_3',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..fe23f93 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..e4bf29c --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] +]; diff --git a/search/defines_0.js b/search/defines_0.js new file mode 100644 index 0000000..af177d0 --- /dev/null +++ b/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['attendee_0',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_1.js b/search/defines_1.js new file mode 100644 index 0000000..fc01b17 --- /dev/null +++ b/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_2.js b/search/defines_2.js new file mode 100644 index 0000000..12306d5 --- /dev/null +++ b/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_3.js b/search/defines_3.js new file mode 100644 index 0000000..7d593e2 --- /dev/null +++ b/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_4.js b/search/defines_4.js new file mode 100644 index 0000000..d47ca68 --- /dev/null +++ b/search/defines_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_5.js b/search/defines_5.js new file mode 100644 index 0000000..f44ea9f --- /dev/null +++ b/search/defines_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['settime_0',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['speaker_1',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['success_2',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_6.js b/search/defines_6.js new file mode 100644 index 0000000..fe23f93 --- /dev/null +++ b/search/defines_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index 300c6d1..74ffffe 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,9 +1,10 @@ var indexSectionsWithContent = { - 0: "acdefimpsu", + 0: "acdefgilmpstu", 1: "dps", 2: "c", - 3: "acm" + 3: "afglpst", + 4: "acm" }; var indexSectionNames = @@ -11,7 +12,8 @@ var indexSectionNames = 0: "all", 1: "classes", 2: "files", - 3: "pages" + 3: "defines", + 4: "pages" }; var indexSectionLabels = @@ -19,6 +21,7 @@ var indexSectionLabels = 0: "All", 1: "Classes", 2: "Files", - 3: "Pages" + 3: "Macros", + 4: "Pages" }; From 9c8f7763532bcdf21e74cfbb0f74fbf2e4d85cfb Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 01:23:17 +0000 Subject: [PATCH 18/29] deploy: 89314c5bdf8dd3bfba8af65eb6f855653ffd586e --- CristalLiq-serial_8ino.html | 222 +++++++++++++++++++++++++++--------- CristalLiq-serial_8ino.js | 8 ++ globals.html | 8 ++ globals_defs.html | 8 ++ navtreeindex0.js | 26 +++-- search/all_0.js | 7 +- search/all_1.js | 3 +- search/all_2.js | 6 +- search/all_3.js | 5 +- search/all_4.js | 3 +- search/all_5.js | 3 +- search/all_6.js | 2 +- search/all_7.js | 2 +- search/all_8.js | 4 +- search/all_9.js | 5 +- search/all_a.js | 6 +- search/all_b.js | 4 +- search/all_c.js | 2 +- search/all_d.js | 7 ++ search/all_e.js | 4 + search/all_f.js | 4 + search/defines_0.js | 3 +- search/defines_1.js | 2 +- search/defines_2.js | 2 +- search/defines_3.js | 2 +- search/defines_4.js | 2 +- search/defines_5.js | 4 +- search/defines_6.js | 3 +- search/defines_7.js | 5 + search/defines_8.js | 4 + search/defines_9.js | 4 + search/defines_a.js | 6 + search/defines_b.js | 4 + search/searchdata.js | 4 +- structDisplay.html | 2 +- 35 files changed, 284 insertions(+), 102 deletions(-) create mode 100644 search/all_d.js create mode 100644 search/all_e.js create mode 100644 search/all_f.js create mode 100644 search/defines_7.js create mode 100644 search/defines_8.js create mode 100644 search/defines_9.js create mode 100644 search/defines_a.js create mode 100644 search/defines_b.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 7ec3dca..88eca16 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -91,10 +91,7 @@
      CristalLiq-serial.ino File Reference
    @@ -119,30 +116,6 @@ - - - - - - - - - - - - - - - -

    Macros

    -#define BUZZER   2
     
    -#define COL   20
     
    -#define ROW   4
     
    -#define ADDRESS   0x27
     
    -#define DISPLAY_UPDATE_DELAY   500
     
    -#define LOOP_DELAY   10
     
    -#define KEEP_AT_ZERO   1
     
    -#define KEEP_AT_LAST   1
     
    Códigos de Mensagens do Protocolo.

    Constantes usadas na comunicação serial com a TV-Box.

    Cada constante representa um tipo de mensagem disparada pelo master (TV-Box).

    @@ -166,10 +139,45 @@
    #define GETTIME   701
     
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LiquidCrystal_I2C  @@ -186,26 +194,6 @@ -

    -Functions

    Macros de controle dos dispositivos.

    Constantes usadas para I2C e controles adicionais.

    +

    Essas constantes são relacionadas aos endereços I2C e demais ajustes sobre os dispositivos externos.

    +
    #define BUZZER   2
     
    #define COL   20
     
    #define ROW   4
     
    #define ADDRESS   0x27
     
    #define DISPLAY_UPDATE_DELAY   500
     
    #define LOOP_DELAY   10
     
    #define KEEP_AT_ZERO   1
     
    #define KEEP_AT_LAST   1
     
    +ProtocolMessage netMessage
     
    Display dispArray [ROW]
     
    +char strReply [80]
     
    +char auxStr [80]
     
    +unsigned long uptime
     
    +SerialProtocol usbProto
     
    -LiquidCrystal_I2C lcd (ADDRESS, COL, ROW)
    lcd (ADDRESS, COL, ROW)
     
    void copiaN (char dest[], int sizeDest, char origem[], int sizeOrigem, int start)
    void loop ()
     
    - - - - - - - - - - - - -

    -Variables

    -ProtocolMessage netMessage
     
    Display dispArray [ROW]
     
    -char strReply [80]
     
    -char auxStr [80]
     
    -unsigned long uptime
     
    -SerialProtocol usbProto
     

    Detailed Description

    O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

    @@ -228,6 +216,21 @@

    Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

    Macro Definition Documentation

    + +

    ◆ ADDRESS

    + +
    +
    + + + + +
    #define ADDRESS   0x27
    +
    +

    Serve para definir o endereço do display.

    + +
    +

    ◆ ATTENDEE

    @@ -241,6 +244,51 @@

    Linha 3: estudante que aponta sua presença.

    +

    +
    + +

    ◆ BUZZER

    + +
    +
    + + + + +
    #define BUZZER   2
    +
    +

    Pino digital ligado ao buzzer

    + +
    +
    + +

    ◆ COL

    + +
    +
    + + + + +
    #define COL   20
    +
    +

    Serve para definir o numero de colunas do display utilizado

    + +
    +
    + +

    ◆ DISPLAY_UPDATE_DELAY

    + +
    +
    + + + + +
    #define DISPLAY_UPDATE_DELAY   500
    +
    +

    Tempo em milissegundos em que um texto é exibido numa linha do display antes de sofrer scroll

    +
    @@ -271,6 +319,36 @@

    Comando para solicitar data/hora do RTC ligado ao Arduino.

    +

    + + +

    ◆ KEEP_AT_LAST

    + +
    +
    + + + + +
    #define KEEP_AT_LAST   1
    +
    +

    Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de reiniciar o scroll

    + +
    +
    + +

    ◆ KEEP_AT_ZERO

    + +
    +
    + + + + +
    #define KEEP_AT_ZERO   1
    +
    +

    Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de iniciar o scroll

    +
    @@ -286,6 +364,21 @@

    Linha 1: nome da palestra.

    + + +
    +

    ◆ LOOP_DELAY

    + +
    +
    + + + + +
    #define LOOP_DELAY   10
    +
    +

    Tempo em que o loop principal do código do Arduino dorme à espera de uma mensagem

    +
    @@ -301,6 +394,22 @@

    Obtém o timestamp do uptime e a versão do firmware.

    + + +
    +

    ◆ ROW

    + +
    +
    + + + + +
    #define ROW   4
    +
    +

    Serve para definir o numero de linhas do display utilizado
    +

    +
    @@ -371,16 +480,17 @@

    - +
    Display dispArray[ROW]Display dispArray[ROW]
    diff --git a/CristalLiq-serial_8ino.js b/CristalLiq-serial_8ino.js index 6429bac..19ccc38 100644 --- a/CristalLiq-serial_8ino.js +++ b/CristalLiq-serial_8ino.js @@ -2,11 +2,19 @@ var CristalLiq_serial_8ino = [ [ "ProtocolMessage", "structProtocolMessage.html", null ], [ "Display", "structDisplay.html", null ], + [ "ADDRESS", "CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2", null ], [ "ATTENDEE", "CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f", null ], + [ "BUZZER", "CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13", null ], + [ "COL", "CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663", null ], + [ "DISPLAY_UPDATE_DELAY", "CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef", null ], [ "FAIL", "CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e", null ], [ "GETTIME", "CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805", null ], + [ "KEEP_AT_LAST", "CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2", null ], + [ "KEEP_AT_ZERO", "CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174", null ], [ "LECTURE_NAME", "CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93", null ], + [ "LOOP_DELAY", "CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da", null ], [ "PING", "CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d", null ], + [ "ROW", "CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021", null ], [ "SETTIME", "CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a", null ], [ "SPEAKER", "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26", null ], [ "SUCCESS", "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58", null ], diff --git a/globals.html b/globals.html index 6ff2b76..0319ee7 100644 --- a/globals.html +++ b/globals.html @@ -91,11 +91,19 @@
    Here is a list of all documented file members with links to the documentation:
      +
    • ADDRESS : CristalLiq-serial.ino
    • ATTENDEE : CristalLiq-serial.ino
    • +
    • BUZZER : CristalLiq-serial.ino
    • +
    • COL : CristalLiq-serial.ino
    • +
    • DISPLAY_UPDATE_DELAY : CristalLiq-serial.ino
    • FAIL : CristalLiq-serial.ino
    • GETTIME : CristalLiq-serial.ino
    • +
    • KEEP_AT_LAST : CristalLiq-serial.ino
    • +
    • KEEP_AT_ZERO : CristalLiq-serial.ino
    • LECTURE_NAME : CristalLiq-serial.ino
    • +
    • LOOP_DELAY : CristalLiq-serial.ino
    • PING : CristalLiq-serial.ino
    • +
    • ROW : CristalLiq-serial.ino
    • SETTIME : CristalLiq-serial.ino
    • SPEAKER : CristalLiq-serial.ino
    • SUCCESS : CristalLiq-serial.ino
    • diff --git a/globals_defs.html b/globals_defs.html index c8e4f20..bdbff02 100644 --- a/globals_defs.html +++ b/globals_defs.html @@ -91,11 +91,19 @@
      Here is a list of all documented macros with links to the documentation:
        +
      • ADDRESS : CristalLiq-serial.ino
      • ATTENDEE : CristalLiq-serial.ino
      • +
      • BUZZER : CristalLiq-serial.ino
      • +
      • COL : CristalLiq-serial.ino
      • +
      • DISPLAY_UPDATE_DELAY : CristalLiq-serial.ino
      • FAIL : CristalLiq-serial.ino
      • GETTIME : CristalLiq-serial.ino
      • +
      • KEEP_AT_LAST : CristalLiq-serial.ino
      • +
      • KEEP_AT_ZERO : CristalLiq-serial.ino
      • LECTURE_NAME : CristalLiq-serial.ino
      • +
      • LOOP_DELAY : CristalLiq-serial.ino
      • PING : CristalLiq-serial.ino
      • +
      • ROW : CristalLiq-serial.ino
      • SETTIME : CristalLiq-serial.ino
      • SPEAKER : CristalLiq-serial.ino
      • SUCCESS : CristalLiq-serial.ino
      • diff --git a/navtreeindex0.js b/navtreeindex0.js index 21e7f87..183ff2c 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,15 +1,23 @@ var NAVTREEINDEX0 = { "CristalLiq-serial_8ino.html":[2,0,0,0], -"CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[2,0,0,0,10], -"CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[2,0,0,0,2], -"CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,7], -"CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,5], -"CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,6], -"CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,8], -"CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,9], -"CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805":[2,0,0,0,4], -"CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,3], +"CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[2,0,0,0,18], +"CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[2,0,0,0,3], +"CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2":[2,0,0,0,9], +"CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13":[2,0,0,0,4], +"CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,15], +"CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2":[2,0,0,0,2], +"CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,11], +"CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,13], +"CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da":[2,0,0,0,12], +"CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174":[2,0,0,0,10], +"CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,16], +"CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,17], +"CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663":[2,0,0,0,5], +"CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805":[2,0,0,0,8], +"CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef":[2,0,0,0,6], +"CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,7], +"CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021":[2,0,0,0,14], "annotated.html":[1,0], "classSerialProtocol.html":[1,0,2], "classes.html":[1,1], diff --git a/search/all_0.js b/search/all_0.js index 56affa0..69d36d3 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,6 +1,7 @@ var searchData= [ - ['arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['arquitetura_1',['Arquitetura',['../index.html#arch_sec',1,'']]], - ['attendee_2',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] + ['address_0',['ADDRESS',['../CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2',1,'CristalLiq-serial.ino']]], + ['arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['arquitetura_2',['Arquitetura',['../index.html#arch_sec',1,'']]], + ['attendee_3',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_1.js b/search/all_1.js index e33f0ae..4a0be80 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -1,5 +1,4 @@ var searchData= [ - ['cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['cristalliq_2dserial_2eino_1',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] + ['buzzer_0',['BUZZER',['../CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_2.js b/search/all_2.js index fedaba7..f27cb9e 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['display_1',['Display',['../structDisplay.html',1,'']]], - ['do_20protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['col_0',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]], + ['cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['cristalliq_2dserial_2eino_2',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index b89442e..75da6be 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,4 +1,7 @@ var searchData= [ - ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['display_1',['Display',['../structDisplay.html',1,'']]], + ['display_5fupdate_5fdelay_2',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], + ['do_20protocolo_3',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js index 3d02f19..b89442e 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,5 +1,4 @@ var searchData= [ - ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]], - ['funcionalidades_1',['Funcionalidades',['../index.html#features_sec',1,'']]] + ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_5.js b/search/all_5.js index 12306d5..3d02f19 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,4 +1,5 @@ var searchData= [ - ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] + ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]], + ['funcionalidades_1',['Funcionalidades',['../index.html#features_sec',1,'']]] ]; diff --git a/search/all_6.js b/search/all_6.js index b244952..12306d5 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] + ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_7.js b/search/all_7.js index 7d593e2..b244952 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]] + ['introdução_0',['Introdução',['../index.html#intro_sec',1,'']]] ]; diff --git a/search/all_8.js b/search/all_8.js index da8d46b..2415c17 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['keep_5fat_5flast_0',['KEEP_AT_LAST',['../CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2',1,'CristalLiq-serial.ino']]], + ['keep_5fat_5fzero_1',['KEEP_AT_ZERO',['../CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_9.js b/search/all_9.js index 2c9d0f4..68439c6 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,6 +1,5 @@ var searchData= [ - ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], - ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], - ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]], + ['loop_5fdelay_1',['LOOP_DELAY',['../CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_a.js b/search/all_a.js index 2ad0e3a..da8d46b 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,7 +1,5 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], - ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['success_3',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] ]; diff --git a/search/all_b.js b/search/all_b.js index fe23f93..2c9d0f4 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,4 +1,6 @@ var searchData= [ - ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] + ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], + ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], + ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_c.js b/search/all_c.js index e4bf29c..6fb091c 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,4 +1,4 @@ var searchData= [ - ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] + ['row_0',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..2ad0e3a --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], + ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['success_3',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..fe23f93 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..e4bf29c --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] +]; diff --git a/search/defines_0.js b/search/defines_0.js index af177d0..9fd9638 100644 --- a/search/defines_0.js +++ b/search/defines_0.js @@ -1,4 +1,5 @@ var searchData= [ - ['attendee_0',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] + ['address_0',['ADDRESS',['../CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2',1,'CristalLiq-serial.ino']]], + ['attendee_1',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_1.js b/search/defines_1.js index fc01b17..4a0be80 100644 --- a/search/defines_1.js +++ b/search/defines_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]] + ['buzzer_0',['BUZZER',['../CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_2.js b/search/defines_2.js index 12306d5..6ed943d 100644 --- a/search/defines_2.js +++ b/search/defines_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] + ['col_0',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_3.js b/search/defines_3.js index 7d593e2..bd24c70 100644 --- a/search/defines_3.js +++ b/search/defines_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]] + ['display_5fupdate_5fdelay_0',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_4.js b/search/defines_4.js index d47ca68..fc01b17 100644 --- a/search/defines_4.js +++ b/search/defines_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]] + ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_5.js b/search/defines_5.js index f44ea9f..12306d5 100644 --- a/search/defines_5.js +++ b/search/defines_5.js @@ -1,6 +1,4 @@ var searchData= [ - ['settime_0',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['speaker_1',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['success_2',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['gettime_0',['GETTIME',['../CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_6.js b/search/defines_6.js index fe23f93..2415c17 100644 --- a/search/defines_6.js +++ b/search/defines_6.js @@ -1,4 +1,5 @@ var searchData= [ - ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] + ['keep_5fat_5flast_0',['KEEP_AT_LAST',['../CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2',1,'CristalLiq-serial.ino']]], + ['keep_5fat_5fzero_1',['KEEP_AT_ZERO',['../CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/defines_7.js b/search/defines_7.js new file mode 100644 index 0000000..68439c6 --- /dev/null +++ b/search/defines_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]], + ['loop_5fdelay_1',['LOOP_DELAY',['../CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_8.js b/search/defines_8.js new file mode 100644 index 0000000..d47ca68 --- /dev/null +++ b/search/defines_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_9.js b/search/defines_9.js new file mode 100644 index 0000000..6fb091c --- /dev/null +++ b/search/defines_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['row_0',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_a.js b/search/defines_a.js new file mode 100644 index 0000000..f44ea9f --- /dev/null +++ b/search/defines_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['settime_0',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['speaker_1',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['success_2',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/defines_b.js b/search/defines_b.js new file mode 100644 index 0000000..fe23f93 --- /dev/null +++ b/search/defines_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index 74ffffe..d4ff970 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,9 +1,9 @@ var indexSectionsWithContent = { - 0: "acdefgilmpstu", + 0: "abcdefgiklmprstu", 1: "dps", 2: "c", - 3: "afglpst", + 3: "abcdfgklprst", 4: "acm" }; diff --git a/structDisplay.html b/structDisplay.html index ee0cf8f..d67999c 100644 --- a/structDisplay.html +++ b/structDisplay.html @@ -106,7 +106,7 @@ char defaultMessage [MAX_STRING+1]   -char toPrint [COL+1] +char toPrint [COL+1]   int messageSize From 97165de986bfed5880e6677d2de738f280b0aa48 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Sun, 21 Sep 2025 22:13:40 +0000 Subject: [PATCH 19/29] deploy: 5fba28ddcf25380580ea4583fef9953bd0103f39 --- CristalLiq-serial_8ino.html | 106 ++++++++++----- CristalLiq-serial_8ino.js | 10 +- annotated.html | 4 +- annotated_dup.js | 4 +- dir_64032a4eeedb86ab5d4dd10c6c32e421.html | 2 +- files.html | 2 +- functions.html | 113 ++++++++++++++++ functions_vars.html | 113 ++++++++++++++++ globals.html | 4 + globals_vars.html | 108 ++++++++++++++++ menudata.js | 6 +- navtreedata.js | 7 +- navtreeindex0.js | 22 +++- search/all_10.js | 6 + search/all_2.js | 7 +- search/all_3.js | 9 +- search/all_8.js | 3 +- search/all_a.js | 4 +- search/all_b.js | 4 +- search/all_c.js | 4 +- search/all_d.js | 5 +- search/all_e.js | 6 +- search/all_f.js | 4 +- search/searchdata.js | 17 ++- search/variables_0.js | 4 + search/variables_1.js | 6 + search/variables_2.js | 4 + search/variables_3.js | 5 + search/variables_4.js | 4 + search/variables_5.js | 4 + search/variables_6.js | 5 + search/variables_7.js | 5 + structDisplay-members.html | 16 +-- structDisplay.html | 151 +++++++++++++++++++--- structDisplay.js | 11 ++ structProtocolMessage-members.html | 6 +- structProtocolMessage.html | 61 ++++++++- structProtocolMessage.js | 6 + 38 files changed, 752 insertions(+), 106 deletions(-) create mode 100644 functions.html create mode 100644 functions_vars.html create mode 100644 globals_vars.html create mode 100644 search/all_10.js create mode 100644 search/variables_0.js create mode 100644 search/variables_1.js create mode 100644 search/variables_2.js create mode 100644 search/variables_3.js create mode 100644 search/variables_4.js create mode 100644 search/variables_5.js create mode 100644 search/variables_6.js create mode 100644 search/variables_7.js create mode 100644 structDisplay.js create mode 100644 structProtocolMessage.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 88eca16..bc4e696 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -91,12 +91,14 @@
        CristalLiq-serial.ino File Reference
      -

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC. +

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC. More...

      #include <Wire.h>
      #include <LiquidCrystal_I2C.h>
      @@ -110,8 +112,10 @@

      Classes

      struct  ProtocolMessage + Representa a decodificação de uma mensagem recebida. More...
        struct  Display + Representa o estado de uma linha do display LCD. More...
        -

      @@ -138,11 +142,10 @@

       
      #define GETTIME   701
       
      - - + + @@ -159,23 +162,9 @@ - - - - - - - - - - - - +

      Macros de controle dos dispositivos.

      Constantes usadas para I2C e controles adicionais.

      +
      Macros de controle dos dispositivos.

      Constantes usadas para I2C e controles adicionais.

      Essas constantes são relacionadas aos endereços I2C e demais ajustes sobre os dispositivos externos.

      -
      #define BUZZER   2
       
      #define COL   20
       
      #define KEEP_AT_LAST   1
       
      -ProtocolMessage netMessage
       
      Display dispArray [ROW]
       
      -char strReply [80]
       
      -char auxStr [80]
       
      -unsigned long uptime
       
      -SerialProtocol usbProto
       
      + @@ -194,26 +183,56 @@ +

      +Functions

      LiquidCrystal_I2C lcd (ADDRESS, COL, ROW)
       
      void loop ()
       
      + + + + + + + + + + + + + + + + +

      +Variables

      +ProtocolMessage netMessage
       Mantém uma única mensagem recebida.
       
      Display dispArray [ROW]
       Informações para as quatro linhas do Display.
       
      +char strReply [80]
       
      +char auxStr [80]
       
      +unsigned long uptime
       Tempo em que o Arduino está ligado em milissegundos.
       
      +SerialProtocol usbProto
       Classe que implementa a transmissão e recepção de quadros pela serial sobre USB.
       

      Detailed Description

      -

      O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

      -

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há seis tipos de mensagens.

        -
      • <100,0,0> → PING
        +

        O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

        +

        O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há nove tipos de mensagens emitidas pela TV-Box.

          +
        • <100|0|0> → PING
        • -
        • <200,TEXTO,TIMEOUT> → TIME (Linha 0, para sala, data e hora)
          +
        • <200|TEXTO|TIMEOUT> → TIME (Linha 0, para sala, data e hora)
        • -
        • <300,TEXTO,TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
          +
        • <300|TEXTO|TIMEOUT> → LECTURE_NAME (Linha 1, para nome da palestra)
        • -
        • <400,TEXTO,TIMEOUT> → SPEAKER (Linha 2, para nome do palestrante)
          +
        • <400|TEXTO|TIMEOUT> → SPEAKER (Linha 2, para nome do palestrante)
        • -
        • <500,TEXTO,TIEMOUT> → ATTENDEE (Linha 3, aponta participante registrado
        • -
        • <600,0,0> → SUCCESS (Beep de sucesso no registro)
          +
        • <500|TEXTO|TIEMOUT> → ATTENDEE (Linha 3, aponta participante registrado
        • +
        • <600|0|0> → SUCCESS (Beep de sucesso no registro)
        • -
        • <601,0,0> → FAIL (Beep de falha no registro)
        • -
        • <700,HH:MM:SS,0> → SETTIME (Define a hora do RTC)
        • -
        • <701,0,0> → GETTIME (Recebe a hora do RTC)
          +
        • <601|0|0> → FAIL (Beep de falha no registro)
        • +
        • <700|YYYY:MM:DD:HH:MM:SS|0> → SETTIME (Define a hora do RTC)
        • +
        • <701|0|0> → GETTIME (Recebe a hora do RTC)
        +

        O Arduino responde com três tipos de mensagens.

          +
        • <001|uptime em milissegundos|versão de firmware> → Resposta ao ping
        • +
        • <003|YYYY:MM:DD:HH:MM:SS|temperatura> → Resposta ao gettime
          +
        • +
        • <002|OK|> → Resposta aos demais comandos
        • +

        Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.

        Macro Definition Documentation

        @@ -490,8 +509,25 @@

        {"", "Sem reserva de palestrante", "", 0, 0, 0, KEEP_AT_ZERO, 0},

      {"", "Aguardando Registro", "", 0, 0, 0, KEEP_AT_ZERO, 0}
      }
      -
      #define KEEP_AT_ZERO
      Definition CristalLiq-serial.ino:85
      +
      #define KEEP_AT_ZERO
      Definition CristalLiq-serial.ino:90
      +

      Informações para as quatro linhas do Display.

      +

      Contém as quatro linhas do display LCD. Cada posição tem:

        +
      • Mensagem atual (message)
      • +
      • Mensagem padrão (defaultMessage)
      • +
      • Texto a imprimir (toPrint)
      • +
      • Tamanho da mensagem (ajustado em setup())
      • +
      • Tamanho da mensagem padrão (ajustado em setup())
      • +
      • Posição inicial da string a partir da onde imprime no display
      • +
      • Tempo de vida (TTL) de impressão da mensagem
      • +
      +

      Inicialmente preenchido com mensagens padrão do sistema:

        +
      • Linha 0 → "IFSPresente"
      • +
      • Linha 1 → "Local Disponivel"
      • +
      • Linha 2 → "Sem reserva de palestrante"
      • +
      • Linha 3 → "Aguardando Registro"
      • +
      +
    diff --git a/CristalLiq-serial_8ino.js b/CristalLiq-serial_8ino.js index 19ccc38..ddc199f 100644 --- a/CristalLiq-serial_8ino.js +++ b/CristalLiq-serial_8ino.js @@ -1,7 +1,7 @@ var CristalLiq_serial_8ino = [ - [ "ProtocolMessage", "structProtocolMessage.html", null ], - [ "Display", "structDisplay.html", null ], + [ "ProtocolMessage", "structProtocolMessage.html", "structProtocolMessage" ], + [ "Display", "structDisplay.html", "structDisplay" ], [ "ADDRESS", "CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2", null ], [ "ATTENDEE", "CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f", null ], [ "BUZZER", "CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13", null ], @@ -18,5 +18,9 @@ var CristalLiq_serial_8ino = [ "SETTIME", "CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a", null ], [ "SPEAKER", "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26", null ], [ "SUCCESS", "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58", null ], - [ "TIME", "CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276", null ] + [ "TIME", "CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276", null ], + [ "dispArray", "CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77", null ], + [ "netMessage", "CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20", null ], + [ "uptime", "CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f", null ], + [ "usbProto", "CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857", null ] ]; \ No newline at end of file diff --git a/annotated.html b/annotated.html index d15df53..7589f95 100644 --- a/annotated.html +++ b/annotated.html @@ -95,8 +95,8 @@
    Here are the classes, structs, unions and interfaces with brief descriptions:
    - - + +
     CDisplay
     CProtocolMessage
     CDisplayRepresenta o estado de uma linha do display LCD
     CProtocolMessageRepresenta a decodificação de uma mensagem recebida
     CSerialProtocol
    diff --git a/annotated_dup.js b/annotated_dup.js index 02ab237..e7d84a4 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -1,6 +1,6 @@ var annotated_dup = [ - [ "Display", "structDisplay.html", null ], - [ "ProtocolMessage", "structProtocolMessage.html", null ], + [ "Display", "structDisplay.html", "structDisplay" ], + [ "ProtocolMessage", "structProtocolMessage.html", "structProtocolMessage" ], [ "SerialProtocol", "classSerialProtocol.html", null ] ]; \ No newline at end of file diff --git a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html index 61c6d23..dd4a5f5 100644 --- a/dir_64032a4eeedb86ab5d4dd10c6c32e421.html +++ b/dir_64032a4eeedb86ab5d4dd10c6c32e421.html @@ -97,7 +97,7 @@

    Files

     CristalLiq-serial.ino - O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.
    + O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.
       frame.h   diff --git a/files.html b/files.html index afc7e0a..ef4166a 100644 --- a/files.html +++ b/files.html @@ -96,7 +96,7 @@
    Here is a list of all documented files with brief descriptions:
    [detail level 12]
    - +
      CristalLiq-serial
     CristalLiq-serial.inoO Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC
     CristalLiq-serial.inoO Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC
     frame.h
    diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..c42d184 --- /dev/null +++ b/functions.html @@ -0,0 +1,113 @@ + + + + + + + +ModuloArduino: Class Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented class members with links to the class documentation for each member:
    +
    +
    + + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..3631e58 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,113 @@ + + + + + + + +ModuloArduino: Class Members - Variables + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented variables with links to the class documentation for each member:
    +
    +
    + + + + diff --git a/globals.html b/globals.html index 0319ee7..817fd6e 100644 --- a/globals.html +++ b/globals.html @@ -95,6 +95,7 @@
  • ATTENDEE : CristalLiq-serial.ino
  • BUZZER : CristalLiq-serial.ino
  • COL : CristalLiq-serial.ino
  • +
  • dispArray : CristalLiq-serial.ino
  • DISPLAY_UPDATE_DELAY : CristalLiq-serial.ino
  • FAIL : CristalLiq-serial.ino
  • GETTIME : CristalLiq-serial.ino
  • @@ -102,12 +103,15 @@
  • KEEP_AT_ZERO : CristalLiq-serial.ino
  • LECTURE_NAME : CristalLiq-serial.ino
  • LOOP_DELAY : CristalLiq-serial.ino
  • +
  • netMessage : CristalLiq-serial.ino
  • PING : CristalLiq-serial.ino
  • ROW : CristalLiq-serial.ino
  • SETTIME : CristalLiq-serial.ino
  • SPEAKER : CristalLiq-serial.ino
  • SUCCESS : CristalLiq-serial.ino
  • TIME : CristalLiq-serial.ino
  • +
  • uptime : CristalLiq-serial.ino
  • +
  • usbProto : CristalLiq-serial.ino
  • diff --git a/globals_vars.html b/globals_vars.html new file mode 100644 index 0000000..7838268 --- /dev/null +++ b/globals_vars.html @@ -0,0 +1,108 @@ + + + + + + + +ModuloArduino: File Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented variables with links to the documentation:
    +
    +
    + + + + diff --git a/menudata.js b/menudata.js index ae183cd..fec41c5 100644 --- a/menudata.js +++ b/menudata.js @@ -26,9 +26,13 @@ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}]}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, {text:"File Members",url:"globals.html",children:[ {text:"All",url:"globals.html"}, +{text:"Variables",url:"globals_vars.html"}, {text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/navtreedata.js b/navtreedata.js index 54cdfce..0bdfc8a 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -28,12 +28,17 @@ var NAVTREE = [ "Módulo Arduino - CristalLiq", "index.html", "index" ], [ "Classes", "annotated.html", [ [ "Class List", "annotated.html", "annotated_dup" ], - [ "Class Index", "classes.html", null ] + [ "Class Index", "classes.html", null ], + [ "Class Members", "functions.html", [ + [ "All", "functions.html", null ], + [ "Variables", "functions_vars.html", null ] + ] ] ] ], [ "Files", "files.html", [ [ "File List", "files.html", "files_dup" ], [ "File Members", "globals.html", [ [ "All", "globals.html", null ], + [ "Variables", "globals_vars.html", null ], [ "Macros", "globals_defs.html", null ] ] ] ] ] diff --git a/navtreeindex0.js b/navtreeindex0.js index 183ff2c..b75e8aa 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -7,9 +7,11 @@ var NAVTREEINDEX0 = "CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13":[2,0,0,0,4], "CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,15], "CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2":[2,0,0,0,2], +"CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20":[2,0,0,0,20], "CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,11], "CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,13], "CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da":[2,0,0,0,12], +"CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77":[2,0,0,0,19], "CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174":[2,0,0,0,10], "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,16], "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,17], @@ -18,14 +20,19 @@ var NAVTREEINDEX0 = "CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef":[2,0,0,0,6], "CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,7], "CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021":[2,0,0,0,14], +"CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f":[2,0,0,0,21], +"CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857":[2,0,0,0,22], "annotated.html":[1,0], "classSerialProtocol.html":[1,0,2], "classes.html":[1,1], "dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[2,0,0], "files.html":[2,0], "frame_8h_source.html":[2,0,0,1], +"functions.html":[1,2,0], +"functions_vars.html":[1,2,1], "globals.html":[2,1,0], -"globals_defs.html":[2,1,1], +"globals_defs.html":[2,1,2], +"globals_vars.html":[2,1,1], "index.html":[], "index.html":[0], "index.html#arch_sec":[0,2], @@ -35,5 +42,16 @@ var NAVTREEINDEX0 = "index.html#usage_sec":[0,3], "pages.html":[], "structDisplay.html":[1,0,0], -"structProtocolMessage.html":[1,0,1] +"structDisplay.html#a0a0c96f5840194b9372bdc87376a653a":[1,0,0,4], +"structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14":[1,0,0,3], +"structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476":[1,0,0,5], +"structDisplay.html#a7bd606b7665abe13961d2059976b9228":[1,0,0,1], +"structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894":[1,0,0,0], +"structDisplay.html#ab0723cc5d5efae503b835d73de2c8395":[1,0,0,7], +"structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d":[1,0,0,6], +"structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d":[1,0,0,2], +"structProtocolMessage.html":[1,0,1], +"structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b":[1,0,1,2], +"structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73":[1,0,1,1], +"structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a":[1,0,1,0] }; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000..ed6726b --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['uptime_0',['uptime',['../CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f',1,'CristalLiq-serial.ino']]], + ['usbproto_1',['usbProto',['../CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857',1,'CristalLiq-serial.ino']]], + ['uso_2',['Uso',['../index.html#usage_sec',1,'']]] +]; diff --git a/search/all_2.js b/search/all_2.js index f27cb9e..44e7cc4 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,6 +1,7 @@ var searchData= [ - ['col_0',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]], - ['cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['cristalliq_2dserial_2eino_2',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] + ['code_0',['code',['../structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a',1,'ProtocolMessage']]], + ['col_1',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]], + ['cristalliq_2',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['cristalliq_2dserial_2eino_3',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 75da6be..5f5eca9 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,7 +1,10 @@ var searchData= [ ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['display_1',['Display',['../structDisplay.html',1,'']]], - ['display_5fupdate_5fdelay_2',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], - ['do_20protocolo_3',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['defaultmessage_1',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], + ['defaultmessagesize_2',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], + ['disparray_3',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]], + ['display_4',['Display',['../structDisplay.html',1,'']]], + ['display_5fupdate_5fdelay_5',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], + ['do_20protocolo_6',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_8.js b/search/all_8.js index 2415c17..47b04bb 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,5 +1,6 @@ var searchData= [ ['keep_5fat_5flast_0',['KEEP_AT_LAST',['../CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2',1,'CristalLiq-serial.ino']]], - ['keep_5fat_5fzero_1',['KEEP_AT_ZERO',['../CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174',1,'CristalLiq-serial.ino']]] + ['keep_5fat_5fzero_1',['KEEP_AT_ZERO',['../CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174',1,'CristalLiq-serial.ino']]], + ['keepatzeroposition_2',['keepAtZeroPosition',['../structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d',1,'Display']]] ]; diff --git a/search/all_a.js b/search/all_a.js index da8d46b..2c1c404 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,5 +1,7 @@ var searchData= [ ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['message_2',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], + ['messagesize_3',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] ]; diff --git a/search/all_b.js b/search/all_b.js index 2c9d0f4..8f81e7c 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,6 +1,4 @@ var searchData= [ - ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], - ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], - ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['netmessage_0',['netMessage',['../CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_c.js b/search/all_c.js index 6fb091c..2c9d0f4 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,4 +1,6 @@ var searchData= [ - ['row_0',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] + ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], + ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], + ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_d.js b/search/all_d.js index 2ad0e3a..6fb091c 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,7 +1,4 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], - ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['success_3',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['row_0',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_e.js b/search/all_e.js index fe23f93..011bc28 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,4 +1,8 @@ var searchData= [ - ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]] + ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], + ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['startposition_3',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], + ['success_4',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_f.js b/search/all_f.js index e4bf29c..f847649 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -1,4 +1,6 @@ var searchData= [ - ['uso_0',['Uso',['../index.html#usage_sec',1,'']]] + ['time_0',['TIME',['../CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276',1,'CristalLiq-serial.ino']]], + ['toprint_1',['toPrint',['../structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d',1,'Display']]], + ['ttl_2',['ttl',['../structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b',1,'ProtocolMessage::TTL'],['../structDisplay.html#ab0723cc5d5efae503b835d73de2c8395',1,'Display::TTL']]] ]; diff --git a/search/searchdata.js b/search/searchdata.js index d4ff970..ec8495b 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,10 +1,11 @@ var indexSectionsWithContent = { - 0: "abcdefgiklmprstu", + 0: "abcdefgiklmnprstu", 1: "dps", 2: "c", - 3: "abcdfgklprst", - 4: "acm" + 3: "cdkmnstu", + 4: "abcdfgklprst", + 5: "acm" }; var indexSectionNames = @@ -12,8 +13,9 @@ var indexSectionNames = 0: "all", 1: "classes", 2: "files", - 3: "defines", - 4: "pages" + 3: "variables", + 4: "defines", + 5: "pages" }; var indexSectionLabels = @@ -21,7 +23,8 @@ var indexSectionLabels = 0: "All", 1: "Classes", 2: "Files", - 3: "Macros", - 4: "Pages" + 3: "Variables", + 4: "Macros", + 5: "Pages" }; diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 0000000..c2c2e35 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['code_0',['code',['../structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a',1,'ProtocolMessage']]] +]; diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 0000000..a56b302 --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['defaultmessage_0',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], + ['defaultmessagesize_1',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], + ['disparray_2',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 0000000..6dd36fa --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['keepatzeroposition_0',['keepAtZeroPosition',['../structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d',1,'Display']]] +]; diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 0000000..adc40f1 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['message_0',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], + ['messagesize_1',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] +]; diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 0000000..8f81e7c --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['netmessage_0',['netMessage',['../CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 0000000..5d17841 --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['startposition_0',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]] +]; diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 0000000..669615c --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['toprint_0',['toPrint',['../structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d',1,'Display']]], + ['ttl_1',['ttl',['../structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b',1,'ProtocolMessage::TTL'],['../structDisplay.html#ab0723cc5d5efae503b835d73de2c8395',1,'Display::TTL']]] +]; diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 0000000..cb2f590 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['uptime_0',['uptime',['../CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f',1,'CristalLiq-serial.ino']]], + ['usbproto_1',['usbProto',['../CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857',1,'CristalLiq-serial.ino']]] +]; diff --git a/structDisplay-members.html b/structDisplay-members.html index 4e0e92d..ca02c2d 100644 --- a/structDisplay-members.html +++ b/structDisplay-members.html @@ -96,14 +96,14 @@

    This is the complete list of members for Display, including all inherited members.

    - - - - - - - - + + + + + + + +
    defaultMessage (defined in Display)Display
    defaultMessageSize (defined in Display)Display
    keepAtZeroPosition (defined in Display)Display
    message (defined in Display)Display
    messageSize (defined in Display)Display
    startPosition (defined in Display)Display
    toPrint (defined in Display)Display
    TTL (defined in Display)Display
    defaultMessageDisplay
    defaultMessageSizeDisplay
    keepAtZeroPositionDisplay
    messageDisplay
    messageSizeDisplay
    startPositionDisplay
    toPrintDisplay
    TTLDisplay
    diff --git a/structDisplay.html b/structDisplay.html index d67999c..eb0f7a2 100644 --- a/structDisplay.html +++ b/structDisplay.html @@ -96,34 +96,153 @@
    Display Struct Reference
    + +

    Representa o estado de uma linha do display LCD. + More...

    - + - + - + - + - + - + - + - +

    Public Attributes

    -char message [MAX_STRING+1]
    char message [MAX_STRING+1]
     
    -char defaultMessage [MAX_STRING+1]
    char defaultMessage [MAX_STRING+1]
     
    -char toPrint [COL+1]
    char toPrint [COL+1]
     
    -int messageSize
    int messageSize
     
    -int defaultMessageSize
    int defaultMessageSize
     
    -int startPosition
    int startPosition
     
    -byte keepAtZeroPosition
    byte keepAtZeroPosition
     
    -unsigned long TTL
    unsigned long TTL
     
    +

    Detailed Description

    +

    Representa o estado de uma linha do display LCD.

    +

    Esta estrutura guarda a mensagem principal, a mensagem padrão, a parte da mensagem que deve ser impressa no momento, além de informações de tamanho, posição e tempo de vida (TTL).

    +

    Member Data Documentation

    + +

    ◆ defaultMessage

    + +
    +
    + + + + +
    char Display::defaultMessage[MAX_STRING+1]
    +
    +

    Mensagem padrão quando nenhuma outra estiver ativa.

    + +
    +
    + +

    ◆ defaultMessageSize

    + +
    +
    + + + + +
    int Display::defaultMessageSize
    +
    +

    Tamanho da mensagem padrão.

    + +
    +
    + +

    ◆ keepAtZeroPosition

    + +
    +
    + + + + +
    byte Display::keepAtZeroPosition
    +
    +

    Quando o trecho inicial da mensagem está sendo impresso, permanece por um tempo maior nesse estado.

    + +
    +
    + +

    ◆ message

    + +
    +
    + + + + +
    char Display::message[MAX_STRING+1]
    +
    +

    Mensagem atual a ser exibida.

    + +
    +
    + +

    ◆ messageSize

    + +
    +
    + + + + +
    int Display::messageSize
    +
    +

    Tamanho da mensagem atual.

    + +
    +
    + +

    ◆ startPosition

    + +
    +
    + + + + +
    int Display::startPosition
    +
    +

    Posição inicial na mensagem a partir da qual imprime-se no display.

    + +
    +
    + +

    ◆ toPrint

    + +
    +
    + + + + +
    char Display::toPrint[COL+1]
    +
    +

    Parte da mensagem que é impressa no display num dado momento.

    + +
    +
    + +

    ◆ TTL

    + +
    +
    + + + + +
    unsigned long Display::TTL
    +
    +

    Tempo de vida da mensagem em milissegundos. Após esse período, retorna à mensagem default

    + +
    +

    The documentation for this struct was generated from the following file: diff --git a/structDisplay.js b/structDisplay.js new file mode 100644 index 0000000..c03c7dc --- /dev/null +++ b/structDisplay.js @@ -0,0 +1,11 @@ +var structDisplay = +[ + [ "defaultMessage", "structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894", null ], + [ "defaultMessageSize", "structDisplay.html#a7bd606b7665abe13961d2059976b9228", null ], + [ "keepAtZeroPosition", "structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d", null ], + [ "message", "structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14", null ], + [ "messageSize", "structDisplay.html#a0a0c96f5840194b9372bdc87376a653a", null ], + [ "startPosition", "structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476", null ], + [ "toPrint", "structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d", null ], + [ "TTL", "structDisplay.html#ab0723cc5d5efae503b835d73de2c8395", null ] +]; \ No newline at end of file diff --git a/structProtocolMessage-members.html b/structProtocolMessage-members.html index 5cb6cd6..36edfd6 100644 --- a/structProtocolMessage-members.html +++ b/structProtocolMessage-members.html @@ -96,9 +96,9 @@

    This is the complete list of members for ProtocolMessage, including all inherited members.

    - - - + + +
    code (defined in ProtocolMessage)ProtocolMessage
    message (defined in ProtocolMessage)ProtocolMessage
    TTL (defined in ProtocolMessage)ProtocolMessage
    codeProtocolMessage
    messageProtocolMessage
    TTLProtocolMessage
    diff --git a/structProtocolMessage.html b/structProtocolMessage.html index ac6ee47..13f9167 100644 --- a/structProtocolMessage.html +++ b/structProtocolMessage.html @@ -96,19 +96,68 @@
    ProtocolMessage Struct Reference
    + +

    Representa a decodificação de uma mensagem recebida. + More...

    - + - + - +

    Public Attributes

    -int code
    int code
     
    -int TTL
    int TTL
     
    -char message [MAX_STRING+1]
    char message [MAX_STRING+1]
     
    +

    Detailed Description

    +

    Representa a decodificação de uma mensagem recebida.

    +

    Uma mensagem num quadro vem em três campos separados por '|', <code|message|TTL>.

    +

    Member Data Documentation

    + +

    ◆ code

    + +
    +
    + + + + +
    int ProtocolMessage::code
    +
    +

    Código do serviço solicitado.

    + +
    +
    + +

    ◆ message

    + +
    +
    + + + + +
    char ProtocolMessage::message[MAX_STRING+1]
    +
    +

    Mensagem.

    + +
    +
    + +

    ◆ TTL

    + +
    +
    + + + + +
    int ProtocolMessage::TTL
    +
    +

    Tempo de vida para mensagens que são exibidas no display.

    + +
    +

    The documentation for this struct was generated from the following file: diff --git a/structProtocolMessage.js b/structProtocolMessage.js new file mode 100644 index 0000000..2562a98 --- /dev/null +++ b/structProtocolMessage.js @@ -0,0 +1,6 @@ +var structProtocolMessage = +[ + [ "code", "structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a", null ], + [ "message", "structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73", null ], + [ "TTL", "structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b", null ] +]; \ No newline at end of file From 74e53b621c7f8967b7d21884c1d11740a6f34cde Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Mon, 22 Sep 2025 00:34:33 +0000 Subject: [PATCH 20/29] deploy: 6db4fb628f811fa92945023d9366a3ebd17e12d7 --- CristalLiq-serial_8ino.html | 297 +++++++++++++++++- CristalLiq-serial_8ino.js | 8 +- ...3c938c23e2eba81d9cdae2eae52aeb5_cgraph.map | 5 + ...3c938c23e2eba81d9cdae2eae52aeb5_cgraph.md5 | 1 + ...3c938c23e2eba81d9cdae2eae52aeb5_cgraph.svg | 64 ++++ ...8c23e2eba81d9cdae2eae52aeb5_cgraph_org.svg | 39 +++ ...c938c23e2eba81d9cdae2eae52aeb5_icgraph.map | 5 + ...c938c23e2eba81d9cdae2eae52aeb5_icgraph.md5 | 1 + ...c938c23e2eba81d9cdae2eae52aeb5_icgraph.svg | 64 ++++ ...c23e2eba81d9cdae2eae52aeb5_icgraph_org.svg | 39 +++ ...843d919506d0d897ff1fbf86448110_icgraph.map | 7 + ...843d919506d0d897ff1fbf86448110_icgraph.md5 | 1 + ...843d919506d0d897ff1fbf86448110_icgraph.svg | 82 +++++ ...919506d0d897ff1fbf86448110_icgraph_org.svg | 57 ++++ ...10d8ce17e310e857423a407e4d1250_icgraph.map | 5 + ...10d8ce17e310e857423a407e4d1250_icgraph.md5 | 1 + ...10d8ce17e310e857423a407e4d1250_icgraph.svg | 64 ++++ ...ce17e310e857423a407e4d1250_icgraph_org.svg | 39 +++ ...e461d27b9c48d5921c00d521181f12f_cgraph.map | 9 + ...e461d27b9c48d5921c00d521181f12f_cgraph.md5 | 1 + ...e461d27b9c48d5921c00d521181f12f_cgraph.svg | 100 ++++++ ...d27b9c48d5921c00d521181f12f_cgraph_org.svg | 75 +++++ globals.html | 6 + globals_func.html | 109 +++++++ globals_vars.html | 1 + menudata.js | 1 + navtreedata.js | 1 + navtreeindex0.js | 21 +- search/all_0.js | 3 +- search/all_11.js | 4 + search/all_2.js | 5 +- search/all_3.js | 14 +- search/all_4.js | 3 +- search/all_9.js | 3 +- search/all_c.js | 7 +- search/all_d.js | 4 +- search/all_e.js | 7 +- search/functions_0.js | 4 + search/functions_1.js | 4 + search/functions_2.js | 4 + search/functions_3.js | 4 + search/functions_4.js | 4 + search/searchdata.js | 23 +- search/variables_8.js | 4 + 44 files changed, 1152 insertions(+), 48 deletions(-) create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.map create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.md5 create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.svg create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph_org.svg create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.map create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.md5 create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.svg create mode 100644 CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph_org.svg create mode 100644 CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.map create mode 100644 CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.md5 create mode 100644 CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.svg create mode 100644 CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph_org.svg create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.map create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.md5 create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.svg create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph_org.svg create mode 100644 CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map create mode 100644 CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 create mode 100644 CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg create mode 100644 CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg create mode 100644 globals_func.html create mode 100644 search/all_11.js create mode 100644 search/functions_0.js create mode 100644 search/functions_1.js create mode 100644 search/functions_2.js create mode 100644 search/functions_3.js create mode 100644 search/functions_4.js create mode 100644 search/variables_8.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index bc4e696..ee6062f 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -168,20 +168,20 @@ LiquidCrystal_I2C lcd (ADDRESS, COL, ROW)   - -void copiaN (char dest[], int sizeDest, char origem[], int sizeOrigem, int start) +void copiaN (char dest[], int sizeDest, char origem[], int sizeOrigem, int start) + Copia um trecho de uma string de origem para um buffer de destino, ajustando posição inicial e preenchendo com espaços em branco, se necessário.
      - -void atualizaDisplay (int lines) +void atualizaDisplay (int lines) + Atualiza o conteúdo exibido no display LCD linha a linha.
      - -void parseMessage () +void parseMessage () + Interpreta a mensagem recebida pela serial USB e atualiza a estrutura global netMessage.
      - -void setup () +void setup () + Configuração inicial do sistema Arduino.
      - -void loop () +void loop () + Loop principal do firmware.
      + + + @@ -489,6 +492,259 @@

    Linha 0: sala, data e hora.

    + + +

    Function Documentation

    +
    +

    ◆ atualizaDisplay()

    + +
    +
    +

    @@ -193,6 +193,9 @@

    Display dispArray [ROW]
     Informações para as quatro linhas do Display.
     
    const char * VERSION = "1.0"
     Versão do firmware.
     
    char strReply [80]
     
    + + + + + + + +
    void atualizaDisplay (int lines)
    +
    + +

    Atualiza o conteúdo exibido no display LCD linha a linha.

    +

    Esta função gerencia a exibição de mensagens no display, considerando:

      +
    • Tempo mínimo entre atualizações (usando millis() e DISPLAY_UPDATE_DELAY).
    • +
    • Mensagens temporárias (TTL): quando expiram, voltam para a mensagem padrão.
    • +
    • Rolagem (scroll): caso a mensagem seja maior que o número de colunas (COL), realiza deslocamento progressivo, mantendo o início por alguns ciclos (KEEP_AT_ZERO) antes de avançar.
    • +
    +

    O comportamento difere conforme a mensagem ativa:

      +
    • Se dispArray[i].TTL expirou → mostra defaultMessage com rolagem.
    • +
    • Caso contrário → mostra message com rolagem.
    • +
    +
    Parameters
    + + +
    [in]linesÍndice da linha a ser atualizada:
      +
    • -1 → atualiza todas as linhas.
    • +
    • 0..ROW-1 → atualiza apenas a linha especificada.
    • +
    +
    +
    +
    +
    Note
      +
    • Usa copiaN() para preencher o buffer de exibição (toPrint).
    • +
    • Usa o estado da máquina (usbProto.machState) para evitar atualizações durante recepção de dados.
    • +
    • O cursor do LCD é posicionado no início de cada linha (lcd.setCursor(0,i)).
    • +
    +
    +

    +Regras de rolagem

    +
      +
    • Quando startPosition == 0, mantém a mensagem parada por KEEP_AT_ZERO ciclos.
    • +
    • Depois, incrementa startPosition até o limite calculado, com espera em KEEP_AT_LAST no final.
    • +
    +
    +Here is the call graph for this function:
    +
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    + + +

    ◆ copiaN()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void copiaN (char dest[],
    int sizeDest,
    char origem[],
    int sizeOrigem,
    int start 
    )
    +
    + +

    Copia um trecho de uma string de origem para um buffer de destino, ajustando posição inicial e preenchendo com espaços em branco, se necessário.

    +

    Esta função garante que o conteúdo copiado caiba exatamente no tamanho do display (ou outro destino), ajustando o índice inicial (start) caso:

      +
    • A string de origem seja menor ou igual ao destino → começa da posição zero.
    • +
    • A string de origem seja maior que o destino, mas o ponto inicial da cópia desejada ultrapasse os limites → recua o início para preencher completamente o destino.
    • +
    +

    Após a cópia, o restante do buffer de destino é preenchido com espaços em branco, e o finalizador ‘’\0'` é adicionado ao fim.

    +
    Parameters
    + + + + + + +
    [out]destBuffer de destino (receberá a string copiada).
    [in]sizeDestTamanho do buffer de destino (número de caracteres visíveis no display).
    [in]origemString de origem.
    [in]sizeOrigemTamanho da string de origem.
    [in]startPosição inicial na string de origem a partir da qual a cópia deve começar (pode ser ajustada internamente).
    +
    +
    +
    Note
    Usa min(sizeDest, sizeOrigem) para calcular o máximo de caracteres a copiar. O destino é sempre terminado em ‘’\0'`.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ loop()

    + +
    +
    + + + + + + + +
    void loop ()
    +
    + +

    Loop principal do firmware.

    +

    O loop() executa continuamente o ciclo de atualização do display, recepção de mensagens da TV-Box e execução dos comandos recebidos.

    +

    O comportamento segue o protocolo definido:

      +
    • PING (100): responde com uptime em ms e versão do firmware.
    • +
    • TIME (200): atualiza linha 0 (sala, data, hora).
    • +
    • LECTURE_NAME (300): atualiza linha 1 (nome da palestra).
    • +
    • SPEAKER (400): atualiza linha 2 (nome do professor).
    • +
    • ATTENDEE (500): atualiza linha 3 (participante) e força atualização imediata.
    • +
    • SUCCESS (600): feedback sonoro curto (registro aceito).
    • +
    • FAIL (601): feedback sonoro duplo (registro rejeitado).
    • +
    +

    +Estrutura do loop

    +
      +
    1. Atualiza o display (atualizaDisplay(-1)).
    2. +
    3. Recebe frame via usbProto.receiveFrame().
    4. +
    5. Se um frame válido foi recebido (machState == RECEIVED):
        +
      • Chama parseMessage() para decodificar.
      • +
      • Executa ação conforme netMessage.code.
      • +
      • Responde sempre "002|OK" após comandos de atualização.
      • +
      • Atualiza mensagens em dispArray (conteúdo, tamanho, TTL, rolagem).
      • +
      • Gera sinais sonoros quando uma digital for lida ou usuário/senha do teclado.
      • +
      • Reinicia estado da máquina (machState = START).
      • +
      • Reinicia o ciclo (goto CONTINUE) sem esperar o delay.
      • +
      +
    6. +
    7. Se nada foi recebido → aguarda LOOP_DELAY antes do próximo ciclo.
    8. +
    +
    Note
      +
    • O goto CONTINUE garante responsividade, reiniciando o ciclo imediatamente após processar uma mensagem (sem aguardar LOOP_DELAY).
    • +
    • O uso de atualizaDisplay(3) no caso ATTENDEE deixa a linha 3 mais responsiva a eventos de digitação no teclado.
    • +
    • A comunicação usa usbProto, responsável por framing com caracteres de escape.
    • +
    +
    +
    See also
    atualizaDisplay
    +
    +parseMessage
    +
    +Here is the call graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ parseMessage()

    + +
    +
    + + + + + + + +
    void parseMessage ()
    +
    + +

    Interpreta a mensagem recebida pela serial USB e atualiza a estrutura global netMessage.

    +

    Esta função:

      +
    • Remove os marcadores de acentuação gráfica da string recebida (usbProto.receivedChars).
    • +
    • Usa strtok para separar os campos da mensagem, assumindo o caractere | como delimitador.
    • +
    • Converte o primeiro campo para um código numérico (netMessage.code).
    • +
    • Copia o segundo campo como texto da mensagem (netMessage.message).
    • +
    • Converte o terceiro campo em milissegundos para o tempo de vida (netMessage.TTL).
    • +
    +
    Note
    A função não recebe parâmetros nem retorna valor. Atua diretamente sobre as variáveis globais usbProto e netMessage.
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setup()

    + +
    +
    + + + + + + + +
    void setup ()
    +
    + +

    Configuração inicial do sistema Arduino.

    +

    Esta função é chamada automaticamente pelo framework Arduino logo após o reset ou inicialização da placa. Ela é chamada uma única vez.

    +

    Inicializações realizadas:

      +
    • Define o pino do buzzer (BUZZER) como saída.
    • +
    • Inicializa o display LCD (lcd.init()).
    • +
    • Configura contraste e backlight do display (mas não tem efeito no display que usamos).
    • +
    • Desativa autoscroll e cursor piscante.
    • +
    • Limpa a tela do display (lcd.clear()).
    • +
    • Configura a taxa de comunicação serial (usbProto.setBaudRate(9600)).
    • +
    • Ajusta os tamanhos das mensagens padrão em dispArray.
    • +
    +
    Note
    Esta função não recebe parâmetros e não retorna valor. É executada uma única vez antes de loop().
    +

    Variable Documentation

    @@ -516,8 +772,8 @@

    setup()) +
  • Tamanho da mensagem padrão (ajustado em setup())
  • Posição inicial da string a partir da onde imprime no display
  • Tempo de vida (TTL) de impressão da mensagem
  • @@ -528,6 +784,23 @@

    + + + +

    ◆ VERSION

    + +
    +
    + + + + +
    char * VERSION = "1.0"
    +
    + +

    Versão do firmware.

    +
    Note
    É retornado junto com o serviço ping.
    +
    diff --git a/CristalLiq-serial_8ino.js b/CristalLiq-serial_8ino.js index ddc199f..4dc6870 100644 --- a/CristalLiq-serial_8ino.js +++ b/CristalLiq-serial_8ino.js @@ -19,8 +19,14 @@ var CristalLiq_serial_8ino = [ "SPEAKER", "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26", null ], [ "SUCCESS", "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58", null ], [ "TIME", "CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276", null ], + [ "atualizaDisplay", "CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5", null ], + [ "copiaN", "CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110", null ], + [ "loop", "CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f", null ], + [ "parseMessage", "CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250", null ], + [ "setup", "CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d", null ], [ "dispArray", "CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77", null ], [ "netMessage", "CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20", null ], [ "uptime", "CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f", null ], - [ "usbProto", "CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857", null ] + [ "usbProto", "CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857", null ], + [ "VERSION", "CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329", null ] ]; \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.map b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.map new file mode 100644 index 0000000..d9f3473 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.md5 b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.md5 new file mode 100644 index 0000000..8e79a41 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.md5 @@ -0,0 +1 @@ +dff4631e435104ecf473c6c0da147ff9 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.svg b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.svg new file mode 100644 index 0000000..6429ce8 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +atualizaDisplay + + +Node1 + + +atualizaDisplay + + + + + +Node2 + + +copiaN + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph_org.svg b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph_org.svg new file mode 100644 index 0000000..363318c --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_cgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +atualizaDisplay + + +Node1 + + +atualizaDisplay + + + + + +Node2 + + +copiaN + + + + + +Node1->Node2 + + + + + + + + diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.map b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.map new file mode 100644 index 0000000..f1f76e8 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.md5 b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.md5 new file mode 100644 index 0000000..d64002f --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.md5 @@ -0,0 +1 @@ +b75e2a29ef7f1ac21f7d732686105b51 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.svg b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.svg new file mode 100644 index 0000000..f6c50f3 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +atualizaDisplay + + +Node1 + + +atualizaDisplay + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph_org.svg b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph_org.svg new file mode 100644 index 0000000..7e371b7 --- /dev/null +++ b/CristalLiq-serial_8ino_a03c938c23e2eba81d9cdae2eae52aeb5_icgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +atualizaDisplay + + +Node1 + + +atualizaDisplay + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.map b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.map new file mode 100644 index 0000000..fe61115 --- /dev/null +++ b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.md5 b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.md5 new file mode 100644 index 0000000..3b76fc8 --- /dev/null +++ b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.md5 @@ -0,0 +1 @@ +901c356f3033cbab65a5e70fdf51a3c2 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.svg b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.svg new file mode 100644 index 0000000..093d678 --- /dev/null +++ b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + +copiaN + + +Node1 + + +copiaN + + + + + +Node2 + + +atualizaDisplay + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +loop + + + + + +Node2->Node3 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph_org.svg b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph_org.svg new file mode 100644 index 0000000..eb753dc --- /dev/null +++ b/CristalLiq-serial_8ino_a48843d919506d0d897ff1fbf86448110_icgraph_org.svg @@ -0,0 +1,57 @@ + + + + + + +copiaN + + +Node1 + + +copiaN + + + + + +Node2 + + +atualizaDisplay + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +loop + + + + + +Node2->Node3 + + + + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.map b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.map new file mode 100644 index 0000000..9bd6af6 --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.md5 b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.md5 new file mode 100644 index 0000000..d0226f8 --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.md5 @@ -0,0 +1 @@ +d6ddfaa9276a71162e6b30ede3539140 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.svg b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.svg new file mode 100644 index 0000000..8c59332 --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +parseMessage + + +Node1 + + +parseMessage + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph_org.svg b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph_org.svg new file mode 100644 index 0000000..63c4131 --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_icgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +parseMessage + + +Node1 + + +parseMessage + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map new file mode 100644 index 0000000..af9acfa --- /dev/null +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 new file mode 100644 index 0000000..57c06d7 --- /dev/null +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 @@ -0,0 +1 @@ +b17ca9c3e29836f26e8a612b17d8cb82 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg new file mode 100644 index 0000000..4602439 --- /dev/null +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + +loop + + +Node1 + + +loop + + + + + +Node2 + + +atualizaDisplay + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +parseMessage + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +copiaN + + + + + +Node2->Node3 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg new file mode 100644 index 0000000..84dc845 --- /dev/null +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg @@ -0,0 +1,75 @@ + + + + + + +loop + + +Node1 + + +loop + + + + + +Node2 + + +atualizaDisplay + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +parseMessage + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +copiaN + + + + + +Node2->Node3 + + + + + + + + diff --git a/globals.html b/globals.html index 817fd6e..4f2027e 100644 --- a/globals.html +++ b/globals.html @@ -93,8 +93,10 @@
    Here is a list of all documented file members with links to the documentation:
    diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 0000000..cb8f909 --- /dev/null +++ b/globals_func.html @@ -0,0 +1,109 @@ + + + + + + + +ModuloArduino: File Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions with links to the documentation:
    +
    +
    + + + + diff --git a/globals_vars.html b/globals_vars.html index 7838268..8b028e1 100644 --- a/globals_vars.html +++ b/globals_vars.html @@ -95,6 +95,7 @@
  • netMessage : CristalLiq-serial.ino
  • uptime : CristalLiq-serial.ino
  • usbProto : CristalLiq-serial.ino
  • +
  • VERSION : CristalLiq-serial.ino
  • diff --git a/menudata.js b/menudata.js index fec41c5..a8b4b24 100644 --- a/menudata.js +++ b/menudata.js @@ -34,5 +34,6 @@ var menudata={children:[ {text:"File List",url:"files.html"}, {text:"File Members",url:"globals.html",children:[ {text:"All",url:"globals.html"}, +{text:"Functions",url:"globals_func.html"}, {text:"Variables",url:"globals_vars.html"}, {text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/navtreedata.js b/navtreedata.js index 0bdfc8a..2fd3209 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -38,6 +38,7 @@ var NAVTREE = [ "File List", "files.html", "files_dup" ], [ "File Members", "globals.html", [ [ "All", "globals.html", null ], + [ "Functions", "globals_func.html", null ], [ "Variables", "globals_vars.html", null ], [ "Macros", "globals_defs.html", null ] ] ] diff --git a/navtreeindex0.js b/navtreeindex0.js index b75e8aa..85d7664 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,18 +1,22 @@ var NAVTREEINDEX0 = { "CristalLiq-serial_8ino.html":[2,0,0,0], +"CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5":[2,0,0,0,19], "CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[2,0,0,0,18], "CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[2,0,0,0,3], "CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2":[2,0,0,0,9], "CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13":[2,0,0,0,4], "CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,15], "CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2":[2,0,0,0,2], -"CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20":[2,0,0,0,20], +"CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20":[2,0,0,0,25], "CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,11], +"CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110":[2,0,0,0,20], "CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,13], +"CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d":[2,0,0,0,23], "CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da":[2,0,0,0,12], -"CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77":[2,0,0,0,19], +"CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77":[2,0,0,0,24], "CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174":[2,0,0,0,10], +"CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250":[2,0,0,0,22], "CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,16], "CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,17], "CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663":[2,0,0,0,5], @@ -20,8 +24,10 @@ var NAVTREEINDEX0 = "CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef":[2,0,0,0,6], "CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,7], "CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021":[2,0,0,0,14], -"CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f":[2,0,0,0,21], -"CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857":[2,0,0,0,22], +"CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329":[2,0,0,0,28], +"CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f":[2,0,0,0,26], +"CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857":[2,0,0,0,27], +"CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f":[2,0,0,0,21], "annotated.html":[1,0], "classSerialProtocol.html":[1,0,2], "classes.html":[1,1], @@ -31,10 +37,11 @@ var NAVTREEINDEX0 = "functions.html":[1,2,0], "functions_vars.html":[1,2,1], "globals.html":[2,1,0], -"globals_defs.html":[2,1,2], -"globals_vars.html":[2,1,1], -"index.html":[], +"globals_defs.html":[2,1,3], +"globals_func.html":[2,1,1], +"globals_vars.html":[2,1,2], "index.html":[0], +"index.html":[], "index.html#arch_sec":[0,2], "index.html#features_sec":[0,1], "index.html#img_sec":[0,4], diff --git a/search/all_0.js b/search/all_0.js index 69d36d3..32dad02 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -3,5 +3,6 @@ var searchData= ['address_0',['ADDRESS',['../CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2',1,'CristalLiq-serial.ino']]], ['arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], ['arquitetura_2',['Arquitetura',['../index.html#arch_sec',1,'']]], - ['attendee_3',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]] + ['attendee_3',['ATTENDEE',['../CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f',1,'CristalLiq-serial.ino']]], + ['atualizadisplay_4',['atualizaDisplay',['../CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000..fb51455 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['version_0',['VERSION',['../CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/all_2.js b/search/all_2.js index 44e7cc4..fb194b6 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -2,6 +2,7 @@ var searchData= [ ['code_0',['code',['../structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a',1,'ProtocolMessage']]], ['col_1',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]], - ['cristalliq_2',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['cristalliq_2dserial_2eino_3',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] + ['copian_2',['copiaN',['../CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110',1,'CristalLiq-serial.ino']]], + ['cristalliq_3',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['cristalliq_2dserial_2eino_4',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 5f5eca9..2594af9 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,10 +1,12 @@ var searchData= [ ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['defaultmessage_1',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], - ['defaultmessagesize_2',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], - ['disparray_3',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]], - ['display_4',['Display',['../structDisplay.html',1,'']]], - ['display_5fupdate_5fdelay_5',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], - ['do_20protocolo_6',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['de_20rolagem_1',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['defaultmessage_2',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], + ['defaultmessagesize_3',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], + ['disparray_4',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]], + ['display_5',['Display',['../structDisplay.html',1,'']]], + ['display_5fupdate_5fdelay_6',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], + ['do_20loop_7',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]], + ['do_20protocolo_8',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js index b89442e..5ad9fc4 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,4 +1,5 @@ var searchData= [ - ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['estrutura_20do_20loop_1',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]] ]; diff --git a/search/all_9.js b/search/all_9.js index 68439c6..2d7b354 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,5 +1,6 @@ var searchData= [ ['lecture_5fname_0',['LECTURE_NAME',['../CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93',1,'CristalLiq-serial.ino']]], - ['loop_5fdelay_1',['LOOP_DELAY',['../CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da',1,'CristalLiq-serial.ino']]] + ['loop_1',['loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'Estrutura do loop'],['../CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f',1,'loop(): CristalLiq-serial.ino']]], + ['loop_5fdelay_2',['LOOP_DELAY',['../CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_c.js b/search/all_c.js index 2c9d0f4..7536e8b 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,6 +1,7 @@ var searchData= [ - ['ping_0',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], - ['protocolmessage_1',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], - ['protocolo_2',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['parsemessage_0',['parseMessage',['../CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250',1,'CristalLiq-serial.ino']]], + ['ping_1',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], + ['protocolmessage_2',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], + ['protocolo_3',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_d.js b/search/all_d.js index 6fb091c..e9bbeff 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,4 +1,6 @@ var searchData= [ - ['row_0',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] + ['regras_20de_20rolagem_0',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['rolagem_1',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['row_2',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_e.js b/search/all_e.js index 011bc28..6a712bb 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -2,7 +2,8 @@ var searchData= [ ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['speaker_2',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['startposition_3',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], - ['success_4',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['setup_2',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]], + ['speaker_3',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['startposition_4',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], + ['success_5',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..452b266 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['atualizadisplay_0',['atualizaDisplay',['../CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..cbebb4c --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['copian_0',['copiaN',['../CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..576f819 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loop_0',['loop',['../CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..db91c5a --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parsemessage_0',['parseMessage',['../CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..0e2c8b7 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['setup_0',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index ec8495b..3b66e55 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,11 +1,12 @@ var indexSectionsWithContent = { - 0: "abcdefgiklmnprstu", + 0: "abcdefgiklmnprstuv", 1: "dps", 2: "c", - 3: "cdkmnstu", - 4: "abcdfgklprst", - 5: "acm" + 3: "aclps", + 4: "cdkmnstuv", + 5: "abcdfgklprst", + 6: "acm" }; var indexSectionNames = @@ -13,9 +14,10 @@ var indexSectionNames = 0: "all", 1: "classes", 2: "files", - 3: "variables", - 4: "defines", - 5: "pages" + 3: "functions", + 4: "variables", + 5: "defines", + 6: "pages" }; var indexSectionLabels = @@ -23,8 +25,9 @@ var indexSectionLabels = 0: "All", 1: "Classes", 2: "Files", - 3: "Variables", - 4: "Macros", - 5: "Pages" + 3: "Functions", + 4: "Variables", + 5: "Macros", + 6: "Pages" }; diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 0000000..fb51455 --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['version_0',['VERSION',['../CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329',1,'CristalLiq-serial.ino']]] +]; From 08405958725213cf41fe6611e5e2e8a08f5bac4d Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Mon, 22 Sep 2025 00:59:40 +0000 Subject: [PATCH 21/29] deploy: d801cb01a4b0a3c0baaa5795aa37f02707b0bbd9 --- CristalLiq-serial_8ino.html | 2 +- dir_49e56c817e5e54854c35e136979f97ca.html | 106 ++++++++++++++++ dot_inline_dotgraph_1.svg | 146 ++++++++++++++++++++++ dot_inline_dotgraph_1_org.svg | 65 ++++++++++ index.html | 8 +- menudata.js | 1 + navtreedata.js | 1 + navtreeindex0.js | 107 ++++++++-------- pages.html | 110 ++++++++++++++++ protocolo_serial.html | 115 +++++++++++++++++ search/all_2.js | 7 +- search/all_3.js | 19 +-- search/all_4.js | 5 +- search/all_5.js | 3 +- search/all_c.js | 3 +- search/all_e.js | 13 +- search/pages_1.js | 3 +- search/pages_2.js | 2 +- search/pages_3.js | 4 + search/pages_4.js | 4 + search/pages_5.js | 4 + search/pages_6.js | 4 + search/pages_7.js | 4 + search/searchdata.js | 2 +- 24 files changed, 657 insertions(+), 81 deletions(-) create mode 100644 dir_49e56c817e5e54854c35e136979f97ca.html create mode 100644 dot_inline_dotgraph_1.svg create mode 100644 dot_inline_dotgraph_1_org.svg create mode 100644 pages.html create mode 100644 protocolo_serial.html create mode 100644 search/pages_3.js create mode 100644 search/pages_4.js create mode 100644 search/pages_5.js create mode 100644 search/pages_6.js create mode 100644 search/pages_7.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index ee6062f..1b48e03 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -765,7 +765,7 @@

    {"", "Sem reserva de palestrante", "", 0, 0, 0, KEEP_AT_ZERO, 0},
    {"", "Aguardando Registro", "", 0, 0, 0, KEEP_AT_ZERO, 0}
    }
    -
    #define KEEP_AT_ZERO
    Definition CristalLiq-serial.ino:90
    +
    #define KEEP_AT_ZERO
    Definition CristalLiq-serial.ino:63

    Informações para as quatro linhas do Display.

    Contém as quatro linhas do display LCD. Cada posição tem:

      diff --git a/dir_49e56c817e5e54854c35e136979f97ca.html b/dir_49e56c817e5e54854c35e136979f97ca.html new file mode 100644 index 0000000..664609e --- /dev/null +++ b/dir_49e56c817e5e54854c35e136979f97ca.html @@ -0,0 +1,106 @@ + + + + + + + +ModuloArduino: docs Directory Reference + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      ModuloArduino +
      +
      Módulo Arduino - IFSPresente
      +
      +
      + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      docs Directory Reference
      +
      +
      +
      +
      + + + + diff --git a/dot_inline_dotgraph_1.svg b/dot_inline_dotgraph_1.svg new file mode 100644 index 0000000..9805e6d --- /dev/null +++ b/dot_inline_dotgraph_1.svg @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +fluxo + + + +tvbox + +TV-Box + + + +arduino + +Arduino Nano + + + +tvbox->arduino + + +Mensagem serial <code, msg, TTL> + + + +arduino->tvbox + + +Resposta '002|OK' ou dados de PING + + + +display + +Display LCD + + + +arduino->display + + +Atualiza linha correspondente + + + +buzzer + +Buzzer + + + +arduino->buzzer + + +Feedback sonoro (SUCCESS / FAIL) + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dot_inline_dotgraph_1_org.svg b/dot_inline_dotgraph_1_org.svg new file mode 100644 index 0000000..1f0d018 --- /dev/null +++ b/dot_inline_dotgraph_1_org.svg @@ -0,0 +1,65 @@ + + + + + + +fluxo + + + +tvbox + +TV-Box + + + +arduino + +Arduino Nano + + + +tvbox->arduino + + +Mensagem serial <code, msg, TTL> + + + +arduino->tvbox + + +Resposta '002|OK' ou dados de PING + + + +display + +Display LCD + + + +arduino->display + + +Atualiza linha correspondente + + + +buzzer + +Buzzer + + + +arduino->buzzer + + +Feedback sonoro (SUCCESS / FAIL) + + + diff --git a/index.html b/index.html index f66e8a0..154b9f9 100644 --- a/index.html +++ b/index.html @@ -110,6 +110,7 @@

    • CristalLiq-serial.ino: ponto de entrada e lógica principal.
    • frame.h/.cpp: implementação da classe SerialProtocol.
    • SerialProtocol: protocolo de comunicação master/slave por serial sobre USB.
    • +
    • Para mais detalhes sobre o fluxo de mensagens, veja a página: Protocolo Serial e Fluxo de Controle

    Uso

    @@ -119,8 +120,11 @@

    Máquina de Estado do protocolo

    -

    !

    - +
    + +
    +Máquina de Estados
    + diff --git a/menudata.js b/menudata.js index a8b4b24..1f1676c 100644 --- a/menudata.js +++ b/menudata.js @@ -24,6 +24,7 @@ */ var menudata={children:[ {text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}, diff --git a/navtreedata.js b/navtreedata.js index 2fd3209..ebc41ef 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -26,6 +26,7 @@ var NAVTREE = [ [ "ModuloArduino", "index.html", [ [ "Módulo Arduino - CristalLiq", "index.html", "index" ], + [ "Protocolo Serial e Fluxo de Controle", "protocolo_serial.html", null ], [ "Classes", "annotated.html", [ [ "Class List", "annotated.html", "annotated_dup" ], [ "Class Index", "classes.html", null ], diff --git a/navtreeindex0.js b/navtreeindex0.js index 85d7664..bf73343 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -1,45 +1,45 @@ var NAVTREEINDEX0 = { -"CristalLiq-serial_8ino.html":[2,0,0,0], -"CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5":[2,0,0,0,19], -"CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[2,0,0,0,18], -"CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[2,0,0,0,3], -"CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2":[2,0,0,0,9], -"CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13":[2,0,0,0,4], -"CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[2,0,0,0,15], -"CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2":[2,0,0,0,2], -"CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20":[2,0,0,0,25], -"CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[2,0,0,0,11], -"CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110":[2,0,0,0,20], -"CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[2,0,0,0,13], -"CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d":[2,0,0,0,23], -"CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da":[2,0,0,0,12], -"CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77":[2,0,0,0,24], -"CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174":[2,0,0,0,10], -"CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250":[2,0,0,0,22], -"CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[2,0,0,0,16], -"CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[2,0,0,0,17], -"CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663":[2,0,0,0,5], -"CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805":[2,0,0,0,8], -"CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef":[2,0,0,0,6], -"CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[2,0,0,0,7], -"CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021":[2,0,0,0,14], -"CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329":[2,0,0,0,28], -"CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f":[2,0,0,0,26], -"CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857":[2,0,0,0,27], -"CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f":[2,0,0,0,21], -"annotated.html":[1,0], -"classSerialProtocol.html":[1,0,2], -"classes.html":[1,1], -"dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[2,0,0], -"files.html":[2,0], -"frame_8h_source.html":[2,0,0,1], -"functions.html":[1,2,0], -"functions_vars.html":[1,2,1], -"globals.html":[2,1,0], -"globals_defs.html":[2,1,3], -"globals_func.html":[2,1,1], -"globals_vars.html":[2,1,2], +"CristalLiq-serial_8ino.html":[3,0,0,0], +"CristalLiq-serial_8ino.html#a03c938c23e2eba81d9cdae2eae52aeb5":[3,0,0,0,19], +"CristalLiq-serial_8ino.html#a078b6c12f1ac6819cecef90ab5870276":[3,0,0,0,18], +"CristalLiq-serial_8ino.html#a0afcbd744f54831f6fb36c9ad8c5b46f":[3,0,0,0,3], +"CristalLiq-serial_8ino.html#a114bf58c569f23fae99f81503de6edf2":[3,0,0,0,9], +"CristalLiq-serial_8ino.html#a145103118f6d9d1129aa4509cf214a13":[3,0,0,0,4], +"CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a":[3,0,0,0,15], +"CristalLiq-serial_8ino.html#a280feb883e9d4a7edcc69c8bcb9f38f2":[3,0,0,0,2], +"CristalLiq-serial_8ino.html#a420f122736aa560ba7cdaeece4e69f20":[3,0,0,0,25], +"CristalLiq-serial_8ino.html#a44d4ae7dc6a2421ede41634200d30b93":[3,0,0,0,11], +"CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110":[3,0,0,0,20], +"CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d":[3,0,0,0,13], +"CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d":[3,0,0,0,23], +"CristalLiq-serial_8ino.html#a5f4a53177275806e5c1832a76ce5b7da":[3,0,0,0,12], +"CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77":[3,0,0,0,24], +"CristalLiq-serial_8ino.html#a7a4d81092b3cee058ef3cfc9a322f174":[3,0,0,0,10], +"CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250":[3,0,0,0,22], +"CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26":[3,0,0,0,16], +"CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58":[3,0,0,0,17], +"CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663":[3,0,0,0,5], +"CristalLiq-serial_8ino.html#ab1586d6a1539e7921374aeea8b907805":[3,0,0,0,8], +"CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef":[3,0,0,0,6], +"CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e":[3,0,0,0,7], +"CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021":[3,0,0,0,14], +"CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329":[3,0,0,0,28], +"CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f":[3,0,0,0,26], +"CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857":[3,0,0,0,27], +"CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f":[3,0,0,0,21], +"annotated.html":[2,0], +"classSerialProtocol.html":[2,0,2], +"classes.html":[2,1], +"dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[3,0,0], +"files.html":[3,0], +"frame_8h_source.html":[3,0,0,1], +"functions.html":[2,2,0], +"functions_vars.html":[2,2,1], +"globals.html":[3,1,0], +"globals_defs.html":[3,1,3], +"globals_func.html":[3,1,1], +"globals_vars.html":[3,1,2], "index.html":[0], "index.html":[], "index.html#arch_sec":[0,2], @@ -48,17 +48,18 @@ var NAVTREEINDEX0 = "index.html#intro_sec":[0,0], "index.html#usage_sec":[0,3], "pages.html":[], -"structDisplay.html":[1,0,0], -"structDisplay.html#a0a0c96f5840194b9372bdc87376a653a":[1,0,0,4], -"structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14":[1,0,0,3], -"structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476":[1,0,0,5], -"structDisplay.html#a7bd606b7665abe13961d2059976b9228":[1,0,0,1], -"structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894":[1,0,0,0], -"structDisplay.html#ab0723cc5d5efae503b835d73de2c8395":[1,0,0,7], -"structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d":[1,0,0,6], -"structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d":[1,0,0,2], -"structProtocolMessage.html":[1,0,1], -"structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b":[1,0,1,2], -"structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73":[1,0,1,1], -"structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a":[1,0,1,0] +"protocolo_serial.html":[1], +"structDisplay.html":[2,0,0], +"structDisplay.html#a0a0c96f5840194b9372bdc87376a653a":[2,0,0,4], +"structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14":[2,0,0,3], +"structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476":[2,0,0,5], +"structDisplay.html#a7bd606b7665abe13961d2059976b9228":[2,0,0,1], +"structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894":[2,0,0,0], +"structDisplay.html#ab0723cc5d5efae503b835d73de2c8395":[2,0,0,7], +"structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d":[2,0,0,6], +"structDisplay.html#ac972636358b244dec0cdec88ec5f1e1d":[2,0,0,2], +"structProtocolMessage.html":[2,0,1], +"structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b":[2,0,1,2], +"structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73":[2,0,1,1], +"structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a":[2,0,1,0] }; diff --git a/pages.html b/pages.html new file mode 100644 index 0000000..fb59483 --- /dev/null +++ b/pages.html @@ -0,0 +1,110 @@ + + + + + + + +ModuloArduino: Related Pages + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     Protocolo Serial e Fluxo de ControleComunicação entre a TV-Box e o Arduino Nano
    +
    +
    +
    + + + + diff --git a/protocolo_serial.html b/protocolo_serial.html new file mode 100644 index 0000000..6e9dfda --- /dev/null +++ b/protocolo_serial.html @@ -0,0 +1,115 @@ + + + + + + + +ModuloArduino: Protocolo Serial e Fluxo de Controle + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Protocolo Serial e Fluxo de Controle
    +
    +
    +

    Comunicação entre a TV-Box e o Arduino Nano.

    +

    O diagrama abaixo mostra o fluxo típico de mensagens e ações:

    +
    +
    +
    See also
    loop()
    +
    +atualizaDisplay()
    +
    +parseMessage()
    +
    +
    +
    + + + + diff --git a/search/all_2.js b/search/all_2.js index fb194b6..0a9a0f0 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -2,7 +2,8 @@ var searchData= [ ['code_0',['code',['../structProtocolMessage.html#a4d8a27be4f46c348888b67a2b9a0100a',1,'ProtocolMessage']]], ['col_1',['COL',['../CristalLiq-serial_8ino.html#ab00f2b8e8bad4307cf0775a5520cf663',1,'CristalLiq-serial.ino']]], - ['copian_2',['copiaN',['../CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110',1,'CristalLiq-serial.ino']]], - ['cristalliq_3',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['cristalliq_2dserial_2eino_4',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] + ['controle_2',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['copian_3',['copiaN',['../CristalLiq-serial_8ino.html#a48843d919506d0d897ff1fbf86448110',1,'CristalLiq-serial.ino']]], + ['cristalliq_4',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], + ['cristalliq_2dserial_2eino_5',['CristalLiq-serial.ino',['../CristalLiq-serial_8ino.html',1,'']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 2594af9..e09d04b 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,12 +1,13 @@ var searchData= [ - ['de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['de_20rolagem_1',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], - ['defaultmessage_2',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], - ['defaultmessagesize_3',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], - ['disparray_4',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]], - ['display_5',['Display',['../structDisplay.html',1,'']]], - ['display_5fupdate_5fdelay_6',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], - ['do_20loop_7',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]], - ['do_20protocolo_8',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['de_20estado_20do_20protocolo_1',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['de_20rolagem_2',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['defaultmessage_3',['defaultMessage',['../structDisplay.html#a7fb2f88101c6a44078f1cab5d24a2894',1,'Display']]], + ['defaultmessagesize_4',['defaultMessageSize',['../structDisplay.html#a7bd606b7665abe13961d2059976b9228',1,'Display']]], + ['disparray_5',['dispArray',['../CristalLiq-serial_8ino.html#a795151f055a96eb58c8ecdf82a8c9a77',1,'CristalLiq-serial.ino']]], + ['display_6',['Display',['../structDisplay.html',1,'']]], + ['display_5fupdate_5fdelay_7',['DISPLAY_UPDATE_DELAY',['../CristalLiq-serial_8ino.html#ab43c93c99bc4310d8f6d6a07877771ef',1,'CristalLiq-serial.ino']]], + ['do_20loop_8',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]], + ['do_20protocolo_9',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js index 5ad9fc4..f6711d9 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,5 +1,6 @@ var searchData= [ - ['estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], - ['estrutura_20do_20loop_1',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]] + ['e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['estado_20do_20protocolo_1',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['estrutura_20do_20loop_2',['Estrutura do loop',['../CristalLiq-serial_8ino.html#autotoc_md1',1,'']]] ]; diff --git a/search/all_5.js b/search/all_5.js index 3d02f19..782e6ff 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,5 +1,6 @@ var searchData= [ ['fail_0',['FAIL',['../CristalLiq-serial_8ino.html#abb508ea8227673f419e9fe3a86c30d8e',1,'CristalLiq-serial.ino']]], - ['funcionalidades_1',['Funcionalidades',['../index.html#features_sec',1,'']]] + ['fluxo_20de_20controle_1',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['funcionalidades_2',['Funcionalidades',['../index.html#features_sec',1,'']]] ]; diff --git a/search/all_c.js b/search/all_c.js index 7536e8b..c5d97cf 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -3,5 +3,6 @@ var searchData= ['parsemessage_0',['parseMessage',['../CristalLiq-serial_8ino.html#a7b10d8ce17e310e857423a407e4d1250',1,'CristalLiq-serial.ino']]], ['ping_1',['PING',['../CristalLiq-serial_8ino.html#a4c84003a6e494d221dcb7afbf61e762d',1,'CristalLiq-serial.ino']]], ['protocolmessage_2',['ProtocolMessage',['../structProtocolMessage.html',1,'']]], - ['protocolo_3',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]] + ['protocolo_3',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], + ['protocolo_20serial_20e_20fluxo_20de_20controle_4',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] ]; diff --git a/search/all_e.js b/search/all_e.js index 6a712bb..65b9b5f 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,9 +1,10 @@ var searchData= [ - ['serialprotocol_0',['SerialProtocol',['../classSerialProtocol.html',1,'']]], - ['settime_1',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['setup_2',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]], - ['speaker_3',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['startposition_4',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], - ['success_5',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['serial_20e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['serialprotocol_1',['SerialProtocol',['../classSerialProtocol.html',1,'']]], + ['settime_2',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['setup_3',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]], + ['speaker_4',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['startposition_5',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], + ['success_6',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/pages_1.js b/search/pages_1.js index e211994..4fb1a22 100644 --- a/search/pages_1.js +++ b/search/pages_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] ]; diff --git a/search/pages_2.js b/search/pages_2.js index 9eb2294..1bf2efd 100644 --- a/search/pages_2.js +++ b/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['módulo_20arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] + ['de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] ]; diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 0000000..91b1da1 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] +]; diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 0000000..387a161 --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] +]; diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 0000000..9eb2294 --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['módulo_20arduino_20cristalliq_0',['Módulo Arduino - CristalLiq',['../index.html',1,'']]] +]; diff --git a/search/pages_6.js b/search/pages_6.js new file mode 100644 index 0000000..6513505 --- /dev/null +++ b/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['protocolo_20serial_20e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] +]; diff --git a/search/pages_7.js b/search/pages_7.js new file mode 100644 index 0000000..85047e6 --- /dev/null +++ b/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serial_20e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index 3b66e55..d035f81 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -6,7 +6,7 @@ var indexSectionsWithContent = 3: "aclps", 4: "cdkmnstuv", 5: "abcdfgklprst", - 6: "acm" + 6: "acdefmps" }; var indexSectionNames = From 59e1539f7b62dd5eb15005f23a750f44d6829c82 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Mon, 22 Sep 2025 01:24:19 +0000 Subject: [PATCH 22/29] deploy: 824d1cbd11b10b5b58b062abe4a1d40c7430c64d --- CristalLiq-serial_8ino.html | 14 +- ...fc01d736fe50cf5b977f755b675f11d_cgraph.map | 5 + ...fc01d736fe50cf5b977f755b675f11d_cgraph.md5 | 1 + ...fc01d736fe50cf5b977f755b675f11d_cgraph.svg | 64 ++++++ ...d736fe50cf5b977f755b675f11d_cgraph_org.svg | 39 ++++ ...b10d8ce17e310e857423a407e4d1250_cgraph.map | 5 + ...b10d8ce17e310e857423a407e4d1250_cgraph.md5 | 1 + ...b10d8ce17e310e857423a407e4d1250_cgraph.svg | 65 ++++++ ...8ce17e310e857423a407e4d1250_cgraph_org.svg | 40 ++++ ...e461d27b9c48d5921c00d521181f12f_cgraph.map | 20 +- ...e461d27b9c48d5921c00d521181f12f_cgraph.md5 | 2 +- ...e461d27b9c48d5921c00d521181f12f_cgraph.svg | 89 ++++++-- ...d27b9c48d5921c00d521181f12f_cgraph_org.svg | 89 ++++++-- annotated.html | 2 +- annotated_dup.js | 2 +- classSerialProtocol-members.html | 18 +- classSerialProtocol.html | 209 +++++++++++++++++- classSerialProtocol.js | 12 + ...9c0198d4dcd49daae510211c02a360_icgraph.map | 5 + ...9c0198d4dcd49daae510211c02a360_icgraph.md5 | 1 + ...9c0198d4dcd49daae510211c02a360_icgraph.svg | 64 ++++++ ...98d4dcd49daae510211c02a360_icgraph_org.svg | 39 ++++ ...48b3afd55a31014ce6ada19a55b294_icgraph.map | 5 + ...48b3afd55a31014ce6ada19a55b294_icgraph.md5 | 1 + ...48b3afd55a31014ce6ada19a55b294_icgraph.svg | 64 ++++++ ...afd55a31014ce6ada19a55b294_icgraph_org.svg | 39 ++++ ...1f14dd8d42c0eddbaab83e22e87760_icgraph.map | 7 + ...1f14dd8d42c0eddbaab83e22e87760_icgraph.md5 | 1 + ...1f14dd8d42c0eddbaab83e22e87760_icgraph.svg | 83 +++++++ ...dd8d42c0eddbaab83e22e87760_icgraph_org.svg | 58 +++++ ...8cce1b0a2fe9c857aa0f63527439bf_icgraph.map | 5 + ...8cce1b0a2fe9c857aa0f63527439bf_icgraph.md5 | 1 + ...8cce1b0a2fe9c857aa0f63527439bf_icgraph.svg | 64 ++++++ ...1b0a2fe9c857aa0f63527439bf_icgraph_org.svg | 39 ++++ frame_8h_source.html | 47 ++-- functions.html | 9 + functions_func.html | 110 +++++++++ functions_vars.html | 3 + index.html | 6 +- menudata.js | 1 + navtreedata.js | 1 + navtreeindex0.js | 12 +- search/all_12.js | 4 + search/all_a.js | 5 +- search/all_d.js | 9 +- search/all_e.js | 17 +- search/functions_4.js | 3 +- search/functions_5.js | 7 + search/functions_6.js | 4 + search/searchdata.js | 6 +- search/variables_3.js | 5 +- search/variables_5.js | 2 +- search/variables_6.js | 4 +- search/variables_7.js | 4 +- search/variables_8.js | 3 +- search/variables_9.js | 4 + 56 files changed, 1309 insertions(+), 110 deletions(-) create mode 100644 CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.map create mode 100644 CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.md5 create mode 100644 CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.svg create mode 100644 CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph_org.svg create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.map create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.md5 create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.svg create mode 100644 CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph_org.svg create mode 100644 classSerialProtocol.js create mode 100644 classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.map create mode 100644 classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.md5 create mode 100644 classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.svg create mode 100644 classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph_org.svg create mode 100644 classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.map create mode 100644 classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.md5 create mode 100644 classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.svg create mode 100644 classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph_org.svg create mode 100644 classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.map create mode 100644 classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.md5 create mode 100644 classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.svg create mode 100644 classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph_org.svg create mode 100644 classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.map create mode 100644 classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.md5 create mode 100644 classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.svg create mode 100644 classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph_org.svg create mode 100644 functions_func.html create mode 100644 search/all_12.js create mode 100644 search/functions_5.js create mode 100644 search/functions_6.js create mode 100644 search/variables_9.js diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 1b48e03..6002131 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -213,7 +213,7 @@

    Detailed Description

    O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.

    -

    O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há nove tipos de mensagens emitidas pela TV-Box.

      +

      O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há nove tipos de mensagens emitidas pela TV-Box.

      • <100|0|0> → PING
      • <200|TEXTO|TIMEOUT> → TIME (Linha 0, para sala, data e hora)
        @@ -680,7 +680,7 @@

        Here is the call graph for this function:
        -
        +

    @@ -710,6 +710,11 @@

    Note
    A função não recebe parâmetros nem retorna valor. Atua diretamente sobre as variáveis globais usbProto e netMessage.
    +Here is the call graph for this function:
    +
    +
    +
    +
    Here is the caller graph for this function:
    diff --git a/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.map b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.map new file mode 100644 index 0000000..d5e86b5 --- /dev/null +++ b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.md5 b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.md5 new file mode 100644 index 0000000..f323147 --- /dev/null +++ b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.md5 @@ -0,0 +1 @@ +b8886e6abffac048bca06b21c72e0c26 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.svg b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.svg new file mode 100644 index 0000000..7180cc9 --- /dev/null +++ b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +setup + + +Node1 + + +setup + + + + + +Node2 + + +SerialProtocol::setBaudRate + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph_org.svg b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph_org.svg new file mode 100644 index 0000000..2889c31 --- /dev/null +++ b/CristalLiq-serial_8ino_a4fc01d736fe50cf5b977f755b675f11d_cgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +setup + + +Node1 + + +setup + + + + + +Node2 + + +SerialProtocol::setBaudRate + + + + + +Node1->Node2 + + + + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.map b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.map new file mode 100644 index 0000000..d445fef --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.md5 b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.md5 new file mode 100644 index 0000000..cb219f5 --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.md5 @@ -0,0 +1 @@ +66b18fa2cf35f55efe9fdbdc8f914a6a \ No newline at end of file diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.svg b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.svg new file mode 100644 index 0000000..f0206cf --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + +parseMessage + + +Node1 + + +parseMessage + + + + + +Node2 + + +SerialProtocol::removeAccent +Marker + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph_org.svg b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph_org.svg new file mode 100644 index 0000000..6679edd --- /dev/null +++ b/CristalLiq-serial_8ino_a7b10d8ce17e310e857423a407e4d1250_cgraph_org.svg @@ -0,0 +1,40 @@ + + + + + + +parseMessage + + +Node1 + + +parseMessage + + + + + +Node2 + + +SerialProtocol::removeAccent +Marker + + + + + +Node1->Node2 + + + + + + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map index af9acfa..9966849 100644 --- a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.map @@ -1,9 +1,15 @@ - - - - - - - + + + + + + + + + + + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 index 57c06d7..2805209 100644 --- a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 @@ -1 +1 @@ -b17ca9c3e29836f26e8a612b17d8cb82 \ No newline at end of file +d2ede98bc1e171a6f6847e14349fc0a7 \ No newline at end of file diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg index 4602439..b5e0507 100644 --- a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph.svg @@ -4,8 +4,8 @@ - + - + loop Node1 - -loop + +loop @@ -31,8 +31,8 @@ Node2 - -atualizaDisplay + +atualizaDisplay @@ -40,8 +40,8 @@ Node1->Node2 - - + + @@ -49,8 +49,8 @@ Node4 - -parseMessage + +parseMessage @@ -58,8 +58,44 @@ Node1->Node4 - - + + + + + + + +Node6 + + +SerialProtocol::receiveFrame + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +SerialProtocol::sendFrame + + + + + +Node1->Node7 + + + @@ -67,8 +103,8 @@ Node3 - -copiaN + +copiaN @@ -76,8 +112,27 @@ Node2->Node3 - - + + + + + + + +Node5 + + +SerialProtocol::removeAccent +Marker + + + + + +Node4->Node5 + + + diff --git a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg index 84dc845..b6cb0ce 100644 --- a/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg +++ b/CristalLiq-serial_8ino_afe461d27b9c48d5921c00d521181f12f_cgraph_org.svg @@ -4,16 +4,16 @@ - - + + loop Node1 - -loop + +loop @@ -21,8 +21,8 @@ Node2 - -atualizaDisplay + +atualizaDisplay @@ -30,8 +30,8 @@ Node1->Node2 - - + + @@ -39,8 +39,8 @@ Node4 - -parseMessage + +parseMessage @@ -48,8 +48,44 @@ Node1->Node4 - - + + + + + + + +Node6 + + +SerialProtocol::receiveFrame + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +SerialProtocol::sendFrame + + + + + +Node1->Node7 + + + @@ -57,8 +93,8 @@ Node3 - -copiaN + +copiaN @@ -66,8 +102,27 @@ Node2->Node3 - - + + + + + + + +Node5 + + +SerialProtocol::removeAccent +Marker + + + + + +Node4->Node5 + + + diff --git a/annotated.html b/annotated.html index 7589f95..e1eca75 100644 --- a/annotated.html +++ b/annotated.html @@ -97,7 +97,7 @@ - +
     CDisplayRepresenta o estado de uma linha do display LCD
     CProtocolMessageRepresenta a decodificação de uma mensagem recebida
     CSerialProtocol
     CSerialProtocolGerencia a comunicação serial no protocolo master/slave usado pela TV-Box
    diff --git a/annotated_dup.js b/annotated_dup.js index e7d84a4..c22d42b 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -2,5 +2,5 @@ var annotated_dup = [ [ "Display", "structDisplay.html", "structDisplay" ], [ "ProtocolMessage", "structProtocolMessage.html", "structProtocolMessage" ], - [ "SerialProtocol", "classSerialProtocol.html", null ] + [ "SerialProtocol", "classSerialProtocol.html", "classSerialProtocol" ] ]; \ No newline at end of file diff --git a/classSerialProtocol-members.html b/classSerialProtocol-members.html index d6074e6..d3cc35e 100644 --- a/classSerialProtocol-members.html +++ b/classSerialProtocol-members.html @@ -96,15 +96,15 @@

    This is the complete list of members for SerialProtocol, including all inherited members.

    - - - - - - - - - + + + + + + + + +
    machState (defined in SerialProtocol)SerialProtocol
    receivedChars (defined in SerialProtocol)SerialProtocol
    receiveFrame() (defined in SerialProtocol)SerialProtocol
    removeAccentMarker(char *str) (defined in SerialProtocol)SerialProtocol
    sendChars (defined in SerialProtocol)SerialProtocol
    sendFrame(char *message) (defined in SerialProtocol)SerialProtocol
    SerialProtocol() (defined in SerialProtocol)SerialProtocol
    setBaudRate(int baudRate) (defined in SerialProtocol)SerialProtocol
    ~SerialProtocol() (defined in SerialProtocol)SerialProtocolvirtual
    machStateSerialProtocol
    receivedCharsSerialProtocol
    receiveFrame()SerialProtocol
    removeAccentMarker(char *str)SerialProtocol
    sendCharsSerialProtocol
    sendFrame(char *message)SerialProtocol
    SerialProtocol()SerialProtocol
    setBaudRate(int baudRate)SerialProtocol
    ~SerialProtocol()SerialProtocolvirtual
    diff --git a/classSerialProtocol.html b/classSerialProtocol.html index 731aed1..f8da824 100644 --- a/classSerialProtocol.html +++ b/classSerialProtocol.html @@ -97,34 +97,227 @@
    SerialProtocol Class Reference
    + +

    Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box. + More...

    + +

    #include <frame.h>

    - + + + + + + + + - + + - + + - + +

    Public Member Functions

    -void receiveFrame ()
     SerialProtocol ()
     Construtor padrão da classe SerialProtocol.
     
    virtual ~SerialProtocol ()
     Destrutor virtual.
     
    void receiveFrame ()
     Recebe um frame da TV-Box e atualiza o buffer receivedChars.
     
    -void sendFrame (char *message)
    void sendFrame (char *message)
     Envia uma mensagem via serial para a TV-Box.
     
    -void removeAccentMarker (char *str)
    void removeAccentMarker (char *str)
     Remove acentos e caracteres especiais de uma string.
     
    -void setBaudRate (int baudRate)
    void setBaudRate (int baudRate)
     Configura a taxa de transmissão serial.
     
    + + +

    Public Attributes

    byte machState
     Estado atual da máquina de recepção.
     
    char receivedChars [MAX_PROTOCOL_MESSAGE+1]
     Buffer para armazenar a mensagem recebida.
     
    char sendChars [MAX_PROTOCOL_MESSAGE+1]
     Buffer para armazenar a mensagem a ser enviada.
     
    +

    Detailed Description

    +

    Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box.

    +

    Esta classe é responsável por:

      +
    • Receber e montar mensagens do tipo <codigo,mensagem,TTL>.
    • +
    • Enviar mensagens serializadas para a TV-Box.
    • +
    • Remover caracteres de acento que podem interferir na comunicação.
    • +
    • Configurar a taxa de transmissão serial.
    • +
    +
    Note
    O buffer receivedChars armazena a mensagem recebida, sendChars armazena a mensagem a ser enviada.
    +

    Constructor & Destructor Documentation

    + +

    ◆ SerialProtocol()

    + +
    +
    + + + + + + + +
    SerialProtocol::SerialProtocol ()
    +
    + +

    Construtor padrão da classe SerialProtocol.

    +

    Inicializa os buffers e coloca a máquina em estado START.

    + +
    +
    + +

    ◆ ~SerialProtocol()

    + +
    +
    + + + + + +
    + + + + + + + +
    SerialProtocol::~SerialProtocol ()
    +
    +virtual
    +
    + +

    Destrutor virtual.

    +

    Permite que classes derivadas possam sobrescrever o destrutor.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ receiveFrame()

    + +
    +
    + + + + + + + +
    void SerialProtocol::receiveFrame ()
    +
    + +

    Recebe um frame da TV-Box e atualiza o buffer receivedChars.

    +

    A máquina de estados interpreta os caracteres de início/fim e caracteres de escape.

    +
    See also
    machState
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ removeAccentMarker()

    + +
    +
    + + + + + + + + +
    void SerialProtocol::removeAccentMarker (char * str)
    +
    + +

    Remove acentos e caracteres especiais de uma string.

    +

    Isso evita problemas de transmissão serial com caracteres acentuados.

    +
    Parameters
    + + +
    strString a ser processada.
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ sendFrame()

    + +
    +
    + + + + + + + + +
    void SerialProtocol::sendFrame (char * message)
    +
    + +

    Envia uma mensagem via serial para a TV-Box.

    +
    Parameters
    + + +
    messageMensagem a ser enviada. Deve estar formatada de acordo com o protocolo <codigo,mensagem,TTL>.
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +
    + +

    ◆ setBaudRate()

    + +
    +
    + + + + + + + + +
    void SerialProtocol::setBaudRate (int baudRate)
    +
    + +

    Configura a taxa de transmissão serial.

    +
    Parameters
    + + +
    baudRateTaxa em bauds (ex.: 9600, 115200).
    +
    +
    +
    +Here is the caller graph for this function:
    +
    +
    +
    + +
    +

    The documentation for this class was generated from the following files:
    • CristalLiq-serial/frame.h
    • CristalLiq-serial/frame.cpp
    • diff --git a/classSerialProtocol.js b/classSerialProtocol.js new file mode 100644 index 0000000..6859066 --- /dev/null +++ b/classSerialProtocol.js @@ -0,0 +1,12 @@ +var classSerialProtocol = +[ + [ "SerialProtocol", "classSerialProtocol.html#a1d526821cb05ce70e0f01d847546c8c6", null ], + [ "~SerialProtocol", "classSerialProtocol.html#a5b73bbdf2f4e1098e245cf55a2802d5b", null ], + [ "receiveFrame", "classSerialProtocol.html#a5348b3afd55a31014ce6ada19a55b294", null ], + [ "removeAccentMarker", "classSerialProtocol.html#a9d1f14dd8d42c0eddbaab83e22e87760", null ], + [ "sendFrame", "classSerialProtocol.html#a1c9c0198d4dcd49daae510211c02a360", null ], + [ "setBaudRate", "classSerialProtocol.html#adc8cce1b0a2fe9c857aa0f63527439bf", null ], + [ "machState", "classSerialProtocol.html#aac2dbba35b3ee3ae966c94dfe1978911", null ], + [ "receivedChars", "classSerialProtocol.html#a4b7f9be28536ed20f50106008fe4d7a4", null ], + [ "sendChars", "classSerialProtocol.html#aecf858e93cba525d9cb4ebfb0f380279", null ] +]; \ No newline at end of file diff --git a/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.map b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.map new file mode 100644 index 0000000..c3609fb --- /dev/null +++ b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.md5 b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.md5 new file mode 100644 index 0000000..34d1466 --- /dev/null +++ b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.md5 @@ -0,0 +1 @@ +f96f9e6531c89ea55e14104b940df6a3 \ No newline at end of file diff --git a/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.svg b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.svg new file mode 100644 index 0000000..50b1eae --- /dev/null +++ b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +SerialProtocol::sendFrame + + +Node1 + + +SerialProtocol::sendFrame + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph_org.svg b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph_org.svg new file mode 100644 index 0000000..f73ba1a --- /dev/null +++ b/classSerialProtocol_a1c9c0198d4dcd49daae510211c02a360_icgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +SerialProtocol::sendFrame + + +Node1 + + +SerialProtocol::sendFrame + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.map b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.map new file mode 100644 index 0000000..f4b147b --- /dev/null +++ b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.md5 b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.md5 new file mode 100644 index 0000000..aa13827 --- /dev/null +++ b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.md5 @@ -0,0 +1 @@ +14ed966bea03fd726aee31a60a41a26a \ No newline at end of file diff --git a/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.svg b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.svg new file mode 100644 index 0000000..d564f2b --- /dev/null +++ b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +SerialProtocol::receiveFrame + + +Node1 + + +SerialProtocol::receiveFrame + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph_org.svg b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph_org.svg new file mode 100644 index 0000000..233fe6b --- /dev/null +++ b/classSerialProtocol_a5348b3afd55a31014ce6ada19a55b294_icgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +SerialProtocol::receiveFrame + + +Node1 + + +SerialProtocol::receiveFrame + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.map b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.map new file mode 100644 index 0000000..b4d0e81 --- /dev/null +++ b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.md5 b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.md5 new file mode 100644 index 0000000..9b2fcb3 --- /dev/null +++ b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.md5 @@ -0,0 +1 @@ +8862bf216f08fc9bb30d1ca96e3e974b \ No newline at end of file diff --git a/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.svg b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.svg new file mode 100644 index 0000000..1058e18 --- /dev/null +++ b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + +SerialProtocol::removeAccentMarker + + +Node1 + + +SerialProtocol::removeAccent +Marker + + + + + +Node2 + + +parseMessage + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +loop + + + + + +Node2->Node3 + + + + + + + + + + + + + diff --git a/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph_org.svg b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph_org.svg new file mode 100644 index 0000000..6a05d1d --- /dev/null +++ b/classSerialProtocol_a9d1f14dd8d42c0eddbaab83e22e87760_icgraph_org.svg @@ -0,0 +1,58 @@ + + + + + + +SerialProtocol::removeAccentMarker + + +Node1 + + +SerialProtocol::removeAccent +Marker + + + + + +Node2 + + +parseMessage + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +loop + + + + + +Node2->Node3 + + + + + + + + diff --git a/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.map b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.map new file mode 100644 index 0000000..dab7e46 --- /dev/null +++ b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.md5 b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.md5 new file mode 100644 index 0000000..f1cff86 --- /dev/null +++ b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.md5 @@ -0,0 +1 @@ +935c74fd6da2e618fb436cd8600d40cf \ No newline at end of file diff --git a/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.svg b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.svg new file mode 100644 index 0000000..60c472c --- /dev/null +++ b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + +SerialProtocol::setBaudRate + + +Node1 + + +SerialProtocol::setBaudRate + + + + + +Node2 + + +setup + + + + + +Node1->Node2 + + + + + + + + + + + + + diff --git a/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph_org.svg b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph_org.svg new file mode 100644 index 0000000..f03b1c6 --- /dev/null +++ b/classSerialProtocol_adc8cce1b0a2fe9c857aa0f63527439bf_icgraph_org.svg @@ -0,0 +1,39 @@ + + + + + + +SerialProtocol::setBaudRate + + +Node1 + + +SerialProtocol::setBaudRate + + + + + +Node2 + + +setup + + + + + +Node1->Node2 + + + + + + + + diff --git a/frame_8h_source.html b/frame_8h_source.html index c6d78ab..7bf621f 100644 --- a/frame_8h_source.html +++ b/frame_8h_source.html @@ -105,26 +105,35 @@
      5#define MAX_STRING 80
      6#define MAX_PROTOCOL_MESSAGE MAX_STRING + 4 // ddd,maior string já desprezados os caracteres de inicio e fim '<' e '>'
      7
      -
      8enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
      -
      9
      -
      - -
      11 public:
      -
      12 byte machState;
      -
      13 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
      -
      14 char sendChars[MAX_PROTOCOL_MESSAGE+1];
      -
      15
      - -
      17 virtual ~SerialProtocol();
      -
      18 void receiveFrame();
      -
      19 void sendFrame(char* message);
      -
      20 void removeAccentMarker(char* str);
      -
      21 void setBaudRate(int baudRate);
      -
      22};
      +
      12enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
      +
      13
      +
      + +
      28 public:
      + +
      36 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
      +
      40 char sendChars[MAX_PROTOCOL_MESSAGE+1];
      +
      41
      + +
      52 virtual ~SerialProtocol();
      +
      61 void receiveFrame();
      +
      68 void sendFrame(char* message);
      +
      76 void removeAccentMarker(char* str);
      +
      82 void setBaudRate(int baudRate);
      +
      83};
      -
      23
      -
      24#endif // FRAME_H
      -
      Definition frame.h:10
      +
      84
      +
      85#endif // FRAME_H
      +
      Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box.
      Definition frame.h:27
      +
      void sendFrame(char *message)
      Envia uma mensagem via serial para a TV-Box.
      Definition frame.cpp:145
      +
      SerialProtocol()
      Construtor padrão da classe SerialProtocol.
      Definition frame.cpp:44
      +
      char receivedChars[MAX_PROTOCOL_MESSAGE+1]
      Buffer para armazenar a mensagem recebida.
      Definition frame.h:36
      +
      void receiveFrame()
      Recebe um frame da TV-Box e atualiza o buffer receivedChars.
      Definition frame.cpp:80
      +
      virtual ~SerialProtocol()
      Destrutor virtual.
      Definition frame.cpp:51
      +
      void removeAccentMarker(char *str)
      Remove acentos e caracteres especiais de uma string.
      Definition frame.cpp:65
      +
      byte machState
      Estado atual da máquina de recepção.
      Definition frame.h:32
      +
      void setBaudRate(int baudRate)
      Configura a taxa de transmissão serial.
      Definition frame.cpp:58
      +
      char sendChars[MAX_PROTOCOL_MESSAGE+1]
      Buffer para armazenar a mensagem a ser enviada.
      Definition frame.h:40
    diff --git a/functions.html b/functions.html index c42d184..04d4a9a 100644 --- a/functions.html +++ b/functions.html @@ -95,11 +95,20 @@
  • defaultMessage : Display
  • defaultMessageSize : Display
  • keepAtZeroPosition : Display
  • +
  • machState : SerialProtocol
  • message : Display, ProtocolMessage
  • messageSize : Display
  • +
  • receivedChars : SerialProtocol
  • +
  • receiveFrame() : SerialProtocol
  • +
  • removeAccentMarker() : SerialProtocol
  • +
  • sendChars : SerialProtocol
  • +
  • sendFrame() : SerialProtocol
  • +
  • SerialProtocol() : SerialProtocol
  • +
  • setBaudRate() : SerialProtocol
  • startPosition : Display
  • toPrint : Display
  • TTL : Display, ProtocolMessage
  • +
  • ~SerialProtocol() : SerialProtocol
  • diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..18a5d21 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,110 @@ + + + + + + + +ModuloArduino: Class Members - Functions + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    ModuloArduino +
    +
    Módulo Arduino - IFSPresente
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented functions with links to the class documentation for each member:
    +
    +
    + + + + diff --git a/functions_vars.html b/functions_vars.html index 3631e58..27f069c 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -95,8 +95,11 @@
  • defaultMessage : Display
  • defaultMessageSize : Display
  • keepAtZeroPosition : Display
  • +
  • machState : SerialProtocol
  • message : Display, ProtocolMessage
  • messageSize : Display
  • +
  • receivedChars : SerialProtocol
  • +
  • sendChars : SerialProtocol
  • startPosition : Display
  • toPrint : Display
  • TTL : Display, ProtocolMessage
  • diff --git a/index.html b/index.html index 154b9f9..8b69b8a 100644 --- a/index.html +++ b/index.html @@ -95,7 +95,7 @@

    Introdução

    -

    Este módulo implementa a comunicação entre o display de cristal líquido e o Arduino via porta serial sobre USB, utilizando a classe SerialProtocol para cuidar da transmissão dos quadros.

    +

    Este módulo implementa a comunicação entre o display de cristal líquido e o Arduino via porta serial sobre USB, utilizando a classe SerialProtocol para cuidar da transmissão dos quadros.

    Funcionalidades

      @@ -108,8 +108,8 @@

      Arquitetura

      O sistema é dividido em:

      diff --git a/menudata.js b/menudata.js index 1f1676c..87604a8 100644 --- a/menudata.js +++ b/menudata.js @@ -30,6 +30,7 @@ var menudata={children:[ {text:"Class Index",url:"classes.html"}, {text:"Class Members",url:"functions.html",children:[ {text:"All",url:"functions.html"}, +{text:"Functions",url:"functions_func.html"}, {text:"Variables",url:"functions_vars.html"}]}]}, {text:"Files",url:"files.html",children:[ {text:"File List",url:"files.html"}, diff --git a/navtreedata.js b/navtreedata.js index ebc41ef..5437783 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -32,6 +32,7 @@ var NAVTREE = [ "Class Index", "classes.html", null ], [ "Class Members", "functions.html", [ [ "All", "functions.html", null ], + [ "Functions", "functions_func.html", null ], [ "Variables", "functions_vars.html", null ] ] ] ] ], diff --git a/navtreeindex0.js b/navtreeindex0.js index bf73343..e7b2ecc 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -30,12 +30,22 @@ var NAVTREEINDEX0 = "CristalLiq-serial_8ino.html#afe461d27b9c48d5921c00d521181f12f":[3,0,0,0,21], "annotated.html":[2,0], "classSerialProtocol.html":[2,0,2], +"classSerialProtocol.html#a1c9c0198d4dcd49daae510211c02a360":[2,0,2,4], +"classSerialProtocol.html#a1d526821cb05ce70e0f01d847546c8c6":[2,0,2,0], +"classSerialProtocol.html#a4b7f9be28536ed20f50106008fe4d7a4":[2,0,2,7], +"classSerialProtocol.html#a5348b3afd55a31014ce6ada19a55b294":[2,0,2,2], +"classSerialProtocol.html#a5b73bbdf2f4e1098e245cf55a2802d5b":[2,0,2,1], +"classSerialProtocol.html#a9d1f14dd8d42c0eddbaab83e22e87760":[2,0,2,3], +"classSerialProtocol.html#aac2dbba35b3ee3ae966c94dfe1978911":[2,0,2,6], +"classSerialProtocol.html#adc8cce1b0a2fe9c857aa0f63527439bf":[2,0,2,5], +"classSerialProtocol.html#aecf858e93cba525d9cb4ebfb0f380279":[2,0,2,8], "classes.html":[2,1], "dir_64032a4eeedb86ab5d4dd10c6c32e421.html":[3,0,0], "files.html":[3,0], "frame_8h_source.html":[3,0,0,1], "functions.html":[2,2,0], -"functions_vars.html":[2,2,1], +"functions_func.html":[2,2,1], +"functions_vars.html":[2,2,2], "globals.html":[3,1,0], "globals_defs.html":[3,1,3], "globals_func.html":[3,1,1], diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000..ffd49d9 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7eserialprotocol_0',['~SerialProtocol',['../classSerialProtocol.html#a5b73bbdf2f4e1098e245cf55a2802d5b',1,'SerialProtocol']]] +]; diff --git a/search/all_a.js b/search/all_a.js index 2c1c404..b58584d 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -2,6 +2,7 @@ var searchData= [ ['máquina_20de_20estado_20do_20protocolo_0',['Máquina de Estado do protocolo',['../index.html#img_sec',1,'']]], ['módulo_20arduino_20cristalliq_1',['Módulo Arduino - CristalLiq',['../index.html',1,'']]], - ['message_2',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], - ['messagesize_3',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] + ['machstate_2',['machState',['../classSerialProtocol.html#aac2dbba35b3ee3ae966c94dfe1978911',1,'SerialProtocol']]], + ['message_3',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], + ['messagesize_4',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] ]; diff --git a/search/all_d.js b/search/all_d.js index e9bbeff..fe71e6f 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,6 +1,9 @@ var searchData= [ - ['regras_20de_20rolagem_0',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], - ['rolagem_1',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], - ['row_2',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] + ['receivedchars_0',['receivedChars',['../classSerialProtocol.html#a4b7f9be28536ed20f50106008fe4d7a4',1,'SerialProtocol']]], + ['receiveframe_1',['receiveFrame',['../classSerialProtocol.html#a5348b3afd55a31014ce6ada19a55b294',1,'SerialProtocol']]], + ['regras_20de_20rolagem_2',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['removeaccentmarker_3',['removeAccentMarker',['../classSerialProtocol.html#a9d1f14dd8d42c0eddbaab83e22e87760',1,'SerialProtocol']]], + ['rolagem_4',['Regras de rolagem',['../CristalLiq-serial_8ino.html#autotoc_md0',1,'']]], + ['row_5',['ROW',['../CristalLiq-serial_8ino.html#ac6f18a9e1d00b4637522b1b469a92021',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/all_e.js b/search/all_e.js index 65b9b5f..b6e0139 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,10 +1,13 @@ var searchData= [ - ['serial_20e_20fluxo_20de_20controle_0',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], - ['serialprotocol_1',['SerialProtocol',['../classSerialProtocol.html',1,'']]], - ['settime_2',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], - ['setup_3',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]], - ['speaker_4',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], - ['startposition_5',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], - ['success_6',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] + ['sendchars_0',['sendChars',['../classSerialProtocol.html#aecf858e93cba525d9cb4ebfb0f380279',1,'SerialProtocol']]], + ['sendframe_1',['sendFrame',['../classSerialProtocol.html#a1c9c0198d4dcd49daae510211c02a360',1,'SerialProtocol']]], + ['serial_20e_20fluxo_20de_20controle_2',['Protocolo Serial e Fluxo de Controle',['../protocolo_serial.html',1,'']]], + ['serialprotocol_3',['serialprotocol',['../classSerialProtocol.html',1,'SerialProtocol'],['../classSerialProtocol.html#a1d526821cb05ce70e0f01d847546c8c6',1,'SerialProtocol::SerialProtocol()']]], + ['setbaudrate_4',['setBaudRate',['../classSerialProtocol.html#adc8cce1b0a2fe9c857aa0f63527439bf',1,'SerialProtocol']]], + ['settime_5',['SETTIME',['../CristalLiq-serial_8ino.html#a27a942da2560b15dc5291c8f386c426a',1,'CristalLiq-serial.ino']]], + ['setup_6',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]], + ['speaker_7',['SPEAKER',['../CristalLiq-serial_8ino.html#a99ab171b0b50109a6d50f1b9a5e88f26',1,'CristalLiq-serial.ino']]], + ['startposition_8',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]], + ['success_9',['SUCCESS',['../CristalLiq-serial_8ino.html#aa90cac659d18e8ef6294c7ae337f6b58',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/functions_4.js b/search/functions_4.js index 0e2c8b7..fc55fa0 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -1,4 +1,5 @@ var searchData= [ - ['setup_0',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]] + ['receiveframe_0',['receiveFrame',['../classSerialProtocol.html#a5348b3afd55a31014ce6ada19a55b294',1,'SerialProtocol']]], + ['removeaccentmarker_1',['removeAccentMarker',['../classSerialProtocol.html#a9d1f14dd8d42c0eddbaab83e22e87760',1,'SerialProtocol']]] ]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..2742677 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sendframe_0',['sendFrame',['../classSerialProtocol.html#a1c9c0198d4dcd49daae510211c02a360',1,'SerialProtocol']]], + ['serialprotocol_1',['SerialProtocol',['../classSerialProtocol.html#a1d526821cb05ce70e0f01d847546c8c6',1,'SerialProtocol']]], + ['setbaudrate_2',['setBaudRate',['../classSerialProtocol.html#adc8cce1b0a2fe9c857aa0f63527439bf',1,'SerialProtocol']]], + ['setup_3',['setup',['../CristalLiq-serial_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'CristalLiq-serial.ino']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..ffd49d9 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_7eserialprotocol_0',['~SerialProtocol',['../classSerialProtocol.html#a5b73bbdf2f4e1098e245cf55a2802d5b',1,'SerialProtocol']]] +]; diff --git a/search/searchdata.js b/search/searchdata.js index d035f81..01e5400 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,10 +1,10 @@ var indexSectionsWithContent = { - 0: "abcdefgiklmnprstuv", + 0: "abcdefgiklmnprstuv~", 1: "dps", 2: "c", - 3: "aclps", - 4: "cdkmnstuv", + 3: "aclprs~", + 4: "cdkmnrstuv", 5: "abcdfgklprst", 6: "acdefmps" }; diff --git a/search/variables_3.js b/search/variables_3.js index adc40f1..37c4a86 100644 --- a/search/variables_3.js +++ b/search/variables_3.js @@ -1,5 +1,6 @@ var searchData= [ - ['message_0',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], - ['messagesize_1',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] + ['machstate_0',['machState',['../classSerialProtocol.html#aac2dbba35b3ee3ae966c94dfe1978911',1,'SerialProtocol']]], + ['message_1',['message',['../structProtocolMessage.html#a343722a2b24dac75466e5255eec86b73',1,'ProtocolMessage::message'],['../structDisplay.html#a4d5de0df2b02a46203e2187bbe127a14',1,'Display::message']]], + ['messagesize_2',['messageSize',['../structDisplay.html#a0a0c96f5840194b9372bdc87376a653a',1,'Display']]] ]; diff --git a/search/variables_5.js b/search/variables_5.js index 5d17841..1514a85 100644 --- a/search/variables_5.js +++ b/search/variables_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['startposition_0',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]] + ['receivedchars_0',['receivedChars',['../classSerialProtocol.html#a4b7f9be28536ed20f50106008fe4d7a4',1,'SerialProtocol']]] ]; diff --git a/search/variables_6.js b/search/variables_6.js index 669615c..56cfba9 100644 --- a/search/variables_6.js +++ b/search/variables_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['toprint_0',['toPrint',['../structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d',1,'Display']]], - ['ttl_1',['ttl',['../structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b',1,'ProtocolMessage::TTL'],['../structDisplay.html#ab0723cc5d5efae503b835d73de2c8395',1,'Display::TTL']]] + ['sendchars_0',['sendChars',['../classSerialProtocol.html#aecf858e93cba525d9cb4ebfb0f380279',1,'SerialProtocol']]], + ['startposition_1',['startPosition',['../structDisplay.html#a552fa397a37dd2a8d69da0c4b3c9e476',1,'Display']]] ]; diff --git a/search/variables_7.js b/search/variables_7.js index cb2f590..669615c 100644 --- a/search/variables_7.js +++ b/search/variables_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['uptime_0',['uptime',['../CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f',1,'CristalLiq-serial.ino']]], - ['usbproto_1',['usbProto',['../CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857',1,'CristalLiq-serial.ino']]] + ['toprint_0',['toPrint',['../structDisplay.html#ac28c8904cd267c495a7ba8c4d900410d',1,'Display']]], + ['ttl_1',['ttl',['../structProtocolMessage.html#a1ee3deb71b8e77ea46eaca690037d26b',1,'ProtocolMessage::TTL'],['../structDisplay.html#ab0723cc5d5efae503b835d73de2c8395',1,'Display::TTL']]] ]; diff --git a/search/variables_8.js b/search/variables_8.js index fb51455..cb2f590 100644 --- a/search/variables_8.js +++ b/search/variables_8.js @@ -1,4 +1,5 @@ var searchData= [ - ['version_0',['VERSION',['../CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329',1,'CristalLiq-serial.ino']]] + ['uptime_0',['uptime',['../CristalLiq-serial_8ino.html#ada266441835f6c84df287080413b8c3f',1,'CristalLiq-serial.ino']]], + ['usbproto_1',['usbProto',['../CristalLiq-serial_8ino.html#ae342651406e7075073526a83d6391857',1,'CristalLiq-serial.ino']]] ]; diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 0000000..fb51455 --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['version_0',['VERSION',['../CristalLiq-serial_8ino.html#acd4e5399668aabc70f012e800d5e6329',1,'CristalLiq-serial.ino']]] +]; From 05f974ce15964841ac5f81363c1a30c784233e33 Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Mon, 22 Sep 2025 12:24:22 +0000 Subject: [PATCH 23/29] deploy: 40375d48882011306fd692fc66f2142d02ee77b5 --- classSerialProtocol.html | 10 ++++++++-- frame_8h_source.html | 40 ++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/classSerialProtocol.html b/classSerialProtocol.html index f8da824..f9882a8 100644 --- a/classSerialProtocol.html +++ b/classSerialProtocol.html @@ -147,8 +147,14 @@
    • Remover caracteres de acento que podem interferir na comunicação.
    • Configurar a taxa de transmissão serial.
    -
    Note
    O buffer receivedChars armazena a mensagem recebida, sendChars armazena a mensagem a ser enviada.
    -

    Constructor & Destructor Documentation

    +
    Note
    O buffer receivedChars armazena a mensagem recebida, sendChars armazena a mensagem a ser enviada.
    +

    +Máquina de Estado do protocolo

    +
    + +
    +Máquina de Estados
    +

    Constructor & Destructor Documentation

    ◆ SerialProtocol()

    diff --git a/frame_8h_source.html b/frame_8h_source.html index 7bf621f..c88a3ba 100644 --- a/frame_8h_source.html +++ b/frame_8h_source.html @@ -107,33 +107,33 @@
    7
    12enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
    13
    -
    - -
    28 public:
    - -
    36 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
    -
    40 char sendChars[MAX_PROTOCOL_MESSAGE+1];
    -
    41
    - -
    52 virtual ~SerialProtocol();
    -
    61 void receiveFrame();
    -
    68 void sendFrame(char* message);
    -
    76 void removeAccentMarker(char* str);
    -
    82 void setBaudRate(int baudRate);
    -
    83};
    +
    + +
    31 public:
    + +
    39 char receivedChars[MAX_PROTOCOL_MESSAGE+1];
    +
    43 char sendChars[MAX_PROTOCOL_MESSAGE+1];
    +
    44
    + +
    55 virtual ~SerialProtocol();
    +
    64 void receiveFrame();
    +
    71 void sendFrame(char* message);
    +
    79 void removeAccentMarker(char* str);
    +
    85 void setBaudRate(int baudRate);
    +
    86};
    -
    84
    -
    85#endif // FRAME_H
    -
    Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box.
    Definition frame.h:27
    +
    87
    +
    88#endif // FRAME_H
    +
    Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box.
    Definition frame.h:30
    void sendFrame(char *message)
    Envia uma mensagem via serial para a TV-Box.
    Definition frame.cpp:145
    SerialProtocol()
    Construtor padrão da classe SerialProtocol.
    Definition frame.cpp:44
    -
    char receivedChars[MAX_PROTOCOL_MESSAGE+1]
    Buffer para armazenar a mensagem recebida.
    Definition frame.h:36
    +
    char receivedChars[MAX_PROTOCOL_MESSAGE+1]
    Buffer para armazenar a mensagem recebida.
    Definition frame.h:39
    void receiveFrame()
    Recebe um frame da TV-Box e atualiza o buffer receivedChars.
    Definition frame.cpp:80
    virtual ~SerialProtocol()
    Destrutor virtual.
    Definition frame.cpp:51
    void removeAccentMarker(char *str)
    Remove acentos e caracteres especiais de uma string.
    Definition frame.cpp:65
    -
    byte machState
    Estado atual da máquina de recepção.
    Definition frame.h:32
    +
    byte machState
    Estado atual da máquina de recepção.
    Definition frame.h:35
    void setBaudRate(int baudRate)
    Configura a taxa de transmissão serial.
    Definition frame.cpp:58
    -
    char sendChars[MAX_PROTOCOL_MESSAGE+1]
    Buffer para armazenar a mensagem a ser enviada.
    Definition frame.h:40
    +
    char sendChars[MAX_PROTOCOL_MESSAGE+1]
    Buffer para armazenar a mensagem a ser enviada.
    Definition frame.h:43
    From 836b072c04b36b21476ca76c3c764d2fe9717abf Mon Sep 17 00:00:00 2001 From: lhsacchi Date: Wed, 24 Sep 2025 14:39:09 +0000 Subject: [PATCH 24/29] deploy: 9ab8ac57fda251c84634b91205db03246500677e --- CristalLiq-serial_8ino.html | 25 ++++++++--- CristalLiq-serial_8ino__incl.map | 16 ++++--- CristalLiq-serial_8ino__incl.md5 | 2 +- CristalLiq-serial_8ino__incl.svg | 64 +++++++++++++++++---------- CristalLiq-serial_8ino__incl_org.svg | 64 +++++++++++++++++---------- copiaParcialDeString.png | Bin 0 -> 22779 bytes frame_8h_source.html | 2 +- 7 files changed, 112 insertions(+), 61 deletions(-) create mode 100644 copiaParcialDeString.png diff --git a/CristalLiq-serial_8ino.html b/CristalLiq-serial_8ino.html index 6002131..9a51948 100644 --- a/CristalLiq-serial_8ino.html +++ b/CristalLiq-serial_8ino.html @@ -102,11 +102,12 @@ More...

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    +#include <RTClib.h>
    #include "frame.h"
    Include dependency graph for CristalLiq-serial.ino:
    -
    +
    + + + + @@ -609,15 +616,21 @@

    Parameters

    @@ -206,6 +207,12 @@ unsigned long 

    uptime
     Tempo em que o Arduino está ligado em milissegundos.
     
    +RTC_DS3231 rtc
     
    +DateTime now
     
    SerialProtocol usbProto
     Classe que implementa a transmissão e recepção de quadros pela serial sobre USB.
    - + - +
    [out]destBuffer de destino (receberá a string copiada).
    [in]sizeDestTamanho do buffer de destino (número de caracteres visíveis no display).
    [in]sizeDestTamanho da string que ficará em dest, número de caracteres visíveis no display. O buffer dest precisa ter pelo menos (sizeDest+1) bytes.
    [in]origemString de origem.
    [in]sizeOrigemTamanho da string de origem.
    [in]startPosição inicial na string de origem a partir da qual a cópia deve começar (pode ser ajustada internamente).
    [in]startPosição inicial na string de origem a partir da qual a cópia deve começar (pode ser ajustada internamente pelo algoritmo).
    -
    Note
    Usa min(sizeDest, sizeOrigem) para calcular o máximo de caracteres a copiar. O destino é sempre terminado em ‘’\0'`.
    -
    +
    Note
    Usa min(sizeDest, sizeOrigem) para calcular o máximo de caracteres a copiar. O destino é sempre terminado em ‘’\0'`.
    +

    +Máquina de Estado do protocolo

    +
    + +
    +Detalhamento do Algoritmo
    +
    Here is the caller graph for this function:
    @@ -775,7 +788,7 @@

    {"", "Sem reserva de palestrante", "", 0, 0, 0, KEEP_AT_ZERO, 0},

    {"", "Aguardando Registro", "", 0, 0, 0, KEEP_AT_ZERO, 0}
    }
    -
    #define KEEP_AT_ZERO
    Definition CristalLiq-serial.ino:63
    +
    #define KEEP_AT_ZERO
    Definition CristalLiq-serial.ino:64

    Informações para as quatro linhas do Display.

    Contém as quatro linhas do display LCD. Cada posição tem:

      diff --git a/CristalLiq-serial_8ino__incl.map b/CristalLiq-serial_8ino__incl.map index a5f70db..8c2e55b 100644 --- a/CristalLiq-serial_8ino__incl.map +++ b/CristalLiq-serial_8ino__incl.map @@ -1,11 +1,13 @@ - + - + - - - - - + + + + + + + diff --git a/CristalLiq-serial_8ino__incl.md5 b/CristalLiq-serial_8ino__incl.md5 index cdb92f1..0a135a4 100644 --- a/CristalLiq-serial_8ino__incl.md5 +++ b/CristalLiq-serial_8ino__incl.md5 @@ -1 +1 @@ -8c620018c1b952aaf192a48ea50fc59c \ No newline at end of file +aacb11a199bdcd600e66cc5bc6b530bb \ No newline at end of file diff --git a/CristalLiq-serial_8ino__incl.svg b/CristalLiq-serial_8ino__incl.svg index 8385bcb..a9f7735 100644 --- a/CristalLiq-serial_8ino__incl.svg +++ b/CristalLiq-serial_8ino__incl.svg @@ -4,8 +4,8 @@ - +