diff --git a/kawaii/kawaii-rs/doc/.lock b/kawaii/kawaii-rs/doc/.lock new file mode 100755 index 0000000..e69de29 diff --git a/kawaii/kawaii-rs/doc/COPYRIGHT.txt b/kawaii/kawaii-rs/doc/COPYRIGHT.txt new file mode 100644 index 0000000..c69861a --- /dev/null +++ b/kawaii/kawaii-rs/doc/COPYRIGHT.txt @@ -0,0 +1,59 @@ +These documentation pages include resources by third parties. This copyright +file applies only to those resources. The following third party resources are +included, and carry their own copyright notices and license terms: + +* Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff): + + Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ + with Reserved Font Name Fira Sans. + + Copyright (c) 2014, Telefonica S.A. + + Licensed under the SIL Open Font License, Version 1.1. + See FiraSans-LICENSE.txt. + +* Heuristica (Heuristica-Italic.woff): + + Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. + Utopia is either a registered trademark or trademark of Adobe Systems + Incorporated in the United States and/or other countries. Used under + license. + + Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + + Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), + with Reserved Font Name Heuristica. + + Licensed under the SIL Open Font License, Version 1.1. + See Heuristica-LICENSE.txt. + +* rustdoc.css, main.js, and playpen.js: + + Copyright 2015 The Rust Developers. + Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or + the MIT license (LICENSE-MIT.txt) at your option. + +* normalize.css: + + Copyright (c) Nicolas Gallagher and Jonathan Neal. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff): + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark + of Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceCodePro-LICENSE.txt. + +* Source Serif Pro (SourceSerifPro-Regular.woff, SourceSerifPro-Bold.woff): + + Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with + Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of + Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceSerifPro-LICENSE.txt. + +This copyright file is intended to be distributed with rustdoc output. diff --git a/kawaii/kawaii-rs/doc/FiraSans-LICENSE.txt b/kawaii/kawaii-rs/doc/FiraSans-LICENSE.txt new file mode 100644 index 0000000..b4a3967 --- /dev/null +++ b/kawaii/kawaii-rs/doc/FiraSans-LICENSE.txt @@ -0,0 +1,99 @@ +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/kawaii/kawaii-rs/doc/FiraSans-Medium.woff b/kawaii/kawaii-rs/doc/FiraSans-Medium.woff new file mode 100644 index 0000000..5627227 Binary files /dev/null and b/kawaii/kawaii-rs/doc/FiraSans-Medium.woff differ diff --git a/kawaii/kawaii-rs/doc/FiraSans-Regular.woff b/kawaii/kawaii-rs/doc/FiraSans-Regular.woff new file mode 100644 index 0000000..9ff4044 Binary files /dev/null and b/kawaii/kawaii-rs/doc/FiraSans-Regular.woff differ diff --git a/kawaii/kawaii-rs/doc/Heuristica-Italic.woff b/kawaii/kawaii-rs/doc/Heuristica-Italic.woff new file mode 100644 index 0000000..b0cebf0 Binary files /dev/null and b/kawaii/kawaii-rs/doc/Heuristica-Italic.woff differ diff --git a/kawaii/kawaii-rs/doc/Heuristica-LICENSE.txt b/kawaii/kawaii-rs/doc/Heuristica-LICENSE.txt new file mode 100644 index 0000000..dd85e40 --- /dev/null +++ b/kawaii/kawaii-rs/doc/Heuristica-LICENSE.txt @@ -0,0 +1,101 @@ +Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. +Utopia is either a registered trademark or trademark of Adobe Systems +Incorporated in the United States and/or other countries. Used under +license. + +Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + +Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), +with Reserved Font Name Heuristica. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/kawaii/kawaii-rs/doc/LICENSE-APACHE.txt b/kawaii/kawaii-rs/doc/LICENSE-APACHE.txt new file mode 100644 index 0000000..16fe87b --- /dev/null +++ b/kawaii/kawaii-rs/doc/LICENSE-APACHE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/kawaii/kawaii-rs/doc/LICENSE-MIT.txt b/kawaii/kawaii-rs/doc/LICENSE-MIT.txt new file mode 100644 index 0000000..31aa793 --- /dev/null +++ b/kawaii/kawaii-rs/doc/LICENSE-MIT.txt @@ -0,0 +1,23 @@ +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/kawaii/kawaii-rs/doc/SourceCodePro-LICENSE.txt b/kawaii/kawaii-rs/doc/SourceCodePro-LICENSE.txt new file mode 100644 index 0000000..0754257 --- /dev/null +++ b/kawaii/kawaii-rs/doc/SourceCodePro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/kawaii/kawaii-rs/doc/SourceCodePro-Regular.woff b/kawaii/kawaii-rs/doc/SourceCodePro-Regular.woff new file mode 100644 index 0000000..5576670 Binary files /dev/null and b/kawaii/kawaii-rs/doc/SourceCodePro-Regular.woff differ diff --git a/kawaii/kawaii-rs/doc/SourceCodePro-Semibold.woff b/kawaii/kawaii-rs/doc/SourceCodePro-Semibold.woff new file mode 100644 index 0000000..ca972a1 Binary files /dev/null and b/kawaii/kawaii-rs/doc/SourceCodePro-Semibold.woff differ diff --git a/kawaii/kawaii-rs/doc/SourceSerifPro-Bold.woff b/kawaii/kawaii-rs/doc/SourceSerifPro-Bold.woff new file mode 100644 index 0000000..ac1b1b3 Binary files /dev/null and b/kawaii/kawaii-rs/doc/SourceSerifPro-Bold.woff differ diff --git a/kawaii/kawaii-rs/doc/SourceSerifPro-LICENSE.txt b/kawaii/kawaii-rs/doc/SourceSerifPro-LICENSE.txt new file mode 100644 index 0000000..b77d653 --- /dev/null +++ b/kawaii/kawaii-rs/doc/SourceSerifPro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/kawaii/kawaii-rs/doc/SourceSerifPro-Regular.woff b/kawaii/kawaii-rs/doc/SourceSerifPro-Regular.woff new file mode 100644 index 0000000..e8c43b8 Binary files /dev/null and b/kawaii/kawaii-rs/doc/SourceSerifPro-Regular.woff differ diff --git a/kawaii/kawaii-rs/doc/emergency_stop/EmergencyStop.t.html b/kawaii/kawaii-rs/doc/emergency_stop/EmergencyStop.t.html new file mode 100644 index 0000000..6b91c77 --- /dev/null +++ b/kawaii/kawaii-rs/doc/emergency_stop/EmergencyStop.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.EmergencyStop.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/emergency_stop/index.html b/kawaii/kawaii-rs/doc/emergency_stop/index.html new file mode 100644 index 0000000..79511d6 --- /dev/null +++ b/kawaii/kawaii-rs/doc/emergency_stop/index.html @@ -0,0 +1,120 @@ + + + + + + + + + + emergency_stop - Rust + + + + + + + + + + + + + + + + + + +
+

Crate emergency_stop + + [] + + [src]

+

Structs

+ + + + +
EmergencyStop + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/emergency_stop/sidebar-items.js b/kawaii/kawaii-rs/doc/emergency_stop/sidebar-items.js new file mode 100644 index 0000000..3925150 --- /dev/null +++ b/kawaii/kawaii-rs/doc/emergency_stop/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["EmergencyStop",""]]}); \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/emergency_stop/struct.EmergencyStop.html b/kawaii/kawaii-rs/doc/emergency_stop/struct.EmergencyStop.html new file mode 100644 index 0000000..f22e8a2 --- /dev/null +++ b/kawaii/kawaii-rs/doc/emergency_stop/struct.EmergencyStop.html @@ -0,0 +1,132 @@ + + + + + + + + + + emergency_stop::EmergencyStop - Rust + + + + + + + + + + + + + + + + + + +
+

Struct emergency_stop::EmergencyStop + + [] + + [src]

+
pub struct EmergencyStop {
+    pub state: Arc<AtomicBool>,
+    // some fields omitted
+}

Fields

+

Methods

impl EmergencyStop
[src]

+

+

Constructs a new EmergencyStop and starts poll thread.

+ +

Parameter

+
    +
  • stop_port GPIO Port number of emergency stop pin.
  • +
+

Trait Implementations

impl Debug for EmergencyStop
[src]

+

+

Formats the value using the given formatter.

+

impl Drop for EmergencyStop
[src]

+

+

Set emergency stop and join poll thread.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/implementors/core/clone/trait.Clone.js b/kawaii/kawaii-rs/doc/implementors/core/clone/trait.Clone.js new file mode 100644 index 0000000..f89c34f --- /dev/null +++ b/kawaii/kawaii-rs/doc/implementors/core/clone/trait.Clone.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["kawaii"] = ["impl Clone for Direction","impl Clone for Edge","impl Clone for Value",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/kawaii/kawaii-rs/doc/implementors/core/fmt/trait.Debug.js b/kawaii/kawaii-rs/doc/implementors/core/fmt/trait.Debug.js new file mode 100644 index 0000000..9803ce5 --- /dev/null +++ b/kawaii/kawaii-rs/doc/implementors/core/fmt/trait.Debug.js @@ -0,0 +1,12 @@ +(function() {var implementors = {}; +implementors["emergency_stop"] = ["impl Debug for EmergencyStop",]; +implementors["kawaii"] = ["impl Debug for Direction","impl Debug for Edge","impl Debug for Value","impl Debug for Port","impl Debug for SyncPort","impl Debug for AsyncPort","impl Debug for Measure",]; +implementors["ultrasonic_irq"] = ["impl Debug for UltrasonicEcho","impl Debug for UltrasonicTrigger","impl Debug for Ultrasonic",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/kawaii/kawaii-rs/doc/implementors/core/marker/trait.Copy.js b/kawaii/kawaii-rs/doc/implementors/core/marker/trait.Copy.js new file mode 100644 index 0000000..159710b --- /dev/null +++ b/kawaii/kawaii-rs/doc/implementors/core/marker/trait.Copy.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["kawaii"] = ["impl Copy for Direction","impl Copy for Edge","impl Copy for Value",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/kawaii/kawaii-rs/doc/implementors/core/ops/drop/trait.Drop.js b/kawaii/kawaii-rs/doc/implementors/core/ops/drop/trait.Drop.js new file mode 100644 index 0000000..876a677 --- /dev/null +++ b/kawaii/kawaii-rs/doc/implementors/core/ops/drop/trait.Drop.js @@ -0,0 +1,12 @@ +(function() {var implementors = {}; +implementors["emergency_stop"] = ["impl Drop for EmergencyStop",]; +implementors["kawaii"] = ["impl Drop for Measure",]; +implementors["ultrasonic_irq"] = ["impl Drop for Ultrasonic",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/kawaii/kawaii-rs/doc/kawaii/Measure.t.html b/kawaii/kawaii-rs/doc/kawaii/Measure.t.html new file mode 100644 index 0000000..77498b8 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/Measure.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Measure.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/AsyncPort.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/AsyncPort.t.html new file mode 100644 index 0000000..bb6465f --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/AsyncPort.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.AsyncPort.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/Direction.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/Direction.t.html new file mode 100644 index 0000000..03027a1 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/Direction.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Direction.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/Edge.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/Edge.t.html new file mode 100644 index 0000000..1ae673a --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/Edge.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Edge.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/Port.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/Port.t.html new file mode 100644 index 0000000..665d505 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/Port.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Port.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/SyncPort.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/SyncPort.t.html new file mode 100644 index 0000000..216d445 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/SyncPort.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.SyncPort.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/Value.t.html b/kawaii/kawaii-rs/doc/kawaii/gpio/Value.t.html new file mode 100644 index 0000000..9d92215 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/Value.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to enum.Value.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Direction.html b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Direction.html new file mode 100644 index 0000000..e1b6a2c --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Direction.html @@ -0,0 +1,128 @@ + + + + + + + + + + kawaii::gpio::Direction - Rust + + + + + + + + + + + + + + + + + + +
+

Enum kawaii::gpio::Direction + + [] + + [src]

+
pub enum Direction {
+    Out,
+    In,
+}

Variants

+

Methods

impl Direction
[src]

+

+

+

Trait Implementations

impl Clone for Direction
[src]

+

+

Returns a copy of the value. Read more

+

+

Performs copy-assignment from source. Read more

+

impl Copy for Direction
[src]

+

impl Debug for Direction
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Edge.html b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Edge.html new file mode 100644 index 0000000..310e4bd --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Edge.html @@ -0,0 +1,130 @@ + + + + + + + + + + kawaii::gpio::Edge - Rust + + + + + + + + + + + + + + + + + + +
+

Enum kawaii::gpio::Edge + + [] + + [src]

+
pub enum Edge {
+    None,
+    Rising,
+    Falling,
+    Both,
+}

Variants

+

Methods

impl Edge
[src]

+

+

+

Trait Implementations

impl Clone for Edge
[src]

+

+

Returns a copy of the value. Read more

+

+

Performs copy-assignment from source. Read more

+

impl Copy for Edge
[src]

+

impl Debug for Edge
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Value.html b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Value.html new file mode 100644 index 0000000..cfe98d4 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/enum.Value.html @@ -0,0 +1,130 @@ + + + + + + + + + + kawaii::gpio::Value - Rust + + + + + + + + + + + + + + + + + + +
+

Enum kawaii::gpio::Value + + [] + + [src]

+
pub enum Value {
+    High,
+    Low,
+}

Variants

+

Methods

impl Value
[src]

+

+

+

+

+

Trait Implementations

impl Clone for Value
[src]

+

+

Returns a copy of the value. Read more

+

+

Performs copy-assignment from source. Read more

+

impl Copy for Value
[src]

+

impl Debug for Value
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/index.html b/kawaii/kawaii-rs/doc/kawaii/gpio/index.html new file mode 100644 index 0000000..bf1824c --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/index.html @@ -0,0 +1,156 @@ + + + + + + + + + + kawaii::gpio - Rust + + + + + + + + + + + + + + + + + + +
+

Module kawaii::gpio + + [] + + [src]

+

Structs

+ + + + + + + + + + + + +
AsyncPort + +
Port + +
SyncPort + +

Enums

+ + + + + + + + + + + + +
Direction + +
Edge + +
Value + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/sidebar-items.js b/kawaii/kawaii-rs/doc/kawaii/gpio/sidebar-items.js new file mode 100644 index 0000000..4e76bcc --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Direction",""],["Edge",""],["Value",""]],"struct":[["AsyncPort",""],["Port",""],["SyncPort",""]]}); \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/struct.AsyncPort.html b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.AsyncPort.html new file mode 100644 index 0000000..42b9423 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.AsyncPort.html @@ -0,0 +1,138 @@ + + + + + + + + + + kawaii::gpio::AsyncPort - Rust + + + + + + + + + + + + + + + + + + +
+

Struct kawaii::gpio::AsyncPort + + [] + + [src]

+
pub struct AsyncPort {
+    pub port: Port,
+    pub edge: Edge,
+    // some fields omitted
+}

Fields

+ +

Methods

impl AsyncPort
[src]

+

+

Constructs a new asynchronous GPIO Port.

+ +

Parameter

+
    +
  • number GPIO Port number of pin.
  • +
  • edge GPIO Port edge detection setting.
  • +
+

+

Read asynchronous from GPIO AsyncPort sysfs file

+

+

Read asynchronous from GPIO AsyncPort sysfs file with measure support (ignore poll time)

+

Trait Implementations

impl Debug for AsyncPort
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/struct.Port.html b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.Port.html new file mode 100644 index 0000000..bed1584 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.Port.html @@ -0,0 +1,135 @@ + + + + + + + + + + kawaii::gpio::Port - Rust + + + + + + + + + + + + + + + + + + +
+

Struct kawaii::gpio::Port + + [] + + [src]

+
pub struct Port {
+    pub number: u8,
+    pub direction: Direction,
+}

Fields

+ +

Methods

impl Port
[src]

+

+

Constructs a new GPIO Port.

+ +

Parameter

+
    +
  • number GPIO Port number of pin.
  • +
  • direction GPIO Port direction.
  • +
+

+

Drop GPIO Port: unexport

+

Trait Implementations

impl Debug for Port
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/gpio/struct.SyncPort.html b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.SyncPort.html new file mode 100644 index 0000000..840525e --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/gpio/struct.SyncPort.html @@ -0,0 +1,134 @@ + + + + + + + + + + kawaii::gpio::SyncPort - Rust + + + + + + + + + + + + + + + + + + +
+

Struct kawaii::gpio::SyncPort + + [] + + [src]

+
pub struct SyncPort {
+    pub port: Port,
+    // some fields omitted
+}

Fields

+

Methods

impl SyncPort
[src]

+

+

Constructs a new synchronised GPIO Port.

+ +

Parameter

+
    +
  • number GPIO Port number of pin.
  • +
  • direction GPIO Port direction.
  • +
+

+

Read from GPIO SyncPort sysfs file

+

+

Write to GPIO SyncPort sysfs file

+

Trait Implementations

impl Debug for SyncPort
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/index.html b/kawaii/kawaii-rs/doc/kawaii/index.html new file mode 100644 index 0000000..5519383 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/index.html @@ -0,0 +1,128 @@ + + + + + + + + + + kawaii - Rust + + + + + + + + + + + + + + + + + + +
+

Crate kawaii + + [] + + [src]

+

Modules

+ + + + +
gpio + +

Structs

+ + + + +
Measure + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/measure/Measure.t.html b/kawaii/kawaii-rs/doc/kawaii/measure/Measure.t.html new file mode 100644 index 0000000..77498b8 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/measure/Measure.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Measure.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/measure/struct.Measure.html b/kawaii/kawaii-rs/doc/kawaii/measure/struct.Measure.html new file mode 100644 index 0000000..687fb0c --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/measure/struct.Measure.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii/struct.Measure.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/sidebar-items.js b/kawaii/kawaii-rs/doc/kawaii/sidebar-items.js new file mode 100644 index 0000000..6f578c0 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"mod":[["gpio",""]],"struct":[["Measure",""]]}); \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii/struct.Measure.html b/kawaii/kawaii-rs/doc/kawaii/struct.Measure.html new file mode 100644 index 0000000..f752b65 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii/struct.Measure.html @@ -0,0 +1,146 @@ + + + + + + + + + + kawaii::Measure - Rust + + + + + + + + + + + + + + + + + + +
+

Struct kawaii::Measure + + [] + + [src]

+
pub struct Measure {
+    pub min: u64,
+    pub max: u64,
+    pub name: String,
+    // some fields omitted
+}

Fields

+ + +

Methods

impl Measure
[src]

+

+

Constructs a new Measure.

+ +

Parameter

+
    +
  • name Name of measured component.
  • +
+

+

Start measurement

+

+

Pause measurement

+

+

Stop measurement and calculate time difference

+

Trait Implementations

impl Debug for Measure
[src]

+

+

Formats the value using the given formatter.

+

impl Drop for Measure
[src]

+

+

Print measure results and write times to file

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_clean.v.html new file mode 100644 index 0000000..4d9ef95 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_get_state.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_get_state.v.html new file mode 100644 index 0000000..ede2680 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_get_state.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_get_state.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_init.v.html new file mode 100644 index 0000000..090b850 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/emergency_stop_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_clean.html new file mode 100644 index 0000000..c286cd4 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_clean.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.emergency_stop_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_get_state.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_get_state.html new file mode 100644 index 0000000..dbd278a --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_get_state.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.emergency_stop_get_state.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_init.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_init.html new file mode 100644 index 0000000..b9d8371 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop/fn.emergency_stop_init.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.emergency_stop_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_clean.v.html new file mode 100644 index 0000000..4d9ef95 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_get_state.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_get_state.v.html new file mode 100644 index 0000000..ede2680 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_get_state.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_get_state.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_init.v.html new file mode 100644 index 0000000..090b850 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/emergency_stop_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.emergency_stop_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_clean.html new file mode 100644 index 0000000..adf2434 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_clean.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::emergency_stop_clean - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::emergency_stop_clean + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn emergency_stop_clean(emergency_stop: *mut EmergencyStop)

Drops a EmergencyStop pointer on heap.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_get_state.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_get_state.html new file mode 100644 index 0000000..8308e08 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_get_state.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::emergency_stop_get_state - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::emergency_stop_get_state + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn emergency_stop_get_state(
    emergency_stop: *mut EmergencyStop
) -> bool

Returns EmergencyStop pointer state.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_init.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_init.html new file mode 100644 index 0000000..d7a91e7 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.emergency_stop_init.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::emergency_stop_init - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::emergency_stop_init + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn emergency_stop_init(stop: u8) -> *mut EmergencyStop

Constructs a new EmergencyStop on heap and returns pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_clean.html new file mode 100644 index 0000000..fcd052d --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_clean.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::measure_clean - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::measure_clean + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn measure_clean(measure: *mut Measure)

Drops a Measure pointer on heap.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_init.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_init.html new file mode 100644 index 0000000..b729980 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_init.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::measure_init - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::measure_init + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn measure_init(name: *const c_char) -> *mut Measure

Constructs a new Measure on heap and returns pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_pause.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_pause.html new file mode 100644 index 0000000..cfa31da --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_pause.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::measure_pause - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::measure_pause + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn measure_pause(measure: *mut Measure)

Pause measure on Measure pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_start.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_start.html new file mode 100644 index 0000000..2485458 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_start.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::measure_start - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::measure_start + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn measure_start(measure: *mut Measure)

Starts measure on Measure pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_stop.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_stop.html new file mode 100644 index 0000000..13260ba --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.measure_stop.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::measure_stop - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::measure_stop + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn measure_stop(measure: *mut Measure)

Stop measure on Measure pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_clean.html new file mode 100644 index 0000000..5814803 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_clean.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::ultrasonic_clean - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::ultrasonic_clean + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn ultrasonic_clean(ultrasonic: *mut Ultrasonic)

Drops a Ultrasonic pointer on heap.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_get_distance.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_get_distance.html new file mode 100644 index 0000000..3ed21db --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_get_distance.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::ultrasonic_get_distance - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::ultrasonic_get_distance + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn ultrasonic_get_distance(ultrasonic: *mut Ultrasonic) -> u32

Returns Ultrasonic pointer distance.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_init.html b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_init.html new file mode 100644 index 0000000..b3ab097 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/fn.ultrasonic_init.html @@ -0,0 +1,114 @@ + + + + + + + + + + kawaii_api::ultrasonic_init - Rust + + + + + + + + + + + + + + + + + + +
+

Function kawaii_api::ultrasonic_init + + [] + + [src]

+
#[no_mangle] +
pub extern "C" fn ultrasonic_init(
    trigger: u8,
    echo: u8,
    temperature: u8
) -> *mut Ultrasonic

Constructs a new Ultrasonic on heap and returns pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/index.html b/kawaii/kawaii-rs/doc/kawaii_api/index.html new file mode 100644 index 0000000..474f0db --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/index.html @@ -0,0 +1,190 @@ + + + + + + + + + + kawaii_api - Rust + + + + + + + + + + + + + + + + + + +
+

Crate kawaii_api + + [] + + [src]

+

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
emergency_stop_clean +

Drops a EmergencyStop pointer on heap.

+
emergency_stop_get_state +

Returns EmergencyStop pointer state.

+
emergency_stop_init +

Constructs a new EmergencyStop on heap and returns pointer.

+
measure_clean +

Drops a Measure pointer on heap.

+
measure_init +

Constructs a new Measure on heap and returns pointer.

+
measure_pause +

Pause measure on Measure pointer.

+
measure_start +

Starts measure on Measure pointer.

+
measure_stop +

Stop measure on Measure pointer.

+
ultrasonic_clean +

Drops a Ultrasonic pointer on heap.

+
ultrasonic_get_distance +

Returns Ultrasonic pointer distance.

+
ultrasonic_init +

Constructs a new Ultrasonic on heap and returns pointer.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_clean.html new file mode 100644 index 0000000..14b72e5 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_clean.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.measure_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_init.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_init.html new file mode 100644 index 0000000..18b5f0a --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_init.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.measure_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_pause.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_pause.html new file mode 100644 index 0000000..b252633 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_pause.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.measure_pause.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_start.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_start.html new file mode 100644 index 0000000..a71c8a4 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_start.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.measure_start.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_stop.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_stop.html new file mode 100644 index 0000000..983fcf8 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/fn.measure_stop.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.measure_stop.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_clean.v.html new file mode 100644 index 0000000..fb6eef3 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_init.v.html new file mode 100644 index 0000000..21f55c6 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_pause.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_pause.v.html new file mode 100644 index 0000000..0538f97 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_pause.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_pause.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_start.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_start.v.html new file mode 100644 index 0000000..634fd82 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_start.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_start.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_stop.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_stop.v.html new file mode 100644 index 0000000..aba8518 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure/measure_stop.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_stop.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure_clean.v.html new file mode 100644 index 0000000..fb6eef3 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure_init.v.html new file mode 100644 index 0000000..21f55c6 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure_pause.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure_pause.v.html new file mode 100644 index 0000000..0538f97 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure_pause.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_pause.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure_start.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure_start.v.html new file mode 100644 index 0000000..634fd82 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure_start.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_start.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/measure_stop.v.html b/kawaii/kawaii-rs/doc/kawaii_api/measure_stop.v.html new file mode 100644 index 0000000..aba8518 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/measure_stop.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.measure_stop.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/sidebar-items.js b/kawaii/kawaii-rs/doc/kawaii_api/sidebar-items.js new file mode 100644 index 0000000..d45c380 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"fn":[["emergency_stop_clean","Drops a `EmergencyStop` pointer on heap."],["emergency_stop_get_state","Returns `EmergencyStop` pointer state."],["emergency_stop_init","Constructs a new `EmergencyStop` on heap and returns pointer."],["measure_clean","Drops a `Measure` pointer on heap."],["measure_init","Constructs a new `Measure` on heap and returns pointer."],["measure_pause","Pause measure on `Measure` pointer."],["measure_start","Starts measure on `Measure` pointer."],["measure_stop","Stop measure on `Measure` pointer."],["ultrasonic_clean","Drops a `Ultrasonic` pointer on heap."],["ultrasonic_get_distance","Returns `Ultrasonic` pointer distance."],["ultrasonic_init","Constructs a new `Ultrasonic` on heap and returns pointer."]]}); \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_clean.v.html new file mode 100644 index 0000000..5834d1d --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_get_distance.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_get_distance.v.html new file mode 100644 index 0000000..fb004ba --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_get_distance.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_get_distance.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_init.v.html new file mode 100644 index 0000000..e6946c7 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_clean.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_clean.html new file mode 100644 index 0000000..5cc095c --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_clean.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.ultrasonic_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_get_distance.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_get_distance.html new file mode 100644 index 0000000..e10feb3 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_get_distance.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.ultrasonic_get_distance.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_init.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_init.html new file mode 100644 index 0000000..cb41f33 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/fn.ultrasonic_init.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to ../../kawaii_api/fn.ultrasonic_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_clean.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_clean.v.html new file mode 100644 index 0000000..5834d1d --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_clean.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_clean.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_get_distance.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_get_distance.v.html new file mode 100644 index 0000000..fb004ba --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_get_distance.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_get_distance.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_init.v.html b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_init.v.html new file mode 100644 index 0000000..e6946c7 --- /dev/null +++ b/kawaii/kawaii-rs/doc/kawaii_api/ultrasonic_irq/ultrasonic_init.v.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to fn.ultrasonic_init.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/main.css b/kawaii/kawaii-rs/doc/main.css new file mode 100644 index 0000000..c031019 --- /dev/null +++ b/kawaii/kawaii-rs/doc/main.css @@ -0,0 +1,186 @@ +/** + * Copyright 2015 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ + +/* General structure and fonts */ + +body { + background-color: white; + color: black; +} + +h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + color: black; +} +h1.fqn { + border-bottom-color: #D5D5D5; +} +h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + border-bottom-color: #DDDDDD; +} +.in-band { + background-color: white; +} + +.docblock code, .docblock-short code { + background-color: #F5F5F5; +} +pre { + background-color: #F5F5F5; +} + +.sidebar { + background-color: #F1F1F1; +} + +.sidebar .current { + background-color: #fff; +} + +.source .sidebar { + background-color: #fff; +} + +.sidebar .location { + border-color: #000; + background-color: #fff; + color: #333; +} + +.block a:hover { + background: #F5F5F5; +} + +.line-numbers span { color: #c67e2d; } +.line-numbers .line-highlighted { + background-color: #f6fdb0 !important; +} + +:target { background: #FDFFD3; } +.content .highlighted { + color: #000 !important; + background-color: #ccc; +} +.content .highlighted a, .content .highlighted span { color: #000 !important; } +.content .highlighted.trait { background-color: #fece7e; } +.content .highlighted.mod { background-color: #afc6e4; } +.content .highlighted.enum { background-color: #b4d1b9; } +.content .highlighted.struct { background-color: #e7b1a0; } +.content .highlighted.fn { background-color: #c6afb3; } +.content .highlighted.method { background-color: #c6afb3; } +.content .highlighted.tymethod { background-color: #c6afb3; } +.content .highlighted.type { background-color: #c6afb3; } + +.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { + border-bottom-color: #DDD; +} + +.docblock table { + border-color: #ddd; +} + +.docblock table td { + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.docblock table th { + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.content span.primitive, .content a.primitive, .block a.current.primitive { color: #39a7bf; } +.content span.externcrate, +.content span.mod, .content a.mod, .block a.current.mod { color: #4d76ae; } +.content span.fn, .content a.fn, .block a.current.fn, +.content span.method, .content a.method, .block a.current.method, +.content span.tymethod, .content a.tymethod, .block a.current.tymethod, +.content .fnname { color: #8c6067; } + +pre.rust .comment { color: #8E908C; } +pre.rust .doccomment { color: #4D4D4C; } + +nav { + border-bottom-color: #e0e0e0; +} +nav.main .current { + border-top-color: #000; + border-bottom-color: #000; +} +nav.main .separator { + border: 1px solid #000; +} +a { + color: #000; +} + +.docblock a, .docblock-short a, .stability a { + color: #3873AD; +} + +a.test-arrow { + color: #f5f5f5; +} + +.content span.trait, .content a.trait, .block a.current.trait { color: #7c5af3; } + +.search-input { + color: #555; + box-shadow: 0 0 0 1px #e0e0e0, 0 0 0 2px transparent; + background-color: white; +} + +.stab.unstable { background: #FFF5D6; border-color: #FFC600; } +.stab.deprecated { background: #F3DFFF; border-color: #7F0087; } + +#help > div { + background: #e9e9e9; + border-color: #bfbfbf;; +} + +#help dt { + border-color: #bfbfbf; + background: #fff; +} + +.since { + color: grey; +} + +.line-numbers :target { background-color: transparent; } + +/* Code highlighting */ +pre.rust .kw { color: #8959A8; } +pre.rust .kw-2, pre.rust .prelude-ty { color: #4271AE; } +pre.rust .number, pre.rust .string { color: #718C00; } +pre.rust .self, pre.rust .bool-val, pre.rust .prelude-val, +pre.rust .attribute, pre.rust .attribute .ident { color: #C82829; } +pre.rust .macro, pre.rust .macro-nonterminal { color: #3E999F; } +pre.rust .lifetime { color: #B76514; } +pre.rust .question-mark { + color: #ff9011; +} + +a.test-arrow { + background-color: rgba(78, 139, 202, 0.2); +} + +a.test-arrow:hover{ + background-color: #4e8bca; +} + +.toggle-label { + color: #999; +} + +:target > code { + background: #FDFFD3; +} \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/main.js b/kawaii/kawaii-rs/doc/main.js new file mode 100644 index 0000000..38f8368 --- /dev/null +++ b/kawaii/kawaii-rs/doc/main.js @@ -0,0 +1,1296 @@ +/*! + * Copyright 2014 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 or the MIT license + * , at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ + +/*jslint browser: true, es5: true */ +/*globals $: true, rootPath: true */ + +(function() { + "use strict"; + + // This mapping table should match the discriminants of + // `rustdoc::html::item_type::ItemType` type in Rust. + var itemTypes = ["mod", + "externcrate", + "import", + "struct", + "enum", + "fn", + "type", + "static", + "trait", + "impl", + "tymethod", + "method", + "structfield", + "variant", + "macro", + "primitive", + "associatedtype", + "constant", + "associatedconstant", + "union"]; + + function hasClass(elem, className) { + if (elem && className && elem.className) { + var elemClass = elem.className; + var start = elemClass.indexOf(className); + if (start == -1) { + return false; + } else if (elemClass.length == className.length) { + return true; + } else { + if (start > 0 && elemClass[start - 1] != ' ') { + return false; + } + var end = start + className.length; + if (end < elemClass.length && elemClass[end] != ' ') { + return false; + } + return true; + } + } + return false; + } + + function addClass(elem, className) { + if (elem && className && !hasClass(elem, className)) { + if (elem.className && elem.className.length > 0) { + elem.className += ' ' + className; + } else { + elem.className = className; + } + } + } + + function removeClass(elem, className) { + if (elem && className && elem.className) { + elem.className = (" " + elem.className + " ").replace(" " + className + " ", " ") + .trim(); + } + } + + function onEach(arr, func) { + if (arr && arr.length > 0 && func) { + for (var i = 0; i < arr.length; i++) { + func(arr[i]); + } + } + } + + function isHidden(elem) { + return (elem.offsetParent === null) + } + + // used for special search precedence + var TY_PRIMITIVE = itemTypes.indexOf("primitive"); + + onEach(document.getElementsByClassName('js-only'), function(e) { + removeClass(e, 'js-only'); + }); + + function getQueryStringParams() { + var params = {}; + window.location.search.substring(1).split("&"). + map(function(s) { + var pair = s.split("="); + params[decodeURIComponent(pair[0])] = + typeof pair[1] === "undefined" ? + null : decodeURIComponent(pair[1]); + }); + return params; + } + + function browserSupportsHistoryApi() { + return document.location.protocol != "file:" && + window.history && typeof window.history.pushState === "function"; + } + + function highlightSourceLines(ev) { + var i, from, to, match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/); + if (match) { + from = parseInt(match[1], 10); + to = Math.min(50000, parseInt(match[2] || match[1], 10)); + from = Math.min(from, to); + var elem = document.getElementById(from); + if (!elem) { + return; + } + if (ev === null) { + var x = document.getElementById(from); + if (x) { + x.scrollIntoView(); + } + }; + onEach(document.getElementsByClassName('line-numbers'), function(e) { + onEach(e.getElementsByTagName('span'), function(i_e) { + removeClass(i_e, 'line-highlighted'); + }); + }) + for (i = from; i <= to; ++i) { + addClass(document.getElementById(i), 'line-highlighted'); + } + } + } + highlightSourceLines(null); + window.onhashchange = highlightSourceLines; + + // Gets the human-readable string for the virtual-key code of the + // given KeyboardEvent, ev. + // + // This function is meant as a polyfill for KeyboardEvent#key, + // since it is not supported in Trident. We also test for + // KeyboardEvent#keyCode because the handleShortcut handler is + // also registered for the keydown event, because Blink doesn't fire + // keypress on hitting the Escape key. + // + // So I guess you could say things are getting pretty interoperable. + function getVirtualKey(ev) { + if ("key" in ev && typeof ev.key != "undefined") + return ev.key; + + var c = ev.charCode || ev.keyCode; + if (c == 27) + return "Escape"; + return String.fromCharCode(c); + } + + function handleShortcut(ev) { + if (document.activeElement.tagName === "INPUT") + return; + + // Don't interfere with browser shortcuts + if (ev.ctrlKey || ev.altKey || ev.metaKey) + return; + + var help = document.getElementById("help"); + switch (getVirtualKey(ev)) { + case "Escape": + var search = document.getElementById("search"); + if (!hasClass(help, "hidden")) { + ev.preventDefault(); + addClass(help, "hidden"); + removeClass(document.body, "blur"); + } else if (!hasClass(search, "hidden")) { + ev.preventDefault(); + addClass(search, "hidden"); + removeClass(document.getElementById("main"), "hidden"); + } + break; + + case "s": + case "S": + ev.preventDefault(); + focusSearchBar(); + break; + + case "+": + ev.preventDefault(); + toggleAllDocs(); + break; + + case "?": + if (ev.shiftKey && hasClass(help, "hidden")) { + ev.preventDefault(); + removeClass(help, "hidden"); + addClass(document.body, "blur"); + } + break; + } + } + + document.onkeypress = handleShortcut; + document.onkeydown = handleShortcut; + document.onclick = function(ev) { + if (hasClass(ev.target, 'collapse-toggle')) { + collapseDocs(ev.target); + } else if (hasClass(ev.target.parentNode, 'collapse-toggle')) { + collapseDocs(ev.target.parentNode); + } else if (ev.target.tagName === 'SPAN' && hasClass(ev.target.parentNode, 'line-numbers')) { + var prev_id = 0; + + var set_fragment = function (name) { + if (browserSupportsHistoryApi()) { + history.replaceState(null, null, '#' + name); + window.hashchange(); + } else { + location.replace('#' + name); + } + }; + + var cur_id = parseInt(ev.target.id, 10); + + if (ev.shiftKey && prev_id) { + if (prev_id > cur_id) { + var tmp = prev_id; + prev_id = cur_id; + cur_id = tmp; + } + + set_fragment(prev_id + '-' + cur_id); + } else { + prev_id = cur_id; + + set_fragment(cur_id); + } + } else if (!hasClass(document.getElementById("help"), "hidden")) { + addClass(document.getElementById("help"), "hidden"); + removeClass(document.body, "blur"); + } + }; + + var x = document.getElementsByClassName('version-selector'); + if (x.length > 0) { + x[0].onchange = function() { + var i, match, + url = document.location.href, + stripped = '', + len = rootPath.match(/\.\.\//g).length + 1; + + for (i = 0; i < len; ++i) { + match = url.match(/\/[^\/]*$/); + if (i < len - 1) { + stripped = match[0] + stripped; + } + url = url.substring(0, url.length - match[0].length); + } + + url += '/' + document.getElementsByClassName('version-selector')[0].value + stripped; + + document.location.href = url; + }; + } + + /** + * A function to compute the Levenshtein distance between two strings + * Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported + * Full License can be found at http://creativecommons.org/licenses/by-sa/3.0/legalcode + * This code is an unmodified version of the code written by Marco de Wit + * and was found at http://stackoverflow.com/a/18514751/745719 + */ + var levenshtein = (function() { + var row2 = []; + return function(s1, s2) { + if (s1 === s2) { + return 0; + } + var s1_len = s1.length, s2_len = s2.length; + if (s1_len && s2_len) { + var i1 = 0, i2 = 0, a, b, c, c2, row = row2; + while (i1 < s1_len) { + row[i1] = ++i1; + } + while (i2 < s2_len) { + c2 = s2.charCodeAt(i2); + a = i2; + ++i2; + b = i2; + for (i1 = 0; i1 < s1_len; ++i1) { + c = a + (s1.charCodeAt(i1) !== c2 ? 1 : 0); + a = row[i1]; + b = b < a ? (b < c ? b + 1 : c) : (a < c ? a + 1 : c); + row[i1] = b; + } + } + return b; + } + return s1_len + s2_len; + }; + })(); + + function initSearch(rawSearchIndex) { + var currentResults, index, searchIndex; + var MAX_LEV_DISTANCE = 3; + var params = getQueryStringParams(); + + // Populate search bar with query string search term when provided, + // but only if the input bar is empty. This avoid the obnoxious issue + // where you start trying to do a search, and the index loads, and + // suddenly your search is gone! + if (document.getElementsByClassName("search-input")[0].value === "") { + document.getElementsByClassName("search-input")[0].value = params.search || ''; + } + + /** + * Executes the query and builds an index of results + * @param {[Object]} query [The user query] + * @param {[type]} max [The maximum results returned] + * @param {[type]} searchWords [The list of search words to query + * against] + * @return {[type]} [A search index of results] + */ + function execQuery(query, max, searchWords) { + var valLower = query.query.toLowerCase(), + val = valLower, + typeFilter = itemTypeFromName(query.type), + results = [], + split = valLower.split("::"); + + // remove empty keywords + for (var j = 0; j < split.length; ++j) { + split[j].toLowerCase(); + if (split[j] === "") { + split.splice(j, 1); + } + } + + function typePassesFilter(filter, type) { + // No filter + if (filter < 0) return true; + + // Exact match + if (filter === type) return true; + + // Match related items + var name = itemTypes[type]; + switch (itemTypes[filter]) { + case "constant": + return (name == "associatedconstant"); + case "fn": + return (name == "method" || name == "tymethod"); + case "type": + return (name == "primitive"); + } + + // No match + return false; + } + + // quoted values mean literal search + var nSearchWords = searchWords.length; + if ((val.charAt(0) === "\"" || val.charAt(0) === "'") && + val.charAt(val.length - 1) === val.charAt(0)) + { + val = val.substr(1, val.length - 2); + for (var i = 0; i < nSearchWords; ++i) { + if (searchWords[i] === val) { + // filter type: ... queries + if (typePassesFilter(typeFilter, searchIndex[i].ty)) { + results.push({id: i, index: -1}); + } + } + if (results.length === max) { + break; + } + } + // searching by type + } else if (val.search("->") > -1) { + var trimmer = function (s) { return s.trim(); }; + var parts = val.split("->").map(trimmer); + var input = parts[0]; + // sort inputs so that order does not matter + var inputs = input.split(",").map(trimmer).sort().toString(); + var output = parts[1]; + + for (var i = 0; i < nSearchWords; ++i) { + var type = searchIndex[i].type; + if (!type) { + continue; + } + + // sort index inputs so that order does not matter + var typeInputs = type.inputs.map(function (input) { + return input.name; + }).sort(); + + // allow searching for void (no output) functions as well + var typeOutput = type.output ? type.output.name : ""; + if ((inputs === "*" || inputs === typeInputs.toString()) && + (output === "*" || output == typeOutput)) { + results.push({id: i, index: -1, dontValidate: true}); + } + } + } else { + // gather matching search results up to a certain maximum + val = val.replace(/\_/g, ""); + for (var i = 0; i < split.length; ++i) { + for (var j = 0; j < nSearchWords; ++j) { + var lev_distance; + if (searchWords[j].indexOf(split[i]) > -1 || + searchWords[j].indexOf(val) > -1 || + searchWords[j].replace(/_/g, "").indexOf(val) > -1) + { + // filter type: ... queries + if (typePassesFilter(typeFilter, searchIndex[j].ty)) { + results.push({ + id: j, + index: searchWords[j].replace(/_/g, "").indexOf(val), + lev: 0, + }); + } + } else if ( + (lev_distance = levenshtein(searchWords[j], val)) <= + MAX_LEV_DISTANCE) { + if (typePassesFilter(typeFilter, searchIndex[j].ty)) { + results.push({ + id: j, + index: 0, + // we want lev results to go lower than others + lev: lev_distance, + }); + } + } + if (results.length === max) { + break; + } + } + } + } + + var nresults = results.length; + for (var i = 0; i < nresults; ++i) { + results[i].word = searchWords[results[i].id]; + results[i].item = searchIndex[results[i].id] || {}; + } + // if there are no results then return to default and fail + if (results.length === 0) { + return []; + } + + results.sort(function sortResults(aaa, bbb) { + var a, b; + + // Sort by non levenshtein results and then levenshtein results by the distance + // (less changes required to match means higher rankings) + a = (aaa.lev); + b = (bbb.lev); + if (a !== b) { return a - b; } + + // sort by crate (non-current crate goes later) + a = (aaa.item.crate !== window.currentCrate); + b = (bbb.item.crate !== window.currentCrate); + if (a !== b) { return a - b; } + + // sort by exact match (mismatch goes later) + a = (aaa.word !== valLower); + b = (bbb.word !== valLower); + if (a !== b) { return a - b; } + + // sort by item name length (longer goes later) + a = aaa.word.length; + b = bbb.word.length; + if (a !== b) { return a - b; } + + // sort by item name (lexicographically larger goes later) + a = aaa.word; + b = bbb.word; + if (a !== b) { return (a > b ? +1 : -1); } + + // sort by index of keyword in item name (no literal occurrence goes later) + a = (aaa.index < 0); + b = (bbb.index < 0); + if (a !== b) { return a - b; } + // (later literal occurrence, if any, goes later) + a = aaa.index; + b = bbb.index; + if (a !== b) { return a - b; } + + // special precedence for primitive pages + if ((aaa.item.ty === TY_PRIMITIVE) && (bbb.item.ty !== TY_PRIMITIVE)) { + return -1; + } + if ((bbb.item.ty === TY_PRIMITIVE) && (aaa.item.ty !== TY_PRIMITIVE)) { + return 1; + } + + // sort by description (no description goes later) + a = (aaa.item.desc === ''); + b = (bbb.item.desc === ''); + if (a !== b) { return a - b; } + + // sort by type (later occurrence in `itemTypes` goes later) + a = aaa.item.ty; + b = bbb.item.ty; + if (a !== b) { return a - b; } + + // sort by path (lexicographically larger goes later) + a = aaa.item.path; + b = bbb.item.path; + if (a !== b) { return (a > b ? +1 : -1); } + + // que sera, sera + return 0; + }); + + // remove duplicates, according to the data provided + for (var i = results.length - 1; i > 0; i -= 1) { + if (results[i].word === results[i - 1].word && + results[i].item.ty === results[i - 1].item.ty && + results[i].item.path === results[i - 1].item.path && + (results[i].item.parent || {}).name === (results[i - 1].item.parent || {}).name) + { + results[i].id = -1; + } + } + for (var i = 0; i < results.length; ++i) { + var result = results[i], + name = result.item.name.toLowerCase(), + path = result.item.path.toLowerCase(), + parent = result.item.parent; + + // this validation does not make sense when searching by types + if (result.dontValidate) { + continue; + } + + var valid = validateResult(name, path, split, parent); + if (!valid) { + result.id = -1; + } + } + return results; + } + + /** + * Validate performs the following boolean logic. For example: + * "File::open" will give IF A PARENT EXISTS => ("file" && "open") + * exists in (name || path || parent) OR => ("file" && "open") exists in + * (name || path ) + * + * This could be written functionally, but I wanted to minimise + * functions on stack. + * + * @param {[string]} name [The name of the result] + * @param {[string]} path [The path of the result] + * @param {[string]} keys [The keys to be used (["file", "open"])] + * @param {[object]} parent [The parent of the result] + * @return {[boolean]} [Whether the result is valid or not] + */ + function validateResult(name, path, keys, parent) { + for (var i = 0; i < keys.length; ++i) { + // each check is for validation so we negate the conditions and invalidate + if (!( + // check for an exact name match + name.toLowerCase().indexOf(keys[i]) > -1 || + // then an exact path match + path.toLowerCase().indexOf(keys[i]) > -1 || + // next if there is a parent, check for exact parent match + (parent !== undefined && + parent.name.toLowerCase().indexOf(keys[i]) > -1) || + // lastly check to see if the name was a levenshtein match + levenshtein(name.toLowerCase(), keys[i]) <= + MAX_LEV_DISTANCE)) { + return false; + } + } + return true; + } + + function getQuery() { + var matches, type, query, raw = + document.getElementsByClassName('search-input')[0].value; + query = raw; + + matches = query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i); + if (matches) { + type = matches[1].replace(/^const$/, 'constant'); + query = query.substring(matches[0].length); + } + + return { + raw: raw, + query: query, + type: type, + id: query + type + }; + } + + function initSearchNav() { + var hoverTimeout; + + var click_func = function(e) { + var el = e.target; + // to retrieve the real "owner" of the event. + while (el.tagName !== 'TR') { + el = el.parentNode; + } + var dst = e.target.getElementsByTagName('a'); + if (dst.length < 1) { + return; + } + dst = dst[0]; + if (window.location.pathname === dst.pathname) { + addClass(document.getElementById('search'), 'hidden'); + removeClass(document.getElementById('main'), 'hidden'); + document.location.href = dst.href; + } + }; + var mouseover_func = function(e) { + var el = e.target; + // to retrieve the real "owner" of the event. + while (el.tagName !== 'TR') { + el = el.parentNode; + } + clearTimeout(hoverTimeout); + hoverTimeout = setTimeout(function() { + onEach(document.getElementsByClassName('search-results'), function(e) { + onEach(e.getElementsByClassName('result'), function(i_e) { + removeClass(i_e, 'highlighted'); + }); + }); + addClass(el, 'highlighted'); + }, 20); + }; + onEach(document.getElementsByClassName('search-results'), function(e) { + onEach(e.getElementsByClassName('result'), function(i_e) { + i_e.onclick = click_func; + i_e.onmouseover = mouseover_func; + }); + }); + + var search_input = document.getElementsByClassName('search-input')[0]; + search_input.onkeydown = null; + search_input.onkeydown = function(e) { + var actives = []; + onEach(document.getElementsByClassName('search-results'), function(e) { + onEach(document.getElementsByClassName('highlighted'), function(e) { + actives.push(e); + }); + }); + + if (e.which === 38) { // up + if (!actives.length || !actives[0].previousElementSibling) { + return; + } + + addClass(actives[0].previousElementSibling, 'highlighted'); + removeClass(actives[0], 'highlighted'); + } else if (e.which === 40) { // down + if (!actives.length) { + var results = document.getElementsByClassName('search-results'); + if (results.length > 0) { + var res = results[0].getElementsByClassName('result'); + if (res.length > 0) { + addClass(res[0], 'highlighted'); + } + } + } else if (actives[0].nextElementSibling) { + addClass(actives[0].nextElementSibling, 'highlighted'); + removeClass(actives[0], 'highlighted'); + } + } else if (e.which === 13) { // return + if (actives.length) { + document.location.href = actives[0].getElementsByTagName('a')[0].href; + } + } else if (actives.length > 0) { + removeClass(actives[0], 'highlighted'); + } + }; + } + + function escape(content) { + var h1 = document.createElement('h1'); + h1.textContent = content; + return h1.innerHTML; + } + + function showResults(results) { + var output, shown, query = getQuery(); + + currentResults = query.id; + output = '

Results for ' + escape(query.query) + + (query.type ? ' (type: ' + escape(query.type) + ')' : '') + '

'; + output += ''; + + if (results.length > 0) { + shown = []; + + results.forEach(function(item) { + var name, type, href, displayPath; + + if (shown.indexOf(item) !== -1) { + return; + } + + shown.push(item); + name = item.name; + type = itemTypes[item.ty]; + + if (type === 'mod') { + displayPath = item.path + '::'; + href = rootPath + item.path.replace(/::/g, '/') + '/' + + name + '/index.html'; + } else if (type === "primitive") { + displayPath = ""; + href = rootPath + item.path.replace(/::/g, '/') + + '/' + type + '.' + name + '.html'; + } else if (type === "externcrate") { + displayPath = ""; + href = rootPath + name + '/index.html'; + } else if (item.parent !== undefined) { + var myparent = item.parent; + var anchor = '#' + type + '.' + name; + var parentType = itemTypes[myparent.ty]; + if (parentType === "primitive") { + displayPath = myparent.name + '::'; + } else { + displayPath = item.path + '::' + myparent.name + '::'; + } + href = rootPath + item.path.replace(/::/g, '/') + + '/' + parentType + + '.' + myparent.name + + '.html' + anchor; + } else { + displayPath = item.path + '::'; + href = rootPath + item.path.replace(/::/g, '/') + + '/' + type + '.' + name + '.html'; + } + + output += ''; + }); + } else { + output += 'No results :( Try on DuckDuckGo?'; + } + + output += "

"; + addClass(document.getElementById('main'), 'hidden'); + var search = document.getElementById('search'); + removeClass(search, 'hidden'); + search.innerHTML = output; + var tds = search.getElementsByTagName('td'); + var td_width = 0; + if (tds.length > 0) { + td_width = tds[0].offsetWidth; + } + var width = search.offsetWidth - 40 - td_width; + onEach(search.getElementsByClassName('desc'), function(e) { + e.style.width = width + 'px'; + }); + initSearchNav(); + } + + function search(e) { + var query, + filterdata = [], + obj, i, len, + results = [], + maxResults = 200, + resultIndex; + var params = getQueryStringParams(); + + query = getQuery(); + if (e) { + e.preventDefault(); + } + + if (!query.query || query.id === currentResults) { + return; + } + + // Update document title to maintain a meaningful browser history + document.title = "Results for " + query.query + " - Rust"; + + // Because searching is incremental by character, only the most + // recent search query is added to the browser history. + if (browserSupportsHistoryApi()) { + if (!history.state && !params.search) { + history.pushState(query, "", "?search=" + encodeURIComponent(query.raw)); + } else { + history.replaceState(query, "", "?search=" + encodeURIComponent(query.raw)); + } + } + + resultIndex = execQuery(query, 20000, index); + len = resultIndex.length; + for (i = 0; i < len; ++i) { + if (resultIndex[i].id > -1) { + obj = searchIndex[resultIndex[i].id]; + filterdata.push([obj.name, obj.ty, obj.path, obj.desc]); + results.push(obj); + } + if (results.length >= maxResults) { + break; + } + } + + showResults(results); + } + + function itemTypeFromName(typename) { + for (var i = 0; i < itemTypes.length; ++i) { + if (itemTypes[i] === typename) { return i; } + } + return -1; + } + + function buildIndex(rawSearchIndex) { + searchIndex = []; + var searchWords = []; + for (var crate in rawSearchIndex) { + if (!rawSearchIndex.hasOwnProperty(crate)) { continue; } + + searchWords.push(crate); + searchIndex.push({ + crate: crate, + ty: 1, // == ExternCrate + name: crate, + path: "", + desc: rawSearchIndex[crate].doc, + type: null, + }); + + // an array of [(Number) item type, + // (String) name, + // (String) full path or empty string for previous path, + // (String) description, + // (Number | null) the parent path index to `paths`] + // (Object | null) the type of the function (if any) + var items = rawSearchIndex[crate].items; + // an array of [(Number) item type, + // (String) name] + var paths = rawSearchIndex[crate].paths; + + // convert `paths` into an object form + var len = paths.length; + for (var i = 0; i < len; ++i) { + paths[i] = {ty: paths[i][0], name: paths[i][1]}; + } + + // convert `items` into an object form, and construct word indices. + // + // before any analysis is performed lets gather the search terms to + // search against apart from the rest of the data. This is a quick + // operation that is cached for the life of the page state so that + // all other search operations have access to this cached data for + // faster analysis operations + var len = items.length; + var lastPath = ""; + for (var i = 0; i < len; ++i) { + var rawRow = items[i]; + var row = {crate: crate, ty: rawRow[0], name: rawRow[1], + path: rawRow[2] || lastPath, desc: rawRow[3], + parent: paths[rawRow[4]], type: rawRow[5]}; + searchIndex.push(row); + if (typeof row.name === "string") { + var word = row.name.toLowerCase(); + searchWords.push(word); + } else { + searchWords.push(""); + } + lastPath = row.path; + } + } + return searchWords; + } + + function startSearch() { + var searchTimeout; + var callback = function() { + var search_input = document.getElementsByClassName('search-input'); + if (search_input.length < 1) { return; } + search_input = search_input[0]; + clearTimeout(searchTimeout); + if (search_input.value.length === 0) { + if (browserSupportsHistoryApi()) { + history.replaceState("", "std - Rust", "?search="); + } + var main = document.getElementById('main'); + if (hasClass(main, 'content')) { + removeClass(main, 'hidden'); + } + var search_c = document.getElementById('search'); + if (hasClass(search_c, 'content')) { + addClass(search_c, 'hidden'); + } + } else { + searchTimeout = setTimeout(search, 500); + } + }; + var search_input = document.getElementsByClassName("search-input")[0]; + search_input.onkeyup = callback; + search_input.oninput = callback; + document.getElementsByClassName("search-form")[0].onsubmit = function(e){ + e.preventDefault(); + clearTimeout(searchTimeout); + search(); + }; + search_input.onchange = function(e) { + // Do NOT e.preventDefault() here. It will prevent pasting. + clearTimeout(searchTimeout); + // zero-timeout necessary here because at the time of event handler execution the + // pasted content is not in the input field yet. Shouldn’t make any difference for + // change, though. + setTimeout(search, 0); + }; + search_input.onpaste = search_input.onchange; + + // Push and pop states are used to add search results to the browser + // history. + if (browserSupportsHistoryApi()) { + // Store the previous so we can revert back to it later. + var previousTitle = document.title; + + window.onpopstate = function(e) { + var params = getQueryStringParams(); + // When browsing back from search results the main page + // visibility must be reset. + if (!params.search) { + var main = document.getElementById('main'); + if (hasClass(main, 'content')) { + removeClass(main, 'hidden'); + } + var search_c = document.getElementById('search'); + if (hasClass(search_c, 'content')) { + addClass(search_c, 'hidden'); + } + } + // Revert to the previous title manually since the History + // API ignores the title parameter. + document.title = previousTitle; + // When browsing forward to search results the previous + // search will be repeated, so the currentResults are + // cleared to ensure the search is successful. + currentResults = null; + // Synchronize search bar with query string state and + // perform the search. This will empty the bar if there's + // nothing there, which lets you really go back to a + // previous state with nothing in the bar. + if (params.search) { + document.getElementsByClassName('search-input')[0].value = params.search; + } else { + document.getElementsByClassName('search-input')[0].value = ''; + } + // Some browsers fire 'onpopstate' for every page load + // (Chrome), while others fire the event only when actually + // popping a state (Firefox), which is why search() is + // called both here and at the end of the startSearch() + // function. + search(); + }; + } + search(); + } + + index = buildIndex(rawSearchIndex); + startSearch(); + + // Draw a convenient sidebar of known crates if we have a listing + if (rootPath === '../') { + var sidebar = document.getElementsByClassName('sidebar')[0]; + var div = document.createElement('div'); + div.className = 'block crate'; + div.innerHTML = '<h3>Crates</h3>'; + var ul = document.createElement('ul'); + div.appendChild(ul); + + var crates = []; + for (var crate in rawSearchIndex) { + if (!rawSearchIndex.hasOwnProperty(crate)) { continue; } + crates.push(crate); + } + crates.sort(); + for (var i = 0; i < crates.length; ++i) { + var klass = 'crate'; + if (crates[i] === window.currentCrate) { + klass += ' current'; + } + var link = document.createElement('a'); + link.href = '../' + crates[i] + '/index.html'; + link.title = rawSearchIndex[crates[i]].doc; + link.className = klass; + link.textContent = crates[i]; + + var li = document.createElement('li'); + li.appendChild(link); + ul.appendChild(li); + } + sidebar.appendChild(div); + } + } + + window.initSearch = initSearch; + + // delayed sidebar rendering. + function initSidebarItems(items) { + var sidebar = document.getElementsByClassName('sidebar')[0]; + var current = window.sidebarCurrent; + + function block(shortty, longty) { + var filtered = items[shortty]; + if (!filtered) { return; } + + var div = document.createElement('div'); + div.className = 'block ' + shortty; + var h3 = document.createElement('h3'); + h3.textContent = longty; + div.appendChild(h3); + var ul = document.createElement('ul'); + + for (var i = 0; i < filtered.length; ++i) { + var item = filtered[i]; + var name = item[0]; + var desc = item[1]; // can be null + + var klass = shortty; + if (name === current.name && shortty === current.ty) { + klass += ' current'; + } + var path; + if (shortty === 'mod') { + path = name + '/index.html'; + } else { + path = shortty + '.' + name + '.html'; + } + var link = document.createElement('a'); + link.href = current.relpath + path; + link.title = desc; + link.className = klass; + link.textContent = name; + var li = document.createElement('li'); + li.appendChild(link); + ul.appendChild(li); + } + div.appendChild(ul); + sidebar.appendChild(div); + } + + block("primitive", "Primitive Types"); + block("mod", "Modules"); + block("macro", "Macros"); + block("struct", "Structs"); + block("enum", "Enums"); + block("constant", "Constants"); + block("static", "Statics"); + block("trait", "Traits"); + block("fn", "Functions"); + block("type", "Type Definitions"); + } + + window.initSidebarItems = initSidebarItems; + + window.register_implementors = function(imp) { + var list = document.getElementById('implementors-list'); + var libs = Object.getOwnPropertyNames(imp); + for (var i = 0; i < libs.length; ++i) { + if (libs[i] === currentCrate) { continue; } + var structs = imp[libs[i]]; + for (var j = 0; j < structs.length; ++j) { + var code = document.createElement('code'); + code.innerHTML = structs[j]; + + var x = code.getElementsByTagName('a'); + for (var k = 0; k < x.length; k++) { + var href = x[k].getAttribute('href'); + if (href && href.indexOf('http') !== 0) { + x[k].setAttribute('href', rootPath + href); + } + } + var li = document.createElement('li'); + li.appendChild(code); + list.appendChild(li); + } + } + }; + if (window.pending_implementors) { + window.register_implementors(window.pending_implementors); + } + + function labelForToggleButton(sectionIsCollapsed) { + if (sectionIsCollapsed) { + // button will expand the section + return "+"; + } + // button will collapse the section + // note that this text is also set in the HTML template in render.rs + return "\u2212"; // "\u2212" is '−' minus sign + } + + function onEveryMatchingChild(elem, className, func) { + if (elem && className && func) { + for (var i = 0; i < elem.childNodes.length; i++) { + if (hasClass(elem.childNodes[i], className)) { + func(elem.childNodes[i]); + } else { + onEveryMatchingChild(elem.childNodes[i], className, func); + } + } + } + } + + function toggleAllDocs() { + var toggle = document.getElementById("toggle-all-docs"); + if (hasClass(toggle, "will-expand")) { + removeClass(toggle, "will-expand"); + onEveryMatchingChild(toggle, "inner", function(e) { + e.innerHTML = labelForToggleButton(false); + }); + toggle.title = "collapse all docs"; + onEach(document.getElementsByClassName("docblock"), function(e) { + e.style.display = 'block'; + }); + onEach(document.getElementsByClassName("toggle-label"), function(e) { + e.style.display = 'none'; + }); + onEach(document.getElementsByClassName("toggle-wrapper"), function(e) { + removeClass(e, "collapsed"); + }); + onEach(document.getElementsByClassName("collapse-toggle"), function(e) { + onEveryMatchingChild(e, "inner", function(i_e) { + i_e.innerHTML = labelForToggleButton(false); + }); + }); + } else { + addClass(toggle, "will-expand"); + onEveryMatchingChild(toggle, "inner", function(e) { + e.innerHTML = labelForToggleButton(true); + }); + toggle.title = "expand all docs"; + onEach(document.getElementsByClassName("docblock"), function(e) { + e.style.display = 'none'; + }); + onEach(document.getElementsByClassName("toggle-label"), function(e) { + e.style.display = 'inline-block'; + }); + onEach(document.getElementsByClassName("toggle-wrapper"), function(e) { + addClass(e, "collapsed"); + }); + onEach(document.getElementsByClassName("collapse-toggle"), function(e) { + onEveryMatchingChild(e, "inner", function(i_e) { + i_e.innerHTML = labelForToggleButton(true); + }); + }); + } + } + + function collapseDocs(toggle) { + if (!toggle || !toggle.parentNode) { + return; + } + var relatedDoc = toggle.parentNode.nextElementSibling; + if (hasClass(relatedDoc, "stability")) { + relatedDoc = relatedDoc.nextElementSibling; + } + if (hasClass(relatedDoc, "docblock")) { + if (!isHidden(relatedDoc)) { + relatedDoc.style.display = 'none'; + onEach(toggle.childNodes, function(e) { + if (hasClass(e, 'toggle-label')) { + e.style.display = 'inline-block'; + } + if (hasClass(e, 'inner')) { + e.innerHTML = labelForToggleButton(true); + } + }); + addClass(toggle.parentNode, 'collapsed'); + } else { + relatedDoc.style.display = 'block'; + removeClass(toggle.parentNode, 'collapsed'); + onEach(toggle.childNodes, function(e) { + if (hasClass(e, 'toggle-label')) { + e.style.display = 'none'; + } + if (hasClass(e, 'inner')) { + e.innerHTML = labelForToggleButton(false); + } + }); + } + } + } + + var x = document.getElementById('toggle-all-docs'); + if (x) { + x.onclick = toggleAllDocs; + } + + function insertAfter(newNode, referenceNode) { + referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); + } + + var toggle = document.createElement('a'); + toggle.href = 'javascript:void(0)'; + toggle.className = 'collapse-toggle'; + toggle.innerHTML = "[<span class='inner'>"+labelForToggleButton(false)+"</span>]"; + + var func = function(e) { + var next = e.nextElementSibling; + if (!next) { + return; + } + if (hasClass(next, 'docblock') || + (hasClass(next, 'stability') && + hasClass(next.nextElementSibling, 'docblock'))) { + insertAfter(toggle.cloneNode(true), e.childNodes[e.childNodes.length - 1]); + } + } + onEach(document.getElementsByClassName('method'), func); + onEach(document.getElementsByClassName('impl-items'), function(e) { + onEach(e.getElementsByClassName('associatedconstant'), func); + }); + + var span = document.createElement('span'); + span.className = 'toggle-label'; + span.style.display = 'none'; + span.innerHTML = ' Expand description'; + + var mainToggle = toggle.cloneNode(true); + mainToggle.appendChild(span); + + var wrapper = document.createElement('div'); + wrapper.className = 'toggle-wrapper'; + wrapper.appendChild(mainToggle); + + onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) { + if (e.parentNode.id === "main") { + e.parentNode.insertBefore(wrapper, e); + } + }); + + onEach(document.getElementsByClassName('docblock'), function(e) { + if (hasClass(e, 'autohide')) { + var wrap = e.previousElementSibling; + if (wrap && hasClass(wrap, 'toggle-wrapper')) { + var toggle = wrap.childNodes[0]; + if (e.childNodes[0].tagName === 'H3') { + onEach(toggle.getElementsByClassName('toggle-label'), function(i_e) { + i_e.innerHTML = " Show " + e.childNodes[0].innerHTML; + }); + } + e.style.display = 'none'; + addClass(wrap, 'collapsed'); + onEach(toggle.getElementsByClassName('inner'), function(e) { + e.innerHTML = labelForToggleButton(true); + }); + onEach(toggle.getElementsByClassName('toggle-label'), function(e) { + e.style.display = 'block'; + }); + } + } + }) + + var span = document.createElement('span'); + span.className = 'toggle-label'; + span.style.display = 'none'; + span.innerHTML = ' Expand attributes'; + toggle.appendChild(span); + + var wrapper = document.createElement('div'); + wrapper.className = 'toggle-wrapper toggle-attributes'; + wrapper.appendChild(toggle); + onEach(document.getElementById('main').getElementsByTagName('pre'), function(e) { + onEach(e.getElementsByClassName('attributes'), function(i_e) { + i_e.parentNode.insertBefore(wrapper, i_e); + collapseDocs(i_e.previousSibling.childNodes[0]); + }); + }); +}()); + +// Sets the focus on the search bar at the top of the page +function focusSearchBar() { + document.getElementsByClassName('search-input')[0].focus(); +} diff --git a/kawaii/kawaii-rs/doc/normalize.css b/kawaii/kawaii-rs/doc/normalize.css new file mode 100644 index 0000000..2804c26 --- /dev/null +++ b/kawaii/kawaii-rs/doc/normalize.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} diff --git a/kawaii/kawaii-rs/doc/rustdoc.css b/kawaii/kawaii-rs/doc/rustdoc.css new file mode 100644 index 0000000..969cc4e --- /dev/null +++ b/kawaii/kawaii-rs/doc/rustdoc.css @@ -0,0 +1,775 @@ +/** + * Copyright 2013 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or + * http://www.apache.org/licenses/LICENSE-2.0> or the MIT license + * <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ + +/* See FiraSans-LICENSE.txt for the Fira Sans license. */ +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 400; + src: local('Fira Sans'), url("FiraSans-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 500; + src: local('Fira Sans Medium'), url("FiraSans-Medium.woff") format('woff'); +} + +/* See SourceSerifPro-LICENSE.txt for the Source Serif Pro license and + * Heuristica-LICENSE.txt for the Heuristica license. */ +@font-face { + font-family: 'Source Serif Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Serif Pro'), url("SourceSerifPro-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Source Serif Pro'; + font-style: italic; + font-weight: 400; + src: url("Heuristica-Italic.woff") format('woff'); +} +@font-face { + font-family: 'Source Serif Pro'; + font-style: normal; + font-weight: 700; + src: local('Source Serif Pro Bold'), url("SourceSerifPro-Bold.woff") format('woff'); +} + +/* See SourceCodePro-LICENSE.txt for the Source Code Pro license. */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + /* Avoid using locally installed font because bad versions are in circulation: + * see https://github.com/rust-lang/rust/issues/24355 */ + src: url("SourceCodePro-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: url("SourceCodePro-Semibold.woff") format('woff'); +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* General structure and fonts */ + +body { + font: 16px/1.4 "Source Serif Pro", Georgia, Times, "Times New Roman", serif; + margin: 0; + position: relative; + padding: 10px 15px 20px 15px; + + -webkit-font-feature-settings: "kern", "liga"; + -moz-font-feature-settings: "kern", "liga"; + font-feature-settings: "kern", "liga"; +} + +h1 { + font-size: 1.5em; +} +h2 { + font-size: 1.4em; +} +h3 { + font-size: 1.3em; +} +h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant) { + font-weight: 500; + margin: 20px 0 15px 0; + padding-bottom: 6px; +} +h1.fqn { + border-bottom: 1px dashed; + margin-top: 0; + position: relative; +} +h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant) { + border-bottom: 1px solid; +} +h3.impl, h3.method, h4.method, h3.type, h4.type, h4.associatedconstant { + font-weight: 600; + margin-top: 10px; + margin-bottom: 10px; + position: relative; +} +h3.impl, h3.method, h3.type { + margin-top: 15px; +} +h1, h2, h3, h4, .sidebar, a.source, .search-input, .content table :not(code)>a, .collapse-toggle { + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +ol, ul { + padding-left: 25px; +} +ul ul, ol ul, ul ol, ol ol { + margin-bottom: 0; +} + +p { + margin: 0 0 .6em 0; +} + +code, pre { + font-family: "Source Code Pro", Menlo, Monaco, Consolas, "DejaVu Sans Mono", Inconsolata, monospace; + white-space: pre-wrap; +} +.docblock code, .docblock-short code { + border-radius: 3px; + padding: 0 0.2em; +} +.docblock pre code, .docblock-short pre code { + padding: 0; +} +pre { + padding: 14px; +} + +.source .content pre { + padding: 20px; +} + +img { + max-width: 100%; +} + +.source .content { + margin-top: 50px; + max-width: none; + overflow: visible; + margin-left: 0px; + min-width: 70em; +} + +nav.sub { + font-size: 16px; + text-transform: uppercase; +} + +.sidebar { + width: 200px; + position: absolute; + left: 0; + top: 0; + min-height: 100%; +} + +.sidebar .current { + margin-right: -20px; +} + +.content, nav { max-width: 960px; } + +/* Everything else */ + +.js-only, .hidden { display: none !important; } + +.sidebar { + padding: 10px; +} +.sidebar img { + margin: 20px auto; + display: block; +} + +.sidebar .location { + border: 1px solid; + font-size: 17px; + margin: 30px 0 20px 0; + text-align: center; + word-wrap: break-word; +} + +.location:empty { + border: none; +} + +.location a:first-child { font-weight: 500; } + +.block { + padding: 0 10px; + margin-bottom: 14px; +} +.block h2, .block h3 { + margin-top: 0; + margin-bottom: 8px; + text-align: center; +} +.block ul, .block li { + margin: 0; + padding: 0; + list-style: none; +} + +.block a { + display: block; + text-overflow: ellipsis; + overflow: hidden; + line-height: 15px; + padding: 7px 5px; + font-size: 14px; + font-weight: 300; + transition: border 500ms ease-out; +} + +.content { + padding: 15px 0; +} + +.source .content pre.rust { + white-space: pre; + overflow: auto; + padding-left: 0; +} +#search { + margin-left: 230px; +} +.content pre.line-numbers { + float: left; + border: none; + position: relative; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.line-numbers span { cursor: pointer; } + +.docblock-short p { + display: inline; +} + +.docblock-short.nowrap { + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.docblock-short p { + overflow: hidden; + text-overflow: ellipsis; + margin: 0; +} +.docblock-short code { white-space: nowrap; } + +.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { + border-bottom: 1px solid; +} + +.docblock h1 { font-size: 1.3em; } +.docblock h2 { font-size: 1.15em; } +.docblock h3, .docblock h4, .docblock h5 { font-size: 1em; } + +.docblock { + margin-left: 24px; +} + +.content .out-of-band { + font-size: 23px; + margin: 0px; + padding: 0px; + text-align: right; + display: inline-block; + font-weight: normal; + position: absolute; + right: 0; +} + +h3.impl > .out-of-band { + font-size: 21px; +} + +h4 > code, h3 > code, .invisible > code { + position: inherit; +} + +.in-band, code { + z-index: 5; +} + +.invisible { + background: rgba(0, 0, 0, 0); + width: 100%; + display: inline-block; +} + +.content .in-band { + margin: 0px; + padding: 0px; + display: inline-block; +} + +#main { position: relative; } +#main > .since { + top: inherit; + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.content table { + border-spacing: 0 5px; + border-collapse: separate; +} +.content td { vertical-align: top; } +.content td:first-child { padding-right: 20px; } +.content td p:first-child { margin-top: 0; } +.content td h1, .content td h2 { margin-left: 0; font-size: 1.1em; } + +.docblock table { + border: 1px solid; + margin: .5em 0; + border-collapse: collapse; + width: 100%; +} + +.docblock table td { + padding: .5em; + border-top: 1px dashed; + border-bottom: 1px dashed; +} + +.docblock table th { + padding: .5em; + text-align: left; + border-top: 1px solid; + border-bottom: 1px solid; +} + +.fields + table { + margin-bottom: 1em; +} + +.content .item-list { + list-style-type: none; + padding: 0; +} + +.content .item-list li { margin-bottom: 3px; } + +.content .multi-column { + -moz-column-count: 5; + -moz-column-gap: 2.5em; + -webkit-column-count: 5; + -webkit-column-gap: 2.5em; + column-count: 5; + column-gap: 2.5em; +} +.content .multi-column li { width: 100%; display: inline-block; } + +.content .method { + font-size: 1em; + position: relative; +} +/* Shift "where ..." part of method or fn definition down a line */ +.content .method .where, +.content .fn .where, +.content .where.fmt-newline { + display: block; + color: #4E4C4C; + font-size: 0.8em; +} + +.content .methods > div { margin-left: 40px; } + +.content .impl-items .docblock, .content .impl-items .stability { + margin-left: 40px; +} +.content .impl-items .method, .content .impl-items > .type, .impl-items > .associatedconstant { + margin-left: 20px; +} + +.content .stability code { + font-size: 90%; +} + +nav { + border-bottom: 1px solid; + padding-bottom: 10px; + margin-bottom: 10px; +} +nav.main { + padding: 20px 0; + text-align: center; +} +nav.main .current { + border-top: 1px solid; + border-bottom: 1px solid; +} +nav.main .separator { + border: 1px solid; + display: inline-block; + height: 23px; + margin: 0 20px; +} +nav.sum { text-align: right; } +nav.sub form { display: inline; } + +nav.sub, .content { + margin-left: 230px; +} + +a { + text-decoration: none; + background: transparent; +} + +.docblock a:hover, .docblock-short a:hover, .stability a { + text-decoration: underline; +} + +.content span.enum, .content a.enum, .block a.current.enum { color: #5e9766; } +.content span.struct, .content a.struct, .block a.current.struct { color: #df3600; } +.content span.type, .content a.type, .block a.current.type { color: #e57300; } +.content span.macro, .content a.macro, .block a.current.macro { color: #068000; } +.block a.current.crate { font-weight: 500; } + +.search-input { + width: 100%; + /* Override Normalize.css: we have margins and do + not want to overflow - the `moz` attribute is necessary + until Firefox 29, too early to drop at this point */ + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + outline: none; + border: none; + border-radius: 1px; + margin-top: 5px; + padding: 10px 16px; + font-size: 17px; + transition: border-color 300ms ease; + transition: border-radius 300ms ease-in-out; + transition: box-shadow 300ms ease-in-out; +} + +.search-input:focus { + border-color: #66afe9; + border-radius: 2px; + border: 0; + outline: 0; + box-shadow: 0 0 8px #078dd8; +} + +.search-results .desc { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} + +.search-results a { + display: block; +} + +.content .search-results td:first-child { padding-right: 0; } +.content .search-results td:first-child a { padding-right: 10px; } + +tr.result span.primitive::after { content: ' (primitive type)'; font-style: italic; color: black; +} + +body.blur > :not(#help) { + filter: blur(8px); + -webkit-filter: blur(8px); + opacity: .7; +} + +#help { + width: 100%; + height: 100vh; + position: fixed; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; +} +#help > div { + flex: 0 0 auto; + box-shadow: 0 0 6px rgba(0,0,0,.2); + width: 550px; + height: 330px; + border: 1px solid; +} +#help dt { + float: left; + border-radius: 4px; + border: 1px solid; + width: 23px; + text-align: center; + clear: left; + display: block; + margin-top: -1px; +} +#help dd { margin: 5px 33px; } +#help .infos { padding-left: 0; } +#help h1, #help h2 { margin-top: 0; } +#help > div div { + width: 50%; + float: left; + padding: 20px; +} + +.stab { + display: table; + border-width: 1px; + border-style: solid; + padding: 3px; + margin-bottom: 5px; + font-size: 90%; +} +.stab p { + display: inline; +} + +.stab summary { + display: list-item; +} + +.stab .microscope { + font-size: 1.5em; +} + +.module-item .stab { + display: inline; + border-width: 0; + padding: 0; + margin: 0; + background: inherit !important; +} + +.module-item.unstable { + opacity: 0.65; +} + +.since { + font-weight: normal; + font-size: initial; + position: absolute; + right: 0; + top: 0; +} + +.variants_table { + width: 100%; +} + +.variants_table tbody tr td:first-child { + width: 1%; /* make the variant name as small as possible */ +} + +td.summary-column { + width: 100%; +} + +.summary { + padding-right: 0px; +} + +pre.rust .question-mark { + font-weight: bold; +} + +pre.rust { position: relative; } +a.test-arrow { + display: inline-block; + position: absolute; + padding: 5px 10px 5px 10px; + border-radius: 5px; + font-size: 130%; + top: 5px; + right: 5px; +} +a.test-arrow:hover{ + text-decoration: none; +} + +.section-header:hover a:after { + content: '\2002\00a7\2002'; +} + +.section-header:hover a { + text-decoration: none; +} + +.section-header a { + color: inherit; +} + +.collapse-toggle { + font-weight: 300; + position: absolute; + left: -23px; + color: #999; + top: 0; +} + +h3 > .collapse-toggle, h4 > .collapse-toggle { + font-size: 0.8em; + top: 5px; +} + +.toggle-wrapper > .collapse-toggle { + left: -24px; + margin-top: 0px; +} + +.toggle-wrapper { + position: relative; +} + +.toggle-wrapper.collapsed { + height: 1em; + transition: height .2s; +} + +.collapse-toggle > .inner { + display: inline-block; + width: 1.2ch; + text-align: center; +} + +.ghost { + display: none; +} + +.ghost + .since { + position: initial; + display: table-cell; +} + +.since + .srclink { + display: table-cell; + padding-left: 10px; +} + +span.since { + position: initial; + font-size: 20px; + margin-right: 5px; +} + +.toggle-wrapper > .collapse-toggle { + left: 0; +} + +.variant + .toggle-wrapper > a { + margin-top: 5px; +} + +.sub-variant, .sub-variant > h3 { + margin-top: 0 !important; +} + +.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock { + margin-left: 30px; + margin-bottom: 20px; + margin-top: 5px; +} + +.enum > .collapsed, .struct > .collapsed { + margin-bottom: 25px; +} + +.enum .variant, .struct .structfield { + display: block; +} + +.attributes { + display: block; + margin: 0px 0px 0px 30px !important; +} +.toggle-attributes.collapsed { + margin-bottom: 5px; +} + +:target > code { + opacity: 1; +} + +/* Media Queries */ + +@media (max-width: 700px) { + body { + padding-top: 0px; + } + + .sidebar { + height: 40px; + min-height: 40px; + width: 100%; + margin: 0px; + padding: 0px; + position: static; + } + + .sidebar .location { + float: right; + margin: 0px; + padding: 3px 10px 1px 10px; + min-height: 39px; + background: inherit; + text-align: left; + font-size: 24px; + } + + .sidebar .location:empty { + padding: 0; + } + + .sidebar img { + width: 35px; + margin-top: 5px; + margin-bottom: 0px; + float: left; + } + + nav.sub { + margin: 0 auto; + } + + .sidebar .block { + display: none; + } + + .content { + margin-left: 0px; + } + + .content .in-band { + width: 100%; + } + + .content .out-of-band { + display: none; + } + + .toggle-wrapper > .collapse-toggle { + left: 0px; + } + + .toggle-wrapper { + height: 1.5em; + } +} + +@media print { + nav.sub, .content .out-of-band, .collapse-toggle { + display: none; + } +} diff --git a/kawaii/kawaii-rs/doc/search-index.js b/kawaii/kawaii-rs/doc/search-index.js new file mode 100644 index 0000000..06dbe7d --- /dev/null +++ b/kawaii/kawaii-rs/doc/search-index.js @@ -0,0 +1,6 @@ +var searchIndex = {}; +searchIndex["emergency_stop"] = {"doc":"","items":[[3,"EmergencyStop","emergency_stop","",null,null],[12,"state","","",0,null],[11,"fmt","","",0,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"new","","Constructs a new `EmergencyStop` and starts poll thread.",0,{"inputs":[{"name":"u8"}],"output":{"name":"result"}}],[11,"drop","","Set emergency stop and join poll thread.",0,{"inputs":[{"name":"self"}],"output":null}]],"paths":[[3,"EmergencyStop"]]}; +searchIndex["kawaii"] = {"doc":"","items":[[3,"Measure","kawaii","",null,null],[12,"min","","",0,null],[12,"max","","",0,null],[12,"name","","",0,null],[0,"gpio","","",null,null],[3,"Port","kawaii::gpio","",null,null],[12,"number","","",1,null],[12,"direction","","",1,null],[3,"SyncPort","","",null,null],[12,"port","","",2,null],[3,"AsyncPort","","",null,null],[12,"port","","",3,null],[12,"edge","","",3,null],[4,"Direction","","",null,null],[13,"Out","","",4,null],[13,"In","","",4,null],[4,"Edge","","",null,null],[13,"None","","",5,null],[13,"Rising","","",5,null],[13,"Falling","","",5,null],[13,"Both","","",5,null],[4,"Value","","",null,null],[13,"High","","",6,null],[13,"Low","","",6,null],[11,"clone","","",4,{"inputs":[{"name":"self"}],"output":{"name":"direction"}}],[11,"fmt","","",4,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"from_str","","",4,{"inputs":[{"name":"str"}],"output":{"name":"option"}}],[11,"as_str","","",4,{"inputs":[{"name":"self"}],"output":{"name":"str"}}],[11,"clone","","",5,{"inputs":[{"name":"self"}],"output":{"name":"edge"}}],[11,"fmt","","",5,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"from_str","","",5,{"inputs":[{"name":"str"}],"output":{"name":"option"}}],[11,"as_str","","",5,{"inputs":[{"name":"self"}],"output":{"name":"str"}}],[11,"clone","","",6,{"inputs":[{"name":"self"}],"output":{"name":"value"}}],[11,"fmt","","",6,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"from_str","","",6,{"inputs":[{"name":"str"}],"output":{"name":"option"}}],[11,"from_buffer","","",6,null],[11,"from_char","","",6,{"inputs":[{"name":"u8"}],"output":{"name":"option"}}],[11,"as_str","","",6,{"inputs":[{"name":"self"}],"output":{"name":"str"}}],[11,"fmt","","",1,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"fmt","","",2,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"fmt","","",3,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"new","","Constructs a new GPIO `Port`.",1,{"inputs":[{"name":"u8"},{"name":"direction"}],"output":{"name":"result"}}],[11,"drop","","Drop GPIO `Port`: unexport",1,{"inputs":[{"name":"self"}],"output":null}],[11,"new","","Constructs a new synchronised GPIO `Port`.",2,{"inputs":[{"name":"u8"},{"name":"direction"}],"output":{"name":"result"}}],[11,"read","","Read from GPIO `SyncPort` sysfs file",2,{"inputs":[{"name":"self"}],"output":{"name":"result"}}],[11,"write","","Write to GPIO `SyncPort` sysfs file",2,{"inputs":[{"name":"self"},{"name":"value"}],"output":{"name":"result"}}],[11,"new","","Constructs a new asynchronous GPIO `Port`.",3,{"inputs":[{"name":"u8"},{"name":"edge"}],"output":{"name":"result"}}],[11,"poll","","Read asynchronous from GPIO `AsyncPort` sysfs file",3,{"inputs":[{"name":"self"},{"name":"option"}],"output":{"name":"result"}}],[11,"poll_measure","","Read asynchronous from GPIO `AsyncPort` sysfs file with measure support (ignore poll time)",3,{"inputs":[{"name":"self"},{"name":"option"},{"name":"measure"}],"output":{"name":"result"}}],[11,"fmt","kawaii","",0,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"new","","Constructs a new `Measure`.",0,{"inputs":[{"name":"string"}],"output":{"name":"self"}}],[11,"start","","Start measurement",0,{"inputs":[{"name":"self"}],"output":null}],[11,"pause","","Pause measurement",0,{"inputs":[{"name":"self"}],"output":null}],[11,"stop","","Stop measurement and calculate time difference",0,{"inputs":[{"name":"self"}],"output":null}],[11,"drop","","Print measure results and write times to file",0,{"inputs":[{"name":"self"}],"output":null}]],"paths":[[3,"Measure"],[3,"Port"],[3,"SyncPort"],[3,"AsyncPort"],[4,"Direction"],[4,"Edge"],[4,"Value"]]}; +searchIndex["kawaii_api"] = {"doc":"","items":[[5,"emergency_stop_init","kawaii_api","Constructs a new `EmergencyStop` on heap and returns pointer.",null,null],[5,"emergency_stop_clean","","Drops a `EmergencyStop` pointer on heap.",null,null],[5,"emergency_stop_get_state","","Returns `EmergencyStop` pointer state.",null,null],[5,"ultrasonic_init","","Constructs a new `Ultrasonic` on heap and returns pointer.",null,null],[5,"ultrasonic_clean","","Drops a `Ultrasonic` pointer on heap.",null,null],[5,"ultrasonic_get_distance","","Returns `Ultrasonic` pointer distance.",null,null],[5,"measure_init","","Constructs a new `Measure` on heap and returns pointer.",null,null],[5,"measure_clean","","Drops a `Measure` pointer on heap.",null,null],[5,"measure_start","","Starts measure on `Measure` pointer.",null,null],[5,"measure_pause","","Pause measure on `Measure` pointer.",null,null],[5,"measure_stop","","Stop measure on `Measure` pointer.",null,null]],"paths":[]}; +searchIndex["ultrasonic_irq"] = {"doc":"","items":[[3,"UltrasonicEcho","ultrasonic_irq","",null,null],[3,"UltrasonicTrigger","","",null,null],[3,"Ultrasonic","","",null,null],[12,"distance","","",0,null],[11,"fmt","","",1,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"fmt","","",2,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"fmt","","",0,{"inputs":[{"name":"self"},{"name":"formatter"}],"output":{"name":"result"}}],[11,"new","","Constructs a new `Ultrasonic` and start threads.",0,{"inputs":[{"name":"u8"},{"name":"u8"},{"name":"u8"}],"output":{"name":"result"}}],[11,"drop","","Drop sync channels and join threads.",0,{"inputs":[{"name":"self"}],"output":null}]],"paths":[[3,"Ultrasonic"],[3,"UltrasonicEcho"],[3,"UltrasonicTrigger"]]}; +initSearch(searchIndex); diff --git a/kawaii/kawaii-rs/doc/src/emergency_stop/lib.rs.html b/kawaii/kawaii-rs/doc/src/emergency_stop/lib.rs.html new file mode 100644 index 0000000..deefd79 --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/emergency_stop/lib.rs.html @@ -0,0 +1,312 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `/Users/simon/.cargo/git/checkouts/emergency-stop-fb3bc6c6306d562e/18f82cc/src/lib.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>lib.rs.html -- source + + + + + + + + + + + + + + + + + + +
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+
+extern crate kawaii;
+
+use std::time::Duration;
+use std::thread;
+use std::thread::JoinHandle;
+use std::sync::Arc;
+use std::sync::atomic::{AtomicBool, Ordering};
+
+use self::kawaii::gpio::{AsyncPort, Edge, Value};
+
+#[cfg(feature = "measure")]
+use self::kawaii::Measure;
+
+#[derive(Debug)]
+pub struct EmergencyStop {
+    thread: Option<JoinHandle<()>>,
+    pub state: Arc<AtomicBool>,
+}
+
+impl EmergencyStop {
+    /// Constructs a new `EmergencyStop` and starts poll thread.
+    ///
+    /// # Parameter
+    /// - `stop_port` GPIO Port number of emergency stop pin.
+    pub fn new(stop_port: u8) -> std::io::Result<Self> {
+        let name = format!("EmergencyStop(port = {})", stop_port);
+        let state = Arc::new(AtomicBool::new(false));
+        let mut port = AsyncPort::new(stop_port, Edge::Both)?;
+
+        let state_clone = state.clone();
+        let thread = thread::Builder::new()
+            .name(name)
+            .spawn(move || EmergencyStop::thread(&mut port, state_clone))?;
+
+        Ok(EmergencyStop {
+            thread: Some(thread),
+            state: state,
+        })
+    }
+
+    /// Emergency stop poll thread
+    fn thread(port: &mut AsyncPort, state: Arc<AtomicBool>) {
+        #[cfg(feature = "measure")]
+        let mut measure = Measure::new(format!("EmergencyStop(port = {})", port.port.number));
+
+        // clear first value
+        port.poll(Some(Duration::new(0, 0))).is_ok();
+
+        while !state.load(Ordering::Relaxed) {
+            #[cfg(feature = "measure")]
+            measure.start();
+
+            let timeout = Some(Duration::new(1, 0));
+
+            #[cfg(not(feature = "measure"))]
+            let value = port.poll(timeout);
+
+            #[cfg(feature = "measure")]
+            let value = port.poll_measure(timeout, &mut measure);
+
+            // continue on timeout
+            match value {
+                Ok(value) => {
+                    if let Some(value) = value {
+                        match value {
+                            Value::High => {
+                                #[cfg(debug_assertions)]
+                                println!("EmergencyStop! ({:?})", value);
+
+                                state.store(true, Ordering::Relaxed);
+                            }
+                            _ => {
+                                #[cfg(debug_assertions)]
+                                println!("EmergencyStop ignored: ({:?})", value);
+                            }
+                        }
+                    }
+                }
+                Err(e) => {
+                    #[cfg(debug_assertions)]
+                    println!("EmergencyStop! ({:?})", e);
+
+                    state.store(true, Ordering::Relaxed);
+                }
+            }
+
+            #[cfg(feature = "measure")]
+            measure.stop();
+        }
+    }
+}
+
+impl Drop for EmergencyStop {
+    /// Set emergency stop and join poll thread.
+    fn drop(&mut self) {
+        self.state.store(true, Ordering::Relaxed);
+
+        if let Some(thread) = self.thread.take() {
+            thread.join().is_ok();
+        }
+    }
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii/gpio.rs.html b/kawaii/kawaii-rs/doc/src/kawaii/gpio.rs.html new file mode 100644 index 0000000..f95234b --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii/gpio.rs.html @@ -0,0 +1,748 @@ + + + + + + + + + + gpio.rs.html -- source + + + + + + + + + + + + + + + + + + +
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+
+extern crate std;
+extern crate nix;
+
+use std::fmt;
+use std::time::Duration;
+use std::io::prelude::*;
+use std::io::{Error, ErrorKind, SeekFrom};
+use std::fs::File;
+use std::path::Path;
+
+use std::os::unix::io::RawFd;
+
+#[cfg(feature = "measure")]
+use measure::Measure;
+
+fn duration_to_ms(duration: Duration) -> u64 {
+    duration.as_secs() * 1_000u64 + duration.subsec_nanos() as u64 / 1_000_000u64
+}
+
+#[derive(Clone, Copy, Debug)]
+pub enum Direction {
+    Out,
+    In,
+}
+impl Direction {
+    pub fn from_str(s: &str) -> Option<Direction> {
+        match s {
+            "out" => Some(Direction::Out),
+            "in" => Some(Direction::In),
+            _ => None,
+        }
+    }
+
+    pub fn as_str(&self) -> &'static str {
+        match *self {
+            Direction::Out => "out",
+            Direction::In => "in",
+        }
+    }
+}
+
+#[derive(Clone, Copy, Debug)]
+pub enum Edge {
+    None,
+    Rising,
+    Falling,
+    Both,
+}
+impl Edge {
+    pub fn from_str(s: &str) -> Option<Edge> {
+        match s {
+            "none" => Some(Edge::None),
+            "rising" => Some(Edge::Rising),
+            "falling" => Some(Edge::Falling),
+            "both" => Some(Edge::Both),
+            _ => None,
+        }
+    }
+
+    pub fn as_str(&self) -> &'static str {
+        match *self {
+            Edge::None => "none",
+            Edge::Rising => "rising",
+            Edge::Falling => "falling",
+            Edge::Both => "both",
+        }
+    }
+}
+
+#[derive(Clone, Copy, Debug)]
+pub enum Value {
+    High,
+    Low,
+}
+impl Value {
+    pub fn from_str(s: &str) -> Option<Value> {
+        match s {
+            "1" => Some(Value::High),
+            "0" => Some(Value::Low),
+            _ => None,
+        }
+    }
+
+    pub fn from_buffer(b: &[u8; 1]) -> Option<Self> {
+        Value::from_char(b[0])
+    }
+
+    pub fn from_char(c: u8) -> Option<Self> {
+        match c {
+            48 => Some(Value::Low), // '0'
+            49 => Some(Value::High), // '1'
+            _ => None,
+        }
+    }
+
+    pub fn as_str(&self) -> &'static str {
+        match *self {
+            Value::High => "1",
+            Value::Low => "0",
+        }
+    }
+}
+
+#[derive(Debug)]
+pub struct Port {
+    pub number: u8,
+    pub direction: Direction,
+}
+
+#[derive(Debug)]
+pub struct SyncPort {
+    pub port: Port,
+    file: File,
+    buffer: [u8; 1],
+}
+pub struct AsyncPort {
+    pub port: Port,
+    pub edge: Edge,
+    file: RawFd,
+    fds: [nix::poll::PollFd; 1],
+    buffer: [u8; 1],
+}
+
+impl fmt::Debug for AsyncPort {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f,
+               "AsyncPort {{ port: {:?}, edge: {:?}, file: {:?}, fds: [?], buffer: {:?} }}",
+               self.port,
+               self.edge,
+               self.file,
+               self.buffer)
+    }
+}
+
+impl Port {
+    /// Constructs a new GPIO `Port`.
+    ///
+    /// # Parameter
+    /// - `number` GPIO Port number of pin.
+    /// - `direction` GPIO Port direction.
+    pub fn new(number: u8, direction: Direction) -> std::io::Result<Port> {
+        let port = Port {
+            number: number,
+            direction: direction,
+        };
+
+        port.init()?;
+        Ok(port)
+    }
+
+    /// Init GPIO `Port`: export port and set direction
+    fn init(&self) -> std::io::Result<()> {
+        self.export().ok();
+        self.set_direction()?;
+
+        Ok(())
+    }
+
+    /// Drop GPIO `Port`: unexport
+    pub fn drop(&mut self) {
+        self.unexport().ok();
+    }
+
+    fn write_path(path: &str, value: &str) -> std::io::Result<()> {
+        File::create(Path::new(path))?
+            .write_all(value.as_bytes())
+    }
+
+
+    /// Export GPIO `Port`
+    fn export(&self) -> std::io::Result<()> {
+        Port::write_path("/sys/class/gpio/export", self.number.to_string().as_str())
+    }
+    /// Unexport GPIO `Port`
+    fn unexport(&self) -> std::io::Result<()> {
+        Port::write_path("/sys/class/gpio/unexport", self.number.to_string().as_str())
+    }
+
+    /// Set GPIO `Port` direction
+    fn set_direction(&self) -> std::io::Result<()> {
+        Port::write_path(format!("/sys/class/gpio/gpio{}/direction", self.number).as_str(),
+                         self.direction.as_str())
+    }
+}
+
+impl SyncPort {
+    /// Constructs a new synchronised GPIO `Port`.
+    ///
+    /// # Parameter
+    /// - `number` GPIO Port number of pin.
+    /// - `direction` GPIO Port direction.
+    pub fn new(number: u8, direction: Direction) -> std::io::Result<SyncPort> {
+        Ok(SyncPort {
+               port: Port::new(number, direction)?,
+               file: SyncPort::open(number, direction)?,
+               buffer: [0; 1],
+           })
+    }
+
+    /// Open GPIO `SyncPort` sysfs file
+    fn open(number: u8, direction: Direction) -> std::io::Result<File> {
+        let path = format!("/sys/class/gpio/gpio{}/value", number);
+        let path = Path::new(path.as_str());
+
+        Ok(match direction {
+               Direction::Out => File::create(path)?,
+               Direction::In => File::open(path)?,
+           })
+    }
+
+    /// Read from GPIO `SyncPort` sysfs file
+    pub fn read(&mut self) -> std::io::Result<Value> {
+        self.file.seek(SeekFrom::Start(0))?;
+        self.file.read_exact(&mut self.buffer)?;
+
+        Value::from_buffer(&self.buffer).ok_or(Error::new(ErrorKind::InvalidData,
+                                                          "Unrecognized GPIO Value"))
+    }
+
+    /// Write to GPIO `SyncPort` sysfs file
+    pub fn write(&mut self, value: Value) -> std::io::Result<()> {
+        self.file.write_all(value.as_str().as_bytes())
+    }
+}
+
+impl AsyncPort {
+    /// Constructs a new asynchronous GPIO `Port`.
+    ///
+    /// # Parameter
+    /// - `number` GPIO Port number of pin.
+    /// - `edge` GPIO Port edge detection setting.
+    pub fn new(number: u8, edge: Edge) -> std::io::Result<AsyncPort> {
+        let port = Port::new(number, Direction::In)?;
+        let file = AsyncPort::open(number)?;
+        let port = AsyncPort {
+            port: port,
+            edge: edge,
+            file: file,
+            fds: [nix::poll::PollFd::new(file, nix::poll::POLLPRI, nix::poll::EventFlags::empty())],
+            buffer: [0; 1],
+        };
+
+        port.init()?;
+        Ok(port)
+    }
+
+    /// Init GPIO `Port`: set edge detection
+    fn init(&self) -> std::io::Result<()> {
+        self.set_edge()?;
+
+        Ok(())
+    }
+
+    /// Open GPIO `AsyncPort` sysfs file with posix API
+    fn open(number: u8) -> std::io::Result<RawFd> {
+        nix::fcntl::open(format!("/sys/class/gpio/gpio{}/value", number).as_str(),
+                         nix::fcntl::O_RDONLY,
+                         nix::sys::stat::Mode::empty())
+                .or(Err(Error::new(ErrorKind::Other, "open failed")))
+    }
+
+    fn get_timeout(timeout: Option<Duration>) -> i32 {
+        match timeout {
+            None => -1,
+            Some(t) => duration_to_ms(t) as i32,
+        }
+    }
+
+    /// Posix poll on sysfs file
+    fn nix_poll(&mut self, timeout: i32) -> nix::Result<i32> {
+        nix::poll::poll(&mut self.fds, timeout)
+    }
+
+    /// Read from GPIO `AsyncPort` sysfs file with posix poll
+    fn poll_read(&mut self, poll: nix::Result<i32>) -> std::io::Result<Option<Value>> {
+        let poll = poll.or(Err(Error::new(ErrorKind::Other, "poll failed")))?;
+
+        if poll == 0 {
+            return Ok(None);
+        }
+
+        nix::unistd::lseek(self.file, 0, nix::unistd::Whence::SeekSet)
+            .or(Err(Error::new(ErrorKind::Other, "lseek failed")))?;
+
+        nix::unistd::read(self.file, &mut self.buffer)
+            .or(Err(Error::new(ErrorKind::Other, "read failed")))?;
+
+        Value::from_buffer(&self.buffer).map_or(Err(Error::new(ErrorKind::InvalidData,
+                                                               "Unrecognized GPIO Value")),
+                                                |v| Ok(Some(v)))
+    }
+
+    /// Read asynchronous from GPIO `AsyncPort` sysfs file
+    pub fn poll(&mut self, timeout: Option<Duration>) -> std::io::Result<Option<Value>> {
+        let poll = self.nix_poll(Self::get_timeout(timeout));
+
+        self.poll_read(poll)
+    }
+
+    /// Read asynchronous from GPIO `AsyncPort` sysfs file with measure support (ignore poll time)
+    #[cfg(feature = "measure")]
+    pub fn poll_measure(&mut self,
+                        timeout: Option<Duration>,
+                        measure: &mut Measure)
+                        -> std::io::Result<Option<Value>> {
+        let timeout = Self::get_timeout(timeout);
+
+        measure.pause();
+        let poll = self.nix_poll(timeout);
+        measure.start();
+
+        self.poll_read(poll)
+    }
+
+    /// Set GPIO `Port` edge detection
+    fn set_edge(&self) -> std::io::Result<()> {
+        Port::write_path(format!("/sys/class/gpio/gpio{}/edge", self.port.number).as_str(),
+                         self.edge.as_str())
+    }
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii/lib.rs.html b/kawaii/kawaii-rs/doc/src/kawaii/lib.rs.html new file mode 100644 index 0000000..1870b88 --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii/lib.rs.html @@ -0,0 +1,121 @@ + + + + + + + + + + lib.rs.html -- source + + + + + + + + + + + + + + + + + + +
1
+2
+3
+4
+5
+6
+7
+
+pub mod gpio;
+
+#[cfg(feature = "measure")]
+mod measure;
+
+#[cfg(feature = "measure")]
+pub use measure::Measure;
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii/measure.rs.html b/kawaii/kawaii-rs/doc/src/kawaii/measure.rs.html new file mode 100644 index 0000000..be8d40a --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii/measure.rs.html @@ -0,0 +1,346 @@ + + + + + + + + + + measure.rs.html -- source + + + + + + + + + + + + + + + + + + +
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+
+extern crate regex;
+extern crate separator;
+extern crate time;
+
+use std;
+use std::fs::File;
+use std::io::prelude::*;
+use std::io::{Error, ErrorKind};
+
+use self::regex::Regex;
+use self::separator::Separatable;
+use self::time::precise_time_ns;
+
+#[derive(Debug)]
+pub struct Measure {
+    pub min: u64,
+    pub max: u64,
+    time: u64,
+    last: u64,
+    data: Vec<u64>,
+    pub name: String,
+}
+
+impl Measure {
+    /// Constructs a new `Measure`.
+    ///
+    /// # Parameter
+    /// - `name` Name of measured component.
+    pub fn new(name: String) -> Self {
+        Measure {
+            min: u64::max_value(),
+            max: 0u64,
+            time: 0u64,
+            last: 0u64,
+            data: Vec::with_capacity(1_000_000),
+            name: name,
+        }
+    }
+
+    /// Start measurement
+    pub fn start(&mut self) {
+        self.last = precise_time_ns();
+    }
+
+    /// Pause measurement
+    pub fn pause(&mut self) {
+        if self.last == 0 {
+            #[cfg(debug_assertions)]
+            println!("WARNING: {:?} pause called without start!", self);
+
+            return;
+        }
+
+        self.time += self.time_diff();
+    }
+
+    /// Stop measurement and calculate time difference
+    pub fn stop(&mut self) {
+        if self.last == 0 {
+            #[cfg(debug_assertions)]
+            println!("WARNING: {:?} stop called without start!", self);
+
+            return;
+        }
+
+        self.time += self.time_diff();
+        self.data.push(self.time);
+
+        if self.time < self.min {
+            self.min = self.time;
+        }
+
+        if self.time > self.max {
+            self.max = self.time;
+        }
+
+        self.time = 0u64;
+        self.last = 0u64;
+    }
+
+    fn time_diff(&mut self) -> u64 {
+        let current_time = precise_time_ns();
+        let time_diff = current_time - self.last;
+        self.last = current_time;
+
+        time_diff
+    }
+
+    fn write_data(&self) -> std::io::Result<()> {
+        let re = Regex::new(r"[^\w\-.]")
+            .or(Err(Error::new(ErrorKind::Other, "Create filename regex failed.")))?;
+
+        let file_name = format!("measure_{}.txt", self.name);
+        let file_name = re.replace_all(file_name.as_str(), "_").to_string();
+        println!("{}: Write data to {}", self.name, file_name);
+
+        let mut file = File::create(file_name)?;
+
+        for value in &self.data {
+            file.write_fmt(format_args!("{}\n", value))?;
+        }
+
+        Ok(())
+    }
+}
+
+impl Drop for Measure {
+    /// Print measure results and write times to file
+    fn drop(&mut self) {
+        println!("{}:\n\tmin: {} ns\n\tmax: {} ns",
+                 self.name,
+                 self.min.separated_string(),
+                 self.max.separated_string());
+
+        if let Err(e) = self.write_data() {
+            println!("{}: Write measure data failed: {}", self.name, e);
+        }
+    }
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii_api/emergency_stop.rs.html b/kawaii/kawaii-rs/doc/src/kawaii_api/emergency_stop.rs.html new file mode 100644 index 0000000..90a577a --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii_api/emergency_stop.rs.html @@ -0,0 +1,168 @@ + + + + + + + + + + emergency_stop.rs.html -- source + + + + + + + + + + + + + + + + + + +
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+
+extern crate emergency_stop;
+
+use self::emergency_stop::EmergencyStop;
+
+use std::mem::transmute;
+use std::ptr::null_mut;
+use std::sync::atomic::Ordering;
+
+/// Constructs a new `EmergencyStop` on heap and returns pointer.
+#[no_mangle]
+pub extern "C" fn emergency_stop_init(stop: u8) -> *mut EmergencyStop {
+    match EmergencyStop::new(stop) {
+        Err(_) => null_mut(),
+        Ok(emergency_stop) => unsafe { transmute(Box::new(emergency_stop)) },
+    }
+}
+
+/// Drops a `EmergencyStop` pointer on heap.
+#[no_mangle]
+pub extern "C" fn emergency_stop_clean(emergency_stop: *mut EmergencyStop) {
+    let _emergency_stop: Box<EmergencyStop> = unsafe { transmute(emergency_stop) };
+}
+
+/// Returns `EmergencyStop` pointer state.
+#[no_mangle]
+pub extern "C" fn emergency_stop_get_state(emergency_stop: *mut EmergencyStop) -> bool {
+    let emergency_stop = unsafe { &mut *emergency_stop };
+
+    emergency_stop.state.load(Ordering::Relaxed)
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii_api/lib.rs.html b/kawaii/kawaii-rs/doc/src/kawaii_api/lib.rs.html new file mode 100644 index 0000000..71cbdd8 --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii_api/lib.rs.html @@ -0,0 +1,134 @@ + + + + + + + + + + lib.rs.html -- source + + + + + + + + + + + + + + + + + + +
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+
+#![feature(integer_atomics)]
+
+mod emergency_stop;
+mod ultrasonic_irq;
+
+#[cfg(feature = "measure")]
+mod measure;
+
+pub use emergency_stop::*;
+pub use ultrasonic_irq::*;
+
+#[cfg(feature = "measure")]
+pub use measure::*;
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii_api/measure.rs.html b/kawaii/kawaii-rs/doc/src/kawaii_api/measure.rs.html new file mode 100644 index 0000000..63b4672 --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii_api/measure.rs.html @@ -0,0 +1,214 @@ + + + + + + + + + + measure.rs.html -- source + + + + + + + + + + + + + + + + + + +
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+
+extern crate kawaii;
+
+use self::kawaii::Measure;
+
+use std::ffi::CStr;
+use std::ptr::null_mut;
+use std::mem::transmute;
+use std::os::raw::c_char;
+
+/// Constructs a new `Measure` on heap and returns pointer.
+#[no_mangle]
+pub extern "C" fn measure_init(name: *const c_char) -> *mut Measure {
+    if name.is_null() {
+        return null_mut();
+    }
+
+    unsafe {
+        match CStr::from_ptr(name).to_str() {
+            Err(_) => null_mut(),
+            Ok(name) => transmute(Box::new(Measure::new(String::from(name)))),
+        }
+    }
+}
+
+/// Drops a `Measure` pointer on heap.
+#[no_mangle]
+pub extern "C" fn measure_clean(measure: *mut Measure) {
+    let _measure: Box<Measure> = unsafe { transmute(measure) };
+}
+
+/// Starts measure on `Measure` pointer.
+#[no_mangle]
+pub extern "C" fn measure_start(measure: *mut Measure) {
+    let measure = unsafe { &mut *measure };
+
+    measure.start();
+}
+
+/// Pause measure on `Measure` pointer.
+#[no_mangle]
+pub extern "C" fn measure_pause(measure: *mut Measure) {
+    let measure = unsafe { &mut *measure };
+
+    measure.pause();
+}
+
+/// Stop measure on `Measure` pointer.
+#[no_mangle]
+pub extern "C" fn measure_stop(measure: *mut Measure) {
+    let measure = unsafe { &mut *measure };
+
+    measure.stop();
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/kawaii_api/ultrasonic_irq.rs.html b/kawaii/kawaii-rs/doc/src/kawaii_api/ultrasonic_irq.rs.html new file mode 100644 index 0000000..2e5aac6 --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/kawaii_api/ultrasonic_irq.rs.html @@ -0,0 +1,168 @@ + + + + + + + + + + ultrasonic_irq.rs.html -- source + + + + + + + + + + + + + + + + + + +
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+
+extern crate ultrasonic_irq;
+
+use std::mem::transmute;
+use std::ptr::null_mut;
+use std::sync::atomic::Ordering;
+
+use self::ultrasonic_irq::Ultrasonic;
+
+/// Constructs a new `Ultrasonic` on heap and returns pointer.
+#[no_mangle]
+pub extern "C" fn ultrasonic_init(trigger: u8, echo: u8, temperature: u8) -> *mut Ultrasonic {
+    match Ultrasonic::new(trigger, echo, temperature) {
+        Err(_) => null_mut(),
+        Ok(ultrasonic) => unsafe { transmute(Box::new(ultrasonic)) },
+    }
+}
+
+/// Drops a `Ultrasonic` pointer on heap.
+#[no_mangle]
+pub extern "C" fn ultrasonic_clean(ultrasonic: *mut Ultrasonic) {
+    let _ultrasonic: Box<Ultrasonic> = unsafe { transmute(ultrasonic) };
+}
+
+/// Returns `Ultrasonic` pointer distance.
+#[no_mangle]
+pub extern "C" fn ultrasonic_get_distance(ultrasonic: *mut Ultrasonic) -> u32 {
+    let ultrasonic = unsafe { &mut *ultrasonic };
+
+    ultrasonic.distance.load(Ordering::Relaxed)
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/src/ultrasonic_irq/lib.rs.html b/kawaii/kawaii-rs/doc/src/ultrasonic_irq/lib.rs.html new file mode 100644 index 0000000..ee9a0fa --- /dev/null +++ b/kawaii/kawaii-rs/doc/src/ultrasonic_irq/lib.rs.html @@ -0,0 +1,532 @@ + + + + + + + + + + lib.rs.html -- source + + + + + + + + + + + + + + + + + + +
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+
+#![feature(integer_atomics)]
+
+extern crate time;
+extern crate shuteye;
+extern crate kawaii;
+
+use std::time::Duration;
+use std::thread;
+use std::thread::JoinHandle;
+use std::sync::mpsc::{Sender, Receiver};
+use std::sync::mpsc;
+use std::sync::Arc;
+use std::sync::atomic::{AtomicU32, Ordering};
+
+use self::kawaii::gpio::{SyncPort, AsyncPort, Direction, Edge, Value};
+
+#[cfg(feature = "measure")]
+use self::kawaii::Measure;
+
+use self::time::precise_time_ns;
+use self::shuteye::sleep;
+
+#[derive(Debug)]
+struct ThreadData<T> {
+    thread: JoinHandle<T>,
+    tx: Sender<()>,
+}
+
+#[derive(Debug)]
+pub struct UltrasonicEcho {
+    echo: AsyncPort,
+    temperature: u8,
+    timestamp: u64,
+    distance: Arc<AtomicU32>,
+}
+
+#[derive(Debug)]
+pub struct UltrasonicTrigger {
+    trigger: SyncPort,
+}
+
+#[derive(Debug)]
+pub struct Ultrasonic {
+    trigger: Option<ThreadData<()>>,
+    echo: Option<ThreadData<()>>,
+    pub distance: Arc<AtomicU32>,
+}
+
+impl Ultrasonic {
+    /// Constructs a new `Ultrasonic` and start threads.
+    ///
+    /// # Threads
+    /// - `UltrasonicTrigger`
+    /// - `UltrasonicEcho`
+    ///
+    /// # Parameter
+    /// - `trigger_port` GPIO Port number of trigger pin.
+    /// - `echo_port` GPIO Port number of echo pin.
+    /// - `temperature` Room temperature in °C.
+    pub fn new(trigger_port: u8, echo_port: u8, temperature: u8) -> std::io::Result<Ultrasonic> {
+        let distance = Arc::new(AtomicU32::new(u32::max_value()));
+
+        /// Create `UltrasonicEcho` thread with sync channel.
+        let echo = UltrasonicEcho {
+            echo: AsyncPort::new(echo_port, Edge::Both)?,
+            temperature: temperature,
+            timestamp: 0,
+            distance: distance.clone(),
+        };
+        let (tx, rx): (Sender<()>, Receiver<()>) = mpsc::channel();
+        let name = format!("Ultrasonic::echo(port = {})", echo_port);
+        let echo = ThreadData::<()> {
+            thread: thread::Builder::new()
+                .name(name)
+                .spawn(move || echo.thread(rx))?,
+            tx: tx,
+        };
+
+        /// Create `UltrasonicTrigger` thread with sync channel.
+        let trigger = UltrasonicTrigger { trigger: SyncPort::new(trigger_port, Direction::Out)? };
+        let (tx, rx): (Sender<()>, Receiver<()>) = mpsc::channel();
+        let name = format!("Ultrasonic::trigger(port = {})", trigger_port);
+        let trigger = ThreadData::<()> {
+            thread: thread::Builder::new()
+                .name(name)
+                .spawn(move || trigger.thread(rx))?,
+            tx: tx,
+        };
+
+        Ok(Ultrasonic {
+               trigger: Some(trigger),
+               echo: Some(echo),
+               distance: distance,
+           })
+    }
+}
+
+impl Drop for Ultrasonic {
+    /// Drop sync channels and join threads.
+    fn drop(&mut self) {
+        if let Some(echo) = self.echo.take() {
+            echo.tx.send(()).is_ok();
+            echo.thread.join().is_ok();
+        }
+
+        if let Some(trigger) = self.trigger.take() {
+            trigger.tx.send(()).is_ok();
+            trigger.thread.join().is_ok();
+        }
+    }
+}
+
+impl UltrasonicTrigger {
+    /// `UltrasonicTrigger` thread function.
+    fn thread(mut self, stop_rx: Receiver<()>) {
+        #[cfg(feature = "measure")]
+        let mut measure = Measure::new(format!("Ultrasonic::trigger(port = {})", self.trigger.port.number));
+
+        while stop_rx.try_recv().is_err() {
+            #[cfg(feature = "measure")]
+            measure.start();
+            self.trigger.write(Value::Low).is_ok();
+            #[cfg(feature = "measure")]
+            measure.pause();
+
+            // sleep 10us (min length to trigger)
+            sleep(Duration::new(0, 10_000));
+
+            #[cfg(feature = "measure")]
+            measure.start();
+            self.trigger.write(Value::High).is_ok();
+            #[cfg(feature = "measure")]
+            measure.stop();
+
+            // sleep 20ms (max trigger frequency)
+            sleep(Duration::new(0, 20_000_000));
+        }
+    }
+}
+
+impl UltrasonicEcho {
+    /// `UltrasonicEcho` thread function.
+    fn thread(mut self, stop_rx: Receiver<()>) {
+        #[cfg(feature = "measure")]
+        let mut measure = Measure::new(format!("Ultrasonic::echo(port = {})", self.echo.port.number));
+
+        while stop_rx.try_recv().is_err() {
+            #[cfg(feature = "measure")]
+            measure.start();
+
+            #[cfg(not(feature = "measure"))]
+            let value = self.echo.poll(Some(Duration::new(1, 0)));
+
+            #[cfg(feature = "measure")]
+            let value = self.echo.poll_measure(Some(Duration::new(1, 0)), &mut measure);
+
+            match value {
+                Ok(value) => {
+                    if let Some(value) = value {
+                        self.on_value_changed(value);
+                    }
+                }
+                Err(_e) => {
+                    #[cfg(debug_assertions)]
+                    println!("POLL failed: e = {:?}", _e);
+                }
+            }
+
+            #[cfg(feature = "measure")]
+            measure.stop();
+        }
+    }
+
+    /// Start time measure or calculates distance based on port value
+    fn on_value_changed(&mut self, value: Value) {
+        match value {
+            Value::High => {
+                // Switched from Value::High to Value::High
+                // possibly because of trigger after timeout and slow reading
+                if self.timestamp > 0 {
+                    #[cfg(debug_assertions)]
+                    println!("{:?}", self);
+
+                    self.calc_distance();
+                }
+
+                self.timestamp = precise_time_ns();
+            }
+            Value::Low => {
+                // Switched from Value::Low to Value::Low
+                if self.timestamp == 0 {
+                    #[cfg(debug_assertions)]
+                    println!("{:?}", self);
+                }
+
+                self.calc_distance();
+            }
+        }
+    }
+
+    /// Calculates distance based on time measurement and `temperature` and stores it in `distance`
+    fn calc_distance(&mut self) {
+        let time_diff = precise_time_ns() - self.timestamp;
+        let distance = (3315 + self.temperature as u64 * 6) * time_diff / 20_000_000;
+        self.distance.store(distance as u32, Ordering::Relaxed);
+
+        #[cfg(debug_assertions)]
+        println!("time diff: {}\tdistance: {}mm", time_diff, distance);
+
+        self.timestamp = 0u64;
+    }
+}
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/Ultrasonic.t.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/Ultrasonic.t.html new file mode 100644 index 0000000..b6ccdbb --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/Ultrasonic.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.Ultrasonic.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicEcho.t.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicEcho.t.html new file mode 100644 index 0000000..b744cfb --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicEcho.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.UltrasonicEcho.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicTrigger.t.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicTrigger.t.html new file mode 100644 index 0000000..53ed021 --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/UltrasonicTrigger.t.html @@ -0,0 +1,10 @@ + + + + + + +

Redirecting to struct.UltrasonicTrigger.html...

+ + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/index.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/index.html new file mode 100644 index 0000000..06942cb --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/index.html @@ -0,0 +1,134 @@ + + + + + + + + + + ultrasonic_irq - Rust + + + + + + + + + + + + + + + + + + +
+

Crate ultrasonic_irq + + [] + + [src]

+

Structs

+
' + + '' + + displayPath + '' + + name + '' + + '' + + '' + escape(item.desc) + + ' 
+ + + + + + + + + + + +
Ultrasonic + +
UltrasonicEcho + +
UltrasonicTrigger + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/sidebar-items.js b/kawaii/kawaii-rs/doc/ultrasonic_irq/sidebar-items.js new file mode 100644 index 0000000..c4bb2bb --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["Ultrasonic",""],["UltrasonicEcho",""],["UltrasonicTrigger",""]]}); \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.Ultrasonic.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.Ultrasonic.html new file mode 100644 index 0000000..a8fa4ba --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.Ultrasonic.html @@ -0,0 +1,140 @@ + + + + + + + + + + ultrasonic_irq::Ultrasonic - Rust + + + + + + + + + + + + + + + + + + +
+

Struct ultrasonic_irq::Ultrasonic + + [] + + [src]

+
pub struct Ultrasonic {
+    pub distance: Arc<AtomicU32>,
+    // some fields omitted
+}

Fields

+

Methods

impl Ultrasonic
[src]

+

+

Constructs a new Ultrasonic and start threads.

+ +

Threads

+
    +
  • UltrasonicTrigger
  • +
  • UltrasonicEcho
  • +
+ +

Parameter

+
    +
  • trigger_port GPIO Port number of trigger pin.
  • +
  • echo_port GPIO Port number of echo pin.
  • +
  • temperature Room temperature in °C.
  • +
+

Trait Implementations

impl Debug for Ultrasonic
[src]

+

+

Formats the value using the given formatter.

+

impl Drop for Ultrasonic
[src]

+

+

Drop sync channels and join threads.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicEcho.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicEcho.html new file mode 100644 index 0000000..e6ac662 --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicEcho.html @@ -0,0 +1,115 @@ + + + + + + + + + + ultrasonic_irq::UltrasonicEcho - Rust + + + + + + + + + + + + + + + + + + +
+

Struct ultrasonic_irq::UltrasonicEcho + + [] + + [src]

+
pub struct UltrasonicEcho { /* fields omitted */ }

Trait Implementations

impl Debug for UltrasonicEcho
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicTrigger.html b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicTrigger.html new file mode 100644 index 0000000..458586b --- /dev/null +++ b/kawaii/kawaii-rs/doc/ultrasonic_irq/struct.UltrasonicTrigger.html @@ -0,0 +1,115 @@ + + + + + + + + + + ultrasonic_irq::UltrasonicTrigger - Rust + + + + + + + + + + + + + + + + + + +
+

Struct ultrasonic_irq::UltrasonicTrigger + + [] + + [src]

+
pub struct UltrasonicTrigger { /* fields omitted */ }

Trait Implementations

impl Debug for UltrasonicTrigger
[src]

+

+

Formats the value using the given formatter.

+
+ + + + + + + + + + + + + \ No newline at end of file