diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/bc_s.png differ diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/bdwn.png differ diff --git a/closed.png b/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/closed.png differ diff --git a/deprecated.html b/deprecated.html new file mode 100644 index 0000000..b81cb4a --- /dev/null +++ b/deprecated.html @@ -0,0 +1,85 @@ + + + + + + + +x52pro-linux: Deprecated List + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Deprecated List
+
+
+
+
Global libx52_init (libx52_device **dev)
+
Connection to a supported joystick is no longer a goal of this function. It will continue to attempt to connect to the joystick during initialization so that existing clients don't break, but it is highly recommended that all clients use libx52_connect to explicitly connect to the joystick.
+
+ A future release will remove the automatic connection.
+
+
+
+ + + + diff --git a/dir_0354751298007beb2a3261692ff9cc9e.html b/dir_0354751298007beb2a3261692ff9cc9e.html new file mode 100644 index 0000000..5b8e581 --- /dev/null +++ b/dir_0354751298007beb2a3261692ff9cc9e.html @@ -0,0 +1,89 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52util Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libx52util Directory Reference
+
+
+ + + + + +

+Files

file  libx52util.h [code]
 Utility functions for the Saitek X52 MFD & LED driver library.
 
+
+ + + + diff --git a/dir_645212cc8010c2417e5956d1676a2316.html b/dir_645212cc8010c2417e5956d1676a2316.html new file mode 100644 index 0000000..cda58a3 --- /dev/null +++ b/dir_645212cc8010c2417e5956d1676a2316.html @@ -0,0 +1,82 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52/doc Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
doc Directory Reference
+
+
+
+ + + + diff --git a/dir_97aefd0d527b934f1d99a682da8fe6a9.html b/dir_97aefd0d527b934f1d99a682da8fe6a9.html new file mode 100644 index 0000000..3df6cc4 --- /dev/null +++ b/dir_97aefd0d527b934f1d99a682da8fe6a9.html @@ -0,0 +1,86 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
lib Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_c4264133ce0ceb85bd09aca42f7150c0.html b/dir_c4264133ce0ceb85bd09aca42f7150c0.html new file mode 100644 index 0000000..874043d --- /dev/null +++ b/dir_c4264133ce0ceb85bd09aca42f7150c0.html @@ -0,0 +1,89 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52 Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libx52 Directory Reference
+
+
+ + + + + +

+Files

file  libx52.h [code]
 Functions, structures and enumerations for the Saitek X52 MFD & LED driver library.
 
+
+ + + + diff --git a/dir_c802a52f71a9867085062b6c590fa632.html b/dir_c802a52f71a9867085062b6c590fa632.html new file mode 100644 index 0000000..31a7320 --- /dev/null +++ b/dir_c802a52f71a9867085062b6c590fa632.html @@ -0,0 +1,82 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/utils/cli Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cli Directory Reference
+
+
+
+ + + + diff --git a/dir_cbdb8362360e11eafe2fa3bc74cf0ffd.html b/dir_cbdb8362360e11eafe2fa3bc74cf0ffd.html new file mode 100644 index 0000000..604d037 --- /dev/null +++ b/dir_cbdb8362360e11eafe2fa3bc74cf0ffd.html @@ -0,0 +1,86 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/utils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
utils Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/doc.png differ diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..73ecbb2 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1771 @@ +/* The standard CSS for doxygen 1.8.17 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, p.intertd, 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.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #FFFFFF; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#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 #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.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.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +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 { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, 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; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .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: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + 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.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.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: #3D578C; +} + +.arrow { + color: #9CAFD4; + -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: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + 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:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @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: #2A3D61; +} + +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 #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.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:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +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:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.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.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 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.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#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: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + 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: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + 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: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + 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 #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + 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 +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/doxygen.png differ diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..ea0a7b3 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @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'); +} + +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 + + + + + + +x52pro-linux: File List + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + +
  lib
  libx52
 libx52.hFunctions, structures and enumerations for the Saitek X52 MFD & LED driver library
  libx52util
 libx52util.hUtility functions for the Saitek X52 MFD & LED driver library
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/folderclosed.png differ diff --git a/folderopen.png b/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/folderopen.png differ diff --git a/globals.html b/globals.html new file mode 100644 index 0000000..a1690ed --- /dev/null +++ b/globals.html @@ -0,0 +1,291 @@ + + + + + + + +x52pro-linux: Globals + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- l -

+
+ + + + diff --git a/globals_enum.html b/globals_enum.html new file mode 100644 index 0000000..25587cc --- /dev/null +++ b/globals_enum.html @@ -0,0 +1,97 @@ + + + + + + + +x52pro-linux: Globals + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/globals_eval.html b/globals_eval.html new file mode 100644 index 0000000..38ff221 --- /dev/null +++ b/globals_eval.html @@ -0,0 +1,204 @@ + + + + + + + +x52pro-linux: Globals + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 0000000..4742967 --- /dev/null +++ b/globals_func.html @@ -0,0 +1,139 @@ + + + + + + + +x52pro-linux: Globals + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/globals_type.html b/globals_type.html new file mode 100644 index 0000000..2598790 --- /dev/null +++ b/globals_type.html @@ -0,0 +1,79 @@ + + + + + + + +x52pro-linux: Globals + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/group__libx52clock.html b/group__libx52clock.html new file mode 100644 index 0000000..8bac9f0 --- /dev/null +++ b/group__libx52clock.html @@ -0,0 +1,513 @@ + + + + + + + +x52pro-linux: Clock control + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Clock control
+
+
+ +

Control the clocks on the MFD. +More...

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

+Enumerations

enum  libx52_clock_id { LIBX52_CLOCK_1, +LIBX52_CLOCK_2, +LIBX52_CLOCK_3 + }
 List of supported clocks on the MFD. More...
 
enum  libx52_clock_format { LIBX52_CLOCK_FORMAT_12HR, +LIBX52_CLOCK_FORMAT_24HR + }
 Supported clock formats. More...
 
enum  libx52_date_format { LIBX52_DATE_FORMAT_DDMMYY, +LIBX52_DATE_FORMAT_MMDDYY, +LIBX52_DATE_FORMAT_YYMMDD + }
 Supported date formats. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

int libx52_set_clock (libx52_device *x52, time_t time, int local)
 Set the clock. More...
 
int libx52_set_clock_timezone (libx52_device *x52, libx52_clock_id clock, int offset)
 Set the timezone for the secondary and tertiary clocks. More...
 
int libx52_set_clock_format (libx52_device *x52, libx52_clock_id clock, libx52_clock_format format)
 Set whether the clock is displayed in 12 hour or 24 hour format. More...
 
int libx52_set_time (libx52_device *x52, uint8_t hour, uint8_t minute)
 Set the hour and minute on clock 1. More...
 
int libx52_set_date (libx52_device *x52, uint8_t dd, uint8_t mm, uint8_t yy)
 Set the date. More...
 
int libx52_set_date_format (libx52_device *x52, libx52_date_format format)
 Set the date format for the MFD date display. More...
 
+

Detailed Description

+

Control the clocks on the MFD.

+

Enumeration Type Documentation

+ +

◆ libx52_clock_format

+ +
+
+ + + + +
enum libx52_clock_format
+
+ +

Supported clock formats.

+ + + +
Enumerator
LIBX52_CLOCK_FORMAT_12HR 

12-hour display on the MFD clock

+
LIBX52_CLOCK_FORMAT_24HR 

24-hour display on the MFD clock

+
+ +
+
+ +

◆ libx52_clock_id

+ +
+
+ + + + +
enum libx52_clock_id
+
+ +

List of supported clocks on the MFD.

+ + + + +
Enumerator
LIBX52_CLOCK_1 

Primary clock on the MFD, indicated by the number 1

+
LIBX52_CLOCK_2 

Secondary clock on the MFD, indicated by the number 2

+
LIBX52_CLOCK_3 

Tertiary clock on the MFD, indicated by the number 3

+
+ +
+
+ +

◆ libx52_date_format

+ +
+
+ + + + +
enum libx52_date_format
+
+ +

Supported date formats.

+ + + + +
Enumerator
LIBX52_DATE_FORMAT_DDMMYY 

Date format DD-MM-YY

+
LIBX52_DATE_FORMAT_MMDDYY 

Date format MM-DD-YY

+
LIBX52_DATE_FORMAT_YYMMDD 

Date format YY-MM-DD

+
+ +
+
+

Function Documentation

+ +

◆ libx52_set_clock()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_clock (libx52_devicex52,
time_t time,
int local 
)
+
+ +

Set the clock.

+

This function sets the primary clock's date and time with the specified Unix time value. time can be obtained from time(2). local controls whether the primary clock displays local time or GMT.

+

If this function is called again within the same minute as calculated by localtime(3) or gmtime(3), it will return LIBX52_ERROR_TRY_AGAIN, as it does not require any updates to be written to the joystick. However, if the call changes the timezone from local time to GMT or vice-versa, then the function will return 0, since it requires a write to the device to update the clock with the new timezone.

+

The secondary and tertiary clocks are driven off the primary clock and set using libx52_set_clock_timezone.

+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]timeTime value from time(3)
[in]local0 for GM time, non-zero for localtime
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_clock_format()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_clock_format (libx52_devicex52,
libx52_clock_id clock,
libx52_clock_format format 
)
+
+ +

Set whether the clock is displayed in 12 hour or 24 hour format.

+

The clocks on the X52 Pro MFD are all displayed as HH:MM, but can be set to display it in 12-hour (AM/PM) or 24-hour format. The default format if not specified is 12-hour.

+
Limitations
The hardware has a limitation that it cannot display 12:00 am in 12 hour mode - instead it will display as 00:00 am
+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]clocklibx52_clock_id
[in]formatlibx52_clock_format
+
+
+
Returns
    +
  • 0 on success
  • +
  • LIBX52_ERROR_INVALID_PARAM if x52 is not valid, or if either of clock or format are outside their respective ranges.
  • +
+
+ +
+
+ +

◆ libx52_set_clock_timezone()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_clock_timezone (libx52_devicex52,
libx52_clock_id clock,
int offset 
)
+
+ +

Set the timezone for the secondary and tertiary clocks.

+

The X52 Pro has a total of 3 clock displays. The secondary and tertiary clocks are controlled as an offset from the primary clock in minutes. However, for convenience, the X52 library calculates this offset internally and only requires you to set the timezone as the number of minutes east of UTC. offset is limited to ± 1440 minutes, and any offset outside this range will result in a return value of LIBX52_ERROR_OUT_OF_RANGE

+
Example
// Set clock 2 timezone to Pacific Standard Time (UTC-08:00)
+ +
// Set clock 3 timezone to Indian Standard Time (UTC+05:30)
+ +
+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]clocklibx52_clock_id, cannot be LIBX52_CLOCK_1
[in]offsetOffset in minutes from GMT (east is positive, west is negative)
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_date()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_date (libx52_devicex52,
uint8_t dd,
uint8_t mm,
uint8_t yy 
)
+
+ +

Set the date.

+

This is a raw API which can be used for manual control if the user so desires, however, it will not update the timezone or the time values.

+
Parameters
+ + + + + +
[in]x52Pointer to the device context
[in]ddDay to display
[in]mmMonth to display
[in]yyYear to display
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_date_format()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int libx52_set_date_format (libx52_devicex52,
libx52_date_format format 
)
+
+ +

Set the date format for the MFD date display.

+

If not set, the date format defaults to DD-MM-YY

+
Parameters
+ + + +
[in]x52Pointer to the device context
[in]formatlibx52_date_format
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_time()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_time (libx52_devicex52,
uint8_t hour,
uint8_t minute 
)
+
+ +

Set the hour and minute on clock 1.

+

This is a raw API which can be used for manual control if the user so desires, however, it will not update the timezone or the date values.

+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]hourHour to display
[in]minuteMinute to display
+
+
+
Returns
+
+ +
+
+
+
int libx52_set_clock_timezone(libx52_device *x52, libx52_clock_id clock, int offset)
Set the timezone for the secondary and tertiary clocks.
+
@ LIBX52_CLOCK_2
Definition: libx52.h:57
+ + + + diff --git a/group__libx52dev.html b/group__libx52dev.html new file mode 100644 index 0000000..a637e58 --- /dev/null +++ b/group__libx52dev.html @@ -0,0 +1,190 @@ + + + + + + + +x52pro-linux: Device Handling + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Device Handling
+
+
+ +

Handle connections to the device. +More...

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

+Functions

int libx52_connect (libx52_device *dev)
 Connect to the X52 device. More...
 
int libx52_disconnect (libx52_device *dev)
 Disconnect from the X52 device. More...
 
bool libx52_is_connected (libx52_device *dev)
 Check if joystick is connected. More...
 
+

Detailed Description

+

Handle connections to the device.

+

These functions allow the application to dynamically connect and disconnect from a supported device.

+

Function Documentation

+ +

◆ libx52_connect()

+ +
+
+ + + + + + + + +
int libx52_connect (libx52_devicedev)
+
+ +

Connect to the X52 device.

+

Attempt to connect to a supported X52/X52Pro joystick. If no supported joysticks are found, it will return LIBX52_ERROR_NO_DEVICE. If any errors are encountered during device enumeration, it will return an appropriate libx52_error_code.

+

If this function is called after it has already connected to a joystick, then it will re-enumerate the bus and ensure that it is still connected.

+
Parameters
+ + +
[in]devPointer to the device context
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+ +

◆ libx52_disconnect()

+ +
+
+ + + + + + + + +
int libx52_disconnect (libx52_devicedev)
+
+ +

Disconnect from the X52 device.

+

This function disconnects any active connections to supported joysticks. Applications must reconnect to the joystick using libx52_connect prior to calling libx52_update.

+
Parameters
+ + +
[in]devPointer to the device context
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+ +

◆ libx52_is_connected()

+ +
+
+ + + + + + + + +
bool libx52_is_connected (libx52_devicedev)
+
+ +

Check if joystick is connected.

+

This function reports if it is possible to try to communicate with a supported joystick. The application can communicate with the joystick, only if the following conditions are met.

+
    +
  1. The joystick is plugged in and powered up.
  2. +
  3. The application has called libx52_connect to connect to the joystick.
  4. +
+

This function, however, does not check if the joystick is physically connected. A call to libx52_update or libx52_vendor_command will return an error of LIBX52_ERROR_NO_DEVICE if the joystick has either been disconnected, or libx52_connect was never called.

+
Parameters
+ + +
[in]devPointer to the device context
+
+
+
Returns
Boolean indicating if the internal device handle is valid.
+ +
+
+
+ + + + diff --git a/group__libx52init.html b/group__libx52init.html new file mode 100644 index 0000000..8be1db4 --- /dev/null +++ b/group__libx52init.html @@ -0,0 +1,193 @@ + + + + + + + +x52pro-linux: Library Initialization and Deinitialization + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Library Initialization and Deinitialization
+
+
+ +

These functions are used at application entry and exit. +More...

+ + + + + +

+Typedefs

typedef struct libx52_device libx52_device
 Device context structure used by libx52. More...
 
+ + + + + + + +

+Functions

int libx52_init (libx52_device **dev)
 Initialize the X52 library. More...
 
void libx52_exit (libx52_device *dev)
 Exit the library and free up any resources used. More...
 
+

Detailed Description

+

These functions are used at application entry and exit.

+

Typedef Documentation

+ +

◆ libx52_device

+ +
+
+ + + + +
typedef struct libx52_device libx52_device
+
+ +

Device context structure used by libx52.

+

All libx52 API functions require the application to pass in a pointer to a valid device context structure. A pointer can be obtained by calling libx52_init

+ +
+
+

Function Documentation

+ +

◆ libx52_exit()

+ +
+
+ + + + + + + + +
void libx52_exit (libx52_devicedev)
+
+ +

Exit the library and free up any resources used.

+

This function releases any resources allocated by libx52_init and terminates the library. Using the freed device now is invalid and can cause errors.

+
Parameters
+ + +
[in]devPointer to the device context
+
+
+
Returns
None
+ +
+
+ +

◆ libx52_init()

+ +
+
+ + + + + + + + +
int libx52_init (libx52_device ** dev)
+
+ +

Initialize the X52 library.

+

This function initializes the libx52 library, sets up any internal data structures to access the joystick, and returns a libx52_device pointer in the output parameter. All calls to libx52 use the returned pointer to control the device.

+
Example
int rc;
+ +
rc = libx52_init(&dev);
+
if (rc != LIBX52_SUCCESS) {
+
// Error handling omitted for brevity
+
}
+
+
// Save dev for use later
+
+
Since
0.2.1 - This function attempts to connect to the joystick upon initialization. However, if no device is connected, then the library initialization does not fail, but the application must call libx52_connect prior to any calls to libx52_update
+
Deprecated:
Connection to a supported joystick is no longer a goal of this function. It will continue to attempt to connect to the joystick during initialization so that existing clients don't break, but it is highly recommended that all clients use libx52_connect to explicitly connect to the joystick.
+
+ A future release will remove the automatic connection.
+
Parameters
+ + +
[out]devPointer to a libx52_device *. This function will allocate a device context and return the pointer to the device context in this variable.
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+
+
struct libx52_device libx52_device
Device context structure used by libx52.
Definition: libx52.h:46
+
@ LIBX52_SUCCESS
Definition: libx52.h:165
+
int libx52_init(libx52_device **dev)
Initialize the X52 library.
+ + + + diff --git a/group__libx52mfdled.html b/group__libx52mfdled.html new file mode 100644 index 0000000..e43a9ed --- /dev/null +++ b/group__libx52mfdled.html @@ -0,0 +1,456 @@ + + + + + + + +x52pro-linux: MFD & LED control + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
MFD & LED control
+
+
+ +

Control the MFD text and LED states. +More...

+ + + + + + + + +

+Enumerations

enum  libx52_led_id {
+  LIBX52_LED_FIRE = 0x01, +LIBX52_LED_A = 0x02, +LIBX52_LED_B = 0x04, +LIBX52_LED_D = 0x06, +
+  LIBX52_LED_E = 0x08, +LIBX52_LED_T1 = 0x0a, +LIBX52_LED_T2 = 0x0c, +LIBX52_LED_T3 = 0x0e, +
+  LIBX52_LED_POV = 0x10, +LIBX52_LED_CLUTCH = 0x12, +LIBX52_LED_THROTTLE = 0x14 +
+ }
 Supported LED identifiers. More...
 
enum  libx52_led_state {
+  LIBX52_LED_STATE_OFF, +LIBX52_LED_STATE_ON, +LIBX52_LED_STATE_RED, +LIBX52_LED_STATE_AMBER, +
+  LIBX52_LED_STATE_GREEN +
+ }
 Supported LED states. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

int libx52_set_text (libx52_device *x52, uint8_t line, const char *text, uint8_t length)
 Set the text on an MFD line. More...
 
int libx52_set_led_state (libx52_device *x52, libx52_led_id led, libx52_led_state state)
 Set the LED state. More...
 
int libx52_set_brightness (libx52_device *x52, uint8_t mfd, uint16_t brightness)
 Set the MFD or LED brightness. More...
 
int libx52_set_shift (libx52_device *x52, uint8_t state)
 Set the state of the shift indicator. More...
 
int libx52_set_blink (libx52_device *x52, uint8_t state)
 Set the blinking state. More...
 
+

Detailed Description

+

Control the MFD text and LED states.

+

Enumeration Type Documentation

+ +

◆ libx52_led_id

+ +
+
+ + + + +
enum libx52_led_id
+
+ +

Supported LED identifiers.

+ + + + + + + + + + + + +
Enumerator
LIBX52_LED_FIRE 

Fire indicator LED

+
LIBX52_LED_A 

LED on button A

+
LIBX52_LED_B 

LED on button B

+
LIBX52_LED_D 

LED on button D

+
LIBX52_LED_E 

LED on button E

+
LIBX52_LED_T1 

LED on toggle T1

+
LIBX52_LED_T2 

LED on toggle T2

+
LIBX52_LED_T3 

LED on toggle T3

+
LIBX52_LED_POV 

LED on POV Hat

+
LIBX52_LED_CLUTCH 

LED on clutch button

+
LIBX52_LED_THROTTLE 

Throttle LED

+
+ +
+
+ +

◆ libx52_led_state

+ +
+
+ + + + +
enum libx52_led_state
+
+ +

Supported LED states.

+

Not all LEDs support all states

+ + + + + + +
Enumerator
LIBX52_LED_STATE_OFF 

LED is off

+
LIBX52_LED_STATE_ON 

LED is on. This is not supported by those LEDs which can display multiple colors

+
LIBX52_LED_STATE_RED 

LED displays red color. This is not supported by single color LEDs

+
LIBX52_LED_STATE_AMBER 

LED displays amber color. This is not supported by single color LEDs

+
LIBX52_LED_STATE_GREEN 

LED displays green color. This is not supported by single color LEDs

+
+ +
+
+

Function Documentation

+ +

◆ libx52_set_blink()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int libx52_set_blink (libx52_devicex52,
uint8_t state 
)
+
+ +

Set the blinking state.

+

The X52 Pro has a "blink" state where it blinks the clutch and hat LEDs.

+
Parameters
+ + + +
[in]x52Pointer to the device context
[in]state0 for off, 1 for on
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_brightness()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_brightness (libx52_devicex52,
uint8_t mfd,
uint16_t brightness 
)
+
+ +

Set the MFD or LED brightness.

+

The brightness of the MFD display and the button LEDs can be controlled individually. brightness should be a value between 0 and 128. While the library does not fail on values higher than 128, the effect may not be what is intended.

+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]mfd0 for LED brightness, 1 for MFD brightness
[in]brightnessBrightness level to set
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_led_state()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_led_state (libx52_devicex52,
libx52_led_id led,
libx52_led_state state 
)
+
+ +

Set the LED state.

+

The X52 pro has several LEDs that can be individually controlled. This function allows you to set the state of each LED in the internal data structures.

+

Note that the LEDs referred to by LIBX52_LED_FIRE and LIBX52_LED_THROTTLE support only the states LIBX52_LED_STATE_OFF and LIBX52_LED_STATE_ON. The remaining LEDs support all the states with the exception of LIBX52_LED_STATE_ON.

+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]ledLED identifier (refer libx52_led_id)
[in]stateState of the LED (refer libx52_led_state)
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_shift()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int libx52_set_shift (libx52_devicex52,
uint8_t state 
)
+
+ +

Set the state of the shift indicator.

+

The X52 Pro MFD has a single shift indicator that indicates when the "shift" button is pressed.

+
Parameters
+ + + +
[in]x52Pointer to the device context
[in]state0 for off, 1 for on
+
+
+
Returns
+
+ +
+
+ +

◆ libx52_set_text()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_set_text (libx52_devicex52,
uint8_t line,
const char * text,
uint8_t length 
)
+
+ +

Set the text on an MFD line.

+

The Multifunction display (MFD) supports 3 lines of up to 16 characters. This function will set the text into the internal data structures.

+

text must be a pointer to an array of bytes, each byte represents a code point on the MFD's internal character map. length is the length of this array.

+

line must be 0, 1, or 2 and refers to the first, second or third line of the MFD respectively.

+
Limitations
This function can only store a maximum of 16 characters per line. Any additional characters are silently discarded.
+
Parameters
+ + + + + +
[in]x52Pointer to the device context
[in]lineLine to be updated (0, 1 or 2)
[in]textPointer to the text string. The text must be mapped to the code page of the X52 display.
[in]lengthLength of the text to display
+
+
+
Returns
+
+ +
+
+
+ + + + diff --git a/group__libx52misc.html b/group__libx52misc.html new file mode 100644 index 0000000..961fc6d --- /dev/null +++ b/group__libx52misc.html @@ -0,0 +1,352 @@ + + + + + + + +x52pro-linux: Miscellaneous + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Miscellaneous
+
+
+ +

Miscellaneous functionality. +More...

+ + + + + + + + +

+Enumerations

enum  libx52_error_code {
+  LIBX52_SUCCESS = 0, +LIBX52_ERROR_INIT_FAILURE, +LIBX52_ERROR_OUT_OF_MEMORY, +LIBX52_ERROR_INVALID_PARAM, +
+  LIBX52_ERROR_NOT_SUPPORTED, +LIBX52_ERROR_TRY_AGAIN, +LIBX52_ERROR_OUT_OF_RANGE, +LIBX52_ERROR_USB_FAILURE, +
+  LIBX52_ERROR_IO, +LIBX52_ERROR_PERM, +LIBX52_ERROR_NO_DEVICE, +LIBX52_ERROR_NOT_FOUND, +
+  LIBX52_ERROR_BUSY, +LIBX52_ERROR_TIMEOUT, +LIBX52_ERROR_OVERFLOW, +LIBX52_ERROR_PIPE, +
+  LIBX52_ERROR_INTERRUPTED +
+ }
 LibX52 Error codes. More...
 
enum  libx52_feature { LIBX52_FEATURE_LED + }
 Feature support for libx52. More...
 
+ + + + + + + + + + + + + +

+Functions

int libx52_update (libx52_device *x52)
 Update the X52. More...
 
int libx52_vendor_command (libx52_device *x52, uint16_t index, uint16_t value)
 Write a raw vendor control packet. More...
 
int libx52_check_feature (libx52_device *x52, libx52_feature feature)
 Check if the device supports the given feature. More...
 
const char * libx52_strerror (libx52_error_code error)
 Return a string representation of the error code. More...
 
+

Detailed Description

+

Miscellaneous functionality.

+

Enumeration Type Documentation

+ +

◆ libx52_error_code

+ +
+
+ + + + +
enum libx52_error_code
+
+ +

LibX52 Error codes.

+

Error codes returned by libx52

+ + + + + + + + + + + + + + + + + + +
Enumerator
LIBX52_SUCCESS 

No error, indicates success

+
LIBX52_ERROR_INIT_FAILURE 

Initialization failure

+
LIBX52_ERROR_OUT_OF_MEMORY 

Out of memory

+
LIBX52_ERROR_INVALID_PARAM 

Invalid parameter(s)

+
LIBX52_ERROR_NOT_SUPPORTED 

Not supported

+
LIBX52_ERROR_TRY_AGAIN 

No change necessary, try again

+
LIBX52_ERROR_OUT_OF_RANGE 

Clock time value or timezone out of range

+
LIBX52_ERROR_USB_FAILURE 

Error encountered during USB interaction

+
LIBX52_ERROR_IO 

Input/output error

+
LIBX52_ERROR_PERM 

Insufficient permissions

+
LIBX52_ERROR_NO_DEVICE 

No such device

+
LIBX52_ERROR_NOT_FOUND 

Entry not found

+
LIBX52_ERROR_BUSY 

Busy

+
LIBX52_ERROR_TIMEOUT 

Timeout

+
LIBX52_ERROR_OVERFLOW 

Overflow

+
LIBX52_ERROR_PIPE 

Pipe error

+
LIBX52_ERROR_INTERRUPTED 

Operation interrupted

+
+ +
+
+ +

◆ libx52_feature

+ +
+
+ + + + +
enum libx52_feature
+
+ +

Feature support for libx52.

+

Each flag is passed to libx52_check_feature to determine if the connected device has the given feature. This list of features is only limited to those which differ between the supported devices.

+ + +
Enumerator
LIBX52_FEATURE_LED 

Individual LED control

+
+ +
+
+

Function Documentation

+ +

◆ libx52_check_feature()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int libx52_check_feature (libx52_devicex52,
libx52_feature feature 
)
+
+ +

Check if the device supports the given feature.

+

This will check if the connected device supports the requested feature. It will return LIBX52_SUCCESS if it does support it, LIBX52_ERROR_NOT_SUPPORTED if it does not, and another libx52_error_code on errors.

+
Parameters
+ + + +
[in]x52Pointer to the device context
[in]featureFeature identifier (libx52_feature)
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+ +

◆ libx52_strerror()

+ +
+
+ + + + + + + + +
const char* libx52_strerror (libx52_error_code error)
+
+ +

Return a string representation of the error code.

+
Parameters
+ + +
[in]errorError code returned by libx52 function
+
+
+
Returns
Pointer to a NULL terminated string describing the error. Returned pointer must not be freed.
+ +
+
+ +

◆ libx52_update()

+ +
+
+ + + + + + + + +
int libx52_update (libx52_devicex52)
+
+ +

Update the X52.

+

All the libx52_set functions only set the internal data structures, but do not actually write anything to the joystick. This function writes the saved data to the joystick and updates the internal data structures as necessary.

+
Parameters
+ + +
[in]x52Pointer to the device context
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+ +

◆ libx52_vendor_command()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52_vendor_command (libx52_devicex52,
uint16_t index,
uint16_t value 
)
+
+ +

Write a raw vendor control packet.

+

This function sends the control packet immediately to the hardware, without having to wait for a call to libx52_update.

+

This can be used to debug issues seen on the hardware, however, it is NOT recommended for use by end users, as it can potentially damage the hardware.

+
Parameters
+ + + + +
[in]x52Pointer to the device context
[in]indexwIndex in the USB packet
[in]valuewValue in the USB packet
+
+
+
Returns
libx52_error_code indicating status
+ +
+
+
+ + + + diff --git a/group__libx52util.html b/group__libx52util.html new file mode 100644 index 0000000..2c60bde --- /dev/null +++ b/group__libx52util.html @@ -0,0 +1,139 @@ + + + + + + + +x52pro-linux: Utility Functions + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Utility Functions
+
+
+ +

These functions simplify some of the data handling for MFD & LED control. +More...

+ + + + + +

+Functions

int libx52util_convert_utf8_string (const uint8_t *input, uint8_t *output, size_t *len)
 Convert UTF8 string to X52 character map. More...
 
+

Detailed Description

+

These functions simplify some of the data handling for MFD & LED control.

+

Function Documentation

+ +

◆ libx52util_convert_utf8_string()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int libx52util_convert_utf8_string (const uint8_t * input,
uint8_t * output,
size_t * len 
)
+
+ +

Convert UTF8 string to X52 character map.

+

This function takes in a UTF-8 string and converts it to the character map used by the X52Pro MFD. Unrecognized characters are silently dropped.

+
Parameters
+ + + + +
[in]inputInput string in UTF-8. Must be NUL-terminated
[out]outputOutput buffer
[in,out]lenLength of output buffer
+
+
+
Returns
0 on success, -EINVAL on invalid parameters, -E2BIG if the buffer filled up before converting the entire string.
+ +
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..39ad5ba --- /dev/null +++ b/index.html @@ -0,0 +1,104 @@ + + + + + + + +x52pro-linux: Saitek X52/X52Pro drivers for Linux/Unix + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+

+Introduction

+

libx52 is an open source library that allows you to communicate with a Saitek X52 or Saitek X52Pro joystick on Linux and Unix machines. Saitek only provides Windows drivers for their joysticks, necessitating the need for this project for users to be able to control the LEDs and MFD text on a Linux or Unix device.

+

This documentation is intended for application developers who wish to use the features of this library to communicate with supported devices.

+

+Getting Started

+

See the Integration page for details on how to integrate libx52 with your application.

+

+Library Features

+

libx52 supports setting the following parameters on the joystick

+
    +
  1. Text on the multifunction display (MFD).
  2. +
  3. All 3 clocks on the MFD.
  4. +
  5. Date display on the MFD.
  6. +
  7. Blinking of the POV hat and clutch LEDs (both blinking or not).
  8. +
  9. Shift indicator on the MFD.
  10. +
  11. Setting the color of the individual LEDs (on the X52 Pro only).
  12. +
+

+Application Programming Interface

+

See the documentation for the following files for a complete list of all functions.

+ +
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS 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=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,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},x=function(e){return null!=e&&e===e.window},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.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(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($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),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-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|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(m.childNodes),m.childNodes),t[m.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&&((e?e.ownerDocument||e:m)!==C&&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&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$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[k]=!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.namespaceURI,n=(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:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),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=k,!C.getElementsByName||!C.getElementsByName(k).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){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),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("!=",$)}),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},D=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===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,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]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[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){A(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=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(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)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.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 k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.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(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(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,ge={option:[1,""],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)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").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 Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.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(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.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?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.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=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.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,k.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)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.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"===k.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"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.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)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.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?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.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){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},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;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),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(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(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),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".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=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),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,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-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")];4>e;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;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),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:++i.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,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,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}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=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/libx52_8h.html b/libx52_8h.html new file mode 100644 index 0000000..76fdbfa --- /dev/null +++ b/libx52_8h.html @@ -0,0 +1,244 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52/libx52.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
libx52.h File Reference
+
+
+ +

Functions, structures and enumerations for the Saitek X52 MFD & LED driver library. +More...

+ +

Go to the source code of this file.

+ + + + + +

+Typedefs

typedef struct libx52_device libx52_device
 Device context structure used by libx52. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Enumerations

enum  libx52_clock_id { LIBX52_CLOCK_1, +LIBX52_CLOCK_2, +LIBX52_CLOCK_3 + }
 List of supported clocks on the MFD. More...
 
enum  libx52_clock_format { LIBX52_CLOCK_FORMAT_12HR, +LIBX52_CLOCK_FORMAT_24HR + }
 Supported clock formats. More...
 
enum  libx52_date_format { LIBX52_DATE_FORMAT_DDMMYY, +LIBX52_DATE_FORMAT_MMDDYY, +LIBX52_DATE_FORMAT_YYMMDD + }
 Supported date formats. More...
 
enum  libx52_led_id {
+  LIBX52_LED_FIRE = 0x01, +LIBX52_LED_A = 0x02, +LIBX52_LED_B = 0x04, +LIBX52_LED_D = 0x06, +
+  LIBX52_LED_E = 0x08, +LIBX52_LED_T1 = 0x0a, +LIBX52_LED_T2 = 0x0c, +LIBX52_LED_T3 = 0x0e, +
+  LIBX52_LED_POV = 0x10, +LIBX52_LED_CLUTCH = 0x12, +LIBX52_LED_THROTTLE = 0x14 +
+ }
 Supported LED identifiers. More...
 
enum  libx52_led_state {
+  LIBX52_LED_STATE_OFF, +LIBX52_LED_STATE_ON, +LIBX52_LED_STATE_RED, +LIBX52_LED_STATE_AMBER, +
+  LIBX52_LED_STATE_GREEN +
+ }
 Supported LED states. More...
 
enum  libx52_error_code {
+  LIBX52_SUCCESS = 0, +LIBX52_ERROR_INIT_FAILURE, +LIBX52_ERROR_OUT_OF_MEMORY, +LIBX52_ERROR_INVALID_PARAM, +
+  LIBX52_ERROR_NOT_SUPPORTED, +LIBX52_ERROR_TRY_AGAIN, +LIBX52_ERROR_OUT_OF_RANGE, +LIBX52_ERROR_USB_FAILURE, +
+  LIBX52_ERROR_IO, +LIBX52_ERROR_PERM, +LIBX52_ERROR_NO_DEVICE, +LIBX52_ERROR_NOT_FOUND, +
+  LIBX52_ERROR_BUSY, +LIBX52_ERROR_TIMEOUT, +LIBX52_ERROR_OVERFLOW, +LIBX52_ERROR_PIPE, +
+  LIBX52_ERROR_INTERRUPTED +
+ }
 LibX52 Error codes. More...
 
enum  libx52_feature { LIBX52_FEATURE_LED + }
 Feature support for libx52. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int libx52_init (libx52_device **dev)
 Initialize the X52 library. More...
 
void libx52_exit (libx52_device *dev)
 Exit the library and free up any resources used. More...
 
int libx52_connect (libx52_device *dev)
 Connect to the X52 device. More...
 
int libx52_disconnect (libx52_device *dev)
 Disconnect from the X52 device. More...
 
bool libx52_is_connected (libx52_device *dev)
 Check if joystick is connected. More...
 
int libx52_set_text (libx52_device *x52, uint8_t line, const char *text, uint8_t length)
 Set the text on an MFD line. More...
 
int libx52_set_led_state (libx52_device *x52, libx52_led_id led, libx52_led_state state)
 Set the LED state. More...
 
int libx52_set_clock (libx52_device *x52, time_t time, int local)
 Set the clock. More...
 
int libx52_set_clock_timezone (libx52_device *x52, libx52_clock_id clock, int offset)
 Set the timezone for the secondary and tertiary clocks. More...
 
int libx52_set_clock_format (libx52_device *x52, libx52_clock_id clock, libx52_clock_format format)
 Set whether the clock is displayed in 12 hour or 24 hour format. More...
 
int libx52_set_time (libx52_device *x52, uint8_t hour, uint8_t minute)
 Set the hour and minute on clock 1. More...
 
int libx52_set_date (libx52_device *x52, uint8_t dd, uint8_t mm, uint8_t yy)
 Set the date. More...
 
int libx52_set_date_format (libx52_device *x52, libx52_date_format format)
 Set the date format for the MFD date display. More...
 
int libx52_set_brightness (libx52_device *x52, uint8_t mfd, uint16_t brightness)
 Set the MFD or LED brightness. More...
 
int libx52_set_shift (libx52_device *x52, uint8_t state)
 Set the state of the shift indicator. More...
 
int libx52_set_blink (libx52_device *x52, uint8_t state)
 Set the blinking state. More...
 
int libx52_update (libx52_device *x52)
 Update the X52. More...
 
int libx52_vendor_command (libx52_device *x52, uint16_t index, uint16_t value)
 Write a raw vendor control packet. More...
 
int libx52_check_feature (libx52_device *x52, libx52_feature feature)
 Check if the device supports the given feature. More...
 
const char * libx52_strerror (libx52_error_code error)
 Return a string representation of the error code. More...
 
+

Detailed Description

+

Functions, structures and enumerations for the Saitek X52 MFD & LED driver library.

+

This file contains the type, enum and function prototypes for the Saitek X52 driver library. These functions allow an application to connect to a supported X52/X52Pro joystick and control the MFD and LEDs.

+
Author
Nirenjan Krishnan (niren.nosp@m.jan@.nosp@m.niren.nosp@m.jan..nosp@m.org)
+
+ + + + diff --git a/libx52_8h_source.html b/libx52_8h_source.html new file mode 100644 index 0000000..65a3570 --- /dev/null +++ b/libx52_8h_source.html @@ -0,0 +1,326 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52/libx52.h Source File + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libx52.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Saitek X52 Pro MFD & LED driver
+
3  *
+
4  * Copyright (C) 2012-2020 Nirenjan Krishnan (nirenjan@nirenjan.org)
+
5  *
+
6  * SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0
+
7  */
+
8 
+
20 #ifndef LIBX52_H
+
21 #define LIBX52_H
+
22 
+
23 #include <time.h>
+
24 #include <stdint.h>
+
25 #include <stdbool.h>
+
26 
+
27 #ifdef __cplusplus
+
28 extern "C" {
+
29 #endif
+
30 
+
35 struct libx52_device;
+
36 
+ +
47 
+
52 typedef enum {
+ +
55 
+ +
58 
+ + +
62 
+
67 typedef enum {
+ +
70 
+ + +
74 
+
79 typedef enum {
+ +
82 
+ +
85 
+ + +
89 
+
94 typedef enum {
+ +
97 
+
99  LIBX52_LED_A = 0x02,
+
100 
+
102  LIBX52_LED_B = 0x04,
+
103 
+
105  LIBX52_LED_D = 0x06,
+
106 
+
108  LIBX52_LED_E = 0x08,
+
109 
+ +
112 
+ +
115 
+ +
118 
+ +
121 
+ +
124 
+ +
127 } libx52_led_id;
+
128 
+
136 typedef enum {
+ +
139 
+ +
145 
+ +
148 
+ +
151 
+ + +
155 
+
163 typedef enum {
+ +
166 
+ +
169 
+ +
172 
+ +
175 
+ +
178 
+ +
181 
+ +
184 
+ +
187 
+ +
190 
+ +
193 
+ +
196 
+ +
199 
+ +
202 
+ +
205 
+ +
208 
+ +
211 
+ +
214 
+ +
216 
+
226 typedef enum {
+ +
229 
+ +
231 
+
280 int libx52_init(libx52_device ** dev);
+
281 
+
292 void libx52_exit(libx52_device *dev);
+
293 
+
322 int libx52_connect(libx52_device *dev);
+
323 
+ +
336 
+ +
357 
+
396 int libx52_set_text(libx52_device *x52, uint8_t line, const char *text, uint8_t length);
+
397 
+ +
422  libx52_led_id led,
+
423  libx52_led_state state);
+
424 
+
461 int libx52_set_clock(libx52_device *x52, time_t time, int local);
+
462 
+ +
494  libx52_clock_id clock,
+
495  int offset);
+
496 
+ +
518  libx52_clock_id clock,
+
519  libx52_clock_format format);
+
520 
+
536 int libx52_set_time(libx52_device *x52, uint8_t hour, uint8_t minute);
+
537 
+
553 int libx52_set_date(libx52_device *x52, uint8_t dd, uint8_t mm, uint8_t yy);
+
554 
+ +
568 
+
592 int libx52_set_brightness(libx52_device *x52, uint8_t mfd, uint16_t brightness);
+
593 
+
607 int libx52_set_shift(libx52_device *x52, uint8_t state);
+
608 
+
621 int libx52_set_blink(libx52_device *x52, uint8_t state);
+
622 
+
644 int libx52_update(libx52_device *x52);
+
645 
+
661 int libx52_vendor_command(libx52_device *x52, uint16_t index, uint16_t value);
+
662 
+ +
677 
+
686 const char * libx52_strerror(libx52_error_code error);
+
687 
+
690 #ifdef __cplusplus
+
691 }
+
692 #endif
+
693 
+
694 #endif /* !defined LIBX52_H */
+
+
int libx52_set_text(libx52_device *x52, uint8_t line, const char *text, uint8_t length)
Set the text on an MFD line.
+
const char * libx52_strerror(libx52_error_code error)
Return a string representation of the error code.
+
void libx52_exit(libx52_device *dev)
Exit the library and free up any resources used.
+
libx52_feature
Feature support for libx52.
Definition: libx52.h:226
+
@ LIBX52_ERROR_INIT_FAILURE
Definition: libx52.h:168
+
@ LIBX52_ERROR_NOT_FOUND
Definition: libx52.h:198
+
libx52_date_format
Supported date formats.
Definition: libx52.h:79
+
@ LIBX52_LED_E
Definition: libx52.h:108
+
@ LIBX52_DATE_FORMAT_DDMMYY
Definition: libx52.h:81
+
@ LIBX52_CLOCK_1
Definition: libx52.h:54
+
@ LIBX52_ERROR_BUSY
Definition: libx52.h:201
+
@ LIBX52_LED_A
Definition: libx52.h:99
+
@ LIBX52_ERROR_OUT_OF_MEMORY
Definition: libx52.h:171
+
int libx52_set_clock_timezone(libx52_device *x52, libx52_clock_id clock, int offset)
Set the timezone for the secondary and tertiary clocks.
+
int libx52_connect(libx52_device *dev)
Connect to the X52 device.
+
@ LIBX52_DATE_FORMAT_MMDDYY
Definition: libx52.h:84
+
int libx52_vendor_command(libx52_device *x52, uint16_t index, uint16_t value)
Write a raw vendor control packet.
+
bool libx52_is_connected(libx52_device *dev)
Check if joystick is connected.
+
int libx52_set_date(libx52_device *x52, uint8_t dd, uint8_t mm, uint8_t yy)
Set the date.
+
@ LIBX52_LED_B
Definition: libx52.h:102
+
@ LIBX52_LED_T2
Definition: libx52.h:114
+
libx52_led_id
Supported LED identifiers.
Definition: libx52.h:94
+
int libx52_set_clock_format(libx52_device *x52, libx52_clock_id clock, libx52_clock_format format)
Set whether the clock is displayed in 12 hour or 24 hour format.
+
@ LIBX52_LED_STATE_ON
Definition: libx52.h:144
+
@ LIBX52_ERROR_OVERFLOW
Definition: libx52.h:207
+
@ LIBX52_LED_STATE_GREEN
Definition: libx52.h:153
+
@ LIBX52_LED_D
Definition: libx52.h:105
+
int libx52_update(libx52_device *x52)
Update the X52.
+
@ LIBX52_ERROR_OUT_OF_RANGE
Definition: libx52.h:183
+
int libx52_set_time(libx52_device *x52, uint8_t hour, uint8_t minute)
Set the hour and minute on clock 1.
+
int libx52_set_shift(libx52_device *x52, uint8_t state)
Set the state of the shift indicator.
+
libx52_led_state
Supported LED states.
Definition: libx52.h:136
+
@ LIBX52_LED_T3
Definition: libx52.h:117
+
struct libx52_device libx52_device
Device context structure used by libx52.
Definition: libx52.h:46
+
libx52_error_code
LibX52 Error codes.
Definition: libx52.h:163
+
@ LIBX52_LED_THROTTLE
Definition: libx52.h:126
+
@ LIBX52_CLOCK_2
Definition: libx52.h:57
+
int libx52_set_date_format(libx52_device *x52, libx52_date_format format)
Set the date format for the MFD date display.
+
@ LIBX52_CLOCK_3
Definition: libx52.h:60
+
@ LIBX52_LED_T1
Definition: libx52.h:111
+
@ LIBX52_SUCCESS
Definition: libx52.h:165
+
int libx52_check_feature(libx52_device *x52, libx52_feature feature)
Check if the device supports the given feature.
+
@ LIBX52_ERROR_PIPE
Definition: libx52.h:210
+
int libx52_disconnect(libx52_device *dev)
Disconnect from the X52 device.
+
@ LIBX52_CLOCK_FORMAT_24HR
Definition: libx52.h:72
+
int libx52_set_clock(libx52_device *x52, time_t time, int local)
Set the clock.
+
@ LIBX52_LED_STATE_OFF
Definition: libx52.h:138
+
@ LIBX52_LED_FIRE
Definition: libx52.h:96
+
@ LIBX52_ERROR_PERM
Definition: libx52.h:192
+
int libx52_set_blink(libx52_device *x52, uint8_t state)
Set the blinking state.
+
@ LIBX52_CLOCK_FORMAT_12HR
Definition: libx52.h:69
+
@ LIBX52_ERROR_TIMEOUT
Definition: libx52.h:204
+
@ LIBX52_DATE_FORMAT_YYMMDD
Definition: libx52.h:87
+
@ LIBX52_ERROR_INTERRUPTED
Definition: libx52.h:213
+
@ LIBX52_ERROR_INVALID_PARAM
Definition: libx52.h:174
+
int libx52_init(libx52_device **dev)
Initialize the X52 library.
+
@ LIBX52_LED_CLUTCH
Definition: libx52.h:123
+
@ LIBX52_LED_STATE_RED
Definition: libx52.h:147
+
@ LIBX52_LED_STATE_AMBER
Definition: libx52.h:150
+
@ LIBX52_LED_POV
Definition: libx52.h:120
+
@ LIBX52_ERROR_NOT_SUPPORTED
Definition: libx52.h:177
+
@ LIBX52_ERROR_TRY_AGAIN
Definition: libx52.h:180
+
@ LIBX52_FEATURE_LED
Definition: libx52.h:228
+
@ LIBX52_ERROR_IO
Definition: libx52.h:189
+
int libx52_set_brightness(libx52_device *x52, uint8_t mfd, uint16_t brightness)
Set the MFD or LED brightness.
+
@ LIBX52_ERROR_USB_FAILURE
Definition: libx52.h:186
+
libx52_clock_id
List of supported clocks on the MFD.
Definition: libx52.h:52
+
libx52_clock_format
Supported clock formats.
Definition: libx52.h:67
+
int libx52_set_led_state(libx52_device *x52, libx52_led_id led, libx52_led_state state)
Set the LED state.
+
@ LIBX52_ERROR_NO_DEVICE
Definition: libx52.h:195
+ + + + diff --git a/libx52_caveats.html b/libx52_caveats.html new file mode 100644 index 0000000..ab81203 --- /dev/null +++ b/libx52_caveats.html @@ -0,0 +1,91 @@ + + + + + + + +x52pro-linux: Caveats + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Caveats
+
+
+

+General Caveats

+

libx52 uses libusb under the hood. Therefore, any caveats that apply to libusb also apply to libx52.

+

+Thread Safety

+

libx52 is not designed to be thread-safe. The application must ensure that calls to libx52 from multiple threads are protected by a semaphore/mutex.

+

+Hotplugging

+

libx52 does not support hotplugging. The joystick must be plugged in prior to the application initializing libx52.

+

+LED Support

+

The Saitek X52 does not support controlling the color of individual LEDs. This is only supported on the X52 Pro. The application can use libx52_check_feature to verify support.

+
+
+ + + + diff --git a/libx52_integration.html b/libx52_integration.html new file mode 100644 index 0000000..339e448 --- /dev/null +++ b/libx52_integration.html @@ -0,0 +1,123 @@ + + + + + + + +x52pro-linux: Integration + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Integration
+
+
+

libx52 performs all its operations with a device context pointer. The application must call libx52_init before performing any operation, and must call libx52_exit prior to terminating.

+

Example Initialization/Deinitialization Code

+
#include <libx52.h>
+
+
libx52_device* init_libx52(void)
+
{
+ +
int rc;
+
+
// Initialize the libx52 library
+
rc = libx52_init(&dev);
+
if (rc != LIBX52_SUCCESS) {
+
fputs(libx52_strerror(rc), stderr);
+
return NULL;
+
}
+
+
return dev;
+
}
+
+
// Close the library and any associated devices
+ +

+Joystick Updates

+

Most libx52 functions to update the joystick state do not directly write to the connected joystick, but only update internal data structures within the device context. In order to actually update the joystick, the application must call libx52_update. This function writes the updates to the joystick and resets any internal state.

+

Example

+
libx52_set_text(dev, 0, " Saitek ", 16);
+
libx52_set_text(dev, 1, " X52 Flight ", 16);
+
libx52_set_text(dev, 2, " Control System ", 16);
+ +

+Error handling

+

Most libx52 functions return a standard libx52_error_code integer value that indicates the status of the operation. As long as the operation succeeded, the function will return LIBX52_SUCCESS. Other values returned indicate a failure of some sort.

+

libx52_strerror can convert the return code into a descriptive string that may be displayed to users.

+

+Internationalization of error strings

+

libx52_strerror automatically handles internationalization. As long as your application sets up the locale correctly, and the error strings have been translated to that locale, the returned strings will correspond to the translated values for your locale.

+
+
+
int libx52_set_text(libx52_device *x52, uint8_t line, const char *text, uint8_t length)
Set the text on an MFD line.
+
const char * libx52_strerror(libx52_error_code error)
Return a string representation of the error code.
+
void libx52_exit(libx52_device *dev)
Exit the library and free up any resources used.
+
Functions, structures and enumerations for the Saitek X52 MFD & LED driver library.
+
int libx52_update(libx52_device *x52)
Update the X52.
+
struct libx52_device libx52_device
Device context structure used by libx52.
Definition: libx52.h:46
+
@ LIBX52_SUCCESS
Definition: libx52.h:165
+
int libx52_init(libx52_device **dev)
Initialize the X52 library.
+ + + + diff --git a/libx52util_8h.html b/libx52util_8h.html new file mode 100644 index 0000000..22653ff --- /dev/null +++ b/libx52util_8h.html @@ -0,0 +1,100 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52util/libx52util.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
libx52util.h File Reference
+
+
+ +

Utility functions for the Saitek X52 MFD & LED driver library. +More...

+ +

Go to the source code of this file.

+ + + + + +

+Functions

int libx52util_convert_utf8_string (const uint8_t *input, uint8_t *output, size_t *len)
 Convert UTF8 string to X52 character map. More...
 
+

Detailed Description

+

Utility functions for the Saitek X52 MFD & LED driver library.

+

This file contains the type and function prototypes for the Saitek X52 driver library utility functions. These functions simplify some of the data handling for MFD & LED control, but they are not required.

+
Author
Nirenjan Krishnan (niren.nosp@m.jan@.nosp@m.niren.nosp@m.jan..nosp@m.org)
+
+ + + + diff --git a/libx52util_8h_source.html b/libx52util_8h_source.html new file mode 100644 index 0000000..ae659b1 --- /dev/null +++ b/libx52util_8h_source.html @@ -0,0 +1,109 @@ + + + + + + + +x52pro-linux: /home/nirenjan/project/x52pro-linux/lib/libx52util/libx52util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
x52pro-linux +  0.2.1 +
+
Saitek X52/X52Pro drivers for Linux/Unix
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libx52util.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Saitek X52 Pro Utility Library
+
3  *
+
4  * Copyright (C) 2015 Nirenjan Krishnan (nirenjan@nirenjan.org)
+
5  *
+
6  * SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0
+
7  */
+
8 
+
19 #ifndef LIBX52UTIL_H
+
20 #define LIBX52UTIL_H
+
21 
+
22 #include <stddef.h>
+
23 
+
24 #ifdef __cplusplus
+
25 extern "C" {
+
26 #endif
+
27 
+
49 int libx52util_convert_utf8_string(const uint8_t *input,
+
50  uint8_t *output, size_t *len);
+
51 
+
54 #ifdef __cplusplus
+
55 }
+
56 #endif
+
57 
+
58 #endif /* !defined LIBX52UTIL_H */
+
59 
+
+
int libx52util_convert_utf8_string(const uint8_t *input, uint8_t *output, size_t *len)
Convert UTF8 string to X52 character map.
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..433c15b --- /dev/null +++ b/menu.js @@ -0,0 +1,50 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @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+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..44e4864 --- /dev/null +++ b/menudata.js @@ -0,0 +1,37 @@ +/* +@licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2019 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as published by +the Free Software Foundation + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@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:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"l",url:"globals.html#index_l"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"l",url:"globals_eval.html#index_l"}]}]}]}, +{text:"View on GitHub",url:"https://github.com/nirenjan/x52pro-linux"}]} diff --git a/modules.html b/modules.html new file mode 100644 index 0000000..c2912fe --- /dev/null +++ b/modules.html @@ -0,0 +1,88 @@ + + + + + + + +x52pro-linux: Modules + + + + + + + + + +
    +
    + + + + + + +
    +
    x52pro-linux +  0.2.1 +
    +
    Saitek X52/X52Pro drivers for Linux/Unix
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules
    +
    +
    +
    Here is a list of all modules:
    + + + + + + + +
     Library Initialization and DeinitializationThese functions are used at application entry and exit
     Device HandlingHandle connections to the device
     MFD & LED controlControl the MFD text and LED states
     Clock controlControl the clocks on the MFD
     MiscellaneousMiscellaneous functionality
     Utility FunctionsThese functions simplify some of the data handling for MFD & LED control
    +
    +
    + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/nav_h.png differ diff --git a/open.png b/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/open.png differ diff --git a/pages.html b/pages.html new file mode 100644 index 0000000..3447fb7 --- /dev/null +++ b/pages.html @@ -0,0 +1,86 @@ + + + + + + + +x52pro-linux: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    x52pro-linux +  0.2.1 +
    +
    Saitek X52/X52Pro drivers for Linux/Unix
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 0000000..26dd244 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..e18e746 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['caveats_0',['Caveats',['../libx52_caveats.html',1,'']]], + ['clock_20control_1',['Clock control',['../group__libx52clock.html',1,'']]], + ['command_20line_20interface_20to_20libx52_2',['Command Line Interface to libx52',['../x52cli.html',1,'']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 0000000..8eb215b --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..0b06110 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['deprecated_20list_3',['Deprecated List',['../deprecated.html',1,'']]], + ['device_20handling_4',['Device Handling',['../group__libx52dev.html',1,'']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 0000000..b26d916 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..a76bee5 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integration_5',['Integration',['../libx52_integration.html',1,'']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 0000000..b61b96f --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..17458f7 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,77 @@ +var searchData= +[ + ['libx52_2eh_6',['libx52.h',['../libx52_8h.html',1,'']]], + ['libx52_5fcheck_5ffeature_7',['libx52_check_feature',['../group__libx52misc.html#ga504ed71c3e543da1436ea99465289ceb',1,'libx52.h']]], + ['libx52_5fclock_5f1_8',['LIBX52_CLOCK_1',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917ca85dccae177b78d35e21875772738ac70',1,'libx52.h']]], + ['libx52_5fclock_5f2_9',['LIBX52_CLOCK_2',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917cab2d9e9967646a797dfb652d81a964282',1,'libx52.h']]], + ['libx52_5fclock_5f3_10',['LIBX52_CLOCK_3',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917ca422990d812ea1dd9e94a5b3d03565945',1,'libx52.h']]], + ['libx52_5fclock_5fformat_11',['libx52_clock_format',['../group__libx52clock.html#ga0c9c90bdba150b6e48ddab30aea45268',1,'libx52.h']]], + ['libx52_5fclock_5fformat_5f12hr_12',['LIBX52_CLOCK_FORMAT_12HR',['../group__libx52clock.html#gga0c9c90bdba150b6e48ddab30aea45268a7e216a257012c9aa2a5b847a4cb96332',1,'libx52.h']]], + ['libx52_5fclock_5fformat_5f24hr_13',['LIBX52_CLOCK_FORMAT_24HR',['../group__libx52clock.html#gga0c9c90bdba150b6e48ddab30aea45268a1a60fdc6dacbf9a46a93a161d2644908',1,'libx52.h']]], + ['libx52_5fclock_5fid_14',['libx52_clock_id',['../group__libx52clock.html#ga08c48a43f70bebb61b553e0ec12d917c',1,'libx52.h']]], + ['libx52_5fconnect_15',['libx52_connect',['../group__libx52dev.html#ga65998f1155fb093f45babfd0c2c138d9',1,'libx52.h']]], + ['libx52_5fdate_5fformat_16',['libx52_date_format',['../group__libx52clock.html#ga0da0bde31d817eaa42465b0dea2ccf5a',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fddmmyy_17',['LIBX52_DATE_FORMAT_DDMMYY',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aa81d30d59013fcef952c9d10a30942abc',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fmmddyy_18',['LIBX52_DATE_FORMAT_MMDDYY',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aad91220edc91513325af1def4bcdfc07c',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fyymmdd_19',['LIBX52_DATE_FORMAT_YYMMDD',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aad2c9819fc5590f542a22c42a3243bd5e',1,'libx52.h']]], + ['libx52_5fdevice_20',['libx52_device',['../group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131',1,'libx52.h']]], + ['libx52_5fdisconnect_21',['libx52_disconnect',['../group__libx52dev.html#ga82f3fb7f750aa5480d23b69875d3ebe8',1,'libx52.h']]], + ['libx52_5ferror_5fbusy_22',['LIBX52_ERROR_BUSY',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7afe5cd825cc2c26c9226025dcb5628f9d',1,'libx52.h']]], + ['libx52_5ferror_5fcode_23',['libx52_error_code',['../group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7',1,'libx52.h']]], + ['libx52_5ferror_5finit_5ffailure_24',['LIBX52_ERROR_INIT_FAILURE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a22d30938f3a413c16e9ab2e6c183daeb',1,'libx52.h']]], + ['libx52_5ferror_5finterrupted_25',['LIBX52_ERROR_INTERRUPTED',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1601986a5a57898997fde902f994b91d',1,'libx52.h']]], + ['libx52_5ferror_5finvalid_5fparam_26',['LIBX52_ERROR_INVALID_PARAM',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a049c93e363d70c5a6cc5a735371e5e3b',1,'libx52.h']]], + ['libx52_5ferror_5fio_27',['LIBX52_ERROR_IO',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1dd2726f8ffacda63b180c68bdf1838f',1,'libx52.h']]], + ['libx52_5ferror_5fno_5fdevice_28',['LIBX52_ERROR_NO_DEVICE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ad3e9a0e2e18b469ddc7135d73942e29a',1,'libx52.h']]], + ['libx52_5ferror_5fnot_5ffound_29',['LIBX52_ERROR_NOT_FOUND',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a5d77a34c39dfa1757553ecd073913844',1,'libx52.h']]], + ['libx52_5ferror_5fnot_5fsupported_30',['LIBX52_ERROR_NOT_SUPPORTED',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a97af04ffc3130e25c9eb03abaafbbaca',1,'libx52.h']]], + ['libx52_5ferror_5fout_5fof_5fmemory_31',['LIBX52_ERROR_OUT_OF_MEMORY',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7adc972428ef5695848c268f927a0974cc',1,'libx52.h']]], + ['libx52_5ferror_5fout_5fof_5frange_32',['LIBX52_ERROR_OUT_OF_RANGE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac329401de31cc6c50160c1fafcdc5efa',1,'libx52.h']]], + ['libx52_5ferror_5foverflow_33',['LIBX52_ERROR_OVERFLOW',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac331268731d911dfb16cd28c3d3abc3d',1,'libx52.h']]], + ['libx52_5ferror_5fperm_34',['LIBX52_ERROR_PERM',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acc31bdcda400b886e0ed914eb5a1a153',1,'libx52.h']]], + ['libx52_5ferror_5fpipe_35',['LIBX52_ERROR_PIPE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acf7169c36418a1a43cd8f7bdbdb91325',1,'libx52.h']]], + ['libx52_5ferror_5ftimeout_36',['LIBX52_ERROR_TIMEOUT',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a691294d6e5876fd371f9e32686c548d4',1,'libx52.h']]], + ['libx52_5ferror_5ftry_5fagain_37',['LIBX52_ERROR_TRY_AGAIN',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a9e4acff4906865192086c8957047b35f',1,'libx52.h']]], + ['libx52_5ferror_5fusb_5ffailure_38',['LIBX52_ERROR_USB_FAILURE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a85126a0081a32d7c4bd24738996da531',1,'libx52.h']]], + ['libx52_5fexit_39',['libx52_exit',['../group__libx52init.html#ga17fe14ab3f67706b2d35c6cce3cd670b',1,'libx52.h']]], + ['libx52_5ffeature_40',['libx52_feature',['../group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699',1,'libx52.h']]], + ['libx52_5ffeature_5fled_41',['LIBX52_FEATURE_LED',['../group__libx52misc.html#ggaa32c12111de45ed00c51fd689fdd6699a2ce41c87908ef0b8ff6d76ccf226dfd0',1,'libx52.h']]], + ['libx52_5finit_42',['libx52_init',['../group__libx52init.html#gaf9ae27c6e505bce8c4415a638033a4bd',1,'libx52.h']]], + ['libx52_5fis_5fconnected_43',['libx52_is_connected',['../group__libx52dev.html#gaa2ec46eb779df5f33678defe3050b1d4',1,'libx52.h']]], + ['libx52_5fled_5fa_44',['LIBX52_LED_A',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa455294ce1f2dd6bb89c7f48034e5ddbc',1,'libx52.h']]], + ['libx52_5fled_5fb_45',['LIBX52_LED_B',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa614aceacc2f76589f6e89429c7886c69',1,'libx52.h']]], + ['libx52_5fled_5fclutch_46',['LIBX52_LED_CLUTCH',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa3fa42fc0e323348cd453831950e51307',1,'libx52.h']]], + ['libx52_5fled_5fd_47',['LIBX52_LED_D',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa29aad41d6d4d2ba9955b76de9559b2d2',1,'libx52.h']]], + ['libx52_5fled_5fe_48',['LIBX52_LED_E',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fabb61ccb8aa773f0b1bb44dcf46d91ece',1,'libx52.h']]], + ['libx52_5fled_5ffire_49',['LIBX52_LED_FIRE',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fae89d2ce35f72608d41202764128afd00',1,'libx52.h']]], + ['libx52_5fled_5fid_50',['libx52_led_id',['../group__libx52mfdled.html#gae97e6cb1be0d79960018f2a12ba7047f',1,'libx52.h']]], + ['libx52_5fled_5fpov_51',['LIBX52_LED_POV',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa18862e04f12337863251f7307e04d3bf',1,'libx52.h']]], + ['libx52_5fled_5fstate_52',['libx52_led_state',['../group__libx52mfdled.html#gab1a633a40dcdcfc5cf6fc13a3ed8b68c',1,'libx52.h']]], + ['libx52_5fled_5fstate_5famber_53',['LIBX52_LED_STATE_AMBER',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68cacce900ab6a9325d72e0f084f9271634e',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fgreen_54',['LIBX52_LED_STATE_GREEN',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca1e8346acab9ad3e4735079273808319c',1,'libx52.h']]], + ['libx52_5fled_5fstate_5foff_55',['LIBX52_LED_STATE_OFF',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca0a25e41783e99046974964aee88f895a',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fon_56',['LIBX52_LED_STATE_ON',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca5a18783f20716411a77e3bfe7195d3d2',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fred_57',['LIBX52_LED_STATE_RED',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca64b1620a9d10dc593660bf30d6c987d9',1,'libx52.h']]], + ['libx52_5fled_5ft1_58',['LIBX52_LED_T1',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fae3d5181cdca7054ea2a44bb6a33736f9',1,'libx52.h']]], + ['libx52_5fled_5ft2_59',['LIBX52_LED_T2',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa3915d9b34e7cd0270c3c9945ea0366cb',1,'libx52.h']]], + ['libx52_5fled_5ft3_60',['LIBX52_LED_T3',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa25d249c6a06efbf554928885834376e9',1,'libx52.h']]], + ['libx52_5fled_5fthrottle_61',['LIBX52_LED_THROTTLE',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047faede82abd452be7da562c50e89160fcd7',1,'libx52.h']]], + ['libx52_5fset_5fblink_62',['libx52_set_blink',['../group__libx52mfdled.html#ga944e06a76077d240ccea8c342a36a876',1,'libx52.h']]], + ['libx52_5fset_5fbrightness_63',['libx52_set_brightness',['../group__libx52mfdled.html#ga9bbf5e1ff83201f6124b2d3c75c837c6',1,'libx52.h']]], + ['libx52_5fset_5fclock_64',['libx52_set_clock',['../group__libx52clock.html#ga3ebdd7bf3cd2f419d9a13c46a139922e',1,'libx52.h']]], + ['libx52_5fset_5fclock_5fformat_65',['libx52_set_clock_format',['../group__libx52clock.html#gacd82a744b1d33e0a9989fca4d8aad42b',1,'libx52.h']]], + ['libx52_5fset_5fclock_5ftimezone_66',['libx52_set_clock_timezone',['../group__libx52clock.html#ga04c0429e7fd7d9d5b5b371b88831381e',1,'libx52.h']]], + ['libx52_5fset_5fdate_67',['libx52_set_date',['../group__libx52clock.html#ga4f49341bca8a343931858ff008d2d5ca',1,'libx52.h']]], + ['libx52_5fset_5fdate_5fformat_68',['libx52_set_date_format',['../group__libx52clock.html#gabfa0aa6cb8742f29b3b8cfbc16fdadb2',1,'libx52.h']]], + ['libx52_5fset_5fled_5fstate_69',['libx52_set_led_state',['../group__libx52mfdled.html#ga1a435bb3057aae3307c70fb09912ef18',1,'libx52.h']]], + ['libx52_5fset_5fshift_70',['libx52_set_shift',['../group__libx52mfdled.html#ga4250ce5b06f65c086ef6f279a628f378',1,'libx52.h']]], + ['libx52_5fset_5ftext_71',['libx52_set_text',['../group__libx52mfdled.html#ga4f2b73685a4eb307895e08a02903bb39',1,'libx52.h']]], + ['libx52_5fset_5ftime_72',['libx52_set_time',['../group__libx52clock.html#ga42b5b1f00dea64f0706c31e0b3dd1840',1,'libx52.h']]], + ['libx52_5fstrerror_73',['libx52_strerror',['../group__libx52misc.html#gaa29a1022b0c3eb4894ddfd4934c3cf0e',1,'libx52.h']]], + ['libx52_5fsuccess_74',['LIBX52_SUCCESS',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a8c4729a9500f0b9032d874ca7942b708',1,'libx52.h']]], + ['libx52_5fupdate_75',['libx52_update',['../group__libx52misc.html#ga5d1fdbcab1b1a6cf8a10c206f8e79f73',1,'libx52.h']]], + ['libx52_5fvendor_5fcommand_76',['libx52_vendor_command',['../group__libx52misc.html#gac491f4fb8d37f477d83725cb472de030',1,'libx52.h']]], + ['library_20initialization_20and_20deinitialization_77',['Library Initialization and Deinitialization',['../group__libx52init.html',1,'']]], + ['libx52util_2eh_78',['libx52util.h',['../libx52util_8h.html',1,'']]], + ['libx52util_5fconvert_5futf8_5fstring_79',['libx52util_convert_utf8_string',['../group__libx52util.html#gac5a9279cba660740580e18029e827817',1,'libx52util.h']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 0000000..06de155 --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..a9fad6c --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mfd_20_26_20led_20control_80',['MFD & LED control',['../group__libx52mfdled.html',1,'']]], + ['miscellaneous_81',['Miscellaneous',['../group__libx52misc.html',1,'']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 0000000..2544c4e --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..c6b8a64 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['saitek_20x52_2fx52pro_20drivers_20for_20linux_2funix_82',['Saitek X52/X52Pro drivers for Linux/Unix',['../index.html',1,'']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 0000000..43f14ea --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..e048eae --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utility_20functions_83',['Utility Functions',['../group__libx52util.html',1,'']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/search/close.png differ diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 0000000..9669700 --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000..c225c16 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['libx52_5fclock_5fformat_108',['libx52_clock_format',['../group__libx52clock.html#ga0c9c90bdba150b6e48ddab30aea45268',1,'libx52.h']]], + ['libx52_5fclock_5fid_109',['libx52_clock_id',['../group__libx52clock.html#ga08c48a43f70bebb61b553e0ec12d917c',1,'libx52.h']]], + ['libx52_5fdate_5fformat_110',['libx52_date_format',['../group__libx52clock.html#ga0da0bde31d817eaa42465b0dea2ccf5a',1,'libx52.h']]], + ['libx52_5ferror_5fcode_111',['libx52_error_code',['../group__libx52misc.html#ga93b777d9cea6e733b63c222e6115ccb7',1,'libx52.h']]], + ['libx52_5ffeature_112',['libx52_feature',['../group__libx52misc.html#gaa32c12111de45ed00c51fd689fdd6699',1,'libx52.h']]], + ['libx52_5fled_5fid_113',['libx52_led_id',['../group__libx52mfdled.html#gae97e6cb1be0d79960018f2a12ba7047f',1,'libx52.h']]], + ['libx52_5fled_5fstate_114',['libx52_led_state',['../group__libx52mfdled.html#gab1a633a40dcdcfc5cf6fc13a3ed8b68c',1,'libx52.h']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 0000000..9286248 --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000..5eee87f --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['libx52_5fclock_5f1_115',['LIBX52_CLOCK_1',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917ca85dccae177b78d35e21875772738ac70',1,'libx52.h']]], + ['libx52_5fclock_5f2_116',['LIBX52_CLOCK_2',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917cab2d9e9967646a797dfb652d81a964282',1,'libx52.h']]], + ['libx52_5fclock_5f3_117',['LIBX52_CLOCK_3',['../group__libx52clock.html#gga08c48a43f70bebb61b553e0ec12d917ca422990d812ea1dd9e94a5b3d03565945',1,'libx52.h']]], + ['libx52_5fclock_5fformat_5f12hr_118',['LIBX52_CLOCK_FORMAT_12HR',['../group__libx52clock.html#gga0c9c90bdba150b6e48ddab30aea45268a7e216a257012c9aa2a5b847a4cb96332',1,'libx52.h']]], + ['libx52_5fclock_5fformat_5f24hr_119',['LIBX52_CLOCK_FORMAT_24HR',['../group__libx52clock.html#gga0c9c90bdba150b6e48ddab30aea45268a1a60fdc6dacbf9a46a93a161d2644908',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fddmmyy_120',['LIBX52_DATE_FORMAT_DDMMYY',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aa81d30d59013fcef952c9d10a30942abc',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fmmddyy_121',['LIBX52_DATE_FORMAT_MMDDYY',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aad91220edc91513325af1def4bcdfc07c',1,'libx52.h']]], + ['libx52_5fdate_5fformat_5fyymmdd_122',['LIBX52_DATE_FORMAT_YYMMDD',['../group__libx52clock.html#gga0da0bde31d817eaa42465b0dea2ccf5aad2c9819fc5590f542a22c42a3243bd5e',1,'libx52.h']]], + ['libx52_5ferror_5fbusy_123',['LIBX52_ERROR_BUSY',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7afe5cd825cc2c26c9226025dcb5628f9d',1,'libx52.h']]], + ['libx52_5ferror_5finit_5ffailure_124',['LIBX52_ERROR_INIT_FAILURE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a22d30938f3a413c16e9ab2e6c183daeb',1,'libx52.h']]], + ['libx52_5ferror_5finterrupted_125',['LIBX52_ERROR_INTERRUPTED',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1601986a5a57898997fde902f994b91d',1,'libx52.h']]], + ['libx52_5ferror_5finvalid_5fparam_126',['LIBX52_ERROR_INVALID_PARAM',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a049c93e363d70c5a6cc5a735371e5e3b',1,'libx52.h']]], + ['libx52_5ferror_5fio_127',['LIBX52_ERROR_IO',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a1dd2726f8ffacda63b180c68bdf1838f',1,'libx52.h']]], + ['libx52_5ferror_5fno_5fdevice_128',['LIBX52_ERROR_NO_DEVICE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ad3e9a0e2e18b469ddc7135d73942e29a',1,'libx52.h']]], + ['libx52_5ferror_5fnot_5ffound_129',['LIBX52_ERROR_NOT_FOUND',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a5d77a34c39dfa1757553ecd073913844',1,'libx52.h']]], + ['libx52_5ferror_5fnot_5fsupported_130',['LIBX52_ERROR_NOT_SUPPORTED',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a97af04ffc3130e25c9eb03abaafbbaca',1,'libx52.h']]], + ['libx52_5ferror_5fout_5fof_5fmemory_131',['LIBX52_ERROR_OUT_OF_MEMORY',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7adc972428ef5695848c268f927a0974cc',1,'libx52.h']]], + ['libx52_5ferror_5fout_5fof_5frange_132',['LIBX52_ERROR_OUT_OF_RANGE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac329401de31cc6c50160c1fafcdc5efa',1,'libx52.h']]], + ['libx52_5ferror_5foverflow_133',['LIBX52_ERROR_OVERFLOW',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7ac331268731d911dfb16cd28c3d3abc3d',1,'libx52.h']]], + ['libx52_5ferror_5fperm_134',['LIBX52_ERROR_PERM',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acc31bdcda400b886e0ed914eb5a1a153',1,'libx52.h']]], + ['libx52_5ferror_5fpipe_135',['LIBX52_ERROR_PIPE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7acf7169c36418a1a43cd8f7bdbdb91325',1,'libx52.h']]], + ['libx52_5ferror_5ftimeout_136',['LIBX52_ERROR_TIMEOUT',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a691294d6e5876fd371f9e32686c548d4',1,'libx52.h']]], + ['libx52_5ferror_5ftry_5fagain_137',['LIBX52_ERROR_TRY_AGAIN',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a9e4acff4906865192086c8957047b35f',1,'libx52.h']]], + ['libx52_5ferror_5fusb_5ffailure_138',['LIBX52_ERROR_USB_FAILURE',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a85126a0081a32d7c4bd24738996da531',1,'libx52.h']]], + ['libx52_5ffeature_5fled_139',['LIBX52_FEATURE_LED',['../group__libx52misc.html#ggaa32c12111de45ed00c51fd689fdd6699a2ce41c87908ef0b8ff6d76ccf226dfd0',1,'libx52.h']]], + ['libx52_5fled_5fa_140',['LIBX52_LED_A',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa455294ce1f2dd6bb89c7f48034e5ddbc',1,'libx52.h']]], + ['libx52_5fled_5fb_141',['LIBX52_LED_B',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa614aceacc2f76589f6e89429c7886c69',1,'libx52.h']]], + ['libx52_5fled_5fclutch_142',['LIBX52_LED_CLUTCH',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa3fa42fc0e323348cd453831950e51307',1,'libx52.h']]], + ['libx52_5fled_5fd_143',['LIBX52_LED_D',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa29aad41d6d4d2ba9955b76de9559b2d2',1,'libx52.h']]], + ['libx52_5fled_5fe_144',['LIBX52_LED_E',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fabb61ccb8aa773f0b1bb44dcf46d91ece',1,'libx52.h']]], + ['libx52_5fled_5ffire_145',['LIBX52_LED_FIRE',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fae89d2ce35f72608d41202764128afd00',1,'libx52.h']]], + ['libx52_5fled_5fpov_146',['LIBX52_LED_POV',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa18862e04f12337863251f7307e04d3bf',1,'libx52.h']]], + ['libx52_5fled_5fstate_5famber_147',['LIBX52_LED_STATE_AMBER',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68cacce900ab6a9325d72e0f084f9271634e',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fgreen_148',['LIBX52_LED_STATE_GREEN',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca1e8346acab9ad3e4735079273808319c',1,'libx52.h']]], + ['libx52_5fled_5fstate_5foff_149',['LIBX52_LED_STATE_OFF',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca0a25e41783e99046974964aee88f895a',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fon_150',['LIBX52_LED_STATE_ON',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca5a18783f20716411a77e3bfe7195d3d2',1,'libx52.h']]], + ['libx52_5fled_5fstate_5fred_151',['LIBX52_LED_STATE_RED',['../group__libx52mfdled.html#ggab1a633a40dcdcfc5cf6fc13a3ed8b68ca64b1620a9d10dc593660bf30d6c987d9',1,'libx52.h']]], + ['libx52_5fled_5ft1_152',['LIBX52_LED_T1',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fae3d5181cdca7054ea2a44bb6a33736f9',1,'libx52.h']]], + ['libx52_5fled_5ft2_153',['LIBX52_LED_T2',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa3915d9b34e7cd0270c3c9945ea0366cb',1,'libx52.h']]], + ['libx52_5fled_5ft3_154',['LIBX52_LED_T3',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047fa25d249c6a06efbf554928885834376e9',1,'libx52.h']]], + ['libx52_5fled_5fthrottle_155',['LIBX52_LED_THROTTLE',['../group__libx52mfdled.html#ggae97e6cb1be0d79960018f2a12ba7047faede82abd452be7da562c50e89160fcd7',1,'libx52.h']]], + ['libx52_5fsuccess_156',['LIBX52_SUCCESS',['../group__libx52misc.html#gga93b777d9cea6e733b63c222e6115ccb7a8c4729a9500f0b9032d874ca7942b708',1,'libx52.h']]] +]; diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 0000000..737608e --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..d6515d3 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['libx52_2eh_84',['libx52.h',['../libx52_8h.html',1,'']]], + ['libx52util_2eh_85',['libx52util.h',['../libx52util_8h.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 0000000..e17c711 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..56eb30e --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['libx52_5fcheck_5ffeature_86',['libx52_check_feature',['../group__libx52misc.html#ga504ed71c3e543da1436ea99465289ceb',1,'libx52.h']]], + ['libx52_5fconnect_87',['libx52_connect',['../group__libx52dev.html#ga65998f1155fb093f45babfd0c2c138d9',1,'libx52.h']]], + ['libx52_5fdisconnect_88',['libx52_disconnect',['../group__libx52dev.html#ga82f3fb7f750aa5480d23b69875d3ebe8',1,'libx52.h']]], + ['libx52_5fexit_89',['libx52_exit',['../group__libx52init.html#ga17fe14ab3f67706b2d35c6cce3cd670b',1,'libx52.h']]], + ['libx52_5finit_90',['libx52_init',['../group__libx52init.html#gaf9ae27c6e505bce8c4415a638033a4bd',1,'libx52.h']]], + ['libx52_5fis_5fconnected_91',['libx52_is_connected',['../group__libx52dev.html#gaa2ec46eb779df5f33678defe3050b1d4',1,'libx52.h']]], + ['libx52_5fset_5fblink_92',['libx52_set_blink',['../group__libx52mfdled.html#ga944e06a76077d240ccea8c342a36a876',1,'libx52.h']]], + ['libx52_5fset_5fbrightness_93',['libx52_set_brightness',['../group__libx52mfdled.html#ga9bbf5e1ff83201f6124b2d3c75c837c6',1,'libx52.h']]], + ['libx52_5fset_5fclock_94',['libx52_set_clock',['../group__libx52clock.html#ga3ebdd7bf3cd2f419d9a13c46a139922e',1,'libx52.h']]], + ['libx52_5fset_5fclock_5fformat_95',['libx52_set_clock_format',['../group__libx52clock.html#gacd82a744b1d33e0a9989fca4d8aad42b',1,'libx52.h']]], + ['libx52_5fset_5fclock_5ftimezone_96',['libx52_set_clock_timezone',['../group__libx52clock.html#ga04c0429e7fd7d9d5b5b371b88831381e',1,'libx52.h']]], + ['libx52_5fset_5fdate_97',['libx52_set_date',['../group__libx52clock.html#ga4f49341bca8a343931858ff008d2d5ca',1,'libx52.h']]], + ['libx52_5fset_5fdate_5fformat_98',['libx52_set_date_format',['../group__libx52clock.html#gabfa0aa6cb8742f29b3b8cfbc16fdadb2',1,'libx52.h']]], + ['libx52_5fset_5fled_5fstate_99',['libx52_set_led_state',['../group__libx52mfdled.html#ga1a435bb3057aae3307c70fb09912ef18',1,'libx52.h']]], + ['libx52_5fset_5fshift_100',['libx52_set_shift',['../group__libx52mfdled.html#ga4250ce5b06f65c086ef6f279a628f378',1,'libx52.h']]], + ['libx52_5fset_5ftext_101',['libx52_set_text',['../group__libx52mfdled.html#ga4f2b73685a4eb307895e08a02903bb39',1,'libx52.h']]], + ['libx52_5fset_5ftime_102',['libx52_set_time',['../group__libx52clock.html#ga42b5b1f00dea64f0706c31e0b3dd1840',1,'libx52.h']]], + ['libx52_5fstrerror_103',['libx52_strerror',['../group__libx52misc.html#gaa29a1022b0c3eb4894ddfd4934c3cf0e',1,'libx52.h']]], + ['libx52_5fupdate_104',['libx52_update',['../group__libx52misc.html#ga5d1fdbcab1b1a6cf8a10c206f8e79f73',1,'libx52.h']]], + ['libx52_5fvendor_5fcommand_105',['libx52_vendor_command',['../group__libx52misc.html#gac491f4fb8d37f477d83725cb472de030',1,'libx52.h']]], + ['libx52util_5fconvert_5futf8_5fstring_106',['libx52util_convert_utf8_string',['../group__libx52util.html#gac5a9279cba660740580e18029e827817',1,'libx52util.h']]] +]; diff --git a/search/groups_0.html b/search/groups_0.html new file mode 100644 index 0000000..a2d9335 --- /dev/null +++ b/search/groups_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 0000000..5037eaa --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['clock_20control_157',['Clock control',['../group__libx52clock.html',1,'']]] +]; diff --git a/search/groups_1.html b/search/groups_1.html new file mode 100644 index 0000000..aa06d65 --- /dev/null +++ b/search/groups_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 0000000..dd8c9d6 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['device_20handling_158',['Device Handling',['../group__libx52dev.html',1,'']]] +]; diff --git a/search/groups_2.html b/search/groups_2.html new file mode 100644 index 0000000..a205d30 --- /dev/null +++ b/search/groups_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 0000000..17e34b6 --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['library_20initialization_20and_20deinitialization_159',['Library Initialization and Deinitialization',['../group__libx52init.html',1,'']]] +]; diff --git a/search/groups_3.html b/search/groups_3.html new file mode 100644 index 0000000..4255bed --- /dev/null +++ b/search/groups_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_3.js b/search/groups_3.js new file mode 100644 index 0000000..91115a1 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mfd_20_26_20led_20control_160',['MFD & LED control',['../group__libx52mfdled.html',1,'']]], + ['miscellaneous_161',['Miscellaneous',['../group__libx52misc.html',1,'']]] +]; diff --git a/search/groups_4.html b/search/groups_4.html new file mode 100644 index 0000000..8644fbe --- /dev/null +++ b/search/groups_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_4.js b/search/groups_4.js new file mode 100644 index 0000000..771ed68 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utility_20functions_162',['Utility Functions',['../group__libx52util.html',1,'']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 0000000..39c0ed5 Binary files /dev/null and b/search/mag_sel.png differ diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..4377320 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 0000000..9a6a29a --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..60995cb --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['caveats_163',['Caveats',['../libx52_caveats.html',1,'']]], + ['command_20line_20interface_20to_20libx52_164',['Command Line Interface to libx52',['../x52cli.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 0000000..132ee03 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..e268dcd --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list_165',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 0000000..6109d47 --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 0000000..3ce7d40 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integration_166',['Integration',['../libx52_integration.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 0000000..54e8ba9 --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 0000000..1400e15 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['saitek_20x52_2fx52pro_20drivers_20for_20linux_2funix_167',['Saitek X52/X52Pro drivers for Linux/Unix',['../index.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 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 Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + 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..a554ab9 --- /dev/null +++ b/search/search.js @@ -0,0 +1,814 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @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) + { + 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 resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 0000000..2d6d1eb --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libx52_5fdevice_107',['libx52_device',['../group__libx52init.html#gaca59b8d8f249fed58a0ec3253328e131',1,'libx52.h']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/splitbar.png differ diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/tab_s.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..7d45d36 --- /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}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.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:rgba(255,255,255,0.5);border-radius:5px}.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:rgba(162,162,162,0.1)}.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:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;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:url("tab_b.png");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:#283A5D 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:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff 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 #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;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 #555;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:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;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 #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 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:url("tab_b.png")}.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:#fff}} diff --git a/x52cli.html b/x52cli.html new file mode 100644 index 0000000..b2ac8f6 --- /dev/null +++ b/x52cli.html @@ -0,0 +1,171 @@ + + + + + + + +x52pro-linux: Command Line Interface to libx52 + + + + + + + + + +
    +
    + + + + + + +
    +
    x52pro-linux +  0.2.1 +
    +
    Saitek X52/X52Pro drivers for Linux/Unix
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Command Line Interface to libx52
    +
    +
    +

    +x52cli - Command line interface to libx52 +

    +

    +SYNOPSIS

    +

    x52cli commands [command-options]

    +

    +DESCRIPTION

    +

    x52cli is a command line interface to the X52 library that allows you to set the LEDs and different parameters on the multifunction display (MFD).

    +

    Running x52cli without any arguments will display a brief help message.

    +

    +COMMANDS

    +

    Commands are not case sensitive.

    +
      +
    • bri { mfd | led } < brightness >
      + Set the brightness of the MFD or LEDs. brightness can be any numeric value between 0 and 128. Higher values are accepted, but may not have the desired effect.
    • +
    • mfd < line > < text >
      + Set the text on the MFD line. line can be 0, 1 or 2, and refers to the first, second or third line of the multifunction display respectively. text cannot have embedded NUL characters (0x00) and must correspond with the character map fo the MFD. text should be quoted in order to preserve embedded whitespace. To pass raw hex values, use printf(1) as shown in the EXAMPLES section. Note that text is limited to a length of 16 characters. While you can pass in longer strings, they will be silenty truncated.
    • +
    • led < led-id > < state >
      + Set the LED led-id to state. See LEDs for a list of supported values.
    • +
    • blink { on | off }
      + Turn the blink state on or off.
    • +
    • shift { on | off }
      + Turn the shift indicator in the MFD on or off.
    • +
    • clock { local | gmt } { 12hr | 24hr } { ddmmyy | mmddyy | yymmdd }
      + Set the clock 1 display to the current local or GMT time and date. Clock can be configured to display in either 12hr or 24hr mode. Date can be displayed in one of the following formats: DD-MM-YY, MM-DD-YY, or YY-MM-DD.
    • +
    • offset { 2 | 3 } < offset-val > { 12hr | 24hr }
      + Set the offset for clock 2 or 3 and configure them to display in either 12hr or 24hr mode. offset-val is in minutes east of UTC and can range from -1440 to +1440.
    • +
    • time < hour > < minute > { 12hr | 24hr }
      + Set the time for clock 1 to hour:minute and configure it to display in 12hr or 24hr mode.
    • +
    • date <dd > <mm > <yy> { ddmmyy | mmddyy | yymmdd }
      + Set the date on the MFD to the values represented by dd, mm and yy in the requested format.
    • +
    • raw < wIndex > < wValue >
      + Send a raw vendor control request to the connected joystick.
      +
      Warning
      You should only use the raw command if you know what you are doing. Sending an invalid control sequence can potentially damage or destroy your device.
      +
    • +
    +

    +LEDs

    +

    This is the list of LED IDs and corresponding states supported by the X52 Pro. Note that the on state is only allowed for the fire and throttle LEDs, and they do not support the red, amber and green states. The remaining LEDs do not support the on state, but support all the other states.

    +
    Note
    The led command is only supported on the X52 Pro, not on the X52.
    +

    +LED IDs

    +
      +
    • fire
    • +
    • a
    • +
    • b
    • +
    • d
    • +
    • e
    • +
    • t1
    • +
    • t2
    • +
    • t3
    • +
    • pov
    • +
    • clutch
    • +
    • throttle
    • +
    +

    +States

    +
      +
    • off
    • +
    • on
    • +
    • red
    • +
    • amber
    • +
    • green
    • +
    +

    +LIMITATIONS

    +

    x52cli does not maintain any state between invocations. As a result the clock command will reset the relative offsets for clocks 2 and 3 back to 0 and configure them to be in 12 hour mode. To work around this, use the date and time commands instead to manually configure the date and time.

    +

    +PERMISSIONS

    +

    You must have write permissions to the USB device in order to use the libx52 library, and by extension, x52cli.

    +

    The simplest method to obtain such permissions is to run x52cli as root, possibly through sudo(8)

    +

    +EXAMPLES

    +
      +
    • Turn off the T1 LED.
      +

      x52cli led t1 off

      +
      +
    • +
    • Turn the B LED to Amber.
      +

      x52cli led B amber

      +
      +
    • +
    • Set line 1 of the MFD to display "Hello World"
      +

      x52cli mfd 0 "Hello World"

      +
      +
    • +
    • Set line 2 of the MFD to display "¿Cómo Estás?"
      +

      x52cli mfd 1 "$(printf '\\x9FC\\xE2mo Est\\xE0s?')"

      +
      +
    • +
    +
    +
    + + + +