Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

126 changed files with 12794 additions and 98253 deletions

View File

@ -1,30 +0,0 @@
name: ci
on:
workflow_dispatch:
push:
branches:
- master
- main
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure Git Credentials
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v5
with:
python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v4
with:
key: mkdocs-material-${{ env.cache_id }}
path: .cache
restore-keys: |
mkdocs-material-
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force

2
.gitignore vendored
View File

@ -1,2 +0,0 @@
venv/
site/

0
.nojekyll Normal file
View File

434
404.html Normal file
View File

@ -0,0 +1,434 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/adept-trackball/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Ploopy Adept Trackball</title>
<link rel="stylesheet" href="/adept-trackball/assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("/adept-trackball/",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/adept-trackball/." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/adept-trackball/." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/adept-trackball/." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/adept-trackball/assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/adept-trackball/appendices/pcbs/" class="md-nav__link">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/adept-trackball/appendices/3d-printing/" class="md-nav__link">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/adept-trackball/appendices/hardware/" class="md-nav__link">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="/adept-trackball/appendices/programming/" class="md-nav__link">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="/adept-trackball/license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/adept-trackball/", "features": [], "search": "/adept-trackball/assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="/adept-trackball/assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>

289
LICENSE
View File

@ -1,289 +0,0 @@
CERN Open Hardware Licence Version 2 - Strongly Reciprocal
Preamble
CERN has developed this licence to promote collaboration among
hardware designers and to provide a legal tool which supports the
freedom to use, study, modify, share and distribute hardware designs
and products based on those designs. Version 2 of the CERN Open
Hardware Licence comes in three variants: CERN-OHL-P (permissive); and
two reciprocal licences: CERN-OHL-W (weakly reciprocal) and this
licence, CERN-OHL-S (strongly reciprocal).
The CERN-OHL-S is copyright CERN 2020. Anyone is welcome to use it, in
unmodified form only.
Use of this Licence does not imply any endorsement by CERN of any
Licensor or their designs nor does it imply any involvement by CERN in
their development.
1 Definitions
1.1 'Licence' means this CERN-OHL-S.
1.2 'Compatible Licence' means
a) any earlier version of the CERN Open Hardware licence, or
b) any version of the CERN-OHL-S, or
c) any licence which permits You to treat the Source to which
it applies as licensed under CERN-OHL-S provided that on
Conveyance of any such Source, or any associated Product You
treat the Source in question as being licensed under
CERN-OHL-S.
1.3 'Source' means information such as design materials or digital
code which can be applied to Make or test a Product or to
prepare a Product for use, Conveyance or sale, regardless of its
medium or how it is expressed. It may include Notices.
1.4 'Covered Source' means Source that is explicitly made available
under this Licence.
1.5 'Product' means any device, component, work or physical object,
whether in finished or intermediate form, arising from the use,
application or processing of Covered Source.
1.6 'Make' means to create or configure something, whether by
manufacture, assembly, compiling, loading or applying Covered
Source or another Product or otherwise.
1.7 'Available Component' means any part, sub-assembly, library or
code which:
a) is licensed to You as Complete Source under a Compatible
Licence; or
b) is available, at the time a Product or the Source containing
it is first Conveyed, to You and any other prospective
licensees
i) as a physical part with sufficient rights and
information (including any configuration and
programming files and information about its
characteristics and interfaces) to enable it either to
be Made itself, or to be sourced and used to Make the
Product; or
ii) as part of the normal distribution of a tool used to
design or Make the Product.
1.8 'Complete Source' means the set of all Source necessary to Make
a Product, in the preferred form for making modifications,
including necessary installation and interfacing information
both for the Product, and for any included Available Components.
If the format is proprietary, it must also be made available in
a format (if the proprietary tool can create it) which is
viewable with a tool available to potential licensees and
licensed under a licence approved by the Free Software
Foundation or the Open Source Initiative. Complete Source need
not include the Source of any Available Component, provided that
You include in the Complete Source sufficient information to
enable a recipient to Make or source and use the Available
Component to Make the Product.
1.9 'Source Location' means a location where a Licensor has placed
Covered Source, and which that Licensor reasonably believes will
remain easily accessible for at least three years for anyone to
obtain a digital copy.
1.10 'Notice' means copyright, acknowledgement and trademark notices,
Source Location references, modification notices (subsection
3.3(b)) and all notices that refer to this Licence and to the
disclaimer of warranties that are included in the Covered
Source.
1.11 'Licensee' or 'You' means any person exercising rights under
this Licence.
1.12 'Licensor' means a natural or legal person who creates or
modifies Covered Source. A person may be a Licensee and a
Licensor at the same time.
1.13 'Convey' means to communicate to the public or distribute.
2 Applicability
2.1 This Licence governs the use, copying, modification, Conveying
of Covered Source and Products, and the Making of Products. By
exercising any right granted under this Licence, You irrevocably
accept these terms and conditions.
2.2 This Licence is granted by the Licensor directly to You, and
shall apply worldwide and without limitation in time.
2.3 You shall not attempt to restrict by contract or otherwise the
rights granted under this Licence to other Licensees.
2.4 This Licence is not intended to restrict fair use, fair dealing,
or any other similar right.
3 Copying, Modifying and Conveying Covered Source
3.1 You may copy and Convey verbatim copies of Covered Source, in
any medium, provided You retain all Notices.
3.2 You may modify Covered Source, other than Notices, provided that
You irrevocably undertake to make that modified Covered Source
available from a Source Location should You Convey a Product in
circumstances where the recipient does not otherwise receive a
copy of the modified Covered Source. In each case subsection 3.3
shall apply.
You may only delete Notices if they are no longer applicable to
the corresponding Covered Source as modified by You and You may
add additional Notices applicable to Your modifications.
Including Covered Source in a larger work is modifying the
Covered Source, and the larger work becomes modified Covered
Source.
3.3 You may Convey modified Covered Source (with the effect that You
shall also become a Licensor) provided that You:
a) retain Notices as required in subsection 3.2;
b) add a Notice to the modified Covered Source stating that You
have modified it, with the date and brief description of how
You have modified it;
c) add a Source Location Notice for the modified Covered Source
if You Convey in circumstances where the recipient does not
otherwise receive a copy of the modified Covered Source; and
d) license the modified Covered Source under the terms and
conditions of this Licence (or, as set out in subsection
8.3, a later version, if permitted by the licence of the
original Covered Source). Such modified Covered Source must
be licensed as a whole, but excluding Available Components
contained in it, which remain licensed under their own
applicable licences.
4 Making and Conveying Products
You may Make Products, and/or Convey them, provided that You either
provide each recipient with a copy of the Complete Source or ensure
that each recipient is notified of the Source Location of the Complete
Source. That Complete Source is Covered Source, and You must
accordingly satisfy Your obligations set out in subsection 3.3. If
specified in a Notice, the Product must visibly and securely display
the Source Location on it or its packaging or documentation in the
manner specified in that Notice.
5 Research and Development
You may Convey Covered Source, modified Covered Source or Products to
a legal entity carrying out development, testing or quality assurance
work on Your behalf provided that the work is performed on terms which
prevent the entity from both using the Source or Products for its own
internal purposes and Conveying the Source or Products or any
modifications to them to any person other than You. Any modifications
made by the entity shall be deemed to be made by You pursuant to
subsection 3.2.
6 DISCLAIMER AND LIABILITY
6.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products
are provided 'as is' and any express or implied warranties,
including, but not limited to, implied warranties of
merchantability, of satisfactory quality, non-infringement of
third party rights, and fitness for a particular purpose or use
are disclaimed in respect of any Source or Product to the
maximum extent permitted by law. The Licensor makes no
representation that any Source or Product does not or will not
infringe any patent, copyright, trade secret or other
proprietary right. The entire risk as to the use, quality, and
performance of any Source or Product shall be with You and not
the Licensor. This disclaimer of warranty is an essential part
of this Licence and a condition for the grant of any rights
granted under this Licence.
6.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to
the maximum extent permitted by law, have no liability for
direct, indirect, special, incidental, consequential, exemplary,
punitive or other damages of any character including, without
limitation, procurement of substitute goods or services, loss of
use, data or profits, or business interruption, however caused
and on any theory of contract, warranty, tort (including
negligence), product liability or otherwise, arising in any way
in relation to the Covered Source, modified Covered Source
and/or the Making or Conveyance of a Product, even if advised of
the possibility of such damages, and You shall hold the
Licensor(s) free and harmless from any liability, costs,
damages, fees and expenses, including claims by third parties,
in relation to such use.
7 Patents
7.1 Subject to the terms and conditions of this Licence, each
Licensor hereby grants to You a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable (except as
stated in subsections 7.2 and 8.4) patent licence to Make, have
Made, use, offer to sell, sell, import, and otherwise transfer
the Covered Source and Products, where such licence applies only
to those patent claims licensable by such Licensor that are
necessarily infringed by exercising rights under the Covered
Source as Conveyed by that Licensor.
7.2 If You institute patent litigation against any entity (including
a cross-claim or counterclaim in a lawsuit) alleging that the
Covered Source or a Product constitutes direct or contributory
patent infringement, or You seek any declaration that a patent
licensed to You under this Licence is invalid or unenforceable
then any rights granted to You under this Licence shall
terminate as of the date such process is initiated.
8 General
8.1 If any provisions of this Licence are or subsequently become
invalid or unenforceable for any reason, the remaining
provisions shall remain effective.
8.2 You shall not use any of the name (including acronyms and
abbreviations), image, or logo by which the Licensor or CERN is
known, except where needed to comply with section 3, or where
the use is otherwise allowed by law. Any such permitted use
shall be factual and shall not be made so as to suggest any kind
of endorsement or implication of involvement by the Licensor or
its personnel.
8.3 CERN may publish updated versions and variants of this Licence
which it considers to be in the spirit of this version, but may
differ in detail to address new problems or concerns. New
versions will be published with a unique version number and a
variant identifier specifying the variant. If the Licensor has
specified that a given variant applies to the Covered Source
without specifying a version, You may treat that Covered Source
as being released under any version of the CERN-OHL with that
variant. If no variant is specified, the Covered Source shall be
treated as being released under CERN-OHL-S. The Licensor may
also specify that the Covered Source is subject to a specific
version of the CERN-OHL or any later version in which case You
may apply this or any later version of CERN-OHL with the same
variant identifier published by CERN.
8.4 This Licence shall terminate with immediate effect if You fail
to comply with any of its terms and conditions.
8.5 However, if You cease all breaches of this Licence, then Your
Licence from any Licensor is reinstated unless such Licensor has
terminated this Licence by giving You, while You remain in
breach, a notice specifying the breach and requiring You to cure
it within 30 days, and You have failed to come into compliance
in all material respects by the end of the 30 day period. Should
You repeat the breach after receipt of a cure notice and
subsequent reinstatement, this Licence will terminate
immediately and permanently. Section 6 shall continue to apply
after any termination.
8.6 This Licence shall not be enforceable except by a Licensor
acting as such, and third party beneficiary rights are
specifically excluded.

View File

@ -1,19 +0,0 @@
# The Ploopy Adept Trackball
![The Ploopy Adept Trackball](adept.jpg)
By some stroke of luck, you've made your way here. The Ploopy Adept Trackball. Your life will never be the same.
This repository contains all of the design and production files necessary to make a Ploopy Adept Trackball. We've also included some kick-ass documentation in the Wiki on how to get it made, assemble it, and program it.
What are you waiting for? Your new life awaits.
## QMK?!
Kits bought from the [Ploopy store](https://ploopy.co/product-category/trackball/adept/) come with QMK and VIA preloaded. [Check out the Wiki](https://github.com/ploopyco/adept-trackball/wiki) for instructions on how to load new firmware onto your device. (It's super easy!)
The firmware hex file that ships with all Adepts is included in this repository as well, as `ploopyco_madromys_rev1_001_via.uf2`.
## Under what license is this released?
As per QMK's licensing requirements, the firmware for the Ploopy Adept Trackball is released under GPLv3. Hardware design files, including electronics and mechanical files, are released under OHL CERN v2-S. Check the respective directories for full license text.

BIN
adept.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

View File

@ -0,0 +1,493 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ploopyco.github.io/adept-trackball/appendices/3d-printing/">
<link rel="prev" href="../pcbs/">
<link rel="next" href="../hardware/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Appendix B: 3D printed parts - Ploopy Adept Trackball</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#appendix-b-3d-printed-parts" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pcbs/" class="md-nav__link">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../programming/" class="md-nav__link">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="appendix-b-3d-printed-parts">Appendix B: 3D printed parts</h1>
<h1 id="buying-3d-printed-parts-from-us">Buying 3D-printed parts from us</h1>
<p>Not everyone has access to a 3D-printer. <a href="https://ploopy.co/product-category/trackball/adept/">That's why we sell kits with everything you need to build a Ploopy Adept Trackball</a>. Here's why that's great for you:</p>
<ul>
<li>You get all of the 3D-printed parts, guaranteed free of manufacturing defects</li>
<li>You won't waste time spending hours tweaking settings</li>
<li>We guarantee it will fit together <em>perfectly</em></li>
</ul>
<p>Consider it. You're a smartie. You'll get there.</p>
<h1 id="printing-your-own-parts">Printing your own parts</h1>
<p>So, you have a printer and want to print your own parts? Great! We don't have specific instructions, since every printer setup is different. All of the STLs are available, and if you need to make tweaks, you can alter the design files.</p>
<p>Here are the settings we use when we print parts. <strong>Note that these settings have only been tested on the Prusa i3 MK2.5S and MK3S.</strong> If you have another printer, you may need to tweak these settings.</p>
<ul>
<li>PLA. The geometry of many of the parts is quite complex; trying to use other materials may not result in success.</li>
<li>0.30mm layer height. You can go finer than this if you want, but we haven't tested that. Going coarser is not going to work; first, it's going to feel rough on your hand, and second, it won't accurately capture the necessary detail.</li>
<li>No support material is required anywhere. However, your printer must have the capability of bridging distances of up to 40mm.</li>
<li>Orient the pieces so that flat sides are on the build plate.</li>
<li>We like gyroid for infill pattern, but anything is probably good. Cubic, rectilinear, whatever.</li>
<li>We use 0.4mm nozzles. We haven't tested other nozzle sizes.</li>
</ul>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>

View File

@ -0,0 +1,517 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ploopyco.github.io/adept-trackball/appendices/hardware/">
<link rel="prev" href="../3d-printing/">
<link rel="next" href="../programming/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Appendix C: Hardware - Ploopy Adept Trackball</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#appendix-c-hardware" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pcbs/" class="md-nav__link">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../3d-printing/" class="md-nav__link">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../programming/" class="md-nav__link">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="appendix-c-hardware">Appendix C: Hardware</h1>
<h1 id="buying-hardware-from-us">Buying hardware from us</h1>
<p>Getting all of the hardware on your own can be tricky because the parts you select may not fit perfectly. <a href="https://ploopy.co/product-category/trackball/adept/">That's why we sell kits with everything you need to build a Ploopy Adept Trackball</a>. Here's why that's great for you:</p>
<ul>
<li>Everything is guaranteed to fit together perfectly</li>
<li>Everything is guaranteed to work as intended</li>
<li>You'll end up saving money - probably quite a bit of money - by not spending on extra parts</li>
</ul>
<p>Your call. You'll sort it out.</p>
<h1 id="getting-your-own-hardware">Getting your own hardware</h1>
<p>This guide was a bit light on detail in the other sections, and that's because the hardware has to conform to many specifications. They'll all be listed here.</p>
<p>First, a complete list of all the hardware you'll need:</p>
<ul>
<li>4x Small Screws</li>
<li>3x MR63ZZ Roller Bearings</li>
<li>4x Friction Pads</li>
<li>1x Snooker Ball</li>
</ul>
<p>We'll be going over all of them in detail. There will be mentions of <em>critical specifications</em>; if you're going to be sourcing your own parts, <strong>you must get parts that conform to the critical specifications</strong>. If you go off-menu, the parts will not fit the way that we intended when we designed the trackball. That might mean that your trackball <strong>doesn't work</strong>.</p>
<p>Let's get cracking.</p>
<h2 id="small-screws">Small Screws</h2>
<p>Here are the critical specifications:</p>
<ul>
<li>#2</li>
<li>3/8" length</li>
</ul>
<h2 id="mr63zz-roller-bearings">MR63ZZ Roller Bearings</h2>
<p>Here are the critical specifications:</p>
<ul>
<li>MR63ZZ bearing</li>
<li>3mm inner diameter</li>
<li>6mm outer diameter</li>
<li>2.5mm thickness</li>
</ul>
<h2 id="friction-pads">Friction pads</h2>
<p>Here are the critical specifications:</p>
<ul>
<li>Circular shape</li>
<li>Up to 3/4" diameter</li>
<li>Up to 1/8" thickness</li>
<li>Non-slip</li>
</ul>
<h2 id="snooker-ball">Snooker ball</h2>
<p>We use 1.75-inch diameter (44.45mm) miniature snooker balls. Any ball between 44.0mm and 44.6mm will work.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>

694
appendices/pcbs/index.html Normal file
View File

@ -0,0 +1,694 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ploopyco.github.io/adept-trackball/appendices/pcbs/">
<link rel="prev" href="../../assembly-instructions/">
<link rel="next" href="../3d-printing/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Appendix A: Printed circuit boards - Ploopy Adept Trackball</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#appendix-a-printed-circuit-boards" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#buying-boards-from-us" class="md-nav__link">
<span class="md-ellipsis">
Buying boards from us
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#making-your-own-boards" class="md-nav__link">
<span class="md-ellipsis">
Making your own boards
</span>
</a>
<nav class="md-nav" aria-label="Making your own boards">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#step-1-order-the-pcbs-from-a-pcb-production-company" class="md-nav__link">
<span class="md-ellipsis">
Step 1: Order the PCBs from a PCB production company
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-2-order-the-electronics-components" class="md-nav__link">
<span class="md-ellipsis">
Step 2: Order the electronics components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-3-get-the-necessary-tools" class="md-nav__link">
<span class="md-ellipsis">
Step 3: Get the necessary tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-4-solder-the-components-to-the-boards" class="md-nav__link">
<span class="md-ellipsis">
Step 4: Solder the components to the boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-5-all-done" class="md-nav__link">
<span class="md-ellipsis">
Step 5: All done!
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../3d-printing/" class="md-nav__link">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../programming/" class="md-nav__link">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#buying-boards-from-us" class="md-nav__link">
<span class="md-ellipsis">
Buying boards from us
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#making-your-own-boards" class="md-nav__link">
<span class="md-ellipsis">
Making your own boards
</span>
</a>
<nav class="md-nav" aria-label="Making your own boards">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#step-1-order-the-pcbs-from-a-pcb-production-company" class="md-nav__link">
<span class="md-ellipsis">
Step 1: Order the PCBs from a PCB production company
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-2-order-the-electronics-components" class="md-nav__link">
<span class="md-ellipsis">
Step 2: Order the electronics components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-3-get-the-necessary-tools" class="md-nav__link">
<span class="md-ellipsis">
Step 3: Get the necessary tools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-4-solder-the-components-to-the-boards" class="md-nav__link">
<span class="md-ellipsis">
Step 4: Solder the components to the boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#step-5-all-done" class="md-nav__link">
<span class="md-ellipsis">
Step 5: All done!
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="appendix-a-printed-circuit-boards">Appendix A: Printed circuit boards</h1>
<h2 id="buying-boards-from-us">Buying boards from us</h2>
<p>Getting the Ploopy boards made can be complex, and expensive, especially if you only need one set. <a href="https://ploopy.co/product-category/trackball/adept/">That's why we sell kits with everything you need to build a Ploopy Adept Trackball</a>. Here's why that's great for you:</p>
<ul>
<li>You get a PCB with all components soldered</li>
<li>The firmware is already programmed on the microcontroller, so you won't have to program it</li>
<li>It'll cost a hell of a lot less than if you do a production run of PCBs just for yourself</li>
<li>You won't have to order components and wait while they come in</li>
<li>We guarantee that it works</li>
</ul>
<p>Just something to consider. You're smart. You'll figure it out.</p>
<h2 id="making-your-own-boards">Making your own boards</h2>
<p>Want to make your own Ploopy Adept Trackball boards? Great! Less work for us. Seriously, though, only choose this option if you know what you're doing. You don't want to embarrass yourself, do you?</p>
<h3 id="step-1-order-the-pcbs-from-a-pcb-production-company">Step 1: Order the PCBs from a PCB production company</h3>
<p>Here are the most important configurations you'll need to communicate to the company:</p>
<ul>
<li>4 layers</li>
<li>FR-4, TG 150-160 (basically, whatever the cheapest option is)</li>
<li>0.8mm thickness</li>
<li>6/6mil track/spacing distance</li>
<li>0.3mm minimum hole size</li>
<li>ENIG surface finish, but you can go with HASL if you don't care about lead poisoning</li>
<li>1oz copper thickness for both outer and inner layers</li>
<li>Choose whatever colours you want for solder mask and silkscreen; we like white solder mask and black silkscreen</li>
</ul>
<p>If something is missing from here, it's not really important.</p>
<p>At some point, you'll have to upload design files to the production company. Use the <a href="https://github.com/ploopyco/adept-trackball/tree/master/hardware/electronics">electronics source files</a> to generate manufacturing files (you'll have to convert them from their native Altium format if you're using some other platform). That should contain everything you need to get the boards made. If the production company rejects this package, however, you'll need to address the issue yourself.</p>
<h3 id="step-2-order-the-electronics-components">Step 2: Order the electronics components</h3>
<p>All of the components are described in the schematics of the PCBs. Ordering the components is left as an exercise for the reader.</p>
<p>A complete list of all of the components can be found in the electrical design files.</p>
<h3 id="step-3-get-the-necessary-tools">Step 3: Get the necessary tools</h3>
<ul>
<li>PCB</li>
<li>All of the electronics components</li>
<li>A soldering iron</li>
<li>Solder</li>
<li>A printout of the schematics</li>
</ul>
<h3 id="step-4-solder-the-components-to-the-boards">Step 4: Solder the components to the boards</h3>
<p>Once you've got the PCBs and all of the components, print out the schematics. Use the schematics to match the reference designators on the PCBs to the reference designators on the schematics, and then get to soldering.</p>
<p>If you've never soldered surface mount components before, or want a refresher on how to solder, we recommend <a href="https://www.youtube.com/watch?v=3NN7UGWYmBY">this video on using an iron to solder surface mount components</a>, and <a href="https://www.youtube.com/watch?v=c_Qt5CtUlqY">this video on using a hot-air soldering station</a>.</p>
<p>Lastly, you'll need to follow a set of special instructions to assemble the PMW3360 sensor and the optic. <a href="https://d3s5r33r268y59.cloudfront.net/datasheets/9604/2017-05-07-18-19-11/PMS0058-PMW3360DM-T2QU-DS-R1.50-26092016._20161202173741.pdf">Take a look at page 11 of the official PMW3360 datasheet to find out how to do this</a> (page 8 has visuals, for those of you who like purdy pictures).</p>
<p><strong>MAKE SURE THAT THE PMW3360 IS ORIENTED CORRECTLY BEFORE YOU SOLDER IT!</strong> This is a really easy step to mess up, so <em>DOUBLE-CHECK IT!</em></p>
<h3 id="step-5-all-done">Step 5: All done!</h3>
<p>Congrats, you finished assembling the electronics! Pat yourself on the back.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>

View File

@ -0,0 +1,518 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://ploopyco.github.io/adept-trackball/appendices/programming/">
<link rel="prev" href="../hardware/">
<link rel="next" href="../../license/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.26">
<title>Appendix D: QMK Firmware Programming - Ploopy Adept Trackball</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.6543a935.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#appendix-d-qmk-firmware-programming" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Ploopy Adept Trackball" class="md-header__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Ploopy Adept Trackball
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</div>
</div>
</div>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Ploopy Adept Trackball" class="md-nav__button md-logo" aria-label="Ploopy Adept Trackball" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Ploopy Adept Trackball
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../assembly-instructions/" class="md-nav__link">
<span class="md-ellipsis">
Ploopy Kit Assembly Instructions
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Appendices
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Appendices
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../pcbs/" class="md-nav__link">
<span class="md-ellipsis">
Appendix A: Printed circuit boards
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../3d-printing/" class="md-nav__link">
<span class="md-ellipsis">
Appendix B: 3D printed parts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Appendix C: Hardware
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Appendix D: QMK Firmware Programming
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
<span class="md-ellipsis">
GNU Free Documentation License
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="appendix-d-qmk-firmware-programming">Appendix D: QMK Firmware Programming</h1>
<h1 id="working-with-qmk">Working with QMK</h1>
<p>Ploopy devices are fairly easy to program and reprogram, thanks to the excellent work by all of the developers and maintainers of the <a href="https://github.com/qmk/qmk_firmware">QMK firmware suite</a>.</p>
<h2 id="madromys-whats-that">Madromys? What's that?</h2>
<p><code>madromys</code> is our internal codename for the Ploopy Adept. We don't always know what we're going to call the devices as we're designing them, so we assign codenames to them. This naming convention is also present in some public places, such as the QMK repository. If you see <code>madromys</code> while you're working with QMK, just know that the Adept and <code>madromys</code> are the same thing.</p>
<h2 id="before-you-begin">Before you begin</h2>
<p>If you have never used QMK before, go through <a href="https://docs.qmk.fm/#/newbs_getting_started">all of the steps in the QMK guide to set up your environment</a>.</p>
<p>QMK was built for keyboards, so you'll see lots of references to code that looks like the following:</p>
<p><code>-kb &lt;keyboard&gt;</code></p>
<p>Whenever you see that, use the following syntax:</p>
<p><code>-kb ploopyco/madromys/rev1_001</code></p>
<p>and you'll be fine.</p>
<h2 id="building-the-ploopy-device-firmware">Building the Ploopy device firmware</h2>
<p>With your terminal window open and pointed at your QMK build environment, compile the firmware with the following command:</p>
<p><code>qmk compile -kb ploopyco/madromys/rev1_001 -km via</code></p>
<p>Alternatively, you can invoke the Makefile directly with the following:</p>
<p><code>make ploopyco/madromys/rev1_001:via</code></p>
<p>If you wish, you can use the default keymap (with <code>qmk compile -kb ploopyco/madromys/rev1_001 -km default</code> or <code>make ploopyco/madromys/rev1_001:default</code>). However, the VIA keymap is particularly interesting because it allows for customization of the trackball's functions without reflashing the firmware, through the use of the convenient <a href="https://github.com/the-via/releases/releases">VIA software package</a>. It's incredibly handy, so definitely check it out.</p>
<p>For more details on building QMK firmware in general, see the <a href="https://docs.qmk.fm/#/newbs_building_firmware">QMK firmware guide</a>.</p>
<h2 id="putting-the-ploopy-device-into-bootloader-mode">Putting the Ploopy device into bootloader mode</h2>
<p>Putting the Ploopy device into bootloader mode is very easy.</p>
<ol>
<li>Unplug it from your computer.</li>
<li>Hold down the Bottom Left button on the Adept.</li>
<li>Plug the Ploopy device into your computer.</li>
<li>The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Ploopy device, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point.</li>
</ol>
<p>And that's it. While plugged in this way, the Ploopy device will accept new firmware.</p>
<p>If you want to upload a new firmware file (a ".uf2" file, like "ploopy_adept_v42069" or something), just drag it into the folder, and it'll automatically install on the Ploopy device and restart itself.</p>
<p>Whenever you want to put new firmware onto the Ploopy device, go through these steps again.</p>
<p><strong>TIP</strong>: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading <a href="https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182">a flash nuke</a> to the Adept before flashing the new firmware. It wipes the memory of the Adept completely clean, which can help clear a few types of errors.</p>
<h2 id="putting-the-ploopy-device-into-bootloader-mode-if-its-bricked">Putting the Ploopy device into bootloader mode if it's bricked</h2>
<p>Putting the Ploopy device into bootloader mode if it's bricked is a bit more involved, but still doable.</p>
<ol>
<li>Unplug it from your computer.</li>
<li>Open it by removing the screws in the base and removing the top.</li>
<li>Look for a pair of vias (gold-plated holes) on the board. You can see where they're located <a href="https://ploopy.co/wp-content/uploads/2023/11/boot.jpg">in this photo</a>.</li>
<li>Get a paper clip (non-insulated, i.e. no plastic shit covering it) or a pair of tweezers, or some wire. Whatever you've got on hand that's metal.</li>
<li>Stick the paper clip or tweezers into the holes. You're trying to form an electrical connection between the two holes.</li>
<li>While you've got the two vias connected with your metal bridge, plug the Ploopy device into your computer.</li>
<li>The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Ploopy device, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point.</li>
</ol>
<p>And that's it. While plugged in this way, the Ploopy device will accept new firmware.</p>
<h2 id="and-thats-it">And that's it!</h2>
<p>Happy customizing!</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.ad660dcc.min.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

BIN
assets/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hi=function(){this.pipeline.reset(),this.pipeline.add(e.hi.trimmer,e.hi.stopWordFilter,e.hi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hi.stemmer))},e.hi.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿa-zA-Z--0-9-",e.hi.trimmer=e.trimmerSupport.generateTrimmer(e.hi.wordCharacters),e.Pipeline.registerFunction(e.hi.trimmer,"trimmer-hi"),e.hi.stopWordFilter=e.generateStopWordFilter("अत अपना अपनी अपने अभी अंदर आदि आप इत्यादि इन इनका इन्हीं इन्हें इन्हों इस इसका इसकी इसके इसमें इसी इसे उन उनका उनकी उनके उनको उन्हीं उन्हें उन्हों उस उसके उसी उसे एक एवं एस ऐसे और कई कर करता करते करना करने करें कहते कहा का काफ़ी कि कितना किन्हें किन्हों किया किर किस किसी किसे की कुछ कुल के को कोई कौन कौनसा गया घर जब जहाँ जा जितना जिन जिन्हें जिन्हों जिस जिसे जीधर जैसा जैसे जो तक तब तरह तिन तिन्हें तिन्हों तिस तिसे तो था थी थे दबारा दिया दुसरा दूसरे दो द्वारा न नके नहीं ना निहायत नीचे ने पर पहले पूरा पे फिर बनी बही बहुत बाद बाला बिलकुल भी भीतर मगर मानो मे में यदि यह यहाँ यही या यिह ये रखें रहा रहे ऱ्वासा लिए लिये लेकिन व वग़ैरह वर्ग वह वहाँ वहीं वाले वुह वे वो सकता सकते सबसे सभी साथ साबुत साभ सारा से सो संग ही हुआ हुई हुए है हैं हो होता होती होते होना होने".split(" ")),e.hi.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.hi.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var t=i.toString().toLowerCase().replace(/^\s+/,"");return r.cut(t).split("|")},e.Pipeline.registerFunction(e.hi.stemmer,"stemmer-hi"),e.Pipeline.registerFunction(e.hi.stopWordFilter,"stopWordFilter-hi")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Z--0-9-",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});

View File

@ -0,0 +1 @@
module.exports=require("./lunr.ja");

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.kn=function(){this.pipeline.reset(),this.pipeline.add(e.kn.trimmer,e.kn.stopWordFilter,e.kn.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.kn.stemmer))},e.kn.wordCharacters="ಀ-಄ಅ-ಔಕ-ಹಾ-ೌ಼-ಽೕ-ೖೝ-ೞೠ-ೡೢ-ೣ೤೥೦-೯ೱ-ೳ",e.kn.trimmer=e.trimmerSupport.generateTrimmer(e.kn.wordCharacters),e.Pipeline.registerFunction(e.kn.trimmer,"trimmer-kn"),e.kn.stopWordFilter=e.generateStopWordFilter("ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ ".split(" ")),e.kn.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.kn.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var n=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(n).split("|")},e.Pipeline.registerFunction(e.kn.stemmer,"stemmer-kn"),e.Pipeline.registerFunction(e.kn.stopWordFilter,"stopWordFilter-kn")}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम्‌ एकम्‌ इत्यस्मिन्‌ तथा तत्‌ वा अयम्‌ इत्यस्य ते आहूत उपरि तेषाम्‌ किन्तु तेषाम्‌ तदा इत्यनेन अधिकः इत्यस्य तत्‌ केचन बहवः द्वि तथा महत्वपूर्णः अयम्‌ अस्य विषये अयं अस्ति तत्‌ प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम्‌ द न्यूनम्‌ कश्चित्‌ वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम्‌ अपि अत्र सर्वे विविधाः तत्‌ बहवः यतः इदानीम्‌ द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम्‌ सर्वे एकैकम्‌ इत्यादि। एते सन्ति उत इत्थम्‌ मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम्‌ समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान्‌ धृतः तदा पुनः पूर्वं सः आगतः किम्‌ कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत्‌ ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}});

View File

@ -0,0 +1 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});

View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Z--0-9-",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}});

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});

View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});

View File

@ -0,0 +1,206 @@
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Z--]":"A",
"[0-9-]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"":-1723,"、":4889,"々":-2311,"":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"":-514,"":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"":-270,"":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"sources":["src/templates/assets/stylesheets/palette/_scheme.scss","../../../../src/templates/assets/stylesheets/palette.scss","src/templates/assets/stylesheets/palette/_accent.scss","src/templates/assets/stylesheets/palette/_primary.scss","src/templates/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAME,sDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,mDAAA,CACA,gDAAA,CAGA,0BAAA,CACA,mCAAA,CAGA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,iCAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,uDAAA,CAGA,8DAAA,CAKA,8DAAA,CAKA,0DAAA,CAvEA,iBCeF,CD6DE,kHAEE,YC3DJ,CDkFE,yDACE,4BChFJ,CD+EE,2DACE,4BC7EJ,CD4EE,gEACE,4BC1EJ,CDyEE,2DACE,4BCvEJ,CDsEE,yDACE,4BCpEJ,CDmEE,0DACE,4BCjEJ,CDgEE,gEACE,4BC9DJ,CD6DE,0DACE,4BC3DJ,CD0DE,2OACE,4BC/CJ,CDsDA,+FAGE,iCCpDF,CACF,CC/CE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2CN,CCrDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkDN,CC5DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyDN,CCnEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgEN,CC1EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuEN,CCjFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8EN,CCxFE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqFN,CC/FE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4FN,CCtGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmGN,CC7GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD0GN,CCpHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDiHN,CC3HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2HN,CClIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkIN,CCzIE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDyIN,CChJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDgJN,CCvJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoJN,CEzJE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsJN,CEjKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8JN,CEzKE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsKN,CEjLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8KN,CEzLE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsLN,CEjME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8LN,CEzME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsMN,CEjNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8MN,CEzNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsNN,CEjOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8NN,CEzOE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsON,CEjPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiPN,CEzPE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyPN,CEjQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiQN,CEzQE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyQN,CEjRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8QN,CEzRE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsRN,CEjSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF0RN,CE1SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFmSN,CEpRE,sEACE,4BFuRJ,CExRE,+DACE,4BF2RJ,CE5RE,iEACE,4BF+RJ,CEhSE,gEACE,4BFmSJ,CEpSE,iEACE,4BFuSJ,CE9RA,8BACE,mDAAA,CACA,4DAAA,CACA,0DAAA,CACA,oDAAA,CACA,2DAAA,CAGA,4BF+RF,CE5RE,yCACE,+BF8RJ,CE3RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCF+RN,CG3MI,mCD1EA,+CACE,8CFwRJ,CErRI,qDACE,8CFuRN,CElRE,iEACE,mCFoRJ,CACF,CGtNI,sCDvDA,uCACE,oCFgRJ,CACF,CEvQA,8BACE,kDAAA,CACA,4DAAA,CACA,wDAAA,CACA,oDAAA,CACA,6DAAA,CAGA,4BFwQF,CErQE,yCACE,+BFuQJ,CEpQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,mCFwQN,CEjQE,yCACE,6CFmQJ,CG5NI,0CDhCA,8CACE,gDF+PJ,CACF,CGjOI,0CDvBA,iFACE,6CF2PJ,CACF,CGzPI,sCDKA,uCACE,6CFuPJ,CACF","file":"palette.css"}

View File

@ -1,23 +0,0 @@
# Appendix B: 3D printed parts
# Buying 3D-printed parts from us
Not everyone has access to a 3D-printer. [That's why we sell kits with everything you need to build a Ploopy Adept Trackball](https://ploopy.co/product-category/trackball/adept/). Here's why that's great for you:
- You get all of the 3D-printed parts, guaranteed free of manufacturing defects
- You won't waste time spending hours tweaking settings
- We guarantee it will fit together *perfectly*
Consider it. You're a smartie. You'll get there.
# Printing your own parts
So, you have a printer and want to print your own parts? Great! We don't have specific instructions, since every printer setup is different. All of the STLs are available, and if you need to make tweaks, you can alter the design files.
Here are the settings we use when we print parts. **Note that these settings have only been tested on the Prusa i3 MK2.5S and MK3S.** If you have another printer, you may need to tweak these settings.
- PLA. The geometry of many of the parts is quite complex; trying to use other materials may not result in success.
- 0.30mm layer height. You can go finer than this if you want, but we haven't tested that. Going coarser is not going to work; first, it's going to feel rough on your hand, and second, it won't accurately capture the necessary detail.
- No support material is required anywhere. However, your printer must have the capability of bridging distances of up to 40mm.
- Orient the pieces so that flat sides are on the build plate.
- We like gyroid for infill pattern, but anything is probably good. Cubic, rectilinear, whatever.
- We use 0.4mm nozzles. We haven't tested other nozzle sizes.

View File

@ -1,52 +0,0 @@
# Appendix C: Hardware
# Buying hardware from us
Getting all of the hardware on your own can be tricky because the parts you select may not fit perfectly. [That's why we sell kits with everything you need to build a Ploopy Adept Trackball](https://ploopy.co/product-category/trackball/adept/). Here's why that's great for you:
- Everything is guaranteed to fit together perfectly
- Everything is guaranteed to work as intended
- You'll end up saving money - probably quite a bit of money - by not spending on extra parts
Your call. You'll sort it out.
# Getting your own hardware
This guide was a bit light on detail in the other sections, and that's because the hardware has to conform to many specifications. They'll all be listed here.
First, a complete list of all the hardware you'll need:
- 4x Small Screws
- 3x MR63ZZ Roller Bearings
- 4x Friction Pads
- 1x Snooker Ball
We'll be going over all of them in detail. There will be mentions of *critical specifications*; if you're going to be sourcing your own parts, **you must get parts that conform to the critical specifications**. If you go off-menu, the parts will not fit the way that we intended when we designed the trackball. That might mean that your trackball **doesn't work**.
Let's get cracking.
## Small Screws
Here are the critical specifications:
- \#2
- 3/8" length
## MR63ZZ Roller Bearings
Here are the critical specifications:
- MR63ZZ bearing
- 3mm inner diameter
- 6mm outer diameter
- 2.5mm thickness
## Friction pads
Here are the critical specifications:
- Circular shape
- Up to 3/4" diameter
- Up to 1/8" thickness
- Non-slip
## Snooker ball
We use 1.75-inch diameter (44.45mm) miniature snooker balls. Any ball between 44.0mm and 44.6mm will work.

View File

@ -1,62 +0,0 @@
# Appendix A: Printed circuit boards
## Buying boards from us
Getting the Ploopy boards made can be complex, and expensive, especially if you only need one set. [That's why we sell kits with everything you need to build a Ploopy Adept Trackball](https://ploopy.co/product-category/trackball/adept/). Here's why that's great for you:
- You get a PCB with all components soldered
- The firmware is already programmed on the microcontroller, so you won't have to program it
- It'll cost a hell of a lot less than if you do a production run of PCBs just for yourself
- You won't have to order components and wait while they come in
- We guarantee that it works
Just something to consider. You're smart. You'll figure it out.
## Making your own boards
Want to make your own Ploopy Adept Trackball boards? Great! Less work for us. Seriously, though, only choose this option if you know what you're doing. You don't want to embarrass yourself, do you?
### Step 1: Order the PCBs from a PCB production company
Here are the most important configurations you'll need to communicate to the company:
- 4 layers
- FR-4, TG 150-160 (basically, whatever the cheapest option is)
- 0.8mm thickness
- 6/6mil track/spacing distance
- 0.3mm minimum hole size
- ENIG surface finish, but you can go with HASL if you don't care about lead poisoning
- 1oz copper thickness for both outer and inner layers
- Choose whatever colours you want for solder mask and silkscreen; we like white solder mask and black silkscreen
If something is missing from here, it's not really important.
At some point, you'll have to upload design files to the production company. Use the [electronics source files](https://github.com/ploopyco/adept-trackball/tree/master/hardware/electronics) to generate manufacturing files (you'll have to convert them from their native Altium format if you're using some other platform). That should contain everything you need to get the boards made. If the production company rejects this package, however, you'll need to address the issue yourself.
### Step 2: Order the electronics components
All of the components are described in the schematics of the PCBs. Ordering the components is left as an exercise for the reader.
A complete list of all of the components can be found in the electrical design files.
### Step 3: Get the necessary tools
- PCB
- All of the electronics components
- A soldering iron
- Solder
- A printout of the schematics
### Step 4: Solder the components to the boards
Once you've got the PCBs and all of the components, print out the schematics. Use the schematics to match the reference designators on the PCBs to the reference designators on the schematics, and then get to soldering.
If you've never soldered surface mount components before, or want a refresher on how to solder, we recommend [this video on using an iron to solder surface mount components](https://www.youtube.com/watch?v=3NN7UGWYmBY), and [this video on using a hot-air soldering station](https://www.youtube.com/watch?v=c_Qt5CtUlqY).
Lastly, you'll need to follow a set of special instructions to assemble the PMW3360 sensor and the optic. [Take a look at page 11 of the official PMW3360 datasheet to find out how to do this](https://d3s5r33r268y59.cloudfront.net/datasheets/9604/2017-05-07-18-19-11/PMS0058-PMW3360DM-T2QU-DS-R1.50-26092016._20161202173741.pdf) (page 8 has visuals, for those of you who like purdy pictures).
**MAKE SURE THAT THE PMW3360 IS ORIENTED CORRECTLY BEFORE YOU SOLDER IT!** This is a really easy step to mess up, so *DOUBLE-CHECK IT!*
### Step 5: All done!
Congrats, you finished assembling the electronics! Pat yourself on the back.

View File

@ -1,73 +0,0 @@
# Appendix D: QMK Firmware Programming
# Working with QMK
Ploopy devices are fairly easy to program and reprogram, thanks to the excellent work by all of the developers and maintainers of the [QMK firmware suite](https://github.com/qmk/qmk_firmware).
## Madromys? What's that?
`madromys` is our internal codename for the Ploopy Adept. We don't always know what we're going to call the devices as we're designing them, so we assign codenames to them. This naming convention is also present in some public places, such as the QMK repository. If you see `madromys` while you're working with QMK, just know that the Adept and `madromys` are the same thing.
## Before you begin
If you have never used QMK before, go through [all of the steps in the QMK guide to set up your environment](https://docs.qmk.fm/#/newbs_getting_started).
QMK was built for keyboards, so you'll see lots of references to code that looks like the following:
`-kb <keyboard>`
Whenever you see that, use the following syntax:
`-kb ploopyco/madromys/rev1_001`
and you'll be fine.
## Building the Ploopy device firmware
With your terminal window open and pointed at your QMK build environment, compile the firmware with the following command:
`qmk compile -kb ploopyco/madromys/rev1_001 -km via`
Alternatively, you can invoke the Makefile directly with the following:
`make ploopyco/madromys/rev1_001:via`
If you wish, you can use the default keymap (with `qmk compile -kb ploopyco/madromys/rev1_001 -km default` or `make ploopyco/madromys/rev1_001:default`). However, the VIA keymap is particularly interesting because it allows for customization of the trackball's functions without reflashing the firmware, through the use of the convenient [VIA software package](https://github.com/the-via/releases/releases). It's incredibly handy, so definitely check it out.
For more details on building QMK firmware in general, see the [QMK firmware guide](https://docs.qmk.fm/#/newbs_building_firmware).
## Putting the Ploopy device into bootloader mode
Putting the Ploopy device into bootloader mode is very easy.
1. Unplug it from your computer.
2. Hold down the Bottom Left button on the Adept.
3. Plug the Ploopy device into your computer.
4. The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Ploopy device, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point.
And that's it. While plugged in this way, the Ploopy device will accept new firmware.
If you want to upload a new firmware file (a ".uf2" file, like "ploopy_adept_v42069" or something), just drag it into the folder, and it'll automatically install on the Ploopy device and restart itself.
Whenever you want to put new firmware onto the Ploopy device, go through these steps again.
**TIP**: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading [a flash nuke](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182) to the Adept before flashing the new firmware. It wipes the memory of the Adept completely clean, which can help clear a few types of errors.
## Putting the Ploopy device into bootloader mode if it's bricked
Putting the Ploopy device into bootloader mode if it's bricked is a bit more involved, but still doable.
1. Unplug it from your computer.
2. Open it by removing the screws in the base and removing the top.
3. Look for a pair of vias (gold-plated holes) on the board. You can see where they're located [in this photo](https://ploopy.co/wp-content/uploads/2023/11/boot.jpg).
4. Get a paper clip (non-insulated, i.e. no plastic shit covering it) or a pair of tweezers, or some wire. Whatever you've got on hand that's metal.
5. Stick the paper clip or tweezers into the holes. You're trying to form an electrical connection between the two holes.
6. While you've got the two vias connected with your metal bridge, plug the Ploopy device into your computer.
7. The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Ploopy device, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point.
And that's it. While plugged in this way, the Ploopy device will accept new firmware.
## And that's it!
Happy customizing!

View File

@ -1,208 +0,0 @@
# Ploopy Kit Assembly Instructions
## BEFORE YOU DO ANYTHING, READ THIS FIRST.
**Do not flash new firmware until you've verified that the electronics are all working.**
That means, finish building the trackball, plug it in, use the stock firmware for about five minutes. Verify that the cursor is moving, and all the buttons are working.
Once you've verified that it all works, you're good to go flashing new firmware.
## Main Instructions
![all kit parts](https://lh3.googleusercontent.com/pw/ADCreHfFOKGiX1egjs6ol2iNQnJ4jNDAxH1bfMqkoxHRl5mpLs3ZLxKLjKJR8xbkDLxCADVBUiWzJF8CwyH74PnvwaB3b2ErXDpoPGF3qR4dHEotAmtf3Ir6Wsf7FSntQSoPxZtsEllr6KtwjVg7xnZj4qsv=w1035-h775-s-no?authuser=0)
In this section, you'll go over how to build an Adept Trackball from the official Ploopy Adept Trackball kit.
Note that some of these pictures were taken at different times, so they may show a bit of inconsistency in between steps.
### Step 1: Get the necessary tools
![all tools](https://lh3.googleusercontent.com/pw/ACtC-3eKUqi_BjdcoJRlIiCtS0rxfiG9A3lCX8538aebNqQPccqBAioWTrmFEinRKAGVO0FNtpuwiR8vW0Ux6MPnLEe0OVpoppkdxLsX9M9iJcIh5tRhFcuQjpzP84skAn2yffFP1vID-sIKFg-YZX0lwRPI=s801-no?authuser=0)
- A #1 Phillips head screwdriver (or similar; you're looking for a small-ish screwdriver here)
- Soldering iron
- Solder
A pair of tweezers and needle-nose pliers may also be helpful during this process.
### Step 2: Break any leftover tabs off the PCB
![enter image description here](https://lh3.googleusercontent.com/pw/AP1GczMsL-8MYM2KZ_-CyFdPpuzJyChnqaTZTjUCXkvmCUbI-MlrQftVXLhMHw7z8NgtPAE_YkE4VXTxeYjPIQeWt4ItnOTl6M7VZhQLCLEnPEx4IiyrdXdXoKP7iSFYm4F_-cFrwUsvGJqLp8INjS8uZYS3=w1263-h947-s-no?authuser=0)
- In the photo, a "tab" is being pulled by the pliers.
- There may be up to six small tabs on the outside of the PCB.
- Use a set of pliers to gently break the tabs off.
### Step 3: Prepare the PCB for soldering
![enter image description here](https://lh3.googleusercontent.com/pw/AM-JKLW3h7TgW4pMeGjDc47PAWe1dF5GIvrqyLd6GkpU1HptAZluDdueUx8eZc4HpjNfvqAw-LjtBdi1GusgHrs4T-LBn9ZUElRqkYt3IHkLp0g9ObWjxKJO6SQ4DoEwqXNIK3G3FEOwIbTmZI0ATf30cUaD=w788-h585-no?authuser=0)
Prepare the following components:
- Printed circuit board
- PMW-3360 chip
- PMW-3360 optic
The PMW-3360 chip will come in a small piece of foam. Go ahead and remove it now.
### ***STOP! Read the next step fully before continuing.***
### Step 4: Solder PMW-3360 sensor to printed circuit board
![sensor seated in adept board](https://lh3.googleusercontent.com/pw/ADCreHehVrdHsWHFfOsmIu8JmE-wh28OtYddyUY4Ai_P1kpBq-sYIE9LTbAQ48mjD3TmDaXAyEmRp7H81yJ4qvvMoYZn0PnEd8vFci3_DdcdyLwYdTi8HWACSfjMvTryCu3uCKchpxT_am9Lpb4Eu1ZP0KC_=w1038-h775-s-no?authuser=0)
Before soldering:
- **MAKE 👏 SURE 👏 THAT 👏 THE 👏 PMW-3360 👏 IS 👏 ORIENTED 👏 CORRECTLY 👏 BEFORE 👏 YOU 👏 SOLDER 👏 IT!** This is a really easy step to mess up, so *CHECK IT TWICE!*
- See the photo for clarification. Note the orientation of the text on the chip, as well as the pattern of dots on the chip. Also note the "1" on the printed circuit board.
- One warning to double-check the sensor orientation isn't sufficient. Stop what you're doing, right now, and check it. **Seriously.** Be kind to your future self, and save yourself a headache.
- Once you are absolutely sure that you have oriented the PMW-3360 correctly, solder it down.
- The sensor must be flat down as far as it can possibly slide into the holes before soldering. Don't let it "float" while you're soldering the first pin down.
### Step 5: Remove the tab of kapton tape on the PMW-3360
![kapton being removed from sensor](https://lh3.googleusercontent.com/pw/AIL4fc-8G-mQvbF_1cp2btwVxMrvh1B0pSy-Fc7e26FWPlJmn4vczL_8a6-QBU6ESES4qihVTvNiYm30sgrUXQclvKBQ9LEvCI0od_DjCHe0KzN82qG61yzgV2os908o8oz7CyDKFB-lFjRNfQUs2mo5zutR=w1033-h775-s-no?authuser=0)
- There are two small tabs of orange tape covering the sensors main holes. Remove them now.
- Try to do this in a dust-free environment.
- Check your solder joints during this step to ensure that they are good.
### Step 6: Attach the optic to the PMW-3360
![optic attached](https://lh3.googleusercontent.com/pw/AIL4fc8euxSp-rxmJew4_Bqsws26bLEEAvLh3dyAlh4n9AWyYdr_heKJ1EHEcAhnnGyrQ1pZIU575Sd6CubS9Ri5Yshdc8IwCY3NUXgnC3_Zsu--UJ0ttD3M0VN5j3fRkgCXmNdmXNahQhM1U5Cb0XLNJAIa=w1033-h775-s-no?authuser=0)
- Orient the optic correctly before insertion. It should **NOT** require any force to insert fully; if it does, remove it and check the orientation before trying again.
### Step 7: Place the PCB into the Base
![pcb in base](https://lh3.googleusercontent.com/pw/ADCreHe3900iYyddGPdg8QBqBLne3iffu9g2zxRoJel0syzkDh40PlmCGBhwWDQffKe95EDzeMe1By_y34D4w6RH6OJqY03_oabp4YgkLbw0Rzo4rBqAMR0TR4eryGyk5Kb11soTpq02rol7bwMiqeknpIV_=w1033-h775-s-no?authuser=0)
### Step 8: Place the Sensor Cap on the PCB
![sensor cap on optic](https://lh3.googleusercontent.com/pw/ADCreHeyaHidkp5tdhs2B2VSzjPZuK7h13U4rjR06DhwL8oOTjdEYHHFmu_qX7fBg9xMmduOM__pDwmDrxgfpqFsL7_snviY2XoWrA5SKRp4ux_bYwSGHsbyYtKis1TgWR0vKfPwiAfALeEEB-wjoNNsWVww=w1033-h775-s-no?authuser=0)
- The Sensor Cap doesn't snap onto the PMW-3360 optic. It "floats" on top of the optic for now. Once fully assembled, the Sensor Cap will be securely held down.
- The position of the Sensor Cap doesn't precisely matter for the moment. Just try to get it roughly centered on the optic.
### Step 9: Place the Top onto the Base
![top placed](https://lh3.googleusercontent.com/pw/AIL4fc_EQRIgonn-6qqwASgfX-E2CL5mis4GArH4WeHOLyyr2cJFlKm2lOMHlquGJQa8TvKmSfYe7aULWrn_fhZ43kTjftY9IfzSpCQt6MBi0ku9eH_pyBy-SwqUeKvpBJspaf2zA5mBB_ChBrbo_lr0RWKQ=w1033-h775-s-no?authuser=0)
- If necessary, adjust the position of the Sensor Cap as you're lowering the Top onto the Base.
### Step 10: Screw the Base into the Top
![screws being drive into bottom](https://lh3.googleusercontent.com/pw/AIL4fc9Z5X1b7N9FT5oQeCQG5j5ItdGgg55qI5fjF87RnUjwaUGx_Ijgw6UlwNRC46gmqmnXdT26Cm-n6W-Z1Va8gYGIWzH1oOKrTD7P0ebvwt_lhH6QehKJkve643MZQobipO6AMt6u0rU1-7u2h-URjyoj=w1033-h775-s-no?authuser=0)
- Go slowly as you drive screws during this step. When you feel significant resistance, **stop**.
### Step 11: Prepare bearing press jig
![](https://lh3.googleusercontent.com/pw/ACtC-3fcHifwU-lceEx1MLBdimwCm6YiIihikVyH3o47rS98Kh0aqGivpEWOL1eh6f2ibLkXw1d3fMRY59Sdsr3q6CPVXu1lPp6L0VYicMQjhEkzmbeZhL7hxrkcK6QJq7s_bKvyd2hAVz7fV529o8yORZbG=s969-no?authuser=0)
Prepare the following components:
- Bearing press jig
- 3x roller bearing
- 3x roller bearing dowel
### Step 12: Insert roller bearing and roller bearing dowel into bearing
![press jig ](https://lh3.googleusercontent.com/pw/ACtC-3fRT6fulgpn47hSmfqh7kCG2iNbNzv_x9CD6Zf1nxVRncDQu5ytk1cDuZFMIYnj_wwY0HwsVe3UukCv6-x9x2GiOXHWvwtCeBj57Src-WgTk7csrvDrtiUCFy6ahzs6LfD9mK1mJ34lM7AamE3TEte2=s969-no?authuser=0)
### Step 13: Press the bearing press jig together
![](https://lh3.googleusercontent.com/pw/ACtC-3d8_AnAnkjIbIy7z6Q8JS7EZJ8dG0vs0KRHT8hP5Rz-Dxz9qb992tmbLi10SfHgHt7-vNjDeKbpwyhoTiD8J3Tb9qNSTWhlCfKPTFQv-HdQ2HCkcNNwnsLWk5u_mlPgqrjlei9TVceGlfCAmZrfqRcK=s969-no?authuser=0)
This may require a surprising amount of force. Try your best not to bend the roller bearing dowel, but if you do, there should be spares with your kit parts.
### Step 14: Remove bearing from bearing press jig and repeat
![](https://lh3.googleusercontent.com/tDT3xaB105S_s87Qs_729WFTWj3YVGqZBMyM6iDCvnXjb93gdMC2k8QVjuNm4xRo3OSPbs94wE8G5tSKz1lqxZZ5-lh6UbCnuZe-MK3Kw9_pmYj7oO-aeVz_lP5aVHtzvQfxXNqiQHqFckddRPZ7VWgzCURwY6DpRRASEitkvFmKcn7hbTt7kUHNXZXzxy1Q85U6vun5VZ54P84xDU0AASsqPj1Sfo1P1E83_K9xhSASliFd4qUPL03XtejmRMNGbASAVO8zUBVn6qWFMMgayJRpsnYq225TEktqEpgv4raeZYyNVhL2YepfmQtKoReyFExeRNz5oGlZ_1_iae8KhKnmK5ZHMyTMw_sNZxUyghzEZFbSMm4WZmmP96-XFdSv8IPMjv1CdUFhDpP6b1d8i_jpPMLMG0aFzMoRkyX_rh_DVdpG-CoM8lZlMsRwT2vy5H_Mrju9At7a2Vn-8OcLs9hELAUmqgOrlJqwhCLgJIHXSz_XuLG6RlBsJFUvVIGreR_8YOS84lU0DatIqockhYvJ9leT-xbO6w4AAdo6da0DMW818BTXIWRd3CkjlZjSsOjymYaTJSu6U-doglnrrqr51DS-OgIfZyq91sJucVUwqT3Ow5oQNEz3bMi55IMBPmDCaZGBjtPXv2GHKi1JS3S3DLBxBqjAz4_rcqw8JLPRsrGSZZjimy4oNaNOUklme6bmEeaBL7sQ3AkBsnBNFKKWD2uyHxDNFZuQxT66FmiCf3M=w1454-h969-no)
At the end, all of your bearings should look like this.
### Step 15: Insert roller bearings into the Top
![](https://lh3.googleusercontent.com/XnP0djOr1WwefBp4rDly1YdNyW2AQhd-coKtscZKv4xwLYQmJh_O-Yihrh0kl4qVAVJzwqvUfclbO-AARVt4Oj-sKAitXEjXrTa9eQkSTTAPYWJnLc7gkS8j-tN1GtmaKbSNINXwkJ6ZZMrajByS7vWSRSjNuC8hHUd_JKAmnY9irJVoUA94iEWYrB4KBVxBaU0esIEXEof3rUggpv_uvVDYDBlDYpmaFRC0tnzvHJRxh-NW0WDAP2H9yjmCHNOmo04t-DF5EK2o4DYGlYeZ-amr1TsrGEmFdWtrc61bnUenfm0Ulv03gWHOZauP4YzcY2UQReYbF-dNYhlvbFwStHIYuEG4NqCsLKivuc42vBo89eCMaUe34BptrLVSyakLd0pp4gIjZql1-fCpfeGk4Gql2eRTs9QVwKzJsBwZdpzvZLcKFdvOpXAkSpD-GL50yMmYE74fzZa5wMb_8JUfeaLCtKLGSdMXIuDj7CgYarGZHs0hIhD-ACPOcFSUXrhXLrK4qHVwiHV3OXJ99RrEamD6_zqgOKKweBi3jInbRoLBHl9HRzRL9QureF2lYC0jbQuoM6jrkkHSKEcjGtVyIJyOfErP4hwQwMo2PbWC-OmimmXa6t3s9LkQxW-vgFXw4GfPPEDDSHsh99zX4VRnrvDOXaqatlAfMJVqVTLfOBUb8dkteuhFbpbdQH0xvRvradtn3gbNgk3ScUEUsCPk_RUCHkUBFVKLJzOjqXzPIXoa03s=w1454-h969-no)
- Ensure that the bearings are pressed all the way into the case. If the bearings aren't seated all the way, there's a good chance that the ball will become badly scratched.
- Needle nose pliers or some similar tool can be used to ensure that the bearing is fully seated.
### Step 16: Prepare the Friction Pads
![body and friction pads](https://lh3.googleusercontent.com/pw/AIL4fc-ubZ-emcpyggq24CCyxfvzE6jKMQSZNqjEauKzWoBAORulF75JEtY2P1fVX129CNmYUr__yCw6qi1IFuqdWPJJ50RiYD_F4nk2iav3m2EWq4Jetg_4y8wktTatnZUBbUZ4C6wOpHelmsSFh7Pg7Mo5=w1033-h775-s-no?authuser=0)
Prepare the following components:
- Adept body
- 4x Friction Pads
### Step 17: Place Friction Pads on Base
![friction pads installed](https://lh3.googleusercontent.com/pw/AIL4fc9at4wIWQH0lnWBbWhNOsybppvn7eG98WloCl7TqUNH5I_tQ-bprm9cT5iy_3n5FuFSKCx0mAm_nYquFBrcfDctgTbWvzJyrwUsR7CSmoBpacKS9PgiEKsK6sOomAz8rBoMmOIoRpDd91DOEmsc6KsY=w1033-h775-s-no?authuser=0)
- Do your best not to cover the screw holes with the friction pads, as this will make opening the case more difficult in the future.
### Step 18: Insert the ball
![ball in case](https://lh3.googleusercontent.com/pw/AIL4fc_v3rGcrEshrRvIKcmJqjYXqJjULNFlgx8v1j9rOPgi9hJOhmdpvj3_65gIX0UzgcjRaRFv46Wuc2omH5nMzAh9BuDEkIOxerbp7Af1ox5CEu4AnCdRa1AiJhL-20ehFOjU61fuEXblNM5kReyks41h=w1033-h775-s-no?authuser=0)
### Step 19: Peel and stick the logo to the Top
![logo](https://lh3.googleusercontent.com/pw/ADCreHeqkMCpaURFHVMtVUhNOK22PPSPYF6FISdpbE-yzzh9Q6jIFwiIiZZv0gwiuAgsxB0uN9-9JAVcW3NefMnCiTGM7qkrOEKH_z41lAyyqdQlGFyG4BelpG6Vhp7nTvnrsegWuTRYxZRZtTkbxnlJouYU=w1033-h775-s-no?authuser=0)
This isn't strictly necessary, but we think it looks nice.
### Step 20: Verify that the Ploopy Adept Trackball is working correctly
Plug the trackball into your computer. If you move the ball, it should move the cursor.
### Step 21: Spin the ball to break in the bearings
The bearings are a bit scratchy when they're new. To prevent them from jumping around during initial use, spin the ball with some Latin dance vigour for about three minutes. That should be enough to break them in.
The bearings will take about a week to become fully broken-in.
### Step 22: All done!
Congrats, you finished building the Ploopy Adept Trackball!
It's done! Love it, use it, but don't you dare abuse it!
## FAQ
### Some buttons seem "sticky", or are too low, or are permanently clicking. What do I do?
Sometimes, the buttons on the Top need to be adjusted so that the distance between the button and the switch on the PCB are correct. You can do this either when the Top is installed or when it's removed.
The buttons can be adjusted quite far without breaking, but still, **do this slowly**. Don't move the buttons too far at one time.
[A video of how to adjust the Top when the Top is removed is available here.](https://imgur.com/2l5EsTi) This is the recommended route as it has the lowest possibility of damaging the Top.
[A video of how to adjust the Top when the Top is installed is available here.](https://imgur.com/OqEk2X5) This is only recommended if you have the capability of reprinting your own Top in case you break this one.
### I've plugged in the Adept, but none of the buttons are working, and the cursor isn't working. What's wrong?
You have a bad cable.
To expand: many USB-C cables only provide power, and their data wires aren't actually connected. If your computer seems to recognize that a device has been plugged in, but none of the buttons are working and the cursor isn't moving, the problem is almost certainly the cable.
Try using the Adept with a cable that you've verified to work with another device. If that still doesn't solve the problem, send an email to contact@ploopy.co.
### One or more of the rollers seems to be badly stuck. What do I do?
Take a look at this photo:
![enter image description here](https://lh3.googleusercontent.com/pw/AP1GczOIJRNGNC-7HbVE7ZA2MPZsiG4hSKyhmbKv4XpsuvRAk2CiMboLVKeaCeTNRPddO8OWH-iRtkB52kxGKF8wMKMhpHLt3pNnDgPUvK6nHOR0b3FWXNsol70jPqbLwHmJueBo4890GN8FFai9e2QmOg4L=w1263-h947-s-no?authuser=0)
Circled in red, you should notice a small piece of plastic sticking up into the well where the roller bearing sits. This piece of plastic can interrupt the regular movement of the roller bearing, causing it to seize up.
Remove the bearing that's not rolling correctly from the Top and look for this piece of plastic. You should be able to remove it with a pair of tweezers, though you may have to scrape quite hard to get it off.
### The buttons are all working, but the cursor isn't. What's going on?
The sensor likely isn't soldered correctly. Double-check all of your solder connections, touch them up with some flux if you have it, and try again. If it still isn't working, send an email to contact@ploopy.co.

View File

@ -1,13 +0,0 @@
# Home
So, you want to build a Ploopy Adept Trackball, eh? Or, maybe you want to replace some broken parts. Maybe you want to reprogram it. Or maybe you just want to know how it all works. No matter the motivation, this is the place to learn.
**Bought a kit and itching to get it built?** --> Get started by going to the [assembly instructions](assembly-instructions.md).
**Looking to purchase a kit with everything you need to build your own Ploopy Adept?** --> [Check out the Ploopy store](https://ploopy.co/product-category/trackball/adept/).
**Building a Ploopy Adept Trackball from scratch?** --> Get started by going to [Appendix A: Printed circuit boards](appendices/pcbs.md).
---
*Copyright (C) 2023 Ploopy Corporation. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".*

View File

@ -1,445 +0,0 @@
# GNU Free Documentation License
Version 1.3, 3 November 2008
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation,
Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
#### 0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals; it
can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
#### 1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below, refers
to any such manual or work. Any member of the public is a licensee,
and is addressed as "you". You accept the license if you copy, modify
or distribute the work in a way requiring permission under copyright
law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may be
at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
The "publisher" means any person or entity that distributes copies of
the Document to the public.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
#### 2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no
other conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
#### 3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify you
as the publisher of these copies. The front cover must present the
full title with all words of the title equally prominent and visible.
You may add other material on the covers in addition. Copying with
changes limited to the covers, as long as they preserve the title of
the Document and satisfy these conditions, can be treated as verbatim
copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to
give them a chance to provide you with an updated version of the
Document.
#### 4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
- A. Use in the Title Page (and on the covers, if any) a title
distinct from that of the Document, and from those of previous
versions (which should, if there were any, be listed in the
History section of the Document). You may use the same title as a
previous version if the original publisher of that version
gives permission.
- B. List on the Title Page, as authors, one or more persons or
entities responsible for authorship of the modifications in the
Modified Version, together with at least five of the principal
authors of the Document (all of its principal authors, if it has
fewer than five), unless they release you from this requirement.
- C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
- D. Preserve all the copyright notices of the Document.
- E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
- F. Include, immediately after the copyright notices, a license
notice giving the public permission to use the Modified Version
under the terms of this License, in the form shown in the
Addendum below.
- G. Preserve in that license notice the full lists of Invariant
Sections and required Cover Texts given in the Document's
license notice.
- H. Include an unaltered copy of this License.
- I. Preserve the section Entitled "History", Preserve its Title,
and add to it an item stating at least the title, year, new
authors, and publisher of the Modified Version as given on the
Title Page. If there is no section Entitled "History" in the
Document, create one stating the title, year, authors, and
publisher of the Document as given on its Title Page, then add an
item describing the Modified Version as stated in the
previous sentence.
- J. Preserve the network location, if any, given in the Document
for public access to a Transparent copy of the Document, and
likewise the network locations given in the Document for previous
versions it was based on. These may be placed in the "History"
section. You may omit a network location for a work that was
published at least four years before the Document itself, or if
the original publisher of the version it refers to
gives permission.
- K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
- L. Preserve all the Invariant Sections of the Document, unaltered
in their text and in their titles. Section numbers or the
equivalent are not considered part of the section titles.
- M. Delete any section Entitled "Endorsements". Such a section may
not be included in the Modified Version.
- N. Do not retitle any existing section to be Entitled
"Endorsements" or to conflict in title with any Invariant Section.
- O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties—for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
#### 5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
#### 6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other
documents released under this License, and replace the individual
copies of this License in the various documents with a single copy
that is included in the collection, provided that you follow the rules
of this License for verbatim copying of each of the documents in all
other respects.
You may extract a single document from such a collection, and
distribute it individually under this License, provided you insert a
copy of this License into the extracted document, and follow this
License in all other respects regarding verbatim copying of that
document.
#### 7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
#### 8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
#### 9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document
except as expressly provided under this License. Any attempt otherwise
to copy, modify, sublicense, or distribute it is void, and will
automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does
not give you any rights to use it.
#### 10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the
GNU Free Documentation License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns. See
<https://www.gnu.org/licenses/>.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation. If the Document specifies
that a proxy can decide which future versions of this License can be
used, that proxy's public statement of acceptance of a version
permanently authorizes you to choose that version for the Document.
#### 11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
provides prominent facilities for anybody to edit those works. A
public wiki that anybody can edit is an example of such a server. A
"Massive Multiauthor Collaboration" (or "MMC") contained in the site
means any set of copyrightable works thus published on the MMC site.
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
license published by Creative Commons Corporation, a not-for-profit
corporation with a principal place of business in San Francisco,
California, as well as future copyleft versions of that license
published by that same organization.
"Incorporate" means to publish or republish a Document, in whole or in
part, as part of another Document.
An MMC is "eligible for relicensing" if it is licensed under this
License, and if all works that were first published under this License
somewhere other than this MMC, and subsequently incorporated in whole
or in part into the MMC, (1) had no cover texts or invariant sections,
and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.
### ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (C) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with … Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.

View File

@ -1,13 +0,0 @@
## What is "drag_scroll_click_and_hold" vs. "drag_scroll_toggle"?
Each directory contains a type of firmware. For "click_and_hold", the drag scroll functionality works by clicking and holding the drag scroll button.
For "toggle", the drag scroll functionality works by clicking to turn on the drag scroll, and clicking again to turn it off.
## What is "semaphore_X"?
That is a notation of how sensitive the drag scroll is.
"semaphore_8" is the **least sensitive** drag scroll. That means, you'll have to move the ball more to scroll.
"semaphore_0" is the **most sensitive** drag scroll. That means, you'll have to move the ball less to scroll.

View File

@ -1,703 +0,0 @@
[DesignatorManager]
LogicalDesignator0=FB1
LogicalPartID0=1
DocumentName0=Connectors.SchDoc
ChannelName0=USB
UniqueID0=\BUHOUAJX\ADTZCRYT
PhysicalDesignator0=USB.FB.1
PhysicalDesignatorLocked0=0
LogicalDesignator1=J3
LogicalPartID1=1
DocumentName1=Connectors.SchDoc
ChannelName1=USB
UniqueID1=\BUHOUAJX\IQXFZBUZ
PhysicalDesignator1=USB.J.3
PhysicalDesignatorLocked1=0
LogicalDesignator2=FB3
LogicalPartID2=1
DocumentName2=Connectors.SchDoc
ChannelName2=USB
UniqueID2=\BUHOUAJX\JYVRHTWL
PhysicalDesignator2=USB.FB.3
PhysicalDesignatorLocked2=0
LogicalDesignator3=R14
LogicalPartID3=1
DocumentName3=Connectors.SchDoc
ChannelName3=USB
UniqueID3=\BUHOUAJX\LROFNDMG
PhysicalDesignator3=USB.R.14
PhysicalDesignatorLocked3=0
LogicalDesignator4=Z1
LogicalPartID4=1
DocumentName4=Connectors.SchDoc
ChannelName4=USB
UniqueID4=\BUHOUAJX\MHNMVSHF
PhysicalDesignator4=USB.Z.1
PhysicalDesignatorLocked4=0
LogicalDesignator5=R13
LogicalPartID5=1
DocumentName5=Connectors.SchDoc
ChannelName5=USB
UniqueID5=\BUHOUAJX\PAHZCWJS
PhysicalDesignator5=USB.R.13
PhysicalDesignatorLocked5=0
LogicalDesignator6=R12
LogicalPartID6=1
DocumentName6=Connectors.SchDoc
ChannelName6=USB
UniqueID6=\BUHOUAJX\PBGBQRSQ
PhysicalDesignator6=USB.R.12
PhysicalDesignatorLocked6=0
LogicalDesignator7=R7
LogicalPartID7=1
DocumentName7=Connectors.SchDoc
ChannelName7=USB
UniqueID7=\BUHOUAJX\RPZKDCHQ
PhysicalDesignator7=USB.R.7
PhysicalDesignatorLocked7=0
LogicalDesignator8=R15
LogicalPartID8=1
DocumentName8=Connectors.SchDoc
ChannelName8=USB
UniqueID8=\BUHOUAJX\SCQKYIQA
PhysicalDesignator8=USB.R.15
PhysicalDesignatorLocked8=0
LogicalDesignator9=R6
LogicalPartID9=1
DocumentName9=Connectors.SchDoc
ChannelName9=USB
UniqueID9=\BUHOUAJX\STHGMNKH
PhysicalDesignator9=USB.R.6
PhysicalDesignatorLocked9=0
LogicalDesignator10=FB2
LogicalPartID10=1
DocumentName10=Connectors.SchDoc
ChannelName10=USB
UniqueID10=\BUHOUAJX\UBEFDYPN
PhysicalDesignator10=USB.FB.2
PhysicalDesignatorLocked10=0
LogicalDesignator11=R9
LogicalPartID11=1
DocumentName11=LEDs.SchDoc
ChannelName11=LED
UniqueID11=\CZCSAXXD\CKPLPJLT
PhysicalDesignator11=LED.R.9
PhysicalDesignatorLocked11=0
LogicalDesignator12=C20
LogicalPartID12=1
DocumentName12=LEDs.SchDoc
ChannelName12=LED
UniqueID12=\CZCSAXXD\KWWCMSIR
PhysicalDesignator12=LED.C.20
PhysicalDesignatorLocked12=0
LogicalDesignator13=D3
LogicalPartID13=1
DocumentName13=LEDs.SchDoc
ChannelName13=LED
UniqueID13=\CZCSAXXD\RAISPFJW
PhysicalDesignator13=LED.D.3
PhysicalDesignatorLocked13=0
LogicalDesignator14=R16
LogicalPartID14=1
DocumentName14=LEDs.SchDoc
ChannelName14=LED
UniqueID14=\CZCSAXXD\RPBQVFVI
PhysicalDesignator14=LED.R.16
PhysicalDesignatorLocked14=0
LogicalDesignator15=C23
LogicalPartID15=1
DocumentName15=LEDs.SchDoc
ChannelName15=LED
UniqueID15=\CZCSAXXD\VFTDASFT
PhysicalDesignator15=LED.C.23
PhysicalDesignatorLocked15=0
LogicalDesignator16=D1
LogicalPartID16=1
DocumentName16=LEDs.SchDoc
ChannelName16=LED
UniqueID16=\CZCSAXXD\WDATZMUA
PhysicalDesignator16=LED.D.1
PhysicalDesignatorLocked16=0
LogicalDesignator17=C1
LogicalPartID17=1
DocumentName17=MCU.SchDoc
ChannelName17=MCU
UniqueID17=\KPFJTNEE\BQLYKTKQ
PhysicalDesignator17=MCU.C.1
PhysicalDesignatorLocked17=0
LogicalDesignator18=R8
LogicalPartID18=1
DocumentName18=MCU.SchDoc
ChannelName18=MCU
UniqueID18=\KPFJTNEE\BVDXXQCE
PhysicalDesignator18=MCU.R.8
PhysicalDesignatorLocked18=0
LogicalDesignator19=C21
LogicalPartID19=1
DocumentName19=MCU.SchDoc
ChannelName19=MCU
UniqueID19=\KPFJTNEE\DSNXEWES
PhysicalDesignator19=MCU.C.21
PhysicalDesignatorLocked19=0
LogicalDesignator20=R11
LogicalPartID20=1
DocumentName20=MCU.SchDoc
ChannelName20=MCU
UniqueID20=\KPFJTNEE\FMUTJRNM
PhysicalDesignator20=MCU.R.11
PhysicalDesignatorLocked20=0
LogicalDesignator21=R10
LogicalPartID21=1
DocumentName21=MCU.SchDoc
ChannelName21=MCU
UniqueID21=\KPFJTNEE\FUQMBHDX
PhysicalDesignator21=MCU.R.10
PhysicalDesignatorLocked21=0
LogicalDesignator22=C5
LogicalPartID22=1
DocumentName22=MCU.SchDoc
ChannelName22=MCU
UniqueID22=\KPFJTNEE\HJDGCWIY
PhysicalDesignator22=MCU.C.5
PhysicalDesignatorLocked22=0
LogicalDesignator23=C8
LogicalPartID23=1
DocumentName23=MCU.SchDoc
ChannelName23=MCU
UniqueID23=\KPFJTNEE\HYSKPSWL
PhysicalDesignator23=MCU.C.8
PhysicalDesignatorLocked23=0
LogicalDesignator24=C9
LogicalPartID24=1
DocumentName24=MCU.SchDoc
ChannelName24=MCU
UniqueID24=\KPFJTNEE\IHPNQQFY
PhysicalDesignator24=MCU.C.9
PhysicalDesignatorLocked24=0
LogicalDesignator25=J1
LogicalPartID25=1
DocumentName25=MCU.SchDoc
ChannelName25=MCU
UniqueID25=\KPFJTNEE\IKRJHFZQ
PhysicalDesignator25=MCU.J.1
PhysicalDesignatorLocked25=0
LogicalDesignator26=U5
LogicalPartID26=1
DocumentName26=MCU.SchDoc
ChannelName26=MCU
UniqueID26=\KPFJTNEE\IXGDNEEA
PhysicalDesignator26=MCU.U.5
PhysicalDesignatorLocked26=0
LogicalDesignator27=C7
LogicalPartID27=1
DocumentName27=MCU.SchDoc
ChannelName27=MCU
UniqueID27=\KPFJTNEE\JTFWEYKN
PhysicalDesignator27=MCU.C.7
PhysicalDesignatorLocked27=0
LogicalDesignator28=Y1
LogicalPartID28=1
DocumentName28=MCU.SchDoc
ChannelName28=MCU
UniqueID28=\KPFJTNEE\MRZZVTEO
PhysicalDesignator28=MCU.Y.1
PhysicalDesignatorLocked28=0
LogicalDesignator29=C2
LogicalPartID29=1
DocumentName29=MCU.SchDoc
ChannelName29=MCU
UniqueID29=\KPFJTNEE\NPAOELVK
PhysicalDesignator29=MCU.C.2
PhysicalDesignatorLocked29=0
LogicalDesignator30=C22
LogicalPartID30=1
DocumentName30=MCU.SchDoc
ChannelName30=MCU
UniqueID30=\KPFJTNEE\NVYGHVLB
PhysicalDesignator30=MCU.C.22
PhysicalDesignatorLocked30=0
LogicalDesignator31=R17
LogicalPartID31=1
DocumentName31=MCU.SchDoc
ChannelName31=MCU
UniqueID31=\KPFJTNEE\OFPQZQXN
PhysicalDesignator31=MCU.R.17
PhysicalDesignatorLocked31=0
LogicalDesignator32=TP1
LogicalPartID32=1
DocumentName32=MCU.SchDoc
ChannelName32=MCU
UniqueID32=\KPFJTNEE\PDILDPFF
PhysicalDesignator32=MCU.TP.1
PhysicalDesignatorLocked32=0
LogicalDesignator33=TP3
LogicalPartID33=1
DocumentName33=MCU.SchDoc
ChannelName33=MCU
UniqueID33=\KPFJTNEE\SCALGMQQ
PhysicalDesignator33=MCU.TP.3
PhysicalDesignatorLocked33=0
LogicalDesignator34=TP2
LogicalPartID34=1
DocumentName34=MCU.SchDoc
ChannelName34=MCU
UniqueID34=\KPFJTNEE\TFVWUFFG
PhysicalDesignator34=MCU.TP.2
PhysicalDesignatorLocked34=0
LogicalDesignator35=R2
LogicalPartID35=1
DocumentName35=MCU.SchDoc
ChannelName35=MCU
UniqueID35=\KPFJTNEE\TTSXWHZY
PhysicalDesignator35=MCU.R.2
PhysicalDesignatorLocked35=0
LogicalDesignator36=C19
LogicalPartID36=1
DocumentName36=MCU.SchDoc
ChannelName36=MCU
UniqueID36=\KPFJTNEE\TYQEBNUF
PhysicalDesignator36=MCU.C.19
PhysicalDesignatorLocked36=0
LogicalDesignator37=U1
LogicalPartID37=1
DocumentName37=MCU.SchDoc
ChannelName37=MCU
UniqueID37=\KPFJTNEE\WXJVFHAO
PhysicalDesignator37=MCU.U.1
PhysicalDesignatorLocked37=0
LogicalDesignator38=C24
LogicalPartID38=1
DocumentName38=MCU.SchDoc
ChannelName38=MCU
UniqueID38=\KPFJTNEE\XAOUNXDB
PhysicalDesignator38=MCU.C.24
PhysicalDesignatorLocked38=0
LogicalDesignator39=C3
LogicalPartID39=1
DocumentName39=MCU.SchDoc
ChannelName39=MCU
UniqueID39=\KPFJTNEE\YHQVGJJM
PhysicalDesignator39=MCU.C.3
PhysicalDesignatorLocked39=0
LogicalDesignator40=C6
LogicalPartID40=1
DocumentName40=MCU.SchDoc
ChannelName40=MCU
UniqueID40=\KPFJTNEE\YTAVCWNE
PhysicalDesignator40=MCU.C.6
PhysicalDesignatorLocked40=0
LogicalDesignator41=C4
LogicalPartID41=1
DocumentName41=MCU.SchDoc
ChannelName41=MCU
UniqueID41=\KPFJTNEE\ZGBYJFYI
PhysicalDesignator41=MCU.C.4
PhysicalDesignatorLocked41=0
LogicalDesignator42=R1
LogicalPartID42=1
DocumentName42=MCU.SchDoc
ChannelName42=MCU
UniqueID42=\KPFJTNEE\ZJTBYXEA
PhysicalDesignator42=MCU.R.1
PhysicalDesignatorLocked42=0
LogicalDesignator43=SP25
LogicalPartID43=1
DocumentName43=Mechanical.SchDoc
ChannelName43=MCH
UniqueID43=\NDZGVAIK\AVICHPDL
PhysicalDesignator43=MCH.SP.25
PhysicalDesignatorLocked43=0
LogicalDesignator44=SP15
LogicalPartID44=1
DocumentName44=Mechanical.SchDoc
ChannelName44=MCH
UniqueID44=\NDZGVAIK\BFVKZHHJ
PhysicalDesignator44=MCH.SP.15
PhysicalDesignatorLocked44=0
LogicalDesignator45=SP28
LogicalPartID45=1
DocumentName45=Mechanical.SchDoc
ChannelName45=MCH
UniqueID45=\NDZGVAIK\BIISLKGE
PhysicalDesignator45=MCH.SP.28
PhysicalDesignatorLocked45=0
LogicalDesignator46=SP24
LogicalPartID46=1
DocumentName46=Mechanical.SchDoc
ChannelName46=MCH
UniqueID46=\NDZGVAIK\DDQARXEF
PhysicalDesignator46=MCH.SP.24
PhysicalDesignatorLocked46=0
LogicalDesignator47=LOGO2
LogicalPartID47=1
DocumentName47=Mechanical.SchDoc
ChannelName47=MCH
UniqueID47=\NDZGVAIK\ENPBNFOP
PhysicalDesignator47=MCH.LOGO.2
PhysicalDesignatorLocked47=0
LogicalDesignator48=SP10
LogicalPartID48=1
DocumentName48=Mechanical.SchDoc
ChannelName48=MCH
UniqueID48=\NDZGVAIK\FKWTUBKU
PhysicalDesignator48=MCH.SP.10
PhysicalDesignatorLocked48=0
LogicalDesignator49=SP21
LogicalPartID49=1
DocumentName49=Mechanical.SchDoc
ChannelName49=MCH
UniqueID49=\NDZGVAIK\FLUSARHN
PhysicalDesignator49=MCH.SP.21
PhysicalDesignatorLocked49=0
LogicalDesignator50=SP16
LogicalPartID50=1
DocumentName50=Mechanical.SchDoc
ChannelName50=MCH
UniqueID50=\NDZGVAIK\GNQUHWYL
PhysicalDesignator50=MCH.SP.16
PhysicalDesignatorLocked50=0
LogicalDesignator51=SP27
LogicalPartID51=1
DocumentName51=Mechanical.SchDoc
ChannelName51=MCH
UniqueID51=\NDZGVAIK\HPTVXXGH
PhysicalDesignator51=MCH.SP.27
PhysicalDesignatorLocked51=0
LogicalDesignator52=SP20
LogicalPartID52=1
DocumentName52=Mechanical.SchDoc
ChannelName52=MCH
UniqueID52=\NDZGVAIK\IBTNRCCL
PhysicalDesignator52=MCH.SP.20
PhysicalDesignatorLocked52=0
LogicalDesignator53=SP6
LogicalPartID53=1
DocumentName53=Mechanical.SchDoc
ChannelName53=MCH
UniqueID53=\NDZGVAIK\IFGOPBUK
PhysicalDesignator53=MCH.SP.6
PhysicalDesignatorLocked53=0
LogicalDesignator54=SP1
LogicalPartID54=1
DocumentName54=Mechanical.SchDoc
ChannelName54=MCH
UniqueID54=\NDZGVAIK\INZVSJTS
PhysicalDesignator54=MCH.SP.1
PhysicalDesignatorLocked54=0
LogicalDesignator55=FID2
LogicalPartID55=1
DocumentName55=Mechanical.SchDoc
ChannelName55=MCH
UniqueID55=\NDZGVAIK\KSLNYSAO
PhysicalDesignator55=MCH.FID.2
PhysicalDesignatorLocked55=0
LogicalDesignator56=SP3
LogicalPartID56=1
DocumentName56=Mechanical.SchDoc
ChannelName56=MCH
UniqueID56=\NDZGVAIK\LIUKLTIK
PhysicalDesignator56=MCH.SP.3
PhysicalDesignatorLocked56=0
LogicalDesignator57=SP8
LogicalPartID57=1
DocumentName57=Mechanical.SchDoc
ChannelName57=MCH
UniqueID57=\NDZGVAIK\LJZGWUXO
PhysicalDesignator57=MCH.SP.8
PhysicalDesignatorLocked57=0
LogicalDesignator58=SP22
LogicalPartID58=1
DocumentName58=Mechanical.SchDoc
ChannelName58=MCH
UniqueID58=\NDZGVAIK\LYEACBZV
PhysicalDesignator58=MCH.SP.22
PhysicalDesignatorLocked58=0
LogicalDesignator59=SP14
LogicalPartID59=1
DocumentName59=Mechanical.SchDoc
ChannelName59=MCH
UniqueID59=\NDZGVAIK\MHHAFIHB
PhysicalDesignator59=MCH.SP.14
PhysicalDesignatorLocked59=0
LogicalDesignator60=SP23
LogicalPartID60=1
DocumentName60=Mechanical.SchDoc
ChannelName60=MCH
UniqueID60=\NDZGVAIK\RRWVFTRA
PhysicalDesignator60=MCH.SP.23
PhysicalDesignatorLocked60=0
LogicalDesignator61=SP17
LogicalPartID61=1
DocumentName61=Mechanical.SchDoc
ChannelName61=MCH
UniqueID61=\NDZGVAIK\SBSFUFPD
PhysicalDesignator61=MCH.SP.17
PhysicalDesignatorLocked61=0
LogicalDesignator62=SP7
LogicalPartID62=1
DocumentName62=Mechanical.SchDoc
ChannelName62=MCH
UniqueID62=\NDZGVAIK\SDHBQBAQ
PhysicalDesignator62=MCH.SP.7
PhysicalDesignatorLocked62=0
LogicalDesignator63=SP9
LogicalPartID63=1
DocumentName63=Mechanical.SchDoc
ChannelName63=MCH
UniqueID63=\NDZGVAIK\TMPFZNKR
PhysicalDesignator63=MCH.SP.9
PhysicalDesignatorLocked63=0
LogicalDesignator64=SP2
LogicalPartID64=1
DocumentName64=Mechanical.SchDoc
ChannelName64=MCH
UniqueID64=\NDZGVAIK\TTJIHRXT
PhysicalDesignator64=MCH.SP.2
PhysicalDesignatorLocked64=0
LogicalDesignator65=SP18
LogicalPartID65=1
DocumentName65=Mechanical.SchDoc
ChannelName65=MCH
UniqueID65=\NDZGVAIK\UAEXLLRB
PhysicalDesignator65=MCH.SP.18
PhysicalDesignatorLocked65=0
LogicalDesignator66=SP19
LogicalPartID66=1
DocumentName66=Mechanical.SchDoc
ChannelName66=MCH
UniqueID66=\NDZGVAIK\VBMSLOWX
PhysicalDesignator66=MCH.SP.19
PhysicalDesignatorLocked66=0
LogicalDesignator67=SP4
LogicalPartID67=1
DocumentName67=Mechanical.SchDoc
ChannelName67=MCH
UniqueID67=\NDZGVAIK\VEBBLAEB
PhysicalDesignator67=MCH.SP.4
PhysicalDesignatorLocked67=0
LogicalDesignator68=SP11
LogicalPartID68=1
DocumentName68=Mechanical.SchDoc
ChannelName68=MCH
UniqueID68=\NDZGVAIK\WYKRGGND
PhysicalDesignator68=MCH.SP.11
PhysicalDesignatorLocked68=0
LogicalDesignator69=FID1
LogicalPartID69=1
DocumentName69=Mechanical.SchDoc
ChannelName69=MCH
UniqueID69=\NDZGVAIK\XWPAMOLE
PhysicalDesignator69=MCH.FID.1
PhysicalDesignatorLocked69=0
LogicalDesignator70=LOGO1
LogicalPartID70=1
DocumentName70=Mechanical.SchDoc
ChannelName70=MCH
UniqueID70=\NDZGVAIK\YOYYDCWU
PhysicalDesignator70=MCH.LOGO.1
PhysicalDesignatorLocked70=0
LogicalDesignator71=SP13
LogicalPartID71=1
DocumentName71=Mechanical.SchDoc
ChannelName71=MCH
UniqueID71=\NDZGVAIK\ZBGPGWHO
PhysicalDesignator71=MCH.SP.13
PhysicalDesignatorLocked71=0
LogicalDesignator72=SP26
LogicalPartID72=1
DocumentName72=Mechanical.SchDoc
ChannelName72=MCH
UniqueID72=\NDZGVAIK\ZDEYHEHB
PhysicalDesignator72=MCH.SP.26
PhysicalDesignatorLocked72=0
LogicalDesignator73=SP5
LogicalPartID73=1
DocumentName73=Mechanical.SchDoc
ChannelName73=MCH
UniqueID73=\NDZGVAIK\ZKSNHGPW
PhysicalDesignator73=MCH.SP.5
PhysicalDesignatorLocked73=0
LogicalDesignator74=SP12
LogicalPartID74=1
DocumentName74=Mechanical.SchDoc
ChannelName74=MCH
UniqueID74=\NDZGVAIK\ZMSRZENN
PhysicalDesignator74=MCH.SP.12
PhysicalDesignatorLocked74=0
LogicalDesignator75=R5
LogicalPartID75=1
DocumentName75=MouseSensor.SchDoc
ChannelName75=MOS
UniqueID75=\ROEMJLXA\ENFZHOAZ
PhysicalDesignator75=MOS.R.5
PhysicalDesignatorLocked75=0
LogicalDesignator76=U2
LogicalPartID76=1
DocumentName76=MouseSensor.SchDoc
ChannelName76=MOS
UniqueID76=\ROEMJLXA\HFEWNQSU
PhysicalDesignator76=MOS.U.2
PhysicalDesignatorLocked76=0
LogicalDesignator77=R4
LogicalPartID77=1
DocumentName77=MouseSensor.SchDoc
ChannelName77=MOS
UniqueID77=\ROEMJLXA\ICNLIYTT
PhysicalDesignator77=MOS.R.4
PhysicalDesignatorLocked77=0
LogicalDesignator78=R3
LogicalPartID78=1
DocumentName78=MouseSensor.SchDoc
ChannelName78=MOS
UniqueID78=\ROEMJLXA\JJIVMNRR
PhysicalDesignator78=MOS.R.3
PhysicalDesignatorLocked78=0
LogicalDesignator79=C11
LogicalPartID79=1
DocumentName79=MouseSensor.SchDoc
ChannelName79=MOS
UniqueID79=\ROEMJLXA\TWPPBRIS
PhysicalDesignator79=MOS.C.11
PhysicalDesignatorLocked79=0
LogicalDesignator80=C10
LogicalPartID80=1
DocumentName80=MouseSensor.SchDoc
ChannelName80=MOS
UniqueID80=\ROEMJLXA\VJPNHDND
PhysicalDesignator80=MOS.C.10
PhysicalDesignatorLocked80=0
LogicalDesignator81=U3
LogicalPartID81=1
DocumentName81=Regulators.SchDoc
ChannelName81=REG
UniqueID81=\RXDORYXU\CBXRONVV
PhysicalDesignator81=REG.U.3
PhysicalDesignatorLocked81=0
LogicalDesignator82=C12
LogicalPartID82=1
DocumentName82=Regulators.SchDoc
ChannelName82=REG
UniqueID82=\RXDORYXU\KKMFXSHM
PhysicalDesignator82=REG.C.12
PhysicalDesignatorLocked82=0
LogicalDesignator83=C18
LogicalPartID83=1
DocumentName83=Regulators.SchDoc
ChannelName83=REG
UniqueID83=\RXDORYXU\MOTSNROT
PhysicalDesignator83=REG.C.18
PhysicalDesignatorLocked83=0
LogicalDesignator84=U4
LogicalPartID84=1
DocumentName84=Regulators.SchDoc
ChannelName84=REG
UniqueID84=\RXDORYXU\NVKEUAQZ
PhysicalDesignator84=REG.U.4
PhysicalDesignatorLocked84=0
LogicalDesignator85=C16
LogicalPartID85=1
DocumentName85=Regulators.SchDoc
ChannelName85=REG
UniqueID85=\RXDORYXU\NZHGOTXS
PhysicalDesignator85=REG.C.16
PhysicalDesignatorLocked85=0
LogicalDesignator86=C15
LogicalPartID86=1
DocumentName86=Regulators.SchDoc
ChannelName86=REG
UniqueID86=\RXDORYXU\OKJKRDGI
PhysicalDesignator86=REG.C.15
PhysicalDesignatorLocked86=0
LogicalDesignator87=C17
LogicalPartID87=1
DocumentName87=Regulators.SchDoc
ChannelName87=REG
UniqueID87=\RXDORYXU\TXBZUARI
PhysicalDesignator87=REG.C.17
PhysicalDesignatorLocked87=0
LogicalDesignator88=C14
LogicalPartID88=1
DocumentName88=Regulators.SchDoc
ChannelName88=REG
UniqueID88=\RXDORYXU\WJOPFPMV
PhysicalDesignator88=REG.C.14
PhysicalDesignatorLocked88=0
LogicalDesignator89=C13
LogicalPartID89=1
DocumentName89=Regulators.SchDoc
ChannelName89=REG
UniqueID89=\RXDORYXU\YVQQFEPF
PhysicalDesignator89=REG.C.13
PhysicalDesignatorLocked89=0
LogicalDesignator90=SW2
LogicalPartID90=1
DocumentName90=Buttons.SchDoc
ChannelName90=BTN
UniqueID90=\TZTSNUYN\CWCXPLAV
PhysicalDesignator90=LBS.SW.2
PhysicalDesignatorLocked90=0
LogicalDesignator91=SW1
LogicalPartID91=1
DocumentName91=Buttons.SchDoc
ChannelName91=BTN
UniqueID91=\TZTSNUYN\DLPLGRTH
PhysicalDesignator91=LBS.SW.1
PhysicalDesignatorLocked91=0
LogicalDesignator92=SW4
LogicalPartID92=1
DocumentName92=Buttons.SchDoc
ChannelName92=BTN
UniqueID92=\TZTSNUYN\DTNKUMOP
PhysicalDesignator92=BTN.SW.4
PhysicalDesignatorLocked92=0
LogicalDesignator93=SW3
LogicalPartID93=1
DocumentName93=Buttons.SchDoc
ChannelName93=BTN
UniqueID93=\TZTSNUYN\GHOCZVFR
PhysicalDesignator93=BTN.SW.3
PhysicalDesignatorLocked93=0
LogicalDesignator94=SW6
LogicalPartID94=1
DocumentName94=Buttons.SchDoc
ChannelName94=BTN
UniqueID94=\TZTSNUYN\KZLKUEKP
PhysicalDesignator94=BTN.SW.6
PhysicalDesignatorLocked94=0
LogicalDesignator95=SW8
LogicalPartID95=1
DocumentName95=Buttons.SchDoc
ChannelName95=BTN
UniqueID95=\TZTSNUYN\RECPSKBK
PhysicalDesignator95=BTN.SW.8
PhysicalDesignatorLocked95=0
[SheetNumberManager]
SheetNumberOrder=Sheets Hierarchical Structure - Depth First
SheetNumberMethod=Increasing
DocumentName0=Buttons.SchDoc
UniqueIDPath0=\TZTSNUYN
SheetNumber0=2
DocumentName1=Connectors.SchDoc
UniqueIDPath1=\BUHOUAJX
SheetNumber1=8
DocumentName2=LEDs.SchDoc
UniqueIDPath2=\CZCSAXXD
SheetNumber2=3
DocumentName3=Madromys.SchDoc
UniqueIDPath3=
SheetNumber3=1
DocumentName4=MCU.SchDoc
UniqueIDPath4=\KPFJTNEE
SheetNumber4=5
DocumentName5=Mechanical.SchDoc
UniqueIDPath5=\NDZGVAIK
SheetNumber5=4
DocumentName6=MouseSensor.SchDoc
UniqueIDPath6=\ROEMJLXA
SheetNumber6=6
DocumentName7=Regulators.SchDoc
UniqueIDPath7=\RXDORYXU
SheetNumber7=7

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
Record=TopLevelDocument|FileName=Madromys.SchDoc|SheetNumber=1
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=BTN|SchDesignator=BTN|FileName=Buttons.SchDoc|SheetNumber=2|SymbolType=Normal|RawFileName=Buttons.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=LED|SchDesignator=LED|FileName=LEDs.SchDoc|SheetNumber=4|SymbolType=Normal|RawFileName=LEDs.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=MCH|SchDesignator=MCH|FileName=Mechanical.SchDoc|SheetNumber=6|SymbolType=Normal|RawFileName=Mechanical.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=MCU|SchDesignator=MCU|FileName=MCU.SchDoc|SheetNumber=5|SymbolType=Normal|RawFileName=MCU.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=MOS|SchDesignator=MOS|FileName=MouseSensor.SchDoc|SheetNumber=7|SymbolType=Normal|RawFileName=MouseSensor.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=REG|SchDesignator=REG|FileName=Regulators.SchDoc|SheetNumber=8|SymbolType=Normal|RawFileName=Regulators.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=
Record=SheetSymbol|SourceDocument=Madromys.SchDoc|Designator=USB|SchDesignator=USB|FileName=Connectors.SchDoc|SheetNumber=3|SymbolType=Normal|RawFileName=Connectors.SchDoc|DesignItemId= |SourceLibraryName= |ObjectKind=Sheet Symbol|RevisionGUID= |ItemGUID= |VaultGUID=

Some files were not shown because too many files have changed in this diff Show More