├── .gitignore
├── .gitmodules
├── CONTRIBUTING
├── LICENSE
├── README.md
├── images
├── bar.webp
├── caps.webp
├── doublesided.webp
├── drumset.webp
├── flap.webp
├── furikku.webp
├── mageru.webp
├── magichand.webp
├── morse.webp
├── nazoru.webp
├── piropiro.webp
├── puchipuchi.webp
└── yunomi.webp
├── mozc-bar
├── README.md
├── board
│ ├── .gitignore
│ ├── controller
│ │ ├── controller.kicad_pcb
│ │ ├── controller.net
│ │ ├── controller.pro
│ │ └── controller.sch
│ ├── type-a
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-a-rescue.dcm
│ │ ├── type-a-rescue.lib
│ │ ├── type-a.kicad_pcb
│ │ ├── type-a.net
│ │ ├── type-a.pro
│ │ └── type-a.sch
│ ├── type-b
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-b-rescue.dcm
│ │ ├── type-b-rescue.lib
│ │ ├── type-b.kicad_pcb
│ │ ├── type-b.net
│ │ ├── type-b.pro
│ │ └── type-b.sch
│ ├── type-c
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-c-rescue.dcm
│ │ ├── type-c-rescue.lib
│ │ ├── type-c.kicad_pcb
│ │ ├── type-c.net
│ │ ├── type-c.pro
│ │ └── type-c.sch
│ ├── type-d
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-d-rescue.dcm
│ │ ├── type-d-rescue.lib
│ │ ├── type-d.kicad_pcb
│ │ ├── type-d.net
│ │ ├── type-d.pro
│ │ └── type-d.sch
│ ├── type-e
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-e-rescue.dcm
│ │ ├── type-e-rescue.lib
│ │ ├── type-e.kicad_pcb
│ │ ├── type-e.net
│ │ ├── type-e.pro
│ │ └── type-e.sch
│ ├── type-f
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-f-rescue.dcm
│ │ ├── type-f-rescue.lib
│ │ ├── type-f.kicad_pcb
│ │ ├── type-f.net
│ │ ├── type-f.pro
│ │ └── type-f.sch
│ └── type-g
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── type-g-rescue.dcm
│ │ ├── type-g-rescue.lib
│ │ ├── type-g.kicad_pcb
│ │ ├── type-g.net
│ │ ├── type-g.pro
│ │ └── type-g.sch
├── case
│ ├── controller.stl
│ ├── left-tip.stl
│ ├── right-tip.stl
│ ├── typeA.stl
│ ├── typeB.stl
│ ├── typeC.stl
│ ├── typeD.stl
│ ├── typeE.stl
│ ├── typeF.stl
│ └── typeG.stl
├── firmware
│ ├── mozc-bar-promicro
│ │ └── mozc-bar-promicro.ino
│ └── mozc-bar-stickc
│ │ └── mozc-bar-stickc.ino
└── image
│ ├── aluminium_frame.png
│ ├── header.jpg
│ ├── keymap.png
│ ├── pcbs.jpg
│ ├── promicro.jpg
│ ├── spacer.png
│ ├── stickc-after.jpg
│ └── stickc-before.jpg
├── mozc-caps
├── README.md
├── firmware
│ └── mozc-caps
│ │ ├── .gitignore
│ │ └── mozc-caps.ino
├── hardware
│ ├── bump_cap_insert_mount.stl
│ ├── sliding_plate.stl
│ ├── switch_mount.stl
│ ├── top_plate.stl
│ └── top_plate_angle_bracket_mount.stl
└── images
│ ├── assembly_1.png
│ ├── assembly_2.png
│ ├── assembly_3.png
│ ├── attach_rubber_band.jpg
│ ├── bump_cap_insert_mount.png
│ ├── header.jpg
│ ├── mount_inner_rail.jpg
│ ├── sliding_plate.png
│ ├── switch_harness.jpg
│ ├── switch_mount.png
│ ├── switch_pressed.jpg
│ ├── switch_with_mount.jpg
│ ├── top_board.png
│ └── top_plate_angle_bracket_mount.png
├── mozc-doublesided
├── README.md
├── README_ja.md
├── board
│ ├── Library.kicad_sym
│ ├── Library.pretty
│ │ ├── CUT.kicad_mod
│ │ ├── JST_S7B_ZR.kicad_mod
│ │ ├── JST_S8B_ZR.kicad_mod
│ │ ├── Keyswitch.kicad_mod
│ │ └── SK6812MINIe (Reverse).kicad_mod
│ ├── main
│ │ ├── fp-lib-table
│ │ ├── main.kicad_pcb
│ │ ├── main.kicad_prl
│ │ ├── main.kicad_pro
│ │ ├── main.kicad_sch
│ │ └── sym-lib-table
│ ├── main_panel
│ │ ├── fabrication-toolkit-options.json
│ │ ├── main_panel.kicad_pcb
│ │ ├── main_panel.kicad_prl
│ │ ├── main_panel.kicad_pro
│ │ └── main_panel.kicad_sch
│ ├── sub
│ │ ├── fabrication-toolkit-options.json
│ │ ├── fp-lib-table
│ │ ├── sub.kicad_pcb
│ │ ├── sub.kicad_prl
│ │ ├── sub.kicad_pro
│ │ ├── sub.kicad_sch
│ │ ├── sub.rules
│ │ └── sym-lib-table
│ ├── sub_panel
│ │ ├── fabrication-toolkit-options.json
│ │ ├── sub_panel.kicad_pcb
│ │ ├── sub_panel.kicad_prl
│ │ ├── sub_panel.kicad_pro
│ │ └── sub_panel.kicad_sch
│ └── usb
│ │ ├── fabrication-toolkit-options.json
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── usb.kicad_pcb
│ │ ├── usb.kicad_prl
│ │ ├── usb.kicad_pro
│ │ ├── usb.kicad_sch
│ │ └── usb.rules
├── case
│ ├── case00.stl
│ ├── case01.stl
│ ├── case02.stl
│ ├── case03.stl
│ ├── case04.stl
│ ├── case05.stl
│ ├── case06.stl
│ ├── case07.stl
│ ├── case08.stl
│ ├── case09.stl
│ ├── case10.stl
│ ├── case11.stl
│ ├── case12.stl
│ ├── case13.stl
│ ├── case14.stl
│ ├── case15.stl
│ ├── case16.stl
│ ├── case17.stl
│ ├── case18.stl
│ ├── case19.stl
│ ├── case20.stl
│ ├── case21.stl
│ ├── case22.stl
│ ├── case23.stl
│ ├── case24.stl
│ ├── case25.stl
│ └── jig.stl
├── examples
│ └── webhid.html
├── firmware
│ ├── CMakeLists.txt
│ ├── Core
│ │ ├── Inc
│ │ │ ├── hid.h
│ │ │ ├── i2c.h
│ │ │ ├── led.h
│ │ │ └── mozc.h
│ │ └── Src
│ │ │ ├── hid.c
│ │ │ ├── i2c.c
│ │ │ ├── led.c
│ │ │ └── mozc.c
│ ├── STM32F042F6Px_FLASH.ld.diff
│ ├── firmware.diff
│ ├── firmware.ioc
│ └── prebuilt
│ │ └── mozc.elf
├── gerber
│ ├── main_panel.zip
│ ├── main_panel_bom.csv
│ ├── main_panel_positions.csv
│ ├── sub_panel.zip
│ ├── sub_panel_bom.csv
│ ├── sub_panel_positions.csv
│ ├── usb.zip
│ ├── usb_bom.csv
│ └── usb_positions.csv
└── images
│ ├── connect_boards.png
│ ├── connections.png
│ ├── header.webp
│ ├── pairing_case.webp
│ ├── pairing_helper.webp
│ ├── pcb_pair.png
│ ├── pcb_primary.png
│ ├── pcb_swd.png
│ ├── primary_case.webp
│ ├── primary_usb.webp
│ └── usb_case.webp
├── mozc-furikku
├── README.md
├── arduino
│ └── flick
│ │ ├── flick.ino
│ │ ├── flick_keyboard.cpp
│ │ └── flick_keyboard.h
├── circuit.png
└── photo
│ ├── device.jpg
│ ├── jsmodule.jpg
│ └── keyboard.jpg
├── mozc-mageru
├── README.md
├── wired
│ └── firmware
│ │ └── firmware.ino
└── wireless
│ └── board
│ ├── board-bottom.png
│ ├── board-top.png
│ ├── board.brd
│ ├── board.sch
│ └── schematic.png
├── mozc-nazoru
├── .gitignore
├── README.rst
├── bin
│ ├── nazoru-input
│ └── nazoru-training
├── board
│ ├── nazoru-stack.brd
│ ├── nazoru-stack.sch
│ └── schematic.png
├── data
│ ├── nazoru.service
│ └── strokes.zip
├── setup.py
└── src
│ └── nazoru
│ ├── __init__.py
│ ├── bluetooth.py
│ ├── core.py
│ ├── data
│ └── optimized_nazoru.pb
│ ├── keyboard_recorder.py
│ ├── led.py
│ ├── lib.py
│ ├── nazoru_test.py
│ ├── nazorunet.py
│ ├── predictor.py
│ └── utils.py
├── mozc-piropiro
├── README.md
├── arduino
│ └── piropiro
│ │ └── piropiro.ino
├── assembly.png
├── circuit.png
├── example.jpg
└── stl
│ ├── arm.stl
│ ├── base.stl
│ ├── holder1.stl
│ ├── holder2.stl
│ └── sensor_bracket.stl
├── mozc-yunomi
├── README.md
├── README_promicro.md
├── board
│ ├── .gitignore
│ ├── base-promicro
│ │ ├── base-promicro.kicad_pcb
│ │ ├── base-promicro.net
│ │ ├── base-promicro.pro
│ │ └── base-promicro.sch
│ ├── base
│ │ ├── base.kicad_pcb
│ │ ├── base.net
│ │ ├── base.pro
│ │ └── base.sch
│ └── key
│ │ ├── fp-lib-table
│ │ ├── sym-lib-table
│ │ ├── yunomi.kicad_pcb
│ │ ├── yunomi.net
│ │ ├── yunomi.pro
│ │ └── yunomi.sch
├── firmware
│ └── firmware.ino
├── images
│ ├── base-pcb.png
│ ├── base-pcb_promicro.png
│ ├── connect.png
│ ├── connect2.jpg
│ ├── connect3.jpg
│ ├── connect4.jpg
│ ├── connect4_promicro.jpg
│ ├── device.jpg
│ ├── key-pcb.png
│ ├── pcbs.jpg
│ ├── pcbs_promicro.jpg
│ └── platform_promicro.jpg
├── jig.stl
└── platform_promicro.stl
└── third_party
├── .gitignore
├── mozc-flap
├── COPYING
├── Makefile
├── Readme.txt
├── circuit.png
├── flap.c
├── usb_keyboard.c
├── usb_keyboard.h
└── usbconfig.h
├── mozc-mageru
└── spoon_stl
│ ├── LICENSE
│ ├── README.md
│ └── slotted_spoon.stl
├── mozc-morse
├── COPYING
├── Makefile
├── Readme.txt
├── circuit.png
├── dit-dah.c
├── romaji_dit-dah.txt
├── space.c
├── usb_keyboard.c
├── usb_keyboard.h
└── usbconfig.h
├── mozc-puchi
├── LICENSE
├── README.md
├── circuit
│ └── circuit.jpg
├── desktop
│ ├── 3Dprinter
│ │ ├── desktop.igs
│ │ ├── desktop.stl
│ │ └── desktop.stp
│ └── Arduino
│ │ └── desktop
│ │ └── desktop.ino
├── handheld
│ ├── 3Dprinter
│ │ ├── handheld.igs
│ │ ├── handheld.stl
│ │ └── handheld.stp
│ └── Arduino
│ │ └── handheld
│ │ └── handheld.ino
└── photo
│ └── device_desktop.jpg
└── usbdrv
├── Changelog.txt
├── CommercialLicense.txt
├── License.txt
├── Readme.txt
├── USB-ID-FAQ.txt
├── USB-IDs-for-free.txt
├── asmcommon.inc
├── oddebug.c
├── oddebug.h
├── usbconfig-prototype.h
├── usbdrv.c
├── usbdrv.h
├── usbdrvasm.S
├── usbdrvasm.asm
├── usbdrvasm12.inc
├── usbdrvasm128.inc
├── usbdrvasm15.inc
├── usbdrvasm16.inc
├── usbdrvasm165.inc
├── usbdrvasm18-crc.inc
├── usbdrvasm20.inc
└── usbportability.h
/.gitignore:
--------------------------------------------------------------------------------
1 | *-cache.lib
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "third_party/mozc-yunomi/daprice-keyswitches.pretty"]
2 | path = third_party/mozc-yunomi/daprice-keyswitches.pretty
3 | url = https://github.com/daprice/keyswitches.pretty
4 |
--------------------------------------------------------------------------------
/CONTRIBUTING:
--------------------------------------------------------------------------------
1 | Want to contribute? Great! First, read this page (including the small print at the end).
2 |
3 | ### Before you contribute
4 | Before we can use your code, you must sign the
5 | [Google Individual Contributor License Agreement](https://cla.developers.google.com/about/google-individual)
6 | (CLA), which you can do online. The CLA is necessary mainly because you own the
7 | copyright to your changes, even after your contribution becomes part of our
8 | codebase, so we need your permission to use and distribute your code. We also
9 | need to be sure of various other things—for instance that you'll tell us if you
10 | know that your code infringes on other people's patents. You don't have to sign
11 | the CLA until after you've submitted your code for review and a member has
12 | approved it, but you must do it before we can put your code into our codebase.
13 | Before you start working on a larger contribution, you should get in touch with
14 | us first through the issue tracker with your idea so that we can help out and
15 | possibly guide you. Coordinating up front makes it much easier to avoid
16 | frustration later on.
17 |
18 | ### Code reviews
19 | All submissions, including submissions by project members, require review. We
20 | use Github pull requests for this purpose.
21 |
22 | ### The small print
23 | Contributions made by corporations are covered by a different agreement than
24 | the one above, the
25 | [Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate).
26 |
27 |
--------------------------------------------------------------------------------
/images/bar.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/bar.webp
--------------------------------------------------------------------------------
/images/caps.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/caps.webp
--------------------------------------------------------------------------------
/images/doublesided.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/doublesided.webp
--------------------------------------------------------------------------------
/images/drumset.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/drumset.webp
--------------------------------------------------------------------------------
/images/flap.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/flap.webp
--------------------------------------------------------------------------------
/images/furikku.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/furikku.webp
--------------------------------------------------------------------------------
/images/mageru.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/mageru.webp
--------------------------------------------------------------------------------
/images/magichand.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/magichand.webp
--------------------------------------------------------------------------------
/images/morse.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/morse.webp
--------------------------------------------------------------------------------
/images/nazoru.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/nazoru.webp
--------------------------------------------------------------------------------
/images/piropiro.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/piropiro.webp
--------------------------------------------------------------------------------
/images/puchipuchi.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/puchipuchi.webp
--------------------------------------------------------------------------------
/images/yunomi.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/images/yunomi.webp
--------------------------------------------------------------------------------
/mozc-bar/board/.gitignore:
--------------------------------------------------------------------------------
1 | *.000
2 | *.bak
3 | *.bck
4 | *.kicad_pcb-bak
5 | *.kicad_sch-bak
6 | *.kicad_prl
7 | *.sch-bak
8 | *~
9 | _autosave-*
10 | *.tmp
11 | *-save.pro
12 | *-save.kicad_pcb
13 | fp-info-cache
14 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-a/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-a/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-a-rescue)(type Legacy)(uri ${KIPRJMOD}/type-a-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-a/type-a-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-b/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-b/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-b-rescue)(type Legacy)(uri ${KIPRJMOD}/type-b-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-b/type-b-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-c/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-c/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-c-rescue)(type Legacy)(uri ${KIPRJMOD}/type-c-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-c/type-c-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-d/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-d/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-d-rescue)(type Legacy)(uri ${KIPRJMOD}/type-d-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-d/type-d-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-e/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-e/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-e-rescue)(type Legacy)(uri ${KIPRJMOD}/type-e-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-e/type-e-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-f/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-f/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-f-rescue)(type Legacy)(uri ${KIPRJMOD}/type-f-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-f/type-f-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-g/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name holes)(type KiCad)(uri ${KIPRJMOD}/../holes.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-g/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name type-g-rescue)(type Legacy)(uri ${KIPRJMOD}/type-g-rescue.lib)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-bar/board/type-g/type-g-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/mozc-bar/case/controller.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/controller.stl
--------------------------------------------------------------------------------
/mozc-bar/case/left-tip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/left-tip.stl
--------------------------------------------------------------------------------
/mozc-bar/case/right-tip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/right-tip.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeA.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeA.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeB.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeB.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeC.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeC.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeD.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeD.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeE.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeE.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeF.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeF.stl
--------------------------------------------------------------------------------
/mozc-bar/case/typeG.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/case/typeG.stl
--------------------------------------------------------------------------------
/mozc-bar/image/aluminium_frame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/aluminium_frame.png
--------------------------------------------------------------------------------
/mozc-bar/image/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/header.jpg
--------------------------------------------------------------------------------
/mozc-bar/image/keymap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/keymap.png
--------------------------------------------------------------------------------
/mozc-bar/image/pcbs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/pcbs.jpg
--------------------------------------------------------------------------------
/mozc-bar/image/promicro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/promicro.jpg
--------------------------------------------------------------------------------
/mozc-bar/image/spacer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/spacer.png
--------------------------------------------------------------------------------
/mozc-bar/image/stickc-after.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/stickc-after.jpg
--------------------------------------------------------------------------------
/mozc-bar/image/stickc-before.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-bar/image/stickc-before.jpg
--------------------------------------------------------------------------------
/mozc-caps/firmware/mozc-caps/.gitignore:
--------------------------------------------------------------------------------
1 | imu.cpp
2 | imu.h
3 | debug.cfg
4 | debug_custom.json
5 | esp32.svd
6 |
--------------------------------------------------------------------------------
/mozc-caps/hardware/bump_cap_insert_mount.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/hardware/bump_cap_insert_mount.stl
--------------------------------------------------------------------------------
/mozc-caps/hardware/sliding_plate.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/hardware/sliding_plate.stl
--------------------------------------------------------------------------------
/mozc-caps/hardware/switch_mount.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/hardware/switch_mount.stl
--------------------------------------------------------------------------------
/mozc-caps/hardware/top_plate.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/hardware/top_plate.stl
--------------------------------------------------------------------------------
/mozc-caps/hardware/top_plate_angle_bracket_mount.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/hardware/top_plate_angle_bracket_mount.stl
--------------------------------------------------------------------------------
/mozc-caps/images/assembly_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/assembly_1.png
--------------------------------------------------------------------------------
/mozc-caps/images/assembly_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/assembly_2.png
--------------------------------------------------------------------------------
/mozc-caps/images/assembly_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/assembly_3.png
--------------------------------------------------------------------------------
/mozc-caps/images/attach_rubber_band.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/attach_rubber_band.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/bump_cap_insert_mount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/bump_cap_insert_mount.png
--------------------------------------------------------------------------------
/mozc-caps/images/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/header.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/mount_inner_rail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/mount_inner_rail.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/sliding_plate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/sliding_plate.png
--------------------------------------------------------------------------------
/mozc-caps/images/switch_harness.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/switch_harness.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/switch_mount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/switch_mount.png
--------------------------------------------------------------------------------
/mozc-caps/images/switch_pressed.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/switch_pressed.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/switch_with_mount.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/switch_with_mount.jpg
--------------------------------------------------------------------------------
/mozc-caps/images/top_board.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/top_board.png
--------------------------------------------------------------------------------
/mozc-caps/images/top_plate_angle_bracket_mount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-caps/images/top_plate_angle_bracket_mount.png
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.kicad_sym:
--------------------------------------------------------------------------------
1 | (kicad_symbol_lib
2 | (version 20231120)
3 | (generator "kicad_symbol_editor")
4 | (generator_version "8.0")
5 | (symbol "SK6812MINIe"
6 | (pin_names
7 | (offset 0.254)
8 | )
9 | (exclude_from_sim no)
10 | (in_bom yes)
11 | (on_board yes)
12 | (property "Reference" "D"
13 | (at 5.08 5.715 0)
14 | (effects
15 | (font
16 | (size 1.27 1.27)
17 | )
18 | (justify right bottom)
19 | )
20 | )
21 | (property "Value" "SK6812MINIe"
22 | (at 1.27 -5.715 0)
23 | (effects
24 | (font
25 | (size 1.27 1.27)
26 | )
27 | (justify left top)
28 | )
29 | )
30 | (property "Footprint" "LED_SMD:LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
31 | (at 1.27 -7.62 0)
32 | (effects
33 | (font
34 | (size 1.27 1.27)
35 | )
36 | (justify left top)
37 | (hide yes)
38 | )
39 | )
40 | (property "Datasheet" "https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf"
41 | (at 2.54 -9.525 0)
42 | (effects
43 | (font
44 | (size 1.27 1.27)
45 | )
46 | (justify left top)
47 | (hide yes)
48 | )
49 | )
50 | (property "Description" "RGB LED with integrated controller"
51 | (at 0 0 0)
52 | (effects
53 | (font
54 | (size 1.27 1.27)
55 | )
56 | (hide yes)
57 | )
58 | )
59 | (property "ki_keywords" "RGB LED NeoPixel Mini addressable"
60 | (at 0 0 0)
61 | (effects
62 | (font
63 | (size 1.27 1.27)
64 | )
65 | (hide yes)
66 | )
67 | )
68 | (property "ki_fp_filters" "LED*SK6812MINI*PLCC*3.5x3.5mm*P1.75mm*"
69 | (at 0 0 0)
70 | (effects
71 | (font
72 | (size 1.27 1.27)
73 | )
74 | (hide yes)
75 | )
76 | )
77 | (symbol "SK6812MINIe_0_0"
78 | (text "RGB"
79 | (at 2.286 -4.191 0)
80 | (effects
81 | (font
82 | (size 0.762 0.762)
83 | )
84 | )
85 | )
86 | )
87 | (symbol "SK6812MINIe_0_1"
88 | (polyline
89 | (pts
90 | (xy 1.27 -3.556) (xy 1.778 -3.556)
91 | )
92 | (stroke
93 | (width 0)
94 | (type default)
95 | )
96 | (fill
97 | (type none)
98 | )
99 | )
100 | (polyline
101 | (pts
102 | (xy 1.27 -2.54) (xy 1.778 -2.54)
103 | )
104 | (stroke
105 | (width 0)
106 | (type default)
107 | )
108 | (fill
109 | (type none)
110 | )
111 | )
112 | (polyline
113 | (pts
114 | (xy 4.699 -3.556) (xy 2.667 -3.556)
115 | )
116 | (stroke
117 | (width 0)
118 | (type default)
119 | )
120 | (fill
121 | (type none)
122 | )
123 | )
124 | (polyline
125 | (pts
126 | (xy 2.286 -2.54) (xy 1.27 -3.556) (xy 1.27 -3.048)
127 | )
128 | (stroke
129 | (width 0)
130 | (type default)
131 | )
132 | (fill
133 | (type none)
134 | )
135 | )
136 | (polyline
137 | (pts
138 | (xy 2.286 -1.524) (xy 1.27 -2.54) (xy 1.27 -2.032)
139 | )
140 | (stroke
141 | (width 0)
142 | (type default)
143 | )
144 | (fill
145 | (type none)
146 | )
147 | )
148 | (polyline
149 | (pts
150 | (xy 3.683 -1.016) (xy 3.683 -3.556) (xy 3.683 -4.064)
151 | )
152 | (stroke
153 | (width 0)
154 | (type default)
155 | )
156 | (fill
157 | (type none)
158 | )
159 | )
160 | (polyline
161 | (pts
162 | (xy 4.699 -1.524) (xy 2.667 -1.524) (xy 3.683 -3.556) (xy 4.699 -1.524)
163 | )
164 | (stroke
165 | (width 0)
166 | (type default)
167 | )
168 | (fill
169 | (type none)
170 | )
171 | )
172 | (rectangle
173 | (start 5.08 5.08)
174 | (end -5.08 -5.08)
175 | (stroke
176 | (width 0.254)
177 | (type default)
178 | )
179 | (fill
180 | (type background)
181 | )
182 | )
183 | )
184 | (symbol "SK6812MINIe_1_1"
185 | (pin power_in line
186 | (at 0 7.62 270)
187 | (length 2.54)
188 | (name "VDD"
189 | (effects
190 | (font
191 | (size 1.27 1.27)
192 | )
193 | )
194 | )
195 | (number "1"
196 | (effects
197 | (font
198 | (size 1.27 1.27)
199 | )
200 | )
201 | )
202 | )
203 | (pin output line
204 | (at 7.62 0 180)
205 | (length 2.54)
206 | (name "DOUT"
207 | (effects
208 | (font
209 | (size 1.27 1.27)
210 | )
211 | )
212 | )
213 | (number "2"
214 | (effects
215 | (font
216 | (size 1.27 1.27)
217 | )
218 | )
219 | )
220 | )
221 | (pin power_in line
222 | (at 0 -7.62 90)
223 | (length 2.54)
224 | (name "VSS"
225 | (effects
226 | (font
227 | (size 1.27 1.27)
228 | )
229 | )
230 | )
231 | (number "3"
232 | (effects
233 | (font
234 | (size 1.27 1.27)
235 | )
236 | )
237 | )
238 | )
239 | (pin input line
240 | (at -7.62 0 0)
241 | (length 2.54)
242 | (name "DIN"
243 | (effects
244 | (font
245 | (size 1.27 1.27)
246 | )
247 | )
248 | )
249 | (number "4"
250 | (effects
251 | (font
252 | (size 1.27 1.27)
253 | )
254 | )
255 | )
256 | )
257 | )
258 | )
259 | )
260 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.pretty/CUT.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "CUT"
2 | (version 20240108)
3 | (generator "pcbnew")
4 | (generator_version "8.0")
5 | (layer "F.Cu")
6 | (property "Reference" "REF**"
7 | (at 0 2.75 0)
8 | (unlocked yes)
9 | (layer "F.SilkS")
10 | (uuid "f0529529-e7ad-4a57-8e7c-8304f8fad623")
11 | (effects
12 | (font
13 | (size 1 1)
14 | (thickness 0.1)
15 | )
16 | )
17 | )
18 | (property "Value" "CUT"
19 | (at 0 -3.556 0)
20 | (unlocked yes)
21 | (layer "F.Fab")
22 | (hide yes)
23 | (uuid "083d266b-e8f8-45fe-a99a-e0833140eab2")
24 | (effects
25 | (font
26 | (size 1 1)
27 | (thickness 0.15)
28 | )
29 | )
30 | )
31 | (property "Footprint" "CUT"
32 | (at 0 -3.048 0)
33 | (unlocked yes)
34 | (layer "F.Fab")
35 | (hide yes)
36 | (uuid "ada22d4b-0035-4ba2-bfd4-5c13580d04b1")
37 | (effects
38 | (font
39 | (size 1 1)
40 | (thickness 0.15)
41 | )
42 | )
43 | )
44 | (property "Datasheet" ""
45 | (at 0 0 0)
46 | (unlocked yes)
47 | (layer "F.Fab")
48 | (hide yes)
49 | (uuid "0a279097-fb8e-4256-8351-f65668097495")
50 | (effects
51 | (font
52 | (size 1 1)
53 | (thickness 0.15)
54 | )
55 | )
56 | )
57 | (property "Description" ""
58 | (at 0 0 0)
59 | (unlocked yes)
60 | (layer "F.Fab")
61 | (hide yes)
62 | (uuid "33b51e5b-386b-4a58-8dae-e5735447e6fe")
63 | (effects
64 | (font
65 | (size 1 1)
66 | (thickness 0.15)
67 | )
68 | )
69 | )
70 | (attr through_hole)
71 | (fp_line
72 | (start -1.25 4.25)
73 | (end -1.25 -3.75)
74 | (stroke
75 | (width 0.1)
76 | (type default)
77 | )
78 | (layer "F.SilkS")
79 | (uuid "863182fd-f10e-4540-873b-887dc0d75756")
80 | )
81 | (fp_line
82 | (start -1.25 38)
83 | (end -1.25 -38)
84 | (stroke
85 | (width 0.1)
86 | (type default)
87 | )
88 | (layer "F.SilkS")
89 | (uuid "fca3fa1c-3fcc-4972-9e14-2378578f24dd")
90 | )
91 | (fp_line
92 | (start 1.25 -38)
93 | (end -1.25 -38)
94 | (stroke
95 | (width 0.1)
96 | (type default)
97 | )
98 | (layer "F.SilkS")
99 | (uuid "cb003dda-7a74-4e65-b2dc-9a1a65af324d")
100 | )
101 | (fp_line
102 | (start 1.25 -38)
103 | (end 1.25 38)
104 | (stroke
105 | (width 0.1)
106 | (type default)
107 | )
108 | (layer "F.SilkS")
109 | (uuid "7870eede-df43-4abc-a041-03331377be7d")
110 | )
111 | (fp_line
112 | (start 1.25 -3.75)
113 | (end 1.25 4.25)
114 | (stroke
115 | (width 0.1)
116 | (type default)
117 | )
118 | (layer "F.SilkS")
119 | (uuid "5134138d-302e-4316-9dd7-d93e68134713")
120 | )
121 | (fp_line
122 | (start 1.25 38)
123 | (end -1.25 38)
124 | (stroke
125 | (width 0.1)
126 | (type default)
127 | )
128 | (layer "F.SilkS")
129 | (uuid "6f3b0a45-c7dc-4b72-9881-33b989816b1c")
130 | )
131 | (fp_text user "${REFERENCE}"
132 | (at 0 -2.032 0)
133 | (unlocked yes)
134 | (layer "F.Fab")
135 | (uuid "222f8e4d-c3d8-487f-b7eb-87c90827f1de")
136 | (effects
137 | (font
138 | (size 1 1)
139 | (thickness 0.15)
140 | )
141 | )
142 | )
143 | (pad "" np_thru_hole oval
144 | (at -0.5 0)
145 | (size 1.5 78)
146 | (drill oval 1.5 78)
147 | (layers "F&B.Cu" "*.Mask")
148 | (uuid "d335cf29-973d-48d2-9d86-023c8a6b979f")
149 | )
150 | (pad "" np_thru_hole oval
151 | (at 0.5 0)
152 | (size 1.5 78)
153 | (drill oval 1.5 78)
154 | (layers "F&B.Cu" "*.Mask")
155 | (uuid "74231be5-5b0c-450d-bd9a-2904e007056f")
156 | )
157 | )
158 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.pretty/JST_S7B_ZR.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "JST_S7B_ZR"
2 | (version 20240108)
3 | (generator "pcbnew")
4 | (generator_version "8.0")
5 | (layer "F.Cu")
6 | (property "Reference" "REF**"
7 | (at 0 -2.5 0)
8 | (unlocked yes)
9 | (layer "F.SilkS")
10 | (uuid "bae32462-6c5e-4a07-a152-387c5a2b4f4a")
11 | (effects
12 | (font
13 | (size 1 1)
14 | (thickness 0.1)
15 | )
16 | )
17 | )
18 | (property "Value" "JST_S7B_ZR"
19 | (at 0 6 0)
20 | (unlocked yes)
21 | (layer "F.Fab")
22 | (uuid "181081ae-416d-43a9-92dd-7cbe06e4f148")
23 | (effects
24 | (font
25 | (size 1 1)
26 | (thickness 0.15)
27 | )
28 | )
29 | )
30 | (property "Footprint" "JST_S7B_ZR"
31 | (at 0 -5.5 0)
32 | (unlocked yes)
33 | (layer "F.Fab")
34 | (hide yes)
35 | (uuid "9a65e609-9750-4cb1-a97d-44b75c6cb701")
36 | (effects
37 | (font
38 | (size 1 1)
39 | (thickness 0.15)
40 | )
41 | )
42 | )
43 | (property "Datasheet" ""
44 | (at -0.5 0 0)
45 | (unlocked yes)
46 | (layer "F.Fab")
47 | (hide yes)
48 | (uuid "1cba1d40-e7f9-4068-af6a-8936a0eb9721")
49 | (effects
50 | (font
51 | (size 1 1)
52 | (thickness 0.15)
53 | )
54 | )
55 | )
56 | (property "Description" ""
57 | (at -0.5 0 0)
58 | (unlocked yes)
59 | (layer "F.Fab")
60 | (hide yes)
61 | (uuid "60c16c84-892a-4f57-936a-8937e5d62eff")
62 | (effects
63 | (font
64 | (size 1 1)
65 | (thickness 0.15)
66 | )
67 | )
68 | )
69 | (attr through_hole)
70 | (fp_line
71 | (start -6 -1.5)
72 | (end -6 4.6)
73 | (stroke
74 | (width 0.1)
75 | (type default)
76 | )
77 | (layer "F.SilkS")
78 | (uuid "12ecbc05-5bba-4dbf-b092-4085a80779ca")
79 | )
80 | (fp_line
81 | (start -6 4.6)
82 | (end 6 4.6)
83 | (stroke
84 | (width 0.1)
85 | (type default)
86 | )
87 | (layer "F.SilkS")
88 | (uuid "1ab22b04-51a7-4a6f-9078-6ed0f29fac48")
89 | )
90 | (fp_line
91 | (start -5 0.75)
92 | (end -4 0.75)
93 | (stroke
94 | (width 0.1)
95 | (type default)
96 | )
97 | (layer "F.SilkS")
98 | (uuid "60399dd4-79ef-4503-89d0-7f2514c5fe97")
99 | )
100 | (fp_line
101 | (start -4.5 1.75)
102 | (end -5 0.75)
103 | (stroke
104 | (width 0.1)
105 | (type default)
106 | )
107 | (layer "F.SilkS")
108 | (uuid "4a15179f-edf6-4b12-97e3-5b02d5df5e98")
109 | )
110 | (fp_line
111 | (start -4 0.75)
112 | (end -4.5 1.75)
113 | (stroke
114 | (width 0.1)
115 | (type default)
116 | )
117 | (layer "F.SilkS")
118 | (uuid "41a30844-4207-4c50-854e-3af7a189c512")
119 | )
120 | (fp_line
121 | (start 6 -1.5)
122 | (end -6 -1.5)
123 | (stroke
124 | (width 0.1)
125 | (type default)
126 | )
127 | (layer "F.SilkS")
128 | (uuid "868f0f71-d45d-4d3b-8176-b9c2710fe60d")
129 | )
130 | (fp_line
131 | (start 6 -1.5)
132 | (end 6 4.6)
133 | (stroke
134 | (width 0.1)
135 | (type default)
136 | )
137 | (layer "F.SilkS")
138 | (uuid "4e256072-d085-4fc2-8bb8-35ec8977a21c")
139 | )
140 | (fp_text user "${REFERENCE}"
141 | (at 0 7.5 0)
142 | (unlocked yes)
143 | (layer "F.Fab")
144 | (uuid "90f9e58f-4754-4219-9391-3fd081552975")
145 | (effects
146 | (font
147 | (size 1 1)
148 | (thickness 0.15)
149 | )
150 | )
151 | )
152 | (pad "1" thru_hole rect
153 | (at -4.5 0)
154 | (size 1.2 1.2)
155 | (drill 0.762)
156 | (layers "*.Cu" "*.Mask")
157 | (remove_unused_layers no)
158 | (uuid "7f2da7e6-74ad-487a-af0c-6f90fc58ea85")
159 | )
160 | (pad "2" thru_hole rect
161 | (at -3 0)
162 | (size 1.2 1.2)
163 | (drill 0.762)
164 | (layers "*.Cu" "*.Mask")
165 | (remove_unused_layers no)
166 | (uuid "cf13f5f9-53d8-4a75-a2a6-9a6682958630")
167 | )
168 | (pad "3" thru_hole rect
169 | (at -1.5 0)
170 | (size 1.2 1.2)
171 | (drill 0.762)
172 | (layers "*.Cu" "*.Mask")
173 | (remove_unused_layers no)
174 | (uuid "8d1f0ecd-3600-4939-acfd-62e9c7e7df2e")
175 | )
176 | (pad "4" thru_hole rect
177 | (at 0 0)
178 | (size 1.2 1.2)
179 | (drill 0.762)
180 | (layers "*.Cu" "*.Mask")
181 | (remove_unused_layers no)
182 | (uuid "0d4e7676-f11b-4563-8cd2-8b5b199c5a44")
183 | )
184 | (pad "5" thru_hole rect
185 | (at 1.5 0)
186 | (size 1.2 1.2)
187 | (drill 0.762)
188 | (layers "*.Cu" "*.Mask")
189 | (remove_unused_layers no)
190 | (uuid "a48f4b70-013e-460e-a4d7-9f21019485ca")
191 | )
192 | (pad "6" thru_hole rect
193 | (at 3 0)
194 | (size 1.2 1.2)
195 | (drill 0.762)
196 | (layers "*.Cu" "*.Mask")
197 | (remove_unused_layers no)
198 | (uuid "74072075-f09d-4091-a205-b40d78e11534")
199 | )
200 | (pad "7" thru_hole rect
201 | (at 4.5 0)
202 | (size 1.2 1.2)
203 | (drill 0.762)
204 | (layers "*.Cu" "*.Mask")
205 | (remove_unused_layers no)
206 | (uuid "240bb452-6231-44a3-9834-2206c827d892")
207 | )
208 | )
209 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.pretty/JST_S8B_ZR.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "JST_S8B_ZR"
2 | (version 20240108)
3 | (generator "pcbnew")
4 | (generator_version "8.0")
5 | (layer "F.Cu")
6 | (property "Reference" "REF**"
7 | (at -0.75 -2.5 0)
8 | (unlocked yes)
9 | (layer "F.SilkS")
10 | (uuid "bae32462-6c5e-4a07-a152-387c5a2b4f4a")
11 | (effects
12 | (font
13 | (size 1 1)
14 | (thickness 0.1)
15 | )
16 | )
17 | )
18 | (property "Value" "JST_S8B_ZR"
19 | (at 0 6 0)
20 | (unlocked yes)
21 | (layer "F.Fab")
22 | (uuid "181081ae-416d-43a9-92dd-7cbe06e4f148")
23 | (effects
24 | (font
25 | (size 1 1)
26 | (thickness 0.15)
27 | )
28 | )
29 | )
30 | (property "Footprint" "JST_S7B_ZR"
31 | (at 0 -5.5 0)
32 | (unlocked yes)
33 | (layer "F.Fab")
34 | (hide yes)
35 | (uuid "9a65e609-9750-4cb1-a97d-44b75c6cb701")
36 | (effects
37 | (font
38 | (size 1 1)
39 | (thickness 0.15)
40 | )
41 | )
42 | )
43 | (property "Datasheet" ""
44 | (at -1.25 0 0)
45 | (unlocked yes)
46 | (layer "F.Fab")
47 | (hide yes)
48 | (uuid "1cba1d40-e7f9-4068-af6a-8936a0eb9721")
49 | (effects
50 | (font
51 | (size 1 1)
52 | (thickness 0.15)
53 | )
54 | )
55 | )
56 | (property "Description" ""
57 | (at -1.25 0 0)
58 | (unlocked yes)
59 | (layer "F.Fab")
60 | (hide yes)
61 | (uuid "60c16c84-892a-4f57-936a-8937e5d62eff")
62 | (effects
63 | (font
64 | (size 1 1)
65 | (thickness 0.15)
66 | )
67 | )
68 | )
69 | (attr through_hole)
70 | (fp_line
71 | (start -6.75 -1.5)
72 | (end -6.75 4.6)
73 | (stroke
74 | (width 0.1)
75 | (type default)
76 | )
77 | (layer "F.SilkS")
78 | (uuid "12ecbc05-5bba-4dbf-b092-4085a80779ca")
79 | )
80 | (fp_line
81 | (start -6.75 4.6)
82 | (end 6.75 4.6)
83 | (stroke
84 | (width 0.1)
85 | (type default)
86 | )
87 | (layer "F.SilkS")
88 | (uuid "1ab22b04-51a7-4a6f-9078-6ed0f29fac48")
89 | )
90 | (fp_line
91 | (start -5.75 0.75)
92 | (end -4.75 0.75)
93 | (stroke
94 | (width 0.1)
95 | (type default)
96 | )
97 | (layer "F.SilkS")
98 | (uuid "60399dd4-79ef-4503-89d0-7f2514c5fe97")
99 | )
100 | (fp_line
101 | (start -5.25 1.75)
102 | (end -5.75 0.75)
103 | (stroke
104 | (width 0.1)
105 | (type default)
106 | )
107 | (layer "F.SilkS")
108 | (uuid "4a15179f-edf6-4b12-97e3-5b02d5df5e98")
109 | )
110 | (fp_line
111 | (start -4.75 0.75)
112 | (end -5.25 1.75)
113 | (stroke
114 | (width 0.1)
115 | (type default)
116 | )
117 | (layer "F.SilkS")
118 | (uuid "41a30844-4207-4c50-854e-3af7a189c512")
119 | )
120 | (fp_line
121 | (start 6.75 -1.5)
122 | (end -6.75 -1.5)
123 | (stroke
124 | (width 0.1)
125 | (type default)
126 | )
127 | (layer "F.SilkS")
128 | (uuid "868f0f71-d45d-4d3b-8176-b9c2710fe60d")
129 | )
130 | (fp_line
131 | (start 6.75 -1.5)
132 | (end 6.75 4.6)
133 | (stroke
134 | (width 0.1)
135 | (type default)
136 | )
137 | (layer "F.SilkS")
138 | (uuid "4e256072-d085-4fc2-8bb8-35ec8977a21c")
139 | )
140 | (fp_text user "${REFERENCE}"
141 | (at 0 7.5 0)
142 | (unlocked yes)
143 | (layer "F.Fab")
144 | (uuid "90f9e58f-4754-4219-9391-3fd081552975")
145 | (effects
146 | (font
147 | (size 1 1)
148 | (thickness 0.15)
149 | )
150 | )
151 | )
152 | (pad "1" thru_hole rect
153 | (at -5.25 0)
154 | (size 1.2 1.2)
155 | (drill 0.762)
156 | (layers "*.Cu" "*.Mask")
157 | (remove_unused_layers no)
158 | (uuid "7f2da7e6-74ad-487a-af0c-6f90fc58ea85")
159 | )
160 | (pad "2" thru_hole rect
161 | (at -3.75 0)
162 | (size 1.2 1.2)
163 | (drill 0.762)
164 | (layers "*.Cu" "*.Mask")
165 | (remove_unused_layers no)
166 | (uuid "cf13f5f9-53d8-4a75-a2a6-9a6682958630")
167 | )
168 | (pad "3" thru_hole rect
169 | (at -2.25 0)
170 | (size 1.2 1.2)
171 | (drill 0.762)
172 | (layers "*.Cu" "*.Mask")
173 | (remove_unused_layers no)
174 | (uuid "8d1f0ecd-3600-4939-acfd-62e9c7e7df2e")
175 | )
176 | (pad "4" thru_hole rect
177 | (at -0.75 0)
178 | (size 1.2 1.2)
179 | (drill 0.762)
180 | (layers "*.Cu" "*.Mask")
181 | (remove_unused_layers no)
182 | (uuid "0d4e7676-f11b-4563-8cd2-8b5b199c5a44")
183 | )
184 | (pad "5" thru_hole rect
185 | (at 0.75 0)
186 | (size 1.2 1.2)
187 | (drill 0.762)
188 | (layers "*.Cu" "*.Mask")
189 | (remove_unused_layers no)
190 | (uuid "a48f4b70-013e-460e-a4d7-9f21019485ca")
191 | )
192 | (pad "6" thru_hole rect
193 | (at 2.25 0)
194 | (size 1.2 1.2)
195 | (drill 0.762)
196 | (layers "*.Cu" "*.Mask")
197 | (remove_unused_layers no)
198 | (uuid "74072075-f09d-4091-a205-b40d78e11534")
199 | )
200 | (pad "7" thru_hole rect
201 | (at 3.75 0)
202 | (size 1.2 1.2)
203 | (drill 0.762)
204 | (layers "*.Cu" "*.Mask")
205 | (remove_unused_layers no)
206 | (uuid "240bb452-6231-44a3-9834-2206c827d892")
207 | )
208 | (pad "8" thru_hole rect
209 | (at 5.25 0)
210 | (size 1.2 1.2)
211 | (drill 0.762)
212 | (layers "*.Cu" "*.Mask")
213 | (remove_unused_layers no)
214 | (uuid "5935f949-12ee-4fd0-a053-a302725c15c8")
215 | )
216 | )
217 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.pretty/Keyswitch.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "Keyswitch"
2 | (version 20240108)
3 | (generator "pcbnew")
4 | (generator_version "8.0")
5 | (layer "F.Cu")
6 | (property "Reference" "REF**"
7 | (at 0 -0.5 0)
8 | (unlocked yes)
9 | (layer "F.SilkS")
10 | (uuid "0a8dcc72-c147-4804-b650-a6bd830f8008")
11 | (effects
12 | (font
13 | (size 1 1)
14 | (thickness 0.1)
15 | )
16 | )
17 | )
18 | (property "Value" "Keyswitch"
19 | (at 0 -7.62 0)
20 | (unlocked yes)
21 | (layer "F.Fab")
22 | (uuid "718bfec1-ec51-4c07-b755-636a4d91c4d1")
23 | (effects
24 | (font
25 | (size 1 1)
26 | (thickness 0.15)
27 | )
28 | )
29 | )
30 | (property "Footprint" "Keyswitch"
31 | (at -0.1 -9.525 0)
32 | (unlocked yes)
33 | (layer "F.Fab")
34 | (hide yes)
35 | (uuid "91e8520f-61fb-412f-8468-f66cc861e94e")
36 | (effects
37 | (font
38 | (size 1 1)
39 | (thickness 0.15)
40 | )
41 | )
42 | )
43 | (property "Datasheet" ""
44 | (at 0 0 0)
45 | (unlocked yes)
46 | (layer "F.Fab")
47 | (hide yes)
48 | (uuid "c3c783c3-f6fa-4c4a-93c2-36635e2f68a4")
49 | (effects
50 | (font
51 | (size 1 1)
52 | (thickness 0.15)
53 | )
54 | )
55 | )
56 | (property "Description" ""
57 | (at 0 0 0)
58 | (unlocked yes)
59 | (layer "F.Fab")
60 | (hide yes)
61 | (uuid "2d08db83-5937-45ed-bd45-935f7c04dc50")
62 | (effects
63 | (font
64 | (size 1 1)
65 | (thickness 0.15)
66 | )
67 | )
68 | )
69 | (attr through_hole)
70 | (fp_line
71 | (start -6.985 -6.985)
72 | (end 6.985 -6.985)
73 | (stroke
74 | (width 0.05)
75 | (type default)
76 | )
77 | (layer "B.CrtYd")
78 | (uuid "5201e7cc-c732-40f4-bee7-66aed32470e5")
79 | )
80 | (fp_line
81 | (start -6.985 6.985)
82 | (end -6.985 -6.985)
83 | (stroke
84 | (width 0.05)
85 | (type default)
86 | )
87 | (layer "B.CrtYd")
88 | (uuid "98d3f658-1439-4b1f-a883-752d85a6c31c")
89 | )
90 | (fp_line
91 | (start 6.985 -6.985)
92 | (end 6.985 6.985)
93 | (stroke
94 | (width 0.05)
95 | (type default)
96 | )
97 | (layer "B.CrtYd")
98 | (uuid "4318bc1d-2c18-463c-ab17-504fd2fa5a9a")
99 | )
100 | (fp_line
101 | (start 6.985 6.985)
102 | (end -6.985 6.985)
103 | (stroke
104 | (width 0.05)
105 | (type default)
106 | )
107 | (layer "B.CrtYd")
108 | (uuid "e5443cdc-cb4f-4cb5-9285-36e6bdf40f91")
109 | )
110 | (fp_line
111 | (start 3.81 5.08)
112 | (end -3.81 5.08)
113 | (stroke
114 | (width 0.1)
115 | (type default)
116 | )
117 | (layer "User.2")
118 | (uuid "d2741143-81d0-422e-b905-ea9496ce9ed0")
119 | )
120 | (fp_rect
121 | (start -4.445 -6.985)
122 | (end -8.255 -3.175)
123 | (stroke
124 | (width 0.1)
125 | (type default)
126 | )
127 | (fill none)
128 | (layer "User.2")
129 | (uuid "a851abba-f4c5-4aec-9cb6-3bdfc214acbb")
130 | )
131 | (fp_rect
132 | (start 9.525 -4.445)
133 | (end 5.715 -0.635)
134 | (stroke
135 | (width 0.1)
136 | (type default)
137 | )
138 | (fill none)
139 | (layer "User.2")
140 | (uuid "f28b8bf4-ac96-46e8-9b4f-7273158b7e71")
141 | )
142 | (fp_text user "${REFERENCE}"
143 | (at 0 -5.715 0)
144 | (unlocked yes)
145 | (layer "F.Fab")
146 | (uuid "256b44ce-2967-4db3-b7ac-cb3d0f94ed3a")
147 | (effects
148 | (font
149 | (size 1 1)
150 | (thickness 0.15)
151 | )
152 | )
153 | )
154 | (pad "" np_thru_hole circle
155 | (at -5.08 0)
156 | (size 1.7526 1.7526)
157 | (drill 1.7526)
158 | (layers "F&B.Cu" "*.Mask")
159 | (uuid "382e6dad-e08d-413b-8277-895111c64112")
160 | )
161 | (pad "" np_thru_hole circle
162 | (at -2.54 -5.08)
163 | (size 3.05 3.05)
164 | (drill 3.05)
165 | (layers "F&B.Cu" "*.Mask")
166 | (uuid "8f9f6045-4247-4b53-bc82-51b37112e39c")
167 | )
168 | (pad "" np_thru_hole circle
169 | (at 0 0)
170 | (size 4.0894 4.0894)
171 | (drill 4.0894)
172 | (layers "F&B.Cu" "*.Mask")
173 | (uuid "f7bfcaf5-2702-4bbb-8457-9c2bb1f3c21b")
174 | )
175 | (pad "" np_thru_hole circle
176 | (at 3.81 -2.54)
177 | (size 3.05 3.05)
178 | (drill 3.05)
179 | (layers "F&B.Cu" "*.Mask")
180 | (uuid "c98c1390-f969-4b22-bf72-ac3409f460f6")
181 | )
182 | (pad "" np_thru_hole circle
183 | (at 5.08 0)
184 | (size 1.7526 1.7526)
185 | (drill 1.7526)
186 | (layers "F&B.Cu" "*.Mask")
187 | (uuid "7335aeb7-7726-4139-bc74-e642fc4dd835")
188 | )
189 | (pad "1" smd rect
190 | (at -6.35 -5.08)
191 | (size 3.5 3.5)
192 | (layers "F.Cu" "F.Paste" "F.Mask")
193 | (uuid "2a0404a2-0053-4fd2-bf42-02c78d3af3bf")
194 | )
195 | (pad "2" smd rect
196 | (at 7.62 -2.54)
197 | (size 3.5 3.5)
198 | (layers "F.Cu" "F.Paste" "F.Mask")
199 | (uuid "0db5fccc-d2ae-479c-a26e-732c3b75d329")
200 | )
201 | )
202 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/Library.pretty/SK6812MINIe (Reverse).kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "SK6812MINIe (Reverse)"
2 | (version 20240108)
3 | (generator "pcbnew")
4 | (generator_version "8.0")
5 | (layer "F.Cu")
6 | (property "Reference" "REF**"
7 | (at 0 2.75 0)
8 | (unlocked yes)
9 | (layer "F.SilkS")
10 | (uuid "f0529529-e7ad-4a57-8e7c-8304f8fad623")
11 | (effects
12 | (font
13 | (size 1 1)
14 | (thickness 0.1)
15 | )
16 | )
17 | )
18 | (property "Value" "SK6812MINIe"
19 | (at 0 -3.556 0)
20 | (unlocked yes)
21 | (layer "F.Fab")
22 | (uuid "083d266b-e8f8-45fe-a99a-e0833140eab2")
23 | (effects
24 | (font
25 | (size 1 1)
26 | (thickness 0.15)
27 | )
28 | )
29 | )
30 | (property "Footprint" "SK6812MINIe (Reverse)"
31 | (at 0 -3.048 0)
32 | (unlocked yes)
33 | (layer "F.Fab")
34 | (hide yes)
35 | (uuid "ada22d4b-0035-4ba2-bfd4-5c13580d04b1")
36 | (effects
37 | (font
38 | (size 1 1)
39 | (thickness 0.15)
40 | )
41 | )
42 | )
43 | (property "Datasheet" ""
44 | (at 0 0 0)
45 | (unlocked yes)
46 | (layer "F.Fab")
47 | (hide yes)
48 | (uuid "0a279097-fb8e-4256-8351-f65668097495")
49 | (effects
50 | (font
51 | (size 1 1)
52 | (thickness 0.15)
53 | )
54 | )
55 | )
56 | (property "Description" ""
57 | (at 0 0 0)
58 | (unlocked yes)
59 | (layer "F.Fab")
60 | (hide yes)
61 | (uuid "33b51e5b-386b-4a58-8dae-e5735447e6fe")
62 | (effects
63 | (font
64 | (size 1 1)
65 | (thickness 0.15)
66 | )
67 | )
68 | )
69 | (attr through_hole)
70 | (fp_line
71 | (start -2 -2)
72 | (end -2 1.25)
73 | (stroke
74 | (width 0.1)
75 | (type default)
76 | )
77 | (layer "F.SilkS")
78 | (uuid "d276074e-3eb1-41e3-ac25-8f9eeb8842a9")
79 | )
80 | (fp_line
81 | (start -2 1.25)
82 | (end -1.25 2)
83 | (stroke
84 | (width 0.1)
85 | (type default)
86 | )
87 | (layer "F.SilkS")
88 | (uuid "a0cd938d-69fd-4778-899c-eb62edbf048d")
89 | )
90 | (fp_line
91 | (start -1.25 2)
92 | (end 2 2)
93 | (stroke
94 | (width 0.1)
95 | (type default)
96 | )
97 | (layer "F.SilkS")
98 | (uuid "53cf1a29-b708-41d7-b5f3-3556ea5c1bd7")
99 | )
100 | (fp_line
101 | (start 2 -2)
102 | (end -2 -2)
103 | (stroke
104 | (width 0.1)
105 | (type default)
106 | )
107 | (layer "F.SilkS")
108 | (uuid "a70455ac-9fd6-4244-a066-171f4bf503db")
109 | )
110 | (fp_line
111 | (start 2 2)
112 | (end 2 -2)
113 | (stroke
114 | (width 0.1)
115 | (type default)
116 | )
117 | (layer "F.SilkS")
118 | (uuid "b7a22319-2db9-45dc-82b8-e1d76e88a7a3")
119 | )
120 | (fp_rect
121 | (start 1.6 -1.4)
122 | (end -1.6 1.4)
123 | (stroke
124 | (width 0.1)
125 | (type solid)
126 | )
127 | (fill none)
128 | (layer "User.2")
129 | (uuid "023d3fbb-47d4-4673-80bd-cec1d8598f6a")
130 | )
131 | (fp_rect
132 | (start 3 -1.4)
133 | (end -3 1.4)
134 | (stroke
135 | (width 0.1)
136 | (type default)
137 | )
138 | (fill none)
139 | (layer "User.2")
140 | (uuid "14011cdf-2739-41e7-ba89-c479e0afdf21")
141 | )
142 | (fp_text user "${REFERENCE}"
143 | (at 0 -2.032 0)
144 | (unlocked yes)
145 | (layer "F.Fab")
146 | (uuid "222f8e4d-c3d8-487f-b7eb-87c90827f1de")
147 | (effects
148 | (font
149 | (size 1 1)
150 | (thickness 0.15)
151 | )
152 | )
153 | )
154 | (pad "" np_thru_hole oval
155 | (at -1 0 90)
156 | (size 3.5 1.5)
157 | (drill oval 3.5 1.5)
158 | (layers "F&B.Cu" "*.Mask")
159 | (uuid "d335cf29-973d-48d2-9d86-023c8a6b979f")
160 | )
161 | (pad "" np_thru_hole oval
162 | (at 0 -1 180)
163 | (size 3.5 1.5)
164 | (drill oval 3.5 1.5)
165 | (layers "F&B.Cu" "*.Mask")
166 | (uuid "3df47cf9-27dc-4c4b-8145-5758815af33e")
167 | )
168 | (pad "" np_thru_hole oval
169 | (at 0 0 90)
170 | (size 3.5 1.5)
171 | (drill oval 3.5 1.5)
172 | (layers "F&B.Cu" "*.Mask")
173 | (uuid "05f55096-2580-4a59-ac5f-e7dca0ffc95b")
174 | )
175 | (pad "" np_thru_hole oval
176 | (at 0 1 180)
177 | (size 3.5 1.5)
178 | (drill oval 3.5 1.5)
179 | (layers "F&B.Cu" "*.Mask")
180 | (uuid "8b051ef9-20b6-45f2-965a-05da1d06395d")
181 | )
182 | (pad "" np_thru_hole oval
183 | (at 1 0 90)
184 | (size 3.5 1.5)
185 | (drill oval 3.5 1.5)
186 | (layers "F&B.Cu" "*.Mask")
187 | (uuid "7978914e-afc7-400b-8225-98ddfcac3a14")
188 | )
189 | (pad "1" smd rect
190 | (at 2.5 -0.762)
191 | (size 1.25 1)
192 | (layers "F.Cu" "F.Paste" "F.Mask")
193 | (uuid "ed7c6070-e4ae-4ef6-b84d-78cf2f579a28")
194 | )
195 | (pad "2" smd rect
196 | (at 2.5 0.762)
197 | (size 1.25 1)
198 | (layers "F.Cu" "F.Paste" "F.Mask")
199 | (uuid "6089f4bf-3836-4f78-ae63-fa92da1b501c")
200 | )
201 | (pad "3" smd rect
202 | (at -2.5 0.75)
203 | (size 1.25 1)
204 | (layers "F.Cu" "F.Paste" "F.Mask")
205 | (uuid "f91154ac-6669-46e5-b592-95a9a1e75aa5")
206 | )
207 | (pad "4" smd rect
208 | (at -2.5 -0.762)
209 | (size 1.25 1)
210 | (layers "F.Cu" "F.Paste" "F.Mask")
211 | (uuid "0c0396b6-ee7b-4ebf-8d4a-1ca94b57e18c")
212 | )
213 | )
214 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/main/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/main/main.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 51,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.6
16 | },
17 | "selection_filter": {
18 | "dimensions": true,
19 | "footprints": true,
20 | "graphics": true,
21 | "keepouts": true,
22 | "lockedItems": false,
23 | "otherItems": true,
24 | "pads": true,
25 | "text": true,
26 | "tracks": true,
27 | "vias": true,
28 | "zones": true
29 | },
30 | "visible_items": [
31 | 0,
32 | 1,
33 | 2,
34 | 3,
35 | 4,
36 | 5,
37 | 8,
38 | 9,
39 | 10,
40 | 12,
41 | 13,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36,
63 | 39,
64 | 40
65 | ],
66 | "visible_layers": "8083fff_ffffffff",
67 | "zone_display_mode": 0
68 | },
69 | "git": {
70 | "repo_password": "",
71 | "repo_type": "",
72 | "repo_username": "",
73 | "ssh_key": ""
74 | },
75 | "meta": {
76 | "filename": "main.kicad_prl",
77 | "version": 3
78 | },
79 | "project": {
80 | "files": []
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/main/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/main_panel/fabrication-toolkit-options.json:
--------------------------------------------------------------------------------
1 | {"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
--------------------------------------------------------------------------------
/mozc-doublesided/board/main_panel/main_panel.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 32,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.6
16 | },
17 | "selection_filter": {
18 | "dimensions": true,
19 | "footprints": true,
20 | "graphics": true,
21 | "keepouts": true,
22 | "lockedItems": false,
23 | "otherItems": true,
24 | "pads": true,
25 | "text": true,
26 | "tracks": true,
27 | "vias": true,
28 | "zones": true
29 | },
30 | "visible_items": [
31 | 0,
32 | 1,
33 | 2,
34 | 3,
35 | 4,
36 | 5,
37 | 8,
38 | 9,
39 | 10,
40 | 12,
41 | 13,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36,
63 | 39,
64 | 40
65 | ],
66 | "visible_layers": "00410fc_80000007",
67 | "zone_display_mode": 0
68 | },
69 | "git": {
70 | "repo_password": "",
71 | "repo_type": "",
72 | "repo_username": "",
73 | "ssh_key": ""
74 | },
75 | "meta": {
76 | "filename": "main_panel.kicad_prl",
77 | "version": 3
78 | },
79 | "project": {
80 | "files": []
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/main_panel/main_panel.kicad_sch:
--------------------------------------------------------------------------------
1 | (kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
2 | (paper "A4")
3 | (lib_symbols)
4 | (symbol_instances)
5 | )
6 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub/fabrication-toolkit-options.json:
--------------------------------------------------------------------------------
1 | {"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub/sub.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 37,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.6
16 | },
17 | "selection_filter": {
18 | "dimensions": true,
19 | "footprints": true,
20 | "graphics": true,
21 | "keepouts": true,
22 | "lockedItems": false,
23 | "otherItems": true,
24 | "pads": true,
25 | "text": true,
26 | "tracks": true,
27 | "vias": true,
28 | "zones": true
29 | },
30 | "visible_items": [
31 | 0,
32 | 1,
33 | 2,
34 | 3,
35 | 4,
36 | 5,
37 | 8,
38 | 9,
39 | 10,
40 | 12,
41 | 13,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36,
63 | 39,
64 | 40
65 | ],
66 | "visible_layers": "ffcffff_ffffffff",
67 | "zone_display_mode": 0
68 | },
69 | "git": {
70 | "repo_password": "",
71 | "repo_type": "",
72 | "repo_username": "",
73 | "ssh_key": ""
74 | },
75 | "meta": {
76 | "filename": "sub.kicad_prl",
77 | "version": 3
78 | },
79 | "project": {
80 | "files": []
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub/sub.rules:
--------------------------------------------------------------------------------
1 |
2 | (rules PCB sub
3 | (snap_angle
4 | fortyfive_degree
5 | )
6 | (autoroute_settings
7 | (fanout off)
8 | (autoroute on)
9 | (postroute on)
10 | (vias on)
11 | (via_costs 50)
12 | (plane_via_costs 5)
13 | (start_ripup_costs 100)
14 | (start_pass_no 277)
15 | (layer_rule F.Cu
16 | (active on)
17 | (preferred_direction vertical)
18 | (preferred_direction_trace_costs 1.0)
19 | (against_preferred_direction_trace_costs 5.0)
20 | )
21 | (layer_rule B.Cu
22 | (active on)
23 | (preferred_direction horizontal)
24 | (preferred_direction_trace_costs 1.0)
25 | (against_preferred_direction_trace_costs 1.3)
26 | )
27 | )
28 | (rule
29 | (width 130.0)
30 | (clear 130.0)
31 | (clear 65.0 (type smd_to_turn_gap))
32 | (clear 190.0 (type default_Power))
33 | (clear 32.6 (type smd_smd))
34 | (clear 190.0 (type smd_Power))
35 | (clear 190.0 (type "kicad_default"_Power))
36 | (clear 190.0 (type Power_Power))
37 | )
38 | (padstack "Via[0-1]_600:300_um"
39 | (shape
40 | (circle F.Cu 600.0 0.0 0.0)
41 | )
42 | (shape
43 | (circle B.Cu 600.0 0.0 0.0)
44 | )
45 | (attach off)
46 | )
47 | (via
48 | "Via[0-1]_600:300_um" "Via[0-1]_600:300_um" default
49 | )
50 | (via
51 | "Via[0-1]_600:300_um-kicad_default" "Via[0-1]_600:300_um" "kicad_default"
52 | )
53 | (via
54 | "Via[0-1]_600:300_um-Power" "Via[0-1]_600:300_um" Power
55 | )
56 | (via_rule
57 | default "Via[0-1]_600:300_um"
58 | )
59 | (via_rule
60 | "kicad_default" "Via[0-1]_600:300_um-kicad_default"
61 | )
62 | (via_rule
63 | Power "Via[0-1]_600:300_um-Power"
64 | )
65 | (class default
66 | (clearance_class default)
67 | (via_rule default)
68 | (rule
69 | (width 130.0)
70 | )
71 | (circuit
72 | (use_layer F.Cu B.Cu)
73 | )
74 | )
75 | (class "kicad_default"
76 | "Net-(D1-DOUT)" "Net-(D2-DOUT)" "Net-(D3-DOUT)" /LED2 /SW1 /SW2 /SW3 /SW4
77 | "Net-(D5-A)" "unconnected-(R2-Pad2)" "Net-(D6-A)" "Net-(D7-A)" "Net-(D8-A)" /COM2
78 | (clearance_class "kicad_default")
79 | (via_rule kicad_default)
80 | (rule
81 | (width 130.0)
82 | )
83 | (circuit
84 | (use_layer F.Cu B.Cu)
85 | )
86 | )
87 | (class Power
88 | +5V GND
89 | (clearance_class Power)
90 | (via_rule Power)
91 | (rule
92 | (width 200.0)
93 | )
94 | (circuit
95 | (use_layer F.Cu B.Cu)
96 | )
97 | )
98 | )
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub_panel/fabrication-toolkit-options.json:
--------------------------------------------------------------------------------
1 | {"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub_panel/sub_panel.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.6
16 | },
17 | "selection_filter": {
18 | "dimensions": true,
19 | "footprints": true,
20 | "graphics": true,
21 | "keepouts": true,
22 | "lockedItems": false,
23 | "otherItems": true,
24 | "pads": true,
25 | "text": true,
26 | "tracks": true,
27 | "vias": true,
28 | "zones": true
29 | },
30 | "visible_items": [
31 | 0,
32 | 1,
33 | 2,
34 | 3,
35 | 4,
36 | 5,
37 | 8,
38 | 9,
39 | 10,
40 | 12,
41 | 13,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36,
63 | 39,
64 | 40
65 | ],
66 | "visible_layers": "7ffffff_80000001",
67 | "zone_display_mode": 0
68 | },
69 | "git": {
70 | "repo_password": "",
71 | "repo_type": "",
72 | "repo_username": "",
73 | "ssh_key": ""
74 | },
75 | "meta": {
76 | "filename": "sub_panel.kicad_prl",
77 | "version": 3
78 | },
79 | "project": {
80 | "files": []
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/sub_panel/sub_panel.kicad_sch:
--------------------------------------------------------------------------------
1 | (kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
2 | (paper "A4")
3 | (lib_symbols)
4 | (symbol_instances)
5 | )
6 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/usb/fabrication-toolkit-options.json:
--------------------------------------------------------------------------------
1 | {"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
--------------------------------------------------------------------------------
/mozc-doublesided/board/usb/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/usb/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (version 7)
3 | (lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/usb/usb.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 44,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.6
16 | },
17 | "selection_filter": {
18 | "dimensions": true,
19 | "footprints": true,
20 | "graphics": true,
21 | "keepouts": true,
22 | "lockedItems": false,
23 | "otherItems": true,
24 | "pads": true,
25 | "text": true,
26 | "tracks": true,
27 | "vias": true,
28 | "zones": true
29 | },
30 | "visible_items": [
31 | 0,
32 | 1,
33 | 2,
34 | 3,
35 | 4,
36 | 5,
37 | 8,
38 | 9,
39 | 10,
40 | 12,
41 | 13,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36,
63 | 39,
64 | 40
65 | ],
66 | "visible_layers": "ff8ffff_ffffffff",
67 | "zone_display_mode": 1
68 | },
69 | "git": {
70 | "repo_password": "",
71 | "repo_type": "",
72 | "repo_username": "",
73 | "ssh_key": ""
74 | },
75 | "meta": {
76 | "filename": "usb.kicad_prl",
77 | "version": 3
78 | },
79 | "project": {
80 | "files": []
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/mozc-doublesided/board/usb/usb.rules:
--------------------------------------------------------------------------------
1 |
2 | (rules PCB mozc2024
3 | (snap_angle
4 | fortyfive_degree
5 | )
6 | (autoroute_settings
7 | (fanout off)
8 | (autoroute on)
9 | (postroute on)
10 | (vias on)
11 | (via_costs 50)
12 | (plane_via_costs 5)
13 | (start_ripup_costs 100)
14 | (start_pass_no 1467)
15 | (layer_rule F.Cu
16 | (active on)
17 | (preferred_direction vertical)
18 | (preferred_direction_trace_costs 1.0)
19 | (against_preferred_direction_trace_costs 5.0)
20 | )
21 | (layer_rule B.Cu
22 | (active on)
23 | (preferred_direction horizontal)
24 | (preferred_direction_trace_costs 1.0)
25 | (against_preferred_direction_trace_costs 1.3)
26 | )
27 | )
28 | (rule
29 | (width 200.0)
30 | (clear 200.0)
31 | (clear 100.0 (type smd_to_turn_gap))
32 | (clear 50.0 (type smd_smd))
33 | )
34 | (padstack "Via[0-1]_600:300_um"
35 | (shape
36 | (circle F.Cu 600.0 0.0 0.0)
37 | )
38 | (shape
39 | (circle B.Cu 600.0 0.0 0.0)
40 | )
41 | (attach off)
42 | )
43 | (via
44 | "Via[0-1]_600:300_um" "Via[0-1]_600:300_um" default
45 | )
46 | (via
47 | "Via[0-1]_600:300_um-kicad_default" "Via[0-1]_600:300_um" "kicad_default"
48 | )
49 | (via_rule
50 | default "Via[0-1]_600:300_um"
51 | )
52 | (via_rule
53 | "kicad_default" "Via[0-1]_600:300_um-kicad_default"
54 | )
55 | (class default
56 | (clearance_class default)
57 | (via_rule default)
58 | (rule
59 | (width 200.0)
60 | )
61 | (circuit
62 | (use_layer F.Cu B.Cu)
63 | )
64 | )
65 | (class "kicad_default"
66 | "Net-(D1-DOUT)" +5V "Net-(D1-DIN)" GND "Net-(D2-DOUT)" "Net-(D3-DOUT)" "Net-(D4-DOUT)" /SW1
67 | /SW2 /SW3 /SW4 /SDA +3.3V /RDYout /DP "Net-(U1-PB8)"
68 | /DM /SWCLK /SWDIO /SCL /RDYin /LED "unconnected-(U1-PA7-Pad13)" "unconnected-(U1-NRST-Pad4)"
69 | "unconnected-(U1-PA6-Pad12)" "unconnected-(R2-Pad2)"
70 | (clearance_class "kicad_default")
71 | (via_rule kicad_default)
72 | (rule
73 | (width 200.0)
74 | )
75 | (circuit
76 | (use_layer F.Cu B.Cu)
77 | )
78 | )
79 | )
--------------------------------------------------------------------------------
/mozc-doublesided/case/case00.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case00.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case01.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case01.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case02.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case02.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case03.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case03.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case04.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case04.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case05.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case05.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case06.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case06.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case07.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case07.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case08.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case08.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case09.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case09.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case10.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case10.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case11.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case11.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case12.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case12.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case13.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case13.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case14.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case14.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case15.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case15.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case16.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case16.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case17.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case17.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case18.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case18.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case19.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case19.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case20.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case20.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case21.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case21.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case22.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case22.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case23.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case23.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case24.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case24.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/case25.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/case25.stl
--------------------------------------------------------------------------------
/mozc-doublesided/case/jig.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/case/jig.stl
--------------------------------------------------------------------------------
/mozc-doublesided/examples/webhid.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
28 |
29 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.22)
2 |
3 | #
4 | # This file is generated only once,
5 | # and is not re-generated if converter is called multiple times.
6 | #
7 | # User is free to modify the file as much as necessary
8 | #
9 |
10 | # Setup compiler settings
11 | set(CMAKE_C_STANDARD 11)
12 | set(CMAKE_C_STANDARD_REQUIRED ON)
13 | set(CMAKE_C_EXTENSIONS ON)
14 |
15 |
16 | # Define the build type
17 | if(NOT CMAKE_BUILD_TYPE)
18 | set(CMAKE_BUILD_TYPE "Release")
19 | endif()
20 |
21 | # Set the project name
22 | set(CMAKE_PROJECT_NAME firmware)
23 |
24 | # Include toolchain file
25 | include("cmake/gcc-arm-none-eabi.cmake")
26 |
27 | # Enable compile command to ease indexing with e.g. clangd
28 | set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
29 |
30 | # Enable CMake support for ASM and C languages
31 | enable_language(C ASM)
32 |
33 | # Core project settings
34 | project(${CMAKE_PROJECT_NAME})
35 | message("Build type: " ${CMAKE_BUILD_TYPE})
36 |
37 | # Create an executable object type
38 | add_executable(${CMAKE_PROJECT_NAME})
39 |
40 | # Add STM32CubeMX generated sources
41 | add_subdirectory(cmake/stm32cubemx)
42 |
43 | # Link directories setup
44 | target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
45 | # Add user defined library search paths
46 | )
47 |
48 | # Add sources to executable
49 | target_sources(${CMAKE_PROJECT_NAME} PRIVATE
50 | # Add user sources here
51 | Core/Src/hid.c
52 | Core/Src/i2c.c
53 | Core/Src/led.c
54 | Core/Src/mozc.c
55 | )
56 |
57 | # Add include paths
58 | target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
59 | # Add user defined include paths
60 | )
61 |
62 | # Add project symbols (macros)
63 | target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
64 | # Add user defined symbols
65 | )
66 |
67 | # Add linked libraries
68 | target_link_libraries(${CMAKE_PROJECT_NAME}
69 | stm32cubemx
70 |
71 | # Add user defined libraries
72 | )
73 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Inc/hid.h:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #ifndef HID_H_
6 | #define HID_H_
7 |
8 | #include
9 |
10 | void hid_init(void);
11 | void hid_update(const uint8_t* keys);
12 | void hid_deinit(void);
13 |
14 | #endif // HID_H_
15 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Inc/i2c.h:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #ifndef I2C_H_
6 | #define I2C_H_
7 |
8 | #include
9 |
10 | void i2c_init(void);
11 | bool i2c_is_host(void);
12 | void i2c_activate_host(void);
13 | void i2c_maybe_listen(void);
14 |
15 | #endif // I2C_H_
16 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Inc/led.h:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #ifndef LED_H_
6 | #define LED_H_
7 |
8 | #include
9 |
10 | void led_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
11 | void led_flush(void);
12 |
13 | #endif // LED_H_
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Inc/mozc.h:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #ifndef MOZC_H_
6 | #define MOZC_H_
7 |
8 | void mozc_init(void);
9 | void mozc_loop(void);
10 |
11 | #endif // MOZC_H_
12 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Src/led.c:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #include "led.h"
6 |
7 | #include "main.h"
8 |
9 | extern SPI_HandleTypeDef hspi1;
10 |
11 | #define RESET_COUNT 16
12 | #define LED_COUNT 8
13 | #define DATA_LENGTH 6
14 | #define DMA_BUFFER_SIZE (RESET_COUNT + LED_COUNT * DATA_LENGTH + 1) << 1
15 |
16 | // 0xe: 1110 - HIGH
17 | // 0x8: 1000 - LOW
18 | static uint16_t dma_buffer[DMA_BUFFER_SIZE] = {
19 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // RESET
20 | 0, 0, 0, 0, 0, 0, // LED 0
21 | 0, 0, 0, 0, 0, 0, // LED 1
22 | 0, 0, 0, 0, 0, 0, // LED 2
23 | 0, 0, 0, 0, 0, 0, // LED 3
24 | 0, 0, 0, 0, 0, 0, // LED 4
25 | 0, 0, 0, 0, 0, 0, // LED 5
26 | 0, 0, 0, 0, 0, 0, // LED 6
27 | 0, 0, 0, 0, 0, 0, // LED 7
28 | 0xffff, // EOD
29 | };
30 |
31 | static uint32_t to_spi_value(uint8_t value) {
32 | uint32_t spi_value = 0;
33 | for (uint8_t bit_mask = 0x80; bit_mask != 0; bit_mask >>= 1) {
34 | spi_value <<= 4;
35 | if (value & bit_mask) {
36 | spi_value |= 0xe;
37 | } else {
38 | spi_value |= 0x8;
39 | }
40 | }
41 | return spi_value;
42 | }
43 |
44 | void set_spi_value(uint8_t offset, uint32_t value) {
45 | dma_buffer[RESET_COUNT + offset * 2 + 0] = value >> 16;
46 | dma_buffer[RESET_COUNT + offset * 2 + 1] = value & 0xffff;
47 | }
48 |
49 | void led_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
50 | set_spi_value(index * 3 + 0, to_spi_value(g));
51 | set_spi_value(index * 3 + 1, to_spi_value(r));
52 | set_spi_value(index * 3 + 2, to_spi_value(b));
53 | }
54 |
55 | void led_flush(void) {
56 | HAL_SPI_Transmit_DMA(&hspi1, (uint8_t *)dma_buffer, DMA_BUFFER_SIZE);
57 | }
58 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/Core/Src/mozc.c:
--------------------------------------------------------------------------------
1 | // Copyright 2024 Google Inc.
2 | // Use of this source code is governed by an Apache License that can be found in
3 | // the LICENSE file.
4 |
5 | #include "mozc.h"
6 |
7 | #include
8 | #include
9 |
10 | #include "i2c.h"
11 | #include "main.h"
12 |
13 | void mozc_init(void) { i2c_init(); }
14 |
15 | void mozc_loop(void) { i2c_maybe_listen(); }
16 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/STM32F042F6Px_FLASH.ld.diff:
--------------------------------------------------------------------------------
1 | *** STM32F042F6Px_FLASH.ld Sat Sep 21 21:47:11 2024
2 | --- STM32F042F6Px_FLASH.ld.fixed Sat Sep 21 21:47:59 2024
3 | ***************
4 | *** 53,59 ****
5 | ENTRY(Reset_Handler)
6 |
7 | /* Highest address of the user mode stack */
8 | ! _estack = ORIGIN() + LENGTH(); /* end of RAM */
9 | /* Generate a link error if heap and stack don't fit into RAM */
10 | _Min_Heap_Size = 0x200; /* required amount of heap */
11 | _Min_Stack_Size = 0x400; /* required amount of stack */
12 | --- 53,59 ----
13 | ENTRY(Reset_Handler)
14 |
15 | /* Highest address of the user mode stack */
16 | ! _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */
17 | /* Generate a link error if heap and stack don't fit into RAM */
18 | _Min_Heap_Size = 0x200; /* required amount of heap */
19 | _Min_Stack_Size = 0x400; /* required amount of stack */
20 | ***************
21 | *** 143,149 ****
22 |
23 | . = ALIGN(4);
24 | _edata = .; /* define a global symbol at data end */
25 | ! } > AT> FLASH
26 |
27 |
28 | /* Uninitialized data section */
29 | --- 143,149 ----
30 |
31 | . = ALIGN(4);
32 | _edata = .; /* define a global symbol at data end */
33 | ! } >RAM AT> FLASH
34 |
35 |
36 | /* Uninitialized data section */
37 | ***************
38 | *** 160,166 ****
39 | . = ALIGN(4);
40 | _ebss = .; /* define a global symbol at bss end */
41 | __bss_end__ = _ebss;
42 | ! } >
43 |
44 | /* User_heap_stack section, used to check that there is enough RAM left */
45 | ._user_heap_stack :
46 | --- 160,166 ----
47 | . = ALIGN(4);
48 | _ebss = .; /* define a global symbol at bss end */
49 | __bss_end__ = _ebss;
50 | ! } >RAM
51 |
52 | /* User_heap_stack section, used to check that there is enough RAM left */
53 | ._user_heap_stack :
54 | ***************
55 | *** 171,177 ****
56 | . = . + _Min_Heap_Size;
57 | . = . + _Min_Stack_Size;
58 | . = ALIGN(8);
59 | ! } >
60 |
61 |
62 |
63 | --- 171,177 ----
64 | . = . + _Min_Heap_Size;
65 | . = . + _Min_Stack_Size;
66 | . = ALIGN(8);
67 | ! } >RAM
68 |
69 |
70 |
71 | ***************
72 | *** 183,188 ****
73 | --- 183,189 ----
74 | libgcc.a ( * )
75 | }
76 |
77 | + .ARM.attributes 0 : { *(.ARM.attributes) }
78 | }
79 |
80 |
81 |
--------------------------------------------------------------------------------
/mozc-doublesided/firmware/prebuilt/mozc.elf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/firmware/prebuilt/mozc.elf
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/main_panel.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/gerber/main_panel.zip
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/main_panel_bom.csv:
--------------------------------------------------------------------------------
1 | Designator,Footprint,Quantity,Value,LCSC Part #
2 | "C1_9, C1_8, C1_7, C1_6, C1_5, C1_4, C1_3, C1_2, C1",0402,9,0.1u,
3 | "CUT1_9, CUT1_8, CUT1_7, CUT1_6, CUT1_5, CUT1_4, CUT1_3, CUT1_2, CUT1, CUT2_9, CUT2_8, CUT2_7, CUT2_6, CUT2_5, CUT2_4, CUT2_3, CUT2_2, CUT2",CUT,18,CUT,
4 | "D1_9, D1_8, D1_7, D1_6, D1_5, D1_4, D1_3, D1_2, D1, D2_9, D2_8, D2_7, D2_6, D2_5, D2_4, D2_3, D2_2, D2, D3_9, D3_8, D3_7, D3_6, D3_5, D3_4, D3_3, D3_2, D3, D4_9, D4_8, D4_7, D4_6, D4_5, D4_4, D4_3, D4_2, D4",SK6812MINIe (Reverse),36,SK6812MINIe,C5149201
5 | "D5_9, D5_8, D5_7, D5_6, D5_5, D5_4, D5_3, D5_2, D5, D6_9, D6_8, D6_7, D6_6, D6_5, D6_4, D6_3, D6_2, D6, D7_9, D7_8, D7_7, D7_6, D7_5, D7_4, D7_3, D7_2, D7, D8_9, D8_8, D8_7, D8_6, D8_5, D8_4, D8_3, D8_2, D8",0805,36,D,C109001
6 | "J2_9, J2_8, J2_7, J2_6, J2_5, J2_4, J2_3, J2_2, J2",JST_S8B_ZR,9,Conn_Upstream,C2845571
7 | "J3_9, J3_8, J3_7, J3_6, J3_5, J3_4, J3_3, J3_2, J3",JST_S8B_ZR,9,Conn_Downstream,C2845571
8 | "R1_9, R1_8, R1_7, R1_6, R1_5, R1_4, R1_3, R1_2, R1, R2_9, R2_8, R2_7, R2_6, R2_5, R2_4, R2_3, R2_2, R2",0402,18,510,
9 | "SW1_9, SW1_8, SW1_7, SW1_6, SW1_5, SW1_4, SW1_3, SW1_2, SW1, SW2_9, SW2_8, SW2_7, SW2_6, SW2_5, SW2_4, SW2_3, SW2_2, SW2, SW3_9, SW3_8, SW3_7, SW3_6, SW3_5, SW3_4, SW3_3, SW3_2, SW3, SW4_9, SW4_8, SW4_7, SW4_6, SW4_5, SW4_4, SW4_3, SW4_2, SW4",Keyswitch,36,SW_Push,C5184526
10 | "U1_9, U1_8, U1_7, U1_6, U1_5, U1_4, U1_3, U1_2, U1",TSSOP-20_4.4x6.5mm_P0.65mm,9,STM32F042F4Px,C81002
11 |
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/sub_panel.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/gerber/sub_panel.zip
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/sub_panel_bom.csv:
--------------------------------------------------------------------------------
1 | Designator,Footprint,Quantity,Value,LCSC Part #
2 | "D1_9, D1_8, D1_7, D1_6, D1_5, D1_4, D1_3, D1_2, D1, D2_9, D2_8, D2_7, D2_6, D2_5, D2_4, D2_3, D2_2, D2, D3_9, D3_8, D3_7, D3_6, D3_5, D3_4, D3_3, D3_2, D3, D4_9, D4_8, D4_7, D4_6, D4_5, D4_4, D4_3, D4_2, D4",SK6812MINIe (Reverse),36,SK6812MINIe,C5149201
3 | "D5_9, D5_8, D5_7, D5_6, D5_5, D5_4, D5_3, D5_2, D5, D6_9, D6_8, D6_7, D6_6, D6_5, D6_4, D6_3, D6_2, D6, D7_9, D7_8, D7_7, D7_6, D7_5, D7_4, D7_3, D7_2, D7, D8_9, D8_8, D8_7, D8_6, D8_5, D8_4, D8_3, D8_2, D8",0805,36,D,C109001
4 | "R2_9, R2_8, R2_7, R2_6, R2_5, R2_4, R2_3, R2_2, R2",0402,9,510,
5 | "SW1_9, SW1_8, SW1_7, SW1_6, SW1_5, SW1_4, SW1_3, SW1_2, SW1, SW2_9, SW2_8, SW2_7, SW2_6, SW2_5, SW2_4, SW2_3, SW2_2, SW2, SW3_9, SW3_8, SW3_7, SW3_6, SW3_5, SW3_4, SW3_3, SW3_2, SW3, SW4_9, SW4_8, SW4_7, SW4_6, SW4_5, SW4_4, SW4_3, SW4_2, SW4",Keyswitch,36,SW_Push,C5184526
6 |
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/sub_panel_positions.csv:
--------------------------------------------------------------------------------
1 | Designator,Mid X,Mid Y,Rotation,Layer
2 | D1_9,172.3,-91.4,180.0,bottom
3 | D1_8,134.3,-91.4,180.0,bottom
4 | D1_7,39.3,-91.4,180.0,bottom
5 | D1_6,191.3,-91.4,180.0,bottom
6 | D1_5,115.3,-91.4,180.0,bottom
7 | D1_4,77.3,-91.4,180.0,bottom
8 | D1_3,153.3,-91.4,180.0,bottom
9 | D1_2,96.3,-91.4,180.0,bottom
10 | D1,58.3,-91.4,180.0,bottom
11 | D2_9,77.3,-72.4,180.0,bottom
12 | D2_8,172.3,-72.4,180.0,bottom
13 | D2_7,134.3,-72.4,180.0,bottom
14 | D2_6,191.3,-72.4,180.0,bottom
15 | D2_5,115.3,-72.4,180.0,bottom
16 | D2_4,96.3,-72.4,180.0,bottom
17 | D2_3,39.3,-72.4,180.0,bottom
18 | D2_2,153.3,-72.4,180.0,bottom
19 | D2,58.3,-72.4,180.0,bottom
20 | D3_9,77.396,-53.4,180.0,bottom
21 | D3_8,172.396,-53.4,180.0,bottom
22 | D3_7,58.396,-53.4,180.0,bottom
23 | D3_6,134.396,-53.4,180.0,bottom
24 | D3_5,191.396,-53.4,180.0,bottom
25 | D3_4,115.396,-53.4,180.0,bottom
26 | D3_3,96.396,-53.4,180.0,bottom
27 | D3_2,153.396,-53.4,180.0,bottom
28 | D3,39.396,-53.4,180.0,bottom
29 | D4_9,115.396,-34.4,180.0,bottom
30 | D4_8,77.396,-34.4,180.0,bottom
31 | D4_7,39.396,-34.4,180.0,bottom
32 | D4_6,134.396,-34.4,180.0,bottom
33 | D4_5,172.396,-34.4,180.0,bottom
34 | D4_4,153.396,-34.4,180.0,bottom
35 | D4_3,58.396,-34.4,180.0,bottom
36 | D4_2,191.396,-34.4,180.0,bottom
37 | D4,96.396,-34.4,180.0,bottom
38 | D5_9,86.0,-95.5,270.0,bottom
39 | D5_8,181.0,-95.5,270.0,bottom
40 | D5_7,143.0,-95.5,270.0,bottom
41 | D5_6,200.0,-95.5,270.0,bottom
42 | D5_5,67.0,-95.5,270.0,bottom
43 | D5_4,105.0,-95.5,270.0,bottom
44 | D5_3,48.0,-95.5,270.0,bottom
45 | D5_2,124.0,-95.5,270.0,bottom
46 | D5,162.0,-95.5,270.0,bottom
47 | D6_9,162.0,-76.5,270.0,bottom
48 | D6_8,181.0,-76.5,270.0,bottom
49 | D6_7,143.0,-76.5,270.0,bottom
50 | D6_6,124.0,-76.5,270.0,bottom
51 | D6_5,67.0,-76.5,270.0,bottom
52 | D6_4,200.0,-76.5,270.0,bottom
53 | D6_3,105.0,-76.5,270.0,bottom
54 | D6_2,86.0,-76.5,270.0,bottom
55 | D6,48.0,-76.5,270.0,bottom
56 | D7_9,199.3,-58.3,180.0,bottom
57 | D7_8,180.3,-58.3,180.0,bottom
58 | D7_7,85.3,-58.3,180.0,bottom
59 | D7_6,161.3,-58.3,180.0,bottom
60 | D7_5,66.3,-58.3,180.0,bottom
61 | D7_4,123.3,-58.3,180.0,bottom
62 | D7_3,142.3,-58.3,180.0,bottom
63 | D7_2,47.3,-58.3,180.0,bottom
64 | D7,104.3,-58.3,180.0,bottom
65 | D8_9,200.0,-38.5,270.0,bottom
66 | D8_8,105.0,-38.5,270.0,bottom
67 | D8_7,67.0,-38.5,270.0,bottom
68 | D8_6,48.0,-38.5,270.0,bottom
69 | D8_5,181.0,-38.5,270.0,bottom
70 | D8_4,86.0,-38.5,270.0,bottom
71 | D8_3,162.0,-38.5,270.0,bottom
72 | D8_2,124.0,-38.5,270.0,bottom
73 | D8,143.0,-38.5,270.0,bottom
74 | R2_9,196.5,-34.0,180.0,bottom
75 | R2_8,44.5,-34.0,180.0,bottom
76 | R2_7,158.5,-34.0,180.0,bottom
77 | R2_6,177.5,-34.0,180.0,bottom
78 | R2_5,120.5,-34.0,180.0,bottom
79 | R2_4,101.5,-34.0,180.0,bottom
80 | R2_3,82.5,-34.0,180.0,bottom
81 | R2_2,139.5,-34.0,180.0,bottom
82 | R2,63.5,-34.0,180.0,bottom
83 | SW1_9,59.1,-100.3125,0.0,bottom
84 | SW1_8,154.1,-100.3125,0.0,bottom
85 | SW1_7,135.1,-100.3125,0.0,bottom
86 | SW1_6,78.1,-100.3125,0.0,bottom
87 | SW1_5,97.1,-100.3125,0.0,bottom
88 | SW1_4,173.1,-100.3125,0.0,bottom
89 | SW1_3,40.1,-100.3125,0.0,bottom
90 | SW1_2,116.1,-100.3125,0.0,bottom
91 | SW1,192.1,-100.3125,0.0,bottom
92 | SW2_9,116.1,-81.3125,0.0,bottom
93 | SW2_8,78.1,-81.3125,0.0,bottom
94 | SW2_7,173.1,-81.3125,0.0,bottom
95 | SW2_6,40.1,-81.3125,0.0,bottom
96 | SW2_5,135.1,-81.3125,0.0,bottom
97 | SW2_4,97.1,-81.3125,0.0,bottom
98 | SW2_3,154.1,-81.3125,0.0,bottom
99 | SW2_2,59.1,-81.3125,0.0,bottom
100 | SW2,192.1,-81.3125,0.0,bottom
101 | SW3_9,40.02,-62.3125,0.0,bottom
102 | SW3_8,59.02,-62.3125,0.0,bottom
103 | SW3_7,154.02,-62.3125,0.0,bottom
104 | SW3_6,97.02,-62.3125,0.0,bottom
105 | SW3_5,173.02,-62.3125,0.0,bottom
106 | SW3_4,135.02,-62.3125,0.0,bottom
107 | SW3_3,78.02,-62.3125,0.0,bottom
108 | SW3_2,116.02,-62.3125,0.0,bottom
109 | SW3,192.02,-62.3125,0.0,bottom
110 | SW4_9,78.02,-43.3125,0.0,bottom
111 | SW4_8,59.02,-43.3125,0.0,bottom
112 | SW4_7,192.02,-43.3125,0.0,bottom
113 | SW4_6,116.02,-43.3125,0.0,bottom
114 | SW4_5,173.02,-43.3125,0.0,bottom
115 | SW4_4,40.02,-43.3125,0.0,bottom
116 | SW4_3,154.02,-43.3125,0.0,bottom
117 | SW4_2,135.02,-43.3125,0.0,bottom
118 | SW4,97.02,-43.3125,0.0,bottom
119 |
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/usb.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/gerber/usb.zip
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/usb_bom.csv:
--------------------------------------------------------------------------------
1 | Designator,Footprint,Quantity,Value,LCSC Part #
2 | C1,0402,1,10u,
3 | C2,0402,1,2.2u,
4 | "C3, C4",0402,2,47p,
5 | J1,JST_S7B_ZR,1,JST_ZH_7P,C160734
6 | J2,USB_C_Receptacle_XKB_U262-16XN-4BVC11,1,USB,
7 | "R1, R2",0402,2,5.1K,
8 | "R3, R4",0402,2,22,
9 | R5,0402,1,1.5K,
10 | U1,SOT-223-3_TabPin2,1,AMS1117-3.3,C347222
11 |
--------------------------------------------------------------------------------
/mozc-doublesided/gerber/usb_positions.csv:
--------------------------------------------------------------------------------
1 | Designator,Mid X,Mid Y,Rotation,Layer
2 | C1,29.22,-34.47,0.0,top
3 | C2,33.27,-35.76,180.0,top
4 | C3,36.15,-39.65,270.0,top
5 | C4,36.15,-41.55,270.0,top
6 | J1,32.0,-48.5,0.0,top
7 | J2,32.01,-29.145,180.0,top
8 | R1,27.3,-35.55,0.0,top
9 | R2,27.31,-34.47,0.0,top
10 | R3,37.15,-41.55,270.0,top
11 | R4,37.15,-39.65,90.0,top
12 | R5,27.7,-44.1,90.0,top
13 | U1,32.0,-40.65,90.0,top
14 |
--------------------------------------------------------------------------------
/mozc-doublesided/images/connect_boards.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/connect_boards.png
--------------------------------------------------------------------------------
/mozc-doublesided/images/connections.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/connections.png
--------------------------------------------------------------------------------
/mozc-doublesided/images/header.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/header.webp
--------------------------------------------------------------------------------
/mozc-doublesided/images/pairing_case.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/pairing_case.webp
--------------------------------------------------------------------------------
/mozc-doublesided/images/pairing_helper.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/pairing_helper.webp
--------------------------------------------------------------------------------
/mozc-doublesided/images/pcb_pair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/pcb_pair.png
--------------------------------------------------------------------------------
/mozc-doublesided/images/pcb_primary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/pcb_primary.png
--------------------------------------------------------------------------------
/mozc-doublesided/images/pcb_swd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/pcb_swd.png
--------------------------------------------------------------------------------
/mozc-doublesided/images/primary_case.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/primary_case.webp
--------------------------------------------------------------------------------
/mozc-doublesided/images/primary_usb.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/primary_usb.webp
--------------------------------------------------------------------------------
/mozc-doublesided/images/usb_case.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-doublesided/images/usb_case.webp
--------------------------------------------------------------------------------
/mozc-furikku/README.md:
--------------------------------------------------------------------------------
1 | Copyright 2016 Google Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
14 |
15 |
16 | Summary
17 | =====================================
18 |
19 | Circuit diagram and firmware of Google Japanese Input physical flick version.
20 |
21 |
22 | Files
23 | =====================================
24 |
25 | * README.md -- this file
26 | * arduino/flick/* -- firmware source code (Arduino sketch)
27 | * circuit.png -- circuit diagram
28 | * photo/* -- for reference
29 |
30 |
31 | Building your device
32 | =====================================
33 |
34 | ## Electronic parts
35 |
36 | * Arduino Nano * 1
37 | * RN-42-I/RM * 1
38 | * SJoys 2-axes joystick module (Sainsmart) * 12
39 | * MCP3208 * 3
40 | * 0.1uF ceramic capacitor * 4
41 | * 470 ohm resistor * 1
42 | * 1k ohm resistor * 1
43 | * Connectors
44 |
45 | ## RN42 configuration
46 |
47 | This step is required for the first time, or when changing the device's name.
48 | See Microchip's documents for detail.
49 |
50 | 1. Run a terminal emulator and open the serial port for Arduino.
51 | 2. Type '!' to enter pass-through mode.
52 | 3. Type '$$$'.
53 | 4. Configure the module by these commands:
54 |
55 | * * * * * *
56 | SU,115k
57 | SM,6
58 | SA,2
59 | S~,6
60 | SH,0000
61 | SN,MY_PHYSICAL_FLICK_KEYBOARD
62 | R,1
63 | * * * * * *
64 | MY\_PHYSICAL\_FLICK\_KEYBOARD is a device name that will appear when you scan
65 | Bluetooth devices, and can be replaced by your preferred name.
66 |
67 | The commands will configure the module as follows:
68 |
69 | * 115200bps
70 | * Pairing mode
71 | * SSP "just works" mode
72 | * SPP profile
73 | * HID flag register = 0 (keyboard)
74 |
75 |
76 | Using flick input
77 | =====================================
78 |
79 | ## Power supply
80 |
81 | When operating the device, supply power by USB cables to Arduino Nano.
82 |
83 | ## Bluetooth pairing
84 |
85 | Using your device (e.g. Android phone), scan Bluetooth devices and you will
86 | find MY\_PHYSICAL\_FLICK\_KEYBOARD (or the name you set up) in the available
87 | device list.
88 |
89 | After pairing, find the device in the "physical keyboard" section and choose
90 | "English - U.S." keyboard layout for it.
91 |
92 | ## How to input
93 |
94 | Switch the Japanese IME on the paired device to romaji input mode.
95 | Characters will be input as flick or press a key.
96 |
--------------------------------------------------------------------------------
/mozc-furikku/arduino/flick/flick.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include "flick_keyboard.h"
3 |
4 | // Number of A/D converter ICs.
5 | const int kNumAdcIc = 3;
6 | const int kCsPins[kNumAdcIc] = {10, 9, 8};
7 |
8 | const int kButtonPins[12] = {
9 | // If you use Arduino Nano version 2, use A6 and A7 instead of A0 and A1.
10 | // (which are actually port C, thus used as digital input)
11 | A0, A1, A2, A3, A4, A5,
12 | 7, 6, 5, 4, 3, 2
13 | };
14 |
15 | FlickKeyboard keyboard;
16 |
17 | void setup() {
18 | Serial.begin(115200);
19 | for (size_t i = 0; i < kNumAdcIc; i++) {
20 | pinMode(kCsPins[i], OUTPUT);
21 | digitalWrite(kCsPins[i], HIGH);
22 | }
23 | for (size_t i = 0; i < 12; i++) {
24 | pinMode(kButtonPins[i], INPUT_PULLUP);
25 | }
26 | SPI.begin();
27 | SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
28 | }
29 |
30 | void SelectChip(uint8_t id) {
31 | if (id > kNumAdcIc) {
32 | return;
33 | }
34 | for (size_t i = 0; i < kNumAdcIc; i++) {
35 | digitalWrite(kCsPins[i], HIGH);
36 | }
37 | digitalWrite(kCsPins[id], LOW);
38 | }
39 |
40 | void DeselectChips() {
41 | for (size_t i = 0; i < kNumAdcIc; i++) {
42 | digitalWrite(kCsPins[i], HIGH);
43 | }
44 | }
45 |
46 | // Fetch a ADC result of a specified channel from a MCP3208.
47 | int16_t ReadMcp3208Adc(uint8_t chipId, uint8_t channel) {
48 | SelectChip(chipId);
49 | // MCP3208 receives only 5 bits for start.
50 | // Since the SPI library only supports bytewise tramsmission,
51 | // we send dummy (high-level) bits before the start bit.
52 | // Send data :
53 | // 3 dummy bits (000)
54 | // start bit (1)
55 | // select single-end (1)
56 | // 3 address bits: d2, d1, d0
57 | SPI.transfer(0x18 | channel);
58 | uint16_t b0 = SPI.transfer(0x00);
59 | uint16_t b1 = SPI.transfer(0x00);
60 | DeselectChips();
61 | // The first output bit is high-Z (sampling period).
62 | // The second bit is always 0.
63 | // Then the ADC value follows in MSB first format.
64 | // Therefore the first received byte contains 6 bits from MSB,
65 | // and the second byte contains the remainder.
66 | return ((b0 & 0x3f) << 6) | ((b1 & 0xfc) >> 2);
67 | }
68 |
69 | void ReadSwitches(bool* button) {
70 | for (size_t i = 0; i < 12; i++) {
71 | button[i] = (digitalRead(kButtonPins[i]) == LOW);
72 | }
73 | }
74 |
75 | void ReadVolumes(uint16_t* data) {
76 | byte inByte = 0;
77 | for (uint8_t j = 0; j < kNumAdcIc; j++) {
78 | for (uint8_t i = 0; i < 8; i++) {
79 | data[j * 8 + i] = ReadMcp3208Adc(j, i);
80 | }
81 | }
82 | }
83 |
84 | // Passes through any serial input to the output.
85 | // This mode can be used to configure RN-42 using serial terminal
86 | // connected to Arduino.
87 | void EchoBackMode() {
88 | while (true) {
89 | if (Serial.available()) {
90 | Serial.print((char)Serial.read());
91 | }
92 | }
93 | }
94 |
95 | void loop() {
96 | if (Serial.available() && Serial.read() == '!') {
97 | EchoBackMode();
98 | }
99 |
100 | SensorData keys;
101 | ReadVolumes(keys.axes);
102 | ReadSwitches(keys.button);
103 | int nOutputs;
104 | const char* outputs[COLS];
105 | keyboard.ProcessSensorData(keys, COLS, outputs, &nOutputs);
106 | for (size_t i = 0; i < nOutputs; i++) {
107 | Serial.print(outputs[i]);
108 | }
109 | }
110 |
111 |
--------------------------------------------------------------------------------
/mozc-furikku/arduino/flick/flick_keyboard.cpp:
--------------------------------------------------------------------------------
1 | #include "flick_keyboard.h"
2 | #include
3 |
4 | #define ADC_BITS 12
5 |
6 | void FlickKeyboard::ProcessSensorData(const SensorData& data, size_t maxKeyNum,
7 | const char** outputStrings, int* nOutputs) {
8 | const char* characters[COLS][ROWS] = {
9 | {"a", "i", "u", "e", "o"},
10 | {"ka", "ki", "ku", "ke", "ko"},
11 | {"sa", "si", "su", "se", "so"},
12 | {"ta", "ti", "tu", "te", "to"},
13 | {"na", "ni", "nu", "ne", "no"},
14 | {"ha", "hi", "hu", "he", "ho"},
15 | {"ma", "mi", "mu", "me", "mo"},
16 | {"ya", "(", "yu", ")", "yo"},
17 | {"ra", "ri", "ru", "re", "ro"},
18 | {"\n", "\b", "", " ", ""},
19 | {"wa", "wo", "nn", "-", "~"},
20 | {",", ".", "?", "!", "..."}
21 | };
22 | *nOutputs = 0;
23 | for (size_t i = 0; i < COLS; i++) {
24 | Direction s = ConvertToFlickState(data.axes[i * 2 + 1],
25 | data.axes[i * 2], data.button[i]);
26 | if (lastState[i] == NONE && s != NONE) {
27 | if (*nOutputs < maxKeyNum) {
28 | outputStrings[(*nOutputs)++] = characters[i][s];
29 | }
30 | }
31 | lastState[i] = s;
32 | }
33 | }
34 |
35 | FlickKeyboard::FlickKeyboard() {
36 | for (size_t i = 0; i < COLS; i++) {
37 | lastState[i] = NONE;
38 | }
39 | }
40 |
41 | Direction FlickKeyboard::ConvertToFlickState(
42 | int16_t x, int16_t y, bool buttonPressed) {
43 | const int16_t adScale = 1 << ADC_BITS;
44 | const int16_t adCenter = adScale / 2;
45 | const int16_t threshold = adScale * 0.4;
46 |
47 | int16_t diffX = x - adCenter;
48 | int16_t diffY = y - adCenter;
49 | if (buttonPressed) {
50 | return CENTER;
51 | }
52 | if (abs(diffX) > abs(diffY)) {
53 | if (diffX < -threshold) {
54 | return LEFT;
55 | } else if (diffX > threshold) {
56 | return RIGHT;
57 | }
58 | } else {
59 | if (diffY < -threshold) {
60 | return UP;
61 | } else if (diffY > threshold) {
62 | return DOWN;
63 | }
64 | }
65 | return NONE;
66 | }
67 |
68 |
--------------------------------------------------------------------------------
/mozc-furikku/arduino/flick/flick_keyboard.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | #define ROWS 5
7 | #define COLS 12 // Equals to the number of the keys.
8 |
9 | enum Direction {
10 | CENTER, LEFT, UP, RIGHT, DOWN, NONE
11 | };
12 |
13 | struct SensorData {
14 | uint16_t axes[COLS * 2];
15 | bool button[COLS];
16 | };
17 |
18 | class FlickKeyboard {
19 | private:
20 | Direction lastState[COLS];
21 | Direction ConvertToFlickState(int16_t x, int16_t y,
22 | bool buttonPressed);
23 | public:
24 | FlickKeyboard();
25 | void ProcessSensorData(const SensorData& data, size_t maxKeyNum,
26 | const char** outputStrings, int* nOutputs);
27 | };
28 |
29 |
--------------------------------------------------------------------------------
/mozc-furikku/circuit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-furikku/circuit.png
--------------------------------------------------------------------------------
/mozc-furikku/photo/device.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-furikku/photo/device.jpg
--------------------------------------------------------------------------------
/mozc-furikku/photo/jsmodule.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-furikku/photo/jsmodule.jpg
--------------------------------------------------------------------------------
/mozc-furikku/photo/keyboard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-furikku/photo/keyboard.jpg
--------------------------------------------------------------------------------
/mozc-mageru/README.md:
--------------------------------------------------------------------------------
1 | # Gboard Spoon Bending Version
2 |
3 | This contains programs, schematics and board layouts for Gboard Spoon Bending Version, which was released on **Apr 1, 2019**.
4 |
5 | This is not an officially supported Google product.
6 |
7 | # Contents
8 |
9 | Directory structure is as follows.
10 |
11 | - wireless/
12 | - firmware/
13 | - Firmware for the wireless version. (coming soon)
14 | - board/
15 | - Schematic and PCB layout made by EAGLE.
16 | - wired/
17 | - firmware/
18 | - Arduino sketch for the wired version.
19 | - ../third_party/mozc-mageru/spoon_stl/
20 | - Spoon shape data for 3D printing.
21 |
22 | # Wired Version
23 |
24 | ## The spoon
25 |
26 | Print the spoon under /third_party/mozc-mageru/spoon_stl/ using a 3D printer.
27 | This is an example design of a flexible spoon that has a slot to embed a
28 | flex sensor into.
29 | We have tried it with PLA, but it will probably work with ABS as well.
30 |
31 | ## Electronic circuit
32 |
33 | - Arduino Micro
34 | - 22k-ohm resistor
35 | - Flex sensor: FS-L-0055-253-ST (Spectra Symbol)
36 |
37 | ```
38 | Arduino Micro
39 |
40 | 5V ---[22k ohm]-------+
41 | |
42 | A5 -------------------+
43 | |
44 | GND ---[Flex sensor]---+
45 | ```
46 |
47 | ## How to use the firmware
48 |
49 | 1. Open the sketch on Arduino IDE.
50 | 2. Choose "Arduino/Genuino Micro" in the [Tools]-[Board] menu.
51 | 3. If you are making Japanse-hiragana version, add ```#define JAPANESE_``` to the first line of the sketch
52 | 4. Upload to board.
53 |
54 | ## Sensor calibration
55 |
56 | 1. Open Serial Monitor.
57 | 2. Send '!' once to disable key output.
58 | 3. (the home position, which decides when to commit a character)
59 | Bend the sensor slightly and send '0'. Make sure the LED turns off when the spoon is not bent by external force.
60 | 4. (the position for the first letter)
61 | Bend the sensor slightly a bit more and send '1'.
62 | 5. (the position for the last letter)
63 | Bend the sensor to the end and send '2'.
64 | 6. Send 'w' to save the configuration to EEPROM.
65 | 7. Send '!' again to enable key output, or reset the device.
66 |
67 | # Wireless Version
68 |
69 | Coming soon.
70 |
71 | # License
72 |
73 | ```
74 | Licensed under the Apache License, Version 2.0 (the "License"); you may
75 | not use this file except in compliance with the License. You may obtain
76 | a copy of the License at
77 |
78 | http://www.apache.org/licenses/LICENSE-2.0
79 |
80 | Unless required by applicable law or agreed to in writing, software
81 | distributed under the License is distributed on an "AS IS" BASIS,
82 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
83 | See the License for the specific language governing permissions and
84 | limitations under the License.
85 | ```
86 |
--------------------------------------------------------------------------------
/mozc-mageru/wireless/board/board-bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-mageru/wireless/board/board-bottom.png
--------------------------------------------------------------------------------
/mozc-mageru/wireless/board/board-top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-mageru/wireless/board/board-top.png
--------------------------------------------------------------------------------
/mozc-mageru/wireless/board/schematic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-mageru/wireless/board/schematic.png
--------------------------------------------------------------------------------
/mozc-nazoru/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 | MANIFEST
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 | .pytest_cache/
49 |
50 | # Translations
51 | *.mo
52 | *.pot
53 |
54 | # Django stuff:
55 | *.log
56 | .static_storage/
57 | .media/
58 | local_settings.py
59 |
60 | # Flask stuff:
61 | instance/
62 | .webassets-cache
63 |
64 | # Scrapy stuff:
65 | .scrapy
66 |
67 | # Sphinx documentation
68 | docs/_build/
69 |
70 | # PyBuilder
71 | target/
72 |
73 | # Jupyter Notebook
74 | .ipynb_checkpoints
75 |
76 | # pyenv
77 | .python-version
78 |
79 | # celery beat schedule file
80 | celerybeat-schedule
81 |
82 | # SageMath parsed files
83 | *.sage.py
84 |
85 | # Environments
86 | .env
87 | .venv
88 | env/
89 | venv/
90 | ENV/
91 | env.bak/
92 | venv.bak/
93 |
94 | # Spyder project settings
95 | .spyderproject
96 | .spyproject
97 |
98 | # Rope project settings
99 | .ropeproject
100 |
101 | # mkdocs documentation
102 | /site
103 |
104 | # mypy
105 | .mypy_cache/
106 |
107 | # macOS filesystem
108 | .DS_Store
109 |
110 | # Uncompressed training data
111 | data/strokes.ndjson
112 | nazoru_saved_model/
113 | nazoru.pb
114 | optimized_nazoru.pb
115 |
--------------------------------------------------------------------------------
/mozc-nazoru/bin/nazoru-input:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 | #
4 | # Copyright 2018 Google LLC
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 |
18 | from __future__ import print_function
19 |
20 | # Surpress warnings. Please unvail these warnings when development.
21 | import warnings
22 | warnings.filterwarnings("ignore", category=RuntimeWarning)
23 | warnings.filterwarnings("ignore", category=FutureWarning)
24 |
25 | from nazoru.led import LED_BLUE, LED_RED, LED_CHASSIS
26 | import time
27 | LED_RED.blink(1)
28 | LED_CHASSIS.on()
29 | time.sleep(1)
30 | LED_CHASSIS.off()
31 |
32 | import argparse
33 | import os
34 | import unicodedata
35 | from nazoru import get_default_graph_path
36 | from nazoru.core import (
37 | create_keyboard_recorder, Bluetooth, NazoruPredictor, clear_screen)
38 |
39 | def main():
40 | FLAGS = None
41 | parser = argparse.ArgumentParser()
42 | parser.add_argument('-g', '--graph',
43 | type=str,
44 | default=get_default_graph_path(),
45 | help='Path to a trained model which is generated by ' +
46 | 'nazoru-training.')
47 | parser.add_argument('-v', '--verbose', action='store_true')
48 | FLAGS, unparsed = parser.parse_known_args()
49 |
50 | LED_RED.blink(0.3)
51 |
52 | bt_connection = Bluetooth()
53 | try:
54 | recorder = create_keyboard_recorder(verbose=FLAGS.verbose)
55 | except IOError as e:
56 | LED_RED.off()
57 | LED_BLUE.off()
58 | raise e
59 | predictor = NazoruPredictor(FLAGS.graph)
60 |
61 | LED_RED.off()
62 | LED_BLUE.blink(1)
63 | LED_CHASSIS.set_brightness(5)
64 |
65 | print('Ready. Please scrrible on your keyboard.')
66 | while True:
67 | data, command = recorder.record()
68 | if command is not None:
69 | print('command: %s' % command)
70 | bt_connection.command(command)
71 | continue
72 | if data is None:
73 | print('done.')
74 | break
75 |
76 | LED_CHASSIS.set_brightness(100)
77 | LED_RED.on()
78 | try:
79 | result = predictor.predict_top_n(data, 5)
80 | except IndexError:
81 | # This is possible when pressing keys we don't use for learning.
82 | print('Invalid input. (out of range)')
83 | continue
84 | except ValueError:
85 | # This is possible when pressing only one key.
86 | print('Invalid input. (one key)')
87 | continue
88 | LED_RED.off()
89 | LED_CHASSIS.set_brightness(5)
90 |
91 | clear_screen()
92 | print('\n===== RESULTS =====')
93 | for item in result:
94 | if unicodedata.east_asian_width(item[0]) in {'W', 'F'}:
95 | surface = item[0]
96 | else:
97 | surface = item[0] + ' '
98 | print(u'%s (%4s): %.5f' % (surface, item[1], item[2]))
99 | print('===================\n')
100 |
101 | most_likely_result = result[0]
102 | print(u'prediction: %s (%s)' % (
103 | most_likely_result[0], most_likely_result[1]))
104 | bt_connection.send(most_likely_result[1])
105 |
106 | if __name__ == '__main__':
107 | main()
108 |
--------------------------------------------------------------------------------
/mozc-nazoru/board/schematic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-nazoru/board/schematic.png
--------------------------------------------------------------------------------
/mozc-nazoru/data/nazoru.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=nazoru-input daemon
3 |
4 | [Service]
5 | Type=simple
6 | Environment=PYTHONIOENCODING=utf-8
7 | ExecStart=/usr/bin/env nazoru-input
8 | StandardOutput=syslog
9 | StandardError=syslog
10 | SyslogIdentifier=nazoru-input
11 | Restart=always
12 | RestartSec=10
13 |
14 | [Install]
15 | WantedBy=multi-user.target
16 |
--------------------------------------------------------------------------------
/mozc-nazoru/data/strokes.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-nazoru/data/strokes.zip
--------------------------------------------------------------------------------
/mozc-nazoru/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 | #
4 | # Copyright 2018 Google LLC
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 |
18 | import codecs
19 | import os
20 | from setuptools import setup, find_packages
21 |
22 | def read_file(name):
23 | with codecs.open(
24 | os.path.join(os.path.dirname(__file__), name), 'r', 'utf-8') as f:
25 | return f.read().strip()
26 |
27 | setup(
28 | name='nazoru-input',
29 | version='0.1.2',
30 | author='Makoto Shimazu',
31 | author_email='shimazu@google.com',
32 | url='https://landing.google.com/tegaki',
33 | description='Package for Gboard Physical Handwriting Version',
34 | long_description=read_file('README.rst'),
35 | license='Apache',
36 | classifiers=[
37 | 'Development Status :: 3 - Alpha',
38 | 'Environment :: Console',
39 | 'Environment :: No Input/Output (Daemon)',
40 | 'Operating System :: OS Independent',
41 | 'Programming Language :: Python',
42 | 'License :: OSI Approved :: Apache Software License',
43 | 'Topic :: Scientific/Engineering :: Artificial Intelligence',
44 | 'Topic :: Software Development :: Libraries :: Python Modules',
45 | 'Topic :: Utilities',
46 | ],
47 | packages=find_packages('src'),
48 | package_dir={'': 'src'},
49 | package_data={
50 | 'nazoru': ['data/optimized_nazoru.pb']
51 | },
52 | scripts=[
53 | 'bin/nazoru-input',
54 | 'bin/nazoru-training'
55 | ],
56 |
57 | # For installing the nazoru_input as a service of systemd. Please uncomment
58 | # the following |data_files| if you want to install nazoru.service.
59 | # data_files=[('/etc/systemd/system', ['data/nazoru.service'])],
60 |
61 | install_requires=[
62 | 'cairocffi',
63 | 'pillow',
64 | 'tensorflow~=2.12.1',
65 | 'tf_slim~=1.1.0',
66 | 'enum34;python_version<"3.4"',
67 | 'pyserial',
68 | 'evdev;platform_system=="Linux"',
69 | 'wiringpi;platform_system=="Linux"'
70 | ],
71 | python_requires='>=3.8, <3.12'
72 | )
73 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | def get_default_graph_path():
4 | import os
5 | script_dir = os.path.dirname(os.path.abspath(__file__))
6 | return os.path.join(script_dir, 'data', 'optimized_nazoru.pb')
7 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/bluetooth.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | import serial
18 | import struct
19 |
20 | class Bluetooth():
21 | DEVICE_FILE = '/dev/serial0'
22 | BAUDRATE = 115200
23 |
24 | def __init__(self):
25 | try:
26 | self._conn = serial.Serial(self.DEVICE_FILE, self.BAUDRATE)
27 | self._dummy = False
28 | print('Bluetooth')
29 | except serial.SerialException:
30 | self._conn = None
31 | self._dummy = True
32 | print('Dummy Bluetooth')
33 |
34 | def send(self, string):
35 | """Send |string| as a series of characters. |string| should be
36 | alphabets, numbers and symbols which can be typed from your keyboard."""
37 | if self._dummy:
38 | print('bluetooth: {}'.format(string))
39 | return
40 | self._conn.write(string)
41 |
42 | # See http://ww1.microchip.com/downloads/en/DeviceDoc/bluetooth_cr_UG-v1.0r.pdf
43 | # for detail.
44 | UART_CODES = {
45 | 'KEY_DELETE': 4,
46 | 'KEY_RIGHT': 7,
47 | 'KEY_BACKSPACE': 8,
48 | 'KEY_ENTER': 10,
49 | 'KEY_LEFT': 11,
50 | 'KEY_DOWN': 12,
51 | 'KEY_UP': 14,
52 | }
53 |
54 | def command(self, cmd):
55 | if cmd not in self.UART_CODES:
56 | print('Unknown Command: {}'.format(cmd))
57 | return
58 | if self._dummy:
59 | print('bluetooth: command({})'.format(cmd))
60 | return
61 | self.send(struct.pack('b', self.UART_CODES[cmd]))
62 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/core.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | from __future__ import absolute_import
18 |
19 | from . import lib
20 | from .bluetooth import Bluetooth
21 | from .keyboard_recorder import create_keyboard_recorder
22 | from .nazorunet import nazorunet
23 | from .nazorunet import Conv
24 | from .nazorunet import DepthSepConv
25 | from .predictor import NazoruPredictor
26 | from .utils import clear_screen
27 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/data/optimized_nazoru.pb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-nazoru/src/nazoru/data/optimized_nazoru.pb
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/led.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 | # vim: set fileencoding=utf-8 :
4 | #
5 | # Copyright 2018 Google LLC
6 | #
7 | # Licensed under the Apache License, Version 2.0 (the "License");
8 | # you may not use this file except in compliance with the License.
9 | # You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing, software
14 | # distributed under the License is distributed on an "AS IS" BASIS,
15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | # See the License for the specific language governing permissions and
17 | # limitations under the License.
18 |
19 | class LEDBase(object):
20 | def __init__(self, pin):
21 | self._pin = pin
22 | def on(self):
23 | pass
24 | def off(self):
25 | pass
26 | def blink(self, interval):
27 | pass
28 | def set_brightness(self, brightness):
29 | pass
30 |
31 | try:
32 | import RPi.GPIO as GPIO
33 | import threading
34 | GPIO.setmode(GPIO.BOARD)
35 |
36 | class LED(LEDBase):
37 | ON = 'ON'
38 | OFF = 'OFF'
39 |
40 | def __init__(self, pin):
41 | self._pin = pin
42 | self._lock = threading.Lock()
43 | self._timer = None
44 | GPIO.setup(pin, GPIO.OUT)
45 | self.off()
46 |
47 | def on(self):
48 | with self._lock:
49 | self._state = self.ON
50 | GPIO.output(self._pin, False)
51 | self._ensure_stop_timer()
52 |
53 | def off(self):
54 | with self._lock:
55 | self._state = self.OFF
56 | GPIO.output(self._pin, True)
57 | self._ensure_stop_timer()
58 |
59 | def blink(self, interval):
60 | self._ensure_stop_timer()
61 | def toggle():
62 | self._timer = None
63 | if self._state == self.ON:
64 | self.off()
65 | else:
66 | self.on()
67 | self._timer = threading.Timer(interval, toggle)
68 | self._timer.daemon = True
69 | self._timer.start()
70 | toggle()
71 |
72 | def _ensure_stop_timer(self):
73 | if self._timer is not None:
74 | self._timer.cancel()
75 | self._timer = None
76 |
77 | import wiringpi
78 | wiringpi.wiringPiSetupPhys()
79 | class SlowLED(LEDBase):
80 | DUTY_MAX = 1024
81 | INTERVAL_MS = 10
82 |
83 | def __init__(self, pin, delay_ms):
84 | self._pin = pin
85 | self._delay_ms = delay_ms
86 | wiringpi.pinMode(pin, wiringpi.GPIO.PWM_OUTPUT)
87 | self._target_duty = 0
88 | self._current_duty = 0
89 | self._remaining_cycles = 0
90 | self._lock = threading.Lock()
91 | self._timer = None
92 | self.off()
93 |
94 | # Called every 10ms
95 | def _update(self):
96 | with self._lock:
97 | diff = (self._target_duty - self._current_duty) // \
98 | self._remaining_cycles
99 | self._current_duty += diff
100 | self._remaining_cycles -= 1
101 | self._set_duty_immediate(self._current_duty)
102 | if self._remaining_cycles == 0:
103 | self._timer.cancel()
104 | self._timer = None
105 | return
106 | self._timer = threading.Timer(self.INTERVAL_MS * 0.001, self._update)
107 | self._timer.daemon = True
108 | self._timer.start()
109 |
110 |
111 | # |duty|: 0 - 100
112 | def _set_duty_immediate(self, duty):
113 | wiringpi.pwmWrite(self._pin, int(self.DUTY_MAX * duty // 100))
114 |
115 | def _set_duty_slow(self, duty, time_ms):
116 | with self._lock:
117 | self._target_duty = duty
118 | self._remaining_cycles = time_ms // self.INTERVAL_MS
119 | if self._timer is None:
120 | self._timer = threading.Timer(self.INTERVAL_MS * 0.001, self._update)
121 | self._timer.daemon = True
122 | self._timer.start()
123 |
124 | def on(self):
125 | self._set_duty_slow(100, self._delay_ms)
126 |
127 | def off(self):
128 | self._set_duty_slow(0, self._delay_ms)
129 |
130 | # |brightness|: 0 - 100
131 | def set_brightness(self, brightness):
132 | self._set_duty_slow(brightness, self._delay_ms)
133 |
134 | except ImportError as e:
135 | import sys
136 |
137 | class LED(LEDBase):
138 | pass
139 | class SlowLED(LEDBase):
140 | def __init__(self, pin, delay_ms):
141 | super(SlowLED, self).__init__(pin)
142 |
143 | LED_BLUE = LED(38)
144 | LED_RED = LED(40)
145 | LED_CHASSIS = SlowLED(32, 500)
146 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/nazoru_test.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | import unittest
18 | import nazoru
19 |
20 | class TestNazoru(unittest.TestCase):
21 | """Test class for nazoru.py"""
22 |
23 | def test_key2pos(self):
24 | pos = nazoru.key2pos('a', ['abc', 'def'], 0.5)
25 | self.assertEqual((0,0), pos)
26 | pos = nazoru.key2pos('e', ['abc', 'def'], 0.5)
27 | self.assertEqual((1.5,1), pos)
28 |
29 | if __name__ == "__main__":
30 | unittest.main()
31 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/predictor.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | from __future__ import absolute_import
18 |
19 | import tensorflow as tf
20 | from . import lib
21 | from . import utils
22 | import numpy as np
23 |
24 | def _load_graph(model_file):
25 | graph = tf.Graph()
26 | graph_def = tf.compat.v1.GraphDef()
27 | with open(model_file, "rb") as f:
28 | graph_def.ParseFromString(f.read())
29 | with graph.as_default():
30 | tf.import_graph_def(graph_def)
31 | return graph
32 |
33 | class NazoruPredictor():
34 | def __init__(self, model_file):
35 | graph = _load_graph(model_file)
36 | self._graph = graph
37 | self._input_operation = graph.get_operation_by_name(
38 | 'import/' + lib.INPUT_NODE_NAME)
39 | self._output_operation = graph.get_operation_by_name(
40 | 'import/' + lib.OUTPUT_NODE_NAME)
41 |
42 | def _predict(self, data):
43 | with utils.Measure('inputs'):
44 | inputs = lib.keydowns2image(data, True, True, 16, 2)
45 | inputs = np.expand_dims(inputs, axis=0)
46 | with utils.Measure('sess.run'):
47 | with tf.compat.v1.Session(graph=self._graph) as sess:
48 | result = sess.run(self._output_operation.outputs[0],
49 | {self._input_operation.outputs[0]: inputs})[0]
50 | return result
51 | def predict_top_n(self, data, n):
52 | """Predict the charactor drawn by |data|.
53 |
54 | Args:
55 | data: [(key, time)] |time| is elapsed time since the first character in ms.
56 | n: integer of the number of the return value.
57 | Returns:
58 | ans: [(kana, key, probability)] sorted by the probability.
59 | """
60 | result = self._predict(data)
61 | ans = []
62 | for i in result.argsort()[::-1][:n]:
63 | ans.append((lib.KANAS[i], lib.KEYS[i], result[i]))
64 | return ans
65 |
--------------------------------------------------------------------------------
/mozc-nazoru/src/nazoru/utils.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Copyright 2018 Google LLC
4 | #
5 | # Licensed under the Apache License, Version 2.0 (the "License");
6 | # you may not use this file except in compliance with the License.
7 | # You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing, software
12 | # distributed under the License is distributed on an "AS IS" BASIS,
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | # See the License for the specific language governing permissions and
15 | # limitations under the License.
16 |
17 | import time
18 | import sys
19 |
20 | class Measure():
21 | def __init__(self, tag):
22 | self._tag = tag
23 |
24 | def __enter__(self):
25 | self._start = time.time()
26 |
27 | def __exit__(self, type, value, traceback):
28 | now = time.time()
29 | print('[{0}] {1} ms'.format(self._tag, (now - self._start)*1E3))
30 |
31 | def clear_screen():
32 | sys.stdout.write('\033[2J')
33 | sys.stdout.write('\033[H')
34 | sys.stdout.flush()
35 |
--------------------------------------------------------------------------------
/mozc-piropiro/README.md:
--------------------------------------------------------------------------------
1 | Copyright 2015 Google Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
14 |
15 |
16 | Summary
17 | =====================================
18 |
19 | Mechanical design, circuit diagram and firmware of Google Japanese Input
20 | piropiro version.
21 |
22 |
23 | Files
24 | =====================================
25 |
26 | * arduino/piropiro/piropiro.ino -- firmware source code (Arduino sketch)
27 | * stl/* -- 3D shape data of mechanical parts
28 | * README.txt -- this file
29 | * assembly.png -- mechanical assembly instruction
30 | * circuit.png -- circuit diagram
31 | * example.jpg -- photograph of an example device
32 |
33 |
34 | Building your device
35 | =====================================
36 |
37 | ## Mechanical parts
38 |
39 | Output all mechanical parts under stl/ directory with a 3D printer.
40 | Additionally, you need these parts.
41 |
42 | * M2x4 scerws x7
43 | * M2 washer (inside diameter=2.2mm, outside diameter=5.8mm) x1
44 | * A party horn x1
45 |
46 | ## Electronic parts
47 |
48 | * Arduino Nano
49 | Some other models of Arduino (e.g. Arduino Uno) can be used
50 | if required function is available.
51 | * RN-42-EK or a compatible evaluation kit
52 | RN-42 can be used instead if wired appropriately.
53 | * GP2Y0E02A distance sensor
54 | * 1/8W Resistors
55 | * 1k
56 | * 470
57 | * Breadboard and jump wires
58 |
59 | ## Assembly
60 |
61 | See the circuit diagram and mechanical assembly instruction images.
62 |
63 | Also refer the example device in the photo.
64 |
65 | ## RN42 module configuration
66 |
67 | This step is required for the first time, or when changing the device's name.
68 | Note that you should not connect Arduino Nano when you configure RN-42-EK via
69 | USB, because signal from Arduino Nano overrides the TxD signal on RN-42-EK.
70 | See Microchip's documents for detail.
71 |
72 | 1. Connect RN-42-EK to your PC by USB.
73 | 2. Run a terminal emulator and open the serial port for RN-42-EK.
74 | 3. Type '$$$'. Make sure 'CMD' is returned from RN-42-EK and the green LED on
75 | RN-42-EK blinks fast.
76 | 4. Configure the module by these commands:
77 |
78 | * * * * * *
79 | SU,115k
80 | SM,6
81 | SA,2
82 | S~,6
83 | SH,0000
84 | SN,MY_PIROPIRO_KEYBOARD
85 | R,1
86 | * * * * * *
87 | MY\_PIROPIRO\_KEYBOARD is a device name that will appear when you scan Bluetooth
88 | devices, and can be replaced by your preferred name.
89 |
90 | The commands will configure the module as follows:
91 |
92 | * 115200bps
93 | * Pairing mode
94 | * SSP "just works" mode
95 | * SPP profile
96 | * HID flag register = 0 (keyboard)
97 |
98 |
99 | Using piropiro input
100 | =====================================
101 |
102 | ## Power supply
103 |
104 | When operating the device, supply power by USB cables to both RN-42-EK and
105 | Arduino Nano. You can alternatively supply 3.3V power to RN-42-EK from Arduino's
106 | 3.3V pin, but this requires a modification on RN-42-EK to disconnect the
107 | regulator's output pin on it from the circuit.
108 |
109 | ## Sensor adjustment
110 |
111 | 1. Attach the device to your party horn. The sensor should be positioned about
112 | 40mm apart from the rolled paper tube.
113 | 2. Turn on Arduino Nano and adjust the optical axis of the sensor. The LED on
114 | Arduino board is lit while the sensor is collectly sensing the tip of the
115 | paper tube between 50mm -- 350mm.
116 |
117 | ## Bluetooth pairing
118 |
119 | Using your device (e.g. Android phone), scan Bluetooth devices and you will
120 | find MY\_PIROPIRO\_KEYBOARD (or the name you set up) in the available device
121 | list.
122 |
123 | ## How to input
124 |
125 | Switch the Japanese IME on the paired device to romaji input mode.
126 | Characters will be input as you blow the horn.
127 | The length of the horn chooses the vowel.
128 | In order to switch to the next column (consonant), quickly shrink the horn and blow it again.
129 |
--------------------------------------------------------------------------------
/mozc-piropiro/arduino/piropiro/piropiro.ino:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015 Google Inc.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /*
18 | * Firmware of piropiro (party horn) Bluetooth keyboard.
19 | */
20 |
21 | #define V_REF 5.0
22 | #define PIN_LED 13
23 | #define N_AD_SAMPLES 10
24 |
25 | #define INTERVAL_MSEC 20
26 | #define COMMIT_TIME (600 / INTERVAL_MSEC)
27 |
28 | #define ROWS 5
29 | #define COLS 10
30 |
31 | const char* characters[ROWS * COLS] = {
32 | "a", "i", "u", "e", "o",
33 | "ka", "ki", "ku", "ke", "ko",
34 | "sa", "si", "su", "se", "so",
35 | "ta", "ti", "tu", "te", "to",
36 | "na", "ni", "nu", "ne", "no",
37 | "ha", "hi", "hu", "he", "ho",
38 | "ma", "mi", "mu", "me", "mo",
39 | "ya", "ya", "yu", "yu", "yo",
40 | "ra", "ri", "ru", "re", "ro",
41 | "wa", "wo", "nn", ",", "."
42 | };
43 |
44 | int column = 0;
45 | int vowel = 0;
46 | int release_duration = 0;
47 |
48 | void setup() {
49 | Serial.begin(115200);
50 | pinMode(PIN_LED, OUTPUT);
51 | column = 0;
52 | vowel = 0;
53 | }
54 |
55 | float getVoltage(int ch) {
56 | return analogRead(ch) * V_REF / 1023;
57 | }
58 |
59 | float getAverageVoltage(int ch) {
60 | float sum = 0.0;
61 | for (int i = 0; i < N_AD_SAMPLES; i++) {
62 | sum += getVoltage(ch);
63 | }
64 | return sum / N_AD_SAMPLES;
65 | }
66 |
67 | float voltageToLength(float voltage) {
68 | return 648 - voltage * 268;
69 | }
70 |
71 | void loop() {
72 | float length = voltageToLength(getAverageVoltage(0));
73 | if (length > 350) {
74 | digitalWrite(PIN_LED, LOW);
75 | } else {
76 | digitalWrite(PIN_LED, HIGH);
77 | if (length < 50) {
78 | if (vowel > 0) {
79 | vowel = 0;
80 | column ++;
81 | if (column >= COLS) {
82 | column = 0;
83 | }
84 | release_duration = 0;
85 | } else if (release_duration > COMMIT_TIME) {
86 | vowel = 0;
87 | column = 0;
88 | } else if (column > 0) {
89 | release_duration ++;
90 | }
91 | } else {
92 | int target_vowel = (length - 80) / 40 + 1;
93 | if (target_vowel > 5) target_vowel = 5;
94 | if (vowel < target_vowel) {
95 | if (column > 0 || vowel > 0) {
96 | Serial.print("\b");
97 | }
98 | vowel ++;
99 | int current_character = vowel - 1 + column * 5;
100 | Serial.print(characters[current_character]);
101 | }
102 | }
103 | }
104 | delay(INTERVAL_MSEC);
105 | }
106 |
107 |
--------------------------------------------------------------------------------
/mozc-piropiro/assembly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/assembly.png
--------------------------------------------------------------------------------
/mozc-piropiro/circuit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/circuit.png
--------------------------------------------------------------------------------
/mozc-piropiro/example.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/example.jpg
--------------------------------------------------------------------------------
/mozc-piropiro/stl/arm.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/stl/arm.stl
--------------------------------------------------------------------------------
/mozc-piropiro/stl/base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/stl/base.stl
--------------------------------------------------------------------------------
/mozc-piropiro/stl/holder1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/stl/holder1.stl
--------------------------------------------------------------------------------
/mozc-piropiro/stl/holder2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/stl/holder2.stl
--------------------------------------------------------------------------------
/mozc-piropiro/stl/sensor_bracket.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-piropiro/stl/sensor_bracket.stl
--------------------------------------------------------------------------------
/mozc-yunomi/README.md:
--------------------------------------------------------------------------------
1 | # Gboard Yunomi version
2 |
3 | This contains programs, schematics and board layouts for Gboard Yunomi version,
4 | which was released on **Oct 1, 2021**.
5 |
6 | This is not an officially supported Google product.
7 |
8 | ## Contents
9 |
10 | The directory structure is as follows:
11 |
12 | - firmware/ : Arduino sketch.
13 | - board/ : KiCad schematics and PCB layouts.
14 | - jig.stl : A jig for building the keyboards.
15 | - ../third_party/mozc-yunomi/keyswitches.pretty : Footprint data for the key
16 | switches.
17 |
18 | ## Building Gboard Yunomi Version
19 |
20 | 
21 |
22 | **We also have the Pro Micro version of the device, which is easier to build. Please refer to [the Pro Micro README](./README_promicro.md) if you want to build one with Pro Micro.**
23 |
24 | ### Parts
25 |
26 | - Kailh choc key x60
27 | - Diode (1N4148) x60
28 | - ATMega32U4-AU (QFP)
29 | - Resistor 10kOhm
30 | - Resistor 22Ohm x2
31 | - Capacitor 0.1uF
32 | - Capacitor 1uF x2
33 | - Capacitor 22pF x2
34 | - Crystal 16MHz (HC-49)
35 | - USB-C connector breakout (4pin)
36 |
37 | ### PCBs
38 |
39 | We need two types of PCBs to build this project.
40 |
41 | 
42 |
43 | #### Key-PCB
44 |
45 | 
46 |
47 | File location: board/key
48 |
49 | Shape: Rectangular.
50 |
51 | Components: Diodes and key switches.
52 |
53 | Number of PCBs required: 12
54 |
55 | #### Base-PCB:
56 |
57 | 
58 |
59 | File location: board/base
60 |
61 | Shape: Dodecagonal
62 |
63 | Component2: ATMega32u4.
64 |
65 | ### Steps to build
66 |
67 | #### Step 1
68 |
69 | Solder diodes D1 to D5 onto the twelve Key-PCBs at the silk-screened locations.
70 |
71 | *IMPORTANT:* Diodes on six of the Key-PCB should be placed in the opposite
72 | direction.
73 |
74 | For six of the PCBs, we can solder diodes as indicated by the silk-screen. For
75 | the other six PCBs, we need to solder the diodes in the opposite direction.
76 |
77 | #### Step 2
78 |
79 | Solder key-switches to each Key-PCB. Note that the diodes need to be placed on
80 | the opposite side of the Key-PCB to the key-switches, as shown by the
81 | silk-screen.
82 |
83 | #### Step 3
84 |
85 | Create a cylindrical shape by combining the 12 Key-PCBs.
86 |
87 | There are six connection points between each pair of Key-PCBs. Connect adjacent
88 | pairs of boards by soldering the tin-plated wires (see the picture).
89 |
90 | However, only connect J11 and J12 between the first and last Key-PCB, instead of
91 | all six locations.
92 |
93 | 
94 |
95 | 
96 |
97 | 
98 |
99 | If you have a 3D printer, you may print and use jig.stl to help with this step.
100 |
101 | #### Step 4
102 |
103 | Solder all parts for Base-PCB.
104 |
105 | #### Step 5
106 |
107 | Connect Base-PCB to the cylinder made in Step 3.
108 |
109 | 
110 |
111 | #### Step 6
112 |
113 | Install the
114 | [Arduino caterina bootloader](https://github.com/arduino/ArduinoCore-avr/blob/master/bootloaders/caterina/Caterina-Leonardo.hex)
115 | using AVRISP or other ISP tool.
116 |
117 | #### Step 7
118 |
119 | Install firmware using the Arduino IDE.
120 |
121 | #### Step 8
122 |
123 | Connect the keyboard to a PC or other device that has Google Japanese
124 | Input/Gboard installed.
125 |
126 | ## License
127 |
128 | ```
129 | Licensed under the Apache License, Version 2.0 (the "License"); you may
130 | not use this file except in compliance with the License. You may obtain
131 | a copy of the License at
132 |
133 | http://www.apache.org/licenses/LICENSE-2.0
134 |
135 | Unless required by applicable law or agreed to in writing, software
136 | distributed under the License is distributed on an "AS IS" BASIS,
137 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138 | See the License for the specific language governing permissions and
139 | limitations under the License.
140 | ```
141 |
--------------------------------------------------------------------------------
/mozc-yunomi/README_promicro.md:
--------------------------------------------------------------------------------
1 | # Gboard Yunomi version with Pro Micro
2 |
3 | This is an instruction to build the Gboard Yunomi version with Pro Micro.
4 | For the general information about the Gboard Yunomi version, please refer to [the project README](./README.md).
5 |
6 |
7 | ### Parts
8 |
9 | - Kailh choc key x60
10 | - Diode (1N4148) x60
11 | - Pro Micro x1
12 |
13 | ### PCBs
14 |
15 | We need two types of PCBs to build this project.
16 |
17 | 
18 |
19 | #### Key-PCB
20 |
21 | 
22 |
23 | File location: board/key
24 |
25 | Shape: Rectangular
26 |
27 | Components to be soldered: Diodes and key switches
28 |
29 | Number of PCBs required: 12
30 |
31 | #### Base-PCB:
32 |
33 | 
34 |
35 | File location: board/base-promicro
36 |
37 | Shape: Dodecagonal
38 |
39 | Components to be soldered: Pro Micro
40 |
41 | Number of PCBs required: 1
42 |
43 | ### Steps to build
44 |
45 | #### Step 1
46 |
47 | Solder diodes D1 to D5 onto the twelve Key-PCBs at the silk-screened locations.
48 |
49 | *IMPORTANT:* Diodes on six of the Key-PCBs should be placed in the opposite
50 | direction.
51 |
52 | In other words, you can solder diodes as indicated by the silk-screen for six of them, and you need to solder diodes in the opposite direction for the rest six.
53 |
54 | #### Step 2
55 |
56 | Solder key-switches to each Key-PCB. Note that the diodes need to be placed on
57 | the opposite side of the Key-PCB to the key-switches, as shown by the
58 | silk-screen.
59 |
60 | #### Step 3
61 |
62 | Create a cylindrical shape by combining the 12 Key-PCBs.
63 |
64 | There are six connection points between each pair of Key-PCBs. Connect adjacent
65 | pairs of boards by soldering the tin-plated wires (see the picture).
66 |
67 | However, only connect J11 and J12 between the first and last Key-PCB, instead of
68 | all six locations.
69 |
70 | 
71 |
72 | 
73 |
74 | 
75 |
76 | If you have a 3D printer, you may print and use jig.stl to help with this step.
77 |
78 | #### Step 4
79 |
80 | Solder a Pro Micro to the Base-PCB.
81 |
82 | #### Step 5
83 |
84 | Connect Base-PCB to the cylinder made in Step 3.
85 |
86 | 
87 |
88 | #### Step 6
89 |
90 | Install [firmware](./firmware/firmware.ino) using the Arduino IDE. Note that you need to uncomment the line 2 (`#define PRO_MICRO`) to make it work with the Pro Micro version.
91 |
92 | #### Step 7 (Optional)
93 |
94 | Print and mount the platform (./platform_promicro.stl).
95 |
96 | 
97 |
98 | #### Step 8
99 |
100 | Connect the keyboard to a PC or other device that has Google Japanese
101 | Input/Gboard installed. Enjoy!
102 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/.gitignore:
--------------------------------------------------------------------------------
1 | *.000
2 | *.bak
3 | *.bck
4 | *.kicad_pcb-bak
5 | *.kicad_sch-bak
6 | *.kicad_prl
7 | *.sch-bak
8 | *~
9 | _autosave-*
10 | *.tmp
11 | *-save.pro
12 | *-save.kicad_pcb
13 | fp-info-cache
14 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/base-promicro/base-promicro.pro:
--------------------------------------------------------------------------------
1 | update=2019年11月13日 11時01分37秒
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [cvpcb]
9 | version=1
10 | NetIExt=net
11 | [eeschema]
12 | version=1
13 | LibDir=
14 | [eeschema/libraries]
15 | [schematic_editor]
16 | version=1
17 | PageLayoutDescrFile=
18 | PlotDirectoryName=
19 | SubpartIdSeparator=0
20 | SubpartFirstId=65
21 | NetFmtName=Pcbnew
22 | SpiceAjustPassiveValues=0
23 | LabSize=50
24 | ERC_TestSimilarLabels=1
25 | [pcbnew]
26 | version=1
27 | PageLayoutDescrFile=
28 | LastNetListRead=base-promicro.net
29 | CopperLayerCount=2
30 | BoardThickness=1.6
31 | AllowMicroVias=0
32 | AllowBlindVias=0
33 | RequireCourtyardDefinitions=0
34 | ProhibitOverlappingCourtyards=1
35 | MinTrackWidth=0.2
36 | MinViaDiameter=0.4
37 | MinViaDrill=0.3
38 | MinMicroViaDiameter=0.2
39 | MinMicroViaDrill=0.09999999999999999
40 | MinHoleToHole=0.25
41 | TrackWidth1=0.25
42 | ViaDiameter1=0.8
43 | ViaDrill1=0.4
44 | dPairWidth1=0.2
45 | dPairGap1=0.25
46 | dPairViaGap1=0.25
47 | SilkLineWidth=0.12
48 | SilkTextSizeV=1
49 | SilkTextSizeH=1
50 | SilkTextSizeThickness=0.15
51 | SilkTextItalic=0
52 | SilkTextUpright=1
53 | CopperLineWidth=0.2
54 | CopperTextSizeV=1.5
55 | CopperTextSizeH=1.5
56 | CopperTextThickness=0.3
57 | CopperTextItalic=0
58 | CopperTextUpright=1
59 | EdgeCutLineWidth=0.05
60 | CourtyardLineWidth=0.05
61 | OthersLineWidth=0.15
62 | OthersTextSizeV=1
63 | OthersTextSizeH=1
64 | OthersTextSizeThickness=0.15
65 | OthersTextItalic=0
66 | OthersTextUpright=1
67 | SolderMaskClearance=0.051
68 | SolderMaskMinWidth=0.25
69 | SolderPasteClearance=0
70 | SolderPasteRatio=-0
71 | [pcbnew/Layer.F.Cu]
72 | Name=F.Cu
73 | Type=0
74 | Enabled=1
75 | [pcbnew/Layer.In1.Cu]
76 | Name=In1.Cu
77 | Type=0
78 | Enabled=0
79 | [pcbnew/Layer.In2.Cu]
80 | Name=In2.Cu
81 | Type=0
82 | Enabled=0
83 | [pcbnew/Layer.In3.Cu]
84 | Name=In3.Cu
85 | Type=0
86 | Enabled=0
87 | [pcbnew/Layer.In4.Cu]
88 | Name=In4.Cu
89 | Type=0
90 | Enabled=0
91 | [pcbnew/Layer.In5.Cu]
92 | Name=In5.Cu
93 | Type=0
94 | Enabled=0
95 | [pcbnew/Layer.In6.Cu]
96 | Name=In6.Cu
97 | Type=0
98 | Enabled=0
99 | [pcbnew/Layer.In7.Cu]
100 | Name=In7.Cu
101 | Type=0
102 | Enabled=0
103 | [pcbnew/Layer.In8.Cu]
104 | Name=In8.Cu
105 | Type=0
106 | Enabled=0
107 | [pcbnew/Layer.In9.Cu]
108 | Name=In9.Cu
109 | Type=0
110 | Enabled=0
111 | [pcbnew/Layer.In10.Cu]
112 | Name=In10.Cu
113 | Type=0
114 | Enabled=0
115 | [pcbnew/Layer.In11.Cu]
116 | Name=In11.Cu
117 | Type=0
118 | Enabled=0
119 | [pcbnew/Layer.In12.Cu]
120 | Name=In12.Cu
121 | Type=0
122 | Enabled=0
123 | [pcbnew/Layer.In13.Cu]
124 | Name=In13.Cu
125 | Type=0
126 | Enabled=0
127 | [pcbnew/Layer.In14.Cu]
128 | Name=In14.Cu
129 | Type=0
130 | Enabled=0
131 | [pcbnew/Layer.In15.Cu]
132 | Name=In15.Cu
133 | Type=0
134 | Enabled=0
135 | [pcbnew/Layer.In16.Cu]
136 | Name=In16.Cu
137 | Type=0
138 | Enabled=0
139 | [pcbnew/Layer.In17.Cu]
140 | Name=In17.Cu
141 | Type=0
142 | Enabled=0
143 | [pcbnew/Layer.In18.Cu]
144 | Name=In18.Cu
145 | Type=0
146 | Enabled=0
147 | [pcbnew/Layer.In19.Cu]
148 | Name=In19.Cu
149 | Type=0
150 | Enabled=0
151 | [pcbnew/Layer.In20.Cu]
152 | Name=In20.Cu
153 | Type=0
154 | Enabled=0
155 | [pcbnew/Layer.In21.Cu]
156 | Name=In21.Cu
157 | Type=0
158 | Enabled=0
159 | [pcbnew/Layer.In22.Cu]
160 | Name=In22.Cu
161 | Type=0
162 | Enabled=0
163 | [pcbnew/Layer.In23.Cu]
164 | Name=In23.Cu
165 | Type=0
166 | Enabled=0
167 | [pcbnew/Layer.In24.Cu]
168 | Name=In24.Cu
169 | Type=0
170 | Enabled=0
171 | [pcbnew/Layer.In25.Cu]
172 | Name=In25.Cu
173 | Type=0
174 | Enabled=0
175 | [pcbnew/Layer.In26.Cu]
176 | Name=In26.Cu
177 | Type=0
178 | Enabled=0
179 | [pcbnew/Layer.In27.Cu]
180 | Name=In27.Cu
181 | Type=0
182 | Enabled=0
183 | [pcbnew/Layer.In28.Cu]
184 | Name=In28.Cu
185 | Type=0
186 | Enabled=0
187 | [pcbnew/Layer.In29.Cu]
188 | Name=In29.Cu
189 | Type=0
190 | Enabled=0
191 | [pcbnew/Layer.In30.Cu]
192 | Name=In30.Cu
193 | Type=0
194 | Enabled=0
195 | [pcbnew/Layer.B.Cu]
196 | Name=B.Cu
197 | Type=0
198 | Enabled=1
199 | [pcbnew/Layer.B.Adhes]
200 | Enabled=1
201 | [pcbnew/Layer.F.Adhes]
202 | Enabled=1
203 | [pcbnew/Layer.B.Paste]
204 | Enabled=1
205 | [pcbnew/Layer.F.Paste]
206 | Enabled=1
207 | [pcbnew/Layer.B.SilkS]
208 | Enabled=1
209 | [pcbnew/Layer.F.SilkS]
210 | Enabled=1
211 | [pcbnew/Layer.B.Mask]
212 | Enabled=1
213 | [pcbnew/Layer.F.Mask]
214 | Enabled=1
215 | [pcbnew/Layer.Dwgs.User]
216 | Enabled=1
217 | [pcbnew/Layer.Cmts.User]
218 | Enabled=1
219 | [pcbnew/Layer.Eco1.User]
220 | Enabled=1
221 | [pcbnew/Layer.Eco2.User]
222 | Enabled=1
223 | [pcbnew/Layer.Edge.Cuts]
224 | Enabled=1
225 | [pcbnew/Layer.Margin]
226 | Enabled=1
227 | [pcbnew/Layer.B.CrtYd]
228 | Enabled=1
229 | [pcbnew/Layer.F.CrtYd]
230 | Enabled=1
231 | [pcbnew/Layer.B.Fab]
232 | Enabled=1
233 | [pcbnew/Layer.F.Fab]
234 | Enabled=1
235 | [pcbnew/Layer.Rescue]
236 | Enabled=0
237 | [pcbnew/Netclasses]
238 | [pcbnew/Netclasses/Default]
239 | Name=Default
240 | Clearance=0.2
241 | TrackWidth=0.25
242 | ViaDiameter=0.8
243 | ViaDrill=0.4
244 | uViaDiameter=0.3
245 | uViaDrill=0.1
246 | dPairWidth=0.2
247 | dPairGap=0.25
248 | dPairViaGap=0.25
249 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/base/base.pro:
--------------------------------------------------------------------------------
1 | update=2019年11月13日 11時01分37秒
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [cvpcb]
9 | version=1
10 | NetIExt=net
11 | [eeschema]
12 | version=1
13 | LibDir=
14 | [eeschema/libraries]
15 | [schematic_editor]
16 | version=1
17 | PageLayoutDescrFile=
18 | PlotDirectoryName=
19 | SubpartIdSeparator=0
20 | SubpartFirstId=65
21 | NetFmtName=Pcbnew
22 | SpiceAjustPassiveValues=0
23 | LabSize=50
24 | ERC_TestSimilarLabels=1
25 | [pcbnew]
26 | version=1
27 | PageLayoutDescrFile=
28 | LastNetListRead=base.net
29 | CopperLayerCount=2
30 | BoardThickness=1.6
31 | AllowMicroVias=0
32 | AllowBlindVias=0
33 | RequireCourtyardDefinitions=0
34 | ProhibitOverlappingCourtyards=1
35 | MinTrackWidth=0.2
36 | MinViaDiameter=0.4
37 | MinViaDrill=0.3
38 | MinMicroViaDiameter=0.2
39 | MinMicroViaDrill=0.09999999999999999
40 | MinHoleToHole=0.25
41 | TrackWidth1=0.25
42 | ViaDiameter1=0.8
43 | ViaDrill1=0.4
44 | dPairWidth1=0.2
45 | dPairGap1=0.25
46 | dPairViaGap1=0.25
47 | SilkLineWidth=0.12
48 | SilkTextSizeV=1
49 | SilkTextSizeH=1
50 | SilkTextSizeThickness=0.15
51 | SilkTextItalic=0
52 | SilkTextUpright=1
53 | CopperLineWidth=0.2
54 | CopperTextSizeV=1.5
55 | CopperTextSizeH=1.5
56 | CopperTextThickness=0.3
57 | CopperTextItalic=0
58 | CopperTextUpright=1
59 | EdgeCutLineWidth=0.05
60 | CourtyardLineWidth=0.05
61 | OthersLineWidth=0.15
62 | OthersTextSizeV=1
63 | OthersTextSizeH=1
64 | OthersTextSizeThickness=0.15
65 | OthersTextItalic=0
66 | OthersTextUpright=1
67 | SolderMaskClearance=0.051
68 | SolderMaskMinWidth=0.25
69 | SolderPasteClearance=0
70 | SolderPasteRatio=-0
71 | [pcbnew/Layer.F.Cu]
72 | Name=F.Cu
73 | Type=0
74 | Enabled=1
75 | [pcbnew/Layer.In1.Cu]
76 | Name=In1.Cu
77 | Type=0
78 | Enabled=0
79 | [pcbnew/Layer.In2.Cu]
80 | Name=In2.Cu
81 | Type=0
82 | Enabled=0
83 | [pcbnew/Layer.In3.Cu]
84 | Name=In3.Cu
85 | Type=0
86 | Enabled=0
87 | [pcbnew/Layer.In4.Cu]
88 | Name=In4.Cu
89 | Type=0
90 | Enabled=0
91 | [pcbnew/Layer.In5.Cu]
92 | Name=In5.Cu
93 | Type=0
94 | Enabled=0
95 | [pcbnew/Layer.In6.Cu]
96 | Name=In6.Cu
97 | Type=0
98 | Enabled=0
99 | [pcbnew/Layer.In7.Cu]
100 | Name=In7.Cu
101 | Type=0
102 | Enabled=0
103 | [pcbnew/Layer.In8.Cu]
104 | Name=In8.Cu
105 | Type=0
106 | Enabled=0
107 | [pcbnew/Layer.In9.Cu]
108 | Name=In9.Cu
109 | Type=0
110 | Enabled=0
111 | [pcbnew/Layer.In10.Cu]
112 | Name=In10.Cu
113 | Type=0
114 | Enabled=0
115 | [pcbnew/Layer.In11.Cu]
116 | Name=In11.Cu
117 | Type=0
118 | Enabled=0
119 | [pcbnew/Layer.In12.Cu]
120 | Name=In12.Cu
121 | Type=0
122 | Enabled=0
123 | [pcbnew/Layer.In13.Cu]
124 | Name=In13.Cu
125 | Type=0
126 | Enabled=0
127 | [pcbnew/Layer.In14.Cu]
128 | Name=In14.Cu
129 | Type=0
130 | Enabled=0
131 | [pcbnew/Layer.In15.Cu]
132 | Name=In15.Cu
133 | Type=0
134 | Enabled=0
135 | [pcbnew/Layer.In16.Cu]
136 | Name=In16.Cu
137 | Type=0
138 | Enabled=0
139 | [pcbnew/Layer.In17.Cu]
140 | Name=In17.Cu
141 | Type=0
142 | Enabled=0
143 | [pcbnew/Layer.In18.Cu]
144 | Name=In18.Cu
145 | Type=0
146 | Enabled=0
147 | [pcbnew/Layer.In19.Cu]
148 | Name=In19.Cu
149 | Type=0
150 | Enabled=0
151 | [pcbnew/Layer.In20.Cu]
152 | Name=In20.Cu
153 | Type=0
154 | Enabled=0
155 | [pcbnew/Layer.In21.Cu]
156 | Name=In21.Cu
157 | Type=0
158 | Enabled=0
159 | [pcbnew/Layer.In22.Cu]
160 | Name=In22.Cu
161 | Type=0
162 | Enabled=0
163 | [pcbnew/Layer.In23.Cu]
164 | Name=In23.Cu
165 | Type=0
166 | Enabled=0
167 | [pcbnew/Layer.In24.Cu]
168 | Name=In24.Cu
169 | Type=0
170 | Enabled=0
171 | [pcbnew/Layer.In25.Cu]
172 | Name=In25.Cu
173 | Type=0
174 | Enabled=0
175 | [pcbnew/Layer.In26.Cu]
176 | Name=In26.Cu
177 | Type=0
178 | Enabled=0
179 | [pcbnew/Layer.In27.Cu]
180 | Name=In27.Cu
181 | Type=0
182 | Enabled=0
183 | [pcbnew/Layer.In28.Cu]
184 | Name=In28.Cu
185 | Type=0
186 | Enabled=0
187 | [pcbnew/Layer.In29.Cu]
188 | Name=In29.Cu
189 | Type=0
190 | Enabled=0
191 | [pcbnew/Layer.In30.Cu]
192 | Name=In30.Cu
193 | Type=0
194 | Enabled=0
195 | [pcbnew/Layer.B.Cu]
196 | Name=B.Cu
197 | Type=0
198 | Enabled=1
199 | [pcbnew/Layer.B.Adhes]
200 | Enabled=1
201 | [pcbnew/Layer.F.Adhes]
202 | Enabled=1
203 | [pcbnew/Layer.B.Paste]
204 | Enabled=1
205 | [pcbnew/Layer.F.Paste]
206 | Enabled=1
207 | [pcbnew/Layer.B.SilkS]
208 | Enabled=1
209 | [pcbnew/Layer.F.SilkS]
210 | Enabled=1
211 | [pcbnew/Layer.B.Mask]
212 | Enabled=1
213 | [pcbnew/Layer.F.Mask]
214 | Enabled=1
215 | [pcbnew/Layer.Dwgs.User]
216 | Enabled=1
217 | [pcbnew/Layer.Cmts.User]
218 | Enabled=1
219 | [pcbnew/Layer.Eco1.User]
220 | Enabled=1
221 | [pcbnew/Layer.Eco2.User]
222 | Enabled=1
223 | [pcbnew/Layer.Edge.Cuts]
224 | Enabled=1
225 | [pcbnew/Layer.Margin]
226 | Enabled=1
227 | [pcbnew/Layer.B.CrtYd]
228 | Enabled=1
229 | [pcbnew/Layer.F.CrtYd]
230 | Enabled=1
231 | [pcbnew/Layer.B.Fab]
232 | Enabled=1
233 | [pcbnew/Layer.F.Fab]
234 | Enabled=1
235 | [pcbnew/Layer.Rescue]
236 | Enabled=0
237 | [pcbnew/Netclasses]
238 | [pcbnew/Netclasses/Default]
239 | Name=Default
240 | Clearance=0.2
241 | TrackWidth=0.25
242 | ViaDiameter=0.8
243 | ViaDrill=0.4
244 | uViaDiameter=0.3
245 | uViaDrill=0.1
246 | dPairWidth=0.2
247 | dPairGap=0.25
248 | dPairViaGap=0.25
249 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/key/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name daprice)(type KiCad)(uri ${KIPRJMOD}/../../../third_party/mozc-yunomi/daprice-keyswitches.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/key/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | )
3 |
--------------------------------------------------------------------------------
/mozc-yunomi/board/key/yunomi.pro:
--------------------------------------------------------------------------------
1 | update=Tue Nov 12 20:59:20 2019
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [cvpcb]
9 | version=1
10 | NetIExt=net
11 | [eeschema]
12 | version=1
13 | LibDir=
14 | [eeschema/libraries]
15 | [schematic_editor]
16 | version=1
17 | PageLayoutDescrFile=
18 | PlotDirectoryName=
19 | SubpartIdSeparator=0
20 | SubpartFirstId=65
21 | NetFmtName=Pcbnew
22 | SpiceAjustPassiveValues=0
23 | LabSize=50
24 | ERC_TestSimilarLabels=1
25 | [pcbnew]
26 | version=1
27 | PageLayoutDescrFile=
28 | LastNetListRead=yunomi.net
29 | CopperLayerCount=2
30 | BoardThickness=1.6
31 | AllowMicroVias=0
32 | AllowBlindVias=0
33 | RequireCourtyardDefinitions=0
34 | ProhibitOverlappingCourtyards=1
35 | MinTrackWidth=0.2
36 | MinViaDiameter=0.4
37 | MinViaDrill=0.3
38 | MinMicroViaDiameter=0.2
39 | MinMicroViaDrill=0.09999999999999999
40 | MinHoleToHole=0.25
41 | TrackWidth1=0.25
42 | ViaDiameter1=0.8
43 | ViaDrill1=0.4
44 | dPairWidth1=0.2
45 | dPairGap1=0.25
46 | dPairViaGap1=0.25
47 | SilkLineWidth=0.12
48 | SilkTextSizeV=1
49 | SilkTextSizeH=1
50 | SilkTextSizeThickness=0.15
51 | SilkTextItalic=0
52 | SilkTextUpright=1
53 | CopperLineWidth=0.2
54 | CopperTextSizeV=1.5
55 | CopperTextSizeH=1.5
56 | CopperTextThickness=0.3
57 | CopperTextItalic=0
58 | CopperTextUpright=1
59 | EdgeCutLineWidth=0.05
60 | CourtyardLineWidth=0.05
61 | OthersLineWidth=0.15
62 | OthersTextSizeV=1
63 | OthersTextSizeH=1
64 | OthersTextSizeThickness=0.15
65 | OthersTextItalic=0
66 | OthersTextUpright=1
67 | SolderMaskClearance=0.051
68 | SolderMaskMinWidth=0.25
69 | SolderPasteClearance=0
70 | SolderPasteRatio=-0
71 | [pcbnew/Layer.F.Cu]
72 | Name=F.Cu
73 | Type=0
74 | Enabled=1
75 | [pcbnew/Layer.In1.Cu]
76 | Name=In1.Cu
77 | Type=0
78 | Enabled=0
79 | [pcbnew/Layer.In2.Cu]
80 | Name=In2.Cu
81 | Type=0
82 | Enabled=0
83 | [pcbnew/Layer.In3.Cu]
84 | Name=In3.Cu
85 | Type=0
86 | Enabled=0
87 | [pcbnew/Layer.In4.Cu]
88 | Name=In4.Cu
89 | Type=0
90 | Enabled=0
91 | [pcbnew/Layer.In5.Cu]
92 | Name=In5.Cu
93 | Type=0
94 | Enabled=0
95 | [pcbnew/Layer.In6.Cu]
96 | Name=In6.Cu
97 | Type=0
98 | Enabled=0
99 | [pcbnew/Layer.In7.Cu]
100 | Name=In7.Cu
101 | Type=0
102 | Enabled=0
103 | [pcbnew/Layer.In8.Cu]
104 | Name=In8.Cu
105 | Type=0
106 | Enabled=0
107 | [pcbnew/Layer.In9.Cu]
108 | Name=In9.Cu
109 | Type=0
110 | Enabled=0
111 | [pcbnew/Layer.In10.Cu]
112 | Name=In10.Cu
113 | Type=0
114 | Enabled=0
115 | [pcbnew/Layer.In11.Cu]
116 | Name=In11.Cu
117 | Type=0
118 | Enabled=0
119 | [pcbnew/Layer.In12.Cu]
120 | Name=In12.Cu
121 | Type=0
122 | Enabled=0
123 | [pcbnew/Layer.In13.Cu]
124 | Name=In13.Cu
125 | Type=0
126 | Enabled=0
127 | [pcbnew/Layer.In14.Cu]
128 | Name=In14.Cu
129 | Type=0
130 | Enabled=0
131 | [pcbnew/Layer.In15.Cu]
132 | Name=In15.Cu
133 | Type=0
134 | Enabled=0
135 | [pcbnew/Layer.In16.Cu]
136 | Name=In16.Cu
137 | Type=0
138 | Enabled=0
139 | [pcbnew/Layer.In17.Cu]
140 | Name=In17.Cu
141 | Type=0
142 | Enabled=0
143 | [pcbnew/Layer.In18.Cu]
144 | Name=In18.Cu
145 | Type=0
146 | Enabled=0
147 | [pcbnew/Layer.In19.Cu]
148 | Name=In19.Cu
149 | Type=0
150 | Enabled=0
151 | [pcbnew/Layer.In20.Cu]
152 | Name=In20.Cu
153 | Type=0
154 | Enabled=0
155 | [pcbnew/Layer.In21.Cu]
156 | Name=In21.Cu
157 | Type=0
158 | Enabled=0
159 | [pcbnew/Layer.In22.Cu]
160 | Name=In22.Cu
161 | Type=0
162 | Enabled=0
163 | [pcbnew/Layer.In23.Cu]
164 | Name=In23.Cu
165 | Type=0
166 | Enabled=0
167 | [pcbnew/Layer.In24.Cu]
168 | Name=In24.Cu
169 | Type=0
170 | Enabled=0
171 | [pcbnew/Layer.In25.Cu]
172 | Name=In25.Cu
173 | Type=0
174 | Enabled=0
175 | [pcbnew/Layer.In26.Cu]
176 | Name=In26.Cu
177 | Type=0
178 | Enabled=0
179 | [pcbnew/Layer.In27.Cu]
180 | Name=In27.Cu
181 | Type=0
182 | Enabled=0
183 | [pcbnew/Layer.In28.Cu]
184 | Name=In28.Cu
185 | Type=0
186 | Enabled=0
187 | [pcbnew/Layer.In29.Cu]
188 | Name=In29.Cu
189 | Type=0
190 | Enabled=0
191 | [pcbnew/Layer.In30.Cu]
192 | Name=In30.Cu
193 | Type=0
194 | Enabled=0
195 | [pcbnew/Layer.B.Cu]
196 | Name=B.Cu
197 | Type=0
198 | Enabled=1
199 | [pcbnew/Layer.B.Adhes]
200 | Enabled=1
201 | [pcbnew/Layer.F.Adhes]
202 | Enabled=1
203 | [pcbnew/Layer.B.Paste]
204 | Enabled=1
205 | [pcbnew/Layer.F.Paste]
206 | Enabled=1
207 | [pcbnew/Layer.B.SilkS]
208 | Enabled=1
209 | [pcbnew/Layer.F.SilkS]
210 | Enabled=1
211 | [pcbnew/Layer.B.Mask]
212 | Enabled=1
213 | [pcbnew/Layer.F.Mask]
214 | Enabled=1
215 | [pcbnew/Layer.Dwgs.User]
216 | Enabled=1
217 | [pcbnew/Layer.Cmts.User]
218 | Enabled=1
219 | [pcbnew/Layer.Eco1.User]
220 | Enabled=1
221 | [pcbnew/Layer.Eco2.User]
222 | Enabled=1
223 | [pcbnew/Layer.Edge.Cuts]
224 | Enabled=1
225 | [pcbnew/Layer.Margin]
226 | Enabled=1
227 | [pcbnew/Layer.B.CrtYd]
228 | Enabled=1
229 | [pcbnew/Layer.F.CrtYd]
230 | Enabled=1
231 | [pcbnew/Layer.B.Fab]
232 | Enabled=1
233 | [pcbnew/Layer.F.Fab]
234 | Enabled=1
235 | [pcbnew/Layer.Rescue]
236 | Enabled=0
237 | [pcbnew/Netclasses]
238 | [pcbnew/Netclasses/Default]
239 | Name=Default
240 | Clearance=0.5
241 | TrackWidth=0.25
242 | ViaDiameter=0.8
243 | ViaDrill=0.4
244 | uViaDiameter=0.3
245 | uViaDrill=0.1
246 | dPairWidth=0.2
247 | dPairGap=0.25
248 | dPairViaGap=0.25
249 |
--------------------------------------------------------------------------------
/mozc-yunomi/images/base-pcb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/base-pcb.png
--------------------------------------------------------------------------------
/mozc-yunomi/images/base-pcb_promicro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/base-pcb_promicro.png
--------------------------------------------------------------------------------
/mozc-yunomi/images/connect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/connect.png
--------------------------------------------------------------------------------
/mozc-yunomi/images/connect2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/connect2.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/connect3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/connect3.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/connect4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/connect4.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/connect4_promicro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/connect4_promicro.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/device.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/device.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/key-pcb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/key-pcb.png
--------------------------------------------------------------------------------
/mozc-yunomi/images/pcbs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/pcbs.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/pcbs_promicro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/pcbs_promicro.jpg
--------------------------------------------------------------------------------
/mozc-yunomi/images/platform_promicro.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/mozc-yunomi/images/platform_promicro.jpg
--------------------------------------------------------------------------------
/third_party/.gitignore:
--------------------------------------------------------------------------------
1 | # Object files
2 | *.o
3 | *.ko
4 | *.obj
5 | *.elf
6 |
7 | # Libraries
8 | *.lib
9 | *.a
10 | *.la
11 | *.lo
12 |
13 | # Shared objects (inc. Windows DLLs)
14 | *.dll
15 | *.so
16 | *.so.*
17 | *.dylib
18 |
19 | # Executables
20 | *.exe
21 | *.out
22 | *.app
23 | *.i*86
24 | *.x86_64
25 | *.hex
26 |
27 | _build
28 |
--------------------------------------------------------------------------------
/third_party/mozc-flap/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2013 Google Inc.
3 | #
4 | # This program is free software; you can redistribute it and/or
5 | # modify it under the terms of the GNU General Public License
6 | # as published by the Free Software Foundation; either version 2
7 | # of the License, or (at your option) any later version.
8 | #
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU General Public License for more details.
13 | #
14 | # You should have received a copy of the GNU General Public License
15 | # along with this program; if not, write to the Free Software
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | # MA 02110-1301, USA.
18 | #
19 |
20 |
21 | DEVICE = attiny2313
22 | F_CPU = 12000000 # in Hz
23 |
24 | AVRDUDE = avrdude -c usbasp -p $(DEVICE) # edit this line for your programmer
25 |
26 | USBDRV_DIR = ../third_party/usbdrv
27 |
28 | CFLAGS = -I$(USBDRV_DIR) -I. -DDEBUG_LEVEL=0
29 |
30 |
31 | OBJECTS = $(USBDRV_DIR)/usbdrv.o $(USBDRV_DIR)/usbdrvasm.o $(USBDRV_DIR)/oddebug.o usb_keyboard.o flap.o
32 |
33 | COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)
34 |
35 | FUSE_L = 0xef
36 | FUSE_H = 0xdb
37 | # ATTiny2313 FUSE_L (Fuse low byte):
38 | # 0xef = 1 1 1 0 1 1 1 1
39 | # ^ ^ \+/ \--+--/
40 | # | | | +------- CKSEL 3..0 (clock selection -> crystal @ 12 MHz)
41 | # | | +--------------- SUT 1..0 (BOD enabled, fast rising power)
42 | # | +------------------ CKOUT (clock output on CKOUT pin -> disabled)
43 | # +-------------------- CKDIV8 (divide clock by 8 -> don't divide)
44 | # ATTiny2313 FUSE_H (Fuse high byte):
45 | # 0xdb = 1 1 0 1 1 0 1 1
46 | # ^ ^ ^ ^ \-+-/ ^
47 | # | | | | | +---- RSTDISBL (disable external reset -> enabled)
48 | # | | | | +-------- BODLEVEL 2..0 (brownout trigger level -> 2.7V)
49 | # | | | +-------------- WDTON (watchdog timer always on -> disable)
50 | # | | +---------------- SPIEN (enable serial programming -> enabled)
51 | # | +------------------ EESAVE (preserve EEPROM on Chip Erase -> not preserved)
52 | # +-------------------- DWEN (debug wire enable)
53 |
54 |
55 | # symbolic targets:
56 | help:
57 | @echo "This Makefile has no default rule. Use one of the following:"
58 | @echo "make hex ........... to build flap.hex"
59 | @echo "make program ....... to flash fuses and the flap firmware"
60 | @echo "make fuse .......... to flash the fuses"
61 | @echo "make flash ......... to flash the flap firmware"
62 | @echo "make clean ......... to delete objects and hex file"
63 |
64 | hex: flap.hex
65 |
66 | program: flash fuse
67 |
68 | # rule for programming fuse bits:
69 | fuse:
70 | @[ "$(FUSE_H)" != "" -a "$(FUSE_L)" != "" ] || \
71 | { echo "*** Edit Makefile and choose values for FUSE_L and FUSE_H!"; exit 1; }
72 | $(AVRDUDE) -U hfuse:w:$(FUSE_H):m -U lfuse:w:$(FUSE_L):m
73 |
74 | # rule for uploading firmware:
75 | flash: flap.hex
76 | $(AVRDUDE) -U flash:w:flap.hex:i
77 |
78 | # rule for deleting dependent files (those which can be built by Make):
79 | clean:
80 | rm -f flap.{hex,lst,obj,cof,list,map,eep.hex,elf,s} $(OBJECTS) $(USBDRV_DIR)/oddebug.s $(USBDRV_DIR)/usbdrv.s
81 |
82 | # Generic rule for compiling C files:
83 | .c.o:
84 | $(COMPILE) -c $< -o $@
85 |
86 | $(USBDRV_DIR)/usbdrvasm.o: $(USBDRV_DIR)/usbdrvasm.S \
87 | $(USBDRV_DIR)/usbportability.h $(USBDRV_DIR)/usbdrv.h \
88 | usbconfig.h $(USBDRV_DIR)/usbdrvasm12.inc \
89 | $(USBDRV_DIR)/asmcommon.inc
90 |
91 | $(USBDRV_DIR)/oddebug.o: $(USBDRV_DIR)/oddebug.c $(USBDRV_DIR)/oddebug.h \
92 | $(USBDRV_DIR)/usbportability.h
93 |
94 | $(USBDRV_DIR)/usbdrv.o: $(USBDRV_DIR)/usbdrv.c $(USBDRV_DIR)/usbportability.h \
95 | $(USBDRV_DIR)/usbdrv.h usbconfig.h $(USBDRV_DIR)/oddebug.h
96 |
97 | usb_keyboard.o: usb_keyboard.c usb_keyboard.h $(USBDRV_DIR)/usbdrv.h \
98 | usbconfig.h $(USBDRV_DIR)/usbportability.h
99 |
100 | flap.o: flap.c usbconfig.h usb_keyboard.h
101 |
102 | # Generic rule for assembling Assembler source files:
103 | .S.o:
104 | $(COMPILE) -x assembler-with-cpp -c $< -o $@
105 | # "-x assembler-with-cpp" should not be necessary since this is the default
106 | # file type for the .S (with capital S) extension. However, upper case
107 | # characters are not always preserved on Windows. To ensure WinAVR
108 | # compatibility define the file type manually.
109 |
110 | # Generic rule for compiling C to assembler, used for debugging only.
111 | .c.s:
112 | $(COMPILE) -S $< -o $@
113 |
114 | # file targets:
115 |
116 | flap.elf: $(OBJECTS)
117 | $(COMPILE) -o flap.elf $(OBJECTS)
118 |
119 | flap.hex: flap.elf
120 | rm -f flap.hex flap.eep.hex
121 | avr-objcopy -j .text -j .data -O ihex flap.elf flap.hex
122 | avr-size flap.hex
123 |
--------------------------------------------------------------------------------
/third_party/mozc-flap/Readme.txt:
--------------------------------------------------------------------------------
1 | Copyright 2013 Google Inc.
2 |
3 | This program is free software; you can redistribute it and/or
4 | modify it under the terms of the GNU General Public License
5 | as published by the Free Software Foundation; either version 2
6 | of the License, or (at your option) any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | GNU General Public License for more details.
12 |
13 | You should have received a copy of the GNU General Public License
14 | along with this program; if not, write to the Free Software
15 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16 | MA 02110-1301, USA.
17 |
18 |
19 | =====================================
20 | Summary
21 | =====================================
22 |
23 | Circuit diagram and firmware of split-flap display input device for
24 | Google Japanese Input.
25 |
26 |
27 | =====================================
28 | Files
29 | =====================================
30 |
31 | * V-USB library files
32 | ../third_party/usbdrv/
33 |
34 | The directory and files were copied from V-USB files available at
35 | http://www.obdev.at/vusb/
36 |
37 | * Documents
38 | COPYING ...... Open Source license for this software.
39 | Readme.txt ... The file you are currently reading.
40 |
41 | * Circuit diagram
42 | circuit.png
43 |
44 | * Firmware source codes
45 | Makefile
46 | flap.c
47 | usbconfig.h
48 | usb_keyboard.c
49 | usb_keyboard.h
50 |
51 |
52 | =====================================
53 | Building & Writing Firmware
54 | =====================================
55 |
56 | * Building firmware binaries
57 |
58 | AVR-gcc is required.
59 |
60 | $ make hex
61 |
62 |
63 | * Writing to the program memory
64 |
65 | Please refer documents of AVR programmer device you use.
66 | Makefile contains "flash" rule that writes a hex file using Avrdude as an
67 | example.
68 |
69 |
70 | * Programming the fuse bits
71 |
72 | Fuse bits must be configured in order to run the firmware correctly.
73 |
74 | lower byte: 0xef
75 | higher byte: 0xdb
76 |
77 | # ATTiny2313 FUSE_L (Fuse low byte):
78 | # 0xef = 1 1 1 0 1 1 1 1
79 | # ^ ^ \+/ \--+--/
80 | # | | | +------- CKSEL 3..0 (clock selection -> crystal @ 12 MHz)
81 | # | | +--------------- SUT 1..0 (BOD enabled, fast rising power)
82 | # | +------------------ CKOUT (clock output on CKOUT pin -> disabled)
83 | # +-------------------- CKDIV8 (divide clock by 8 -> don't divide)
84 | # ATTiny2313 FUSE_H (Fuse high byte):
85 | # 0xdb = 1 1 0 1 1 0 1 1
86 | # ^ ^ ^ ^ \-+-/ ^
87 | # | | | | | +---- RSTDISBL (disable external reset -> enabled)
88 | # | | | | +-------- BODLEVEL 2..0 (brownout trigger level -> 2.7V)
89 | # | | | +-------------- WDTON (watchdog timer always on -> disable)
90 | # | | +---------------- SPIEN (enable serial programming -> enabled)
91 | # | +------------------ EESAVE (preserve EEPROM on Chip Erase
92 | # | -> not preserved)
93 | # +-------------------- DWEN (debug wire enable)
94 |
95 | Makefile contains "fuse" rule that programs fuse bits using Avrdude as an
96 | example.
97 |
98 |
99 | ==================
100 | References
101 | ==================
102 |
103 | The firmware and circuit diagram has been developed based on V-USB.
104 |
105 | * V-USB
106 | http://www.obdev.at/vusb/
107 |
--------------------------------------------------------------------------------
/third_party/mozc-flap/circuit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-flap/circuit.png
--------------------------------------------------------------------------------
/third_party/mozc-flap/usb_keyboard.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2013 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 | #include "usb_keyboard.h"
21 |
22 | #include /* for sei() */
23 | #include
24 | #include /* for _delay_ms() */
25 |
26 | /* USB report descriptor, size must match usbconfig.h */
27 | const PROGMEM char usbHidReportDescriptor[35] = {
28 | 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
29 | 0x09, 0x06, // USAGE (Keyboard)
30 | 0xa1, 0x01, // COLLECTION (Application)
31 | 0x05, 0x07, // USAGE_PAGE (Keyboard)
32 | 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
33 | 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
34 | 0x15, 0x00, // LOGICAL_MINIMUM (0)
35 | 0x25, 0x01, // LOGICAL_MAXIMUM (1)
36 | 0x75, 0x01, // REPORT_SIZE (1)
37 | 0x95, 0x08, // REPORT_COUNT (8)
38 | 0x81, 0x02, // INPUT (Data,Var,Abs)
39 | 0x95, 0x01, // REPORT_COUNT (1)
40 | 0x75, 0x08, // REPORT_SIZE (8)
41 | 0x25, 0x65, // LOGICAL_MAXIMUM (101)
42 | 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
43 | 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
44 | 0x81, 0x00, // INPUT (Data,Ary,Abs)
45 | 0xc0 // END_COLLECTION
46 | };
47 |
48 | static uchar reportBuffer[2];
49 | static uchar idleRate; /* repeat rate for keyboards */
50 |
51 | #define MOD_CONTROL_LEFT (1<<0)
52 | #define MOD_SHIFT_LEFT (1<<1)
53 | #define MOD_ALT_LEFT (1<<2)
54 | #define MOD_GUI_LEFT (1<<3)
55 | #define MOD_CONTROL_RIGHT (1<<4)
56 | #define MOD_SHIFT_RIGHT (1<<5)
57 | #define MOD_ALT_RIGHT (1<<6)
58 | #define MOD_GUI_RIGHT (1<<7)
59 |
60 | uchar keyReport[2];
61 |
62 | usbMsgLen_t usbFunctionSetup(uchar data[8])
63 | {
64 | usbRequest_t *rq = (void *)data;
65 |
66 | /* The following requests are never used. But since they are required by
67 | * the specification, we implement them in this example.
68 | */
69 | if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS) {
70 | /* class request type */
71 | /* wValue: ReportType (highbyte), ReportID (lowbyte) */
72 | if(rq->bRequest == USBRQ_HID_GET_REPORT) {
73 | /* we only have one report type, so don't look at wValue */
74 | usbMsgPtr = (void *)&reportBuffer;
75 | return sizeof(reportBuffer);
76 | } else if(rq->bRequest == USBRQ_HID_GET_IDLE) {
77 | usbMsgPtr = &idleRate;
78 | return 1;
79 | } else if(rq->bRequest == USBRQ_HID_SET_IDLE) {
80 | idleRate = rq->wValue.bytes[1];
81 | }
82 | } else {
83 | /* no vendor specific requests implemented */
84 | }
85 | /* default for not implemented requests: return no data back to host */
86 | return 0;
87 | }
88 |
89 | void initUsbKeyboard() {
90 | usbInit();
91 | /* enforce re-enumeration, do this while interrupts are disabled! */
92 | usbDeviceDisconnect();
93 | uchar i;
94 | i = 0;
95 | while(--i) { /* fake USB disconnect for > 250 ms */
96 | wdt_reset();
97 | _delay_ms(1);
98 | }
99 | usbDeviceConnect();
100 | sei();
101 | }
102 |
103 | void prepareInterruptReport(uchar keycode) {
104 | reportBuffer[0] = 0; /* modifier keys */
105 | reportBuffer[1] = keycode;
106 | /* called after every poll of the interrupt endpoint */
107 | usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer));
108 | }
109 |
--------------------------------------------------------------------------------
/third_party/mozc-flap/usb_keyboard.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2013 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 | #include "usbdrv.h"
21 |
22 | usbMsgLen_t usbFunctionSetup(uchar data[8]);
23 | void initUsbKeyboard();
24 | void prepareInterruptReport(uchar key);
25 |
26 | #define KEYCODE_NONE 0x00
27 | #define KEYCODE_A 0x04
28 | #define KEYCODE_SPACE 0x2c
29 | #define KEYCODE_PERIOD 0x37
30 | #define KEYCODE_HYPHEN 0x2d
31 | #define KEYCODE_SLASH 0x38
32 | #define KEYCODE_ENTER 0x28
33 | #define KEYCODE_SEMICOLON 0x33
34 | #define KEYCODE_COMMA 0x36
35 | #define KEYCODE_PERIOD 0x37
36 |
--------------------------------------------------------------------------------
/third_party/mozc-mageru/spoon_stl/LICENSE:
--------------------------------------------------------------------------------
1 | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
2 |
3 | https://creativecommons.org/licenses/by-sa/4.0/
4 | https://creativecommons.org/licenses/by-sa/4.0/legalcode
--------------------------------------------------------------------------------
/third_party/mozc-mageru/spoon_stl/README.md:
--------------------------------------------------------------------------------
1 | A spoon shape file for 3D printing which has a slot to embed flex sensor in.
2 |
3 | - slotted_spoon.stl
4 |
5 | This is a modified version of spoon.stl included in
6 | "Fork, Knife & Spoon" by hacklabnobo
7 | https://www.thingiverse.com/thing:226875
8 |
--------------------------------------------------------------------------------
/third_party/mozc-mageru/spoon_stl/slotted_spoon.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-mageru/spoon_stl/slotted_spoon.stl
--------------------------------------------------------------------------------
/third_party/mozc-morse/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2012 Google Inc.
3 | #
4 | # This program is free software; you can redistribute it and/or
5 | # modify it under the terms of the GNU General Public License
6 | # as published by the Free Software Foundation; either version 2
7 | # of the License, or (at your option) any later version.
8 | #
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU General Public License for more details.
13 | #
14 | # You should have received a copy of the GNU General Public License
15 | # along with this program; if not, write to the Free Software
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | # MA 02110-1301, USA.
18 | #
19 |
20 |
21 | DEVICE = attiny2313
22 | F_CPU = 12000000 # in Hz
23 |
24 | AVRDUDE = avrdude -c usbasp -p $(DEVICE) # edit this line for your programmer
25 |
26 | USBDRV_DIR = ../third_party/usbdrv
27 |
28 | CFLAGS = -I$(USBDRV_DIR) -I. -DDEBUG_LEVEL=0
29 |
30 | OBJECTS = $(USBDRV_DIR)/usbdrv.o $(USBDRV_DIR)/usbdrvasm.o $(USBDRV_DIR)/oddebug.o usb_keyboard.o
31 |
32 | COMPILE = avr-gcc -Wall -Os -DF_CPU=$(F_CPU) $(CFLAGS) -mmcu=$(DEVICE)
33 |
34 | FUSE_L = 0xef
35 | FUSE_H = 0xdb
36 | # ATTiny2313 FUSE_L (Fuse low byte):
37 | # 0xef = 1 1 1 0 1 1 1 1
38 | # ^ ^ \+/ \--+--/
39 | # | | | +------- CKSEL 3..0 (clock selection -> crystal @ 12 MHz)
40 | # | | +--------------- SUT 1..0 (BOD enabled, fast rising power)
41 | # | +------------------ CKOUT (clock output on CKOUT pin -> disabled)
42 | # +-------------------- CKDIV8 (divide clock by 8 -> don't divide)
43 | # ATTiny2313 FUSE_H (Fuse high byte):
44 | # 0xdb = 1 1 0 1 1 0 1 1
45 | # ^ ^ ^ ^ \-+-/ ^
46 | # | | | | | +---- RSTDISBL (disable external reset -> enabled)
47 | # | | | | +-------- BODLEVEL 2..0 (brownout trigger level -> 2.7V)
48 | # | | | +-------------- WDTON (watchdog timer always on -> disable)
49 | # | | +---------------- SPIEN (enable serial programming -> enabled)
50 | # | +------------------ EESAVE (preserve EEPROM on Chip Erase -> not preserved)
51 | # +-------------------- DWEN (debug wire enable)
52 |
53 |
54 | # symbolic targets:
55 | help:
56 | @echo "This Makefile has no default rule. Use one of the following:"
57 | @echo "make hex ........... to build dit-dah.hex and space.hex"
58 | @echo "make program ....... to flash fuses and dit-dah firmware"
59 | @echo "make fuse .......... to flash the fuses"
60 | @echo "make flash_dit-dah . to flash the dit-dah firmware"
61 | @echo "make flash_space ... to flash the space key firmware"
62 | @echo "make clean ......... to delete objects and hex file"
63 |
64 | hex: dit-dah.hex space.hex
65 |
66 | program: flash_dit-dah fuse
67 |
68 | # rule for programming fuse bits:
69 | fuse:
70 | @[ "$(FUSE_H)" != "" -a "$(FUSE_L)" != "" ] || \
71 | { echo "*** Edit Makefile and choose values for FUSE_L and FUSE_H!"; exit 1; }
72 | $(AVRDUDE) -U hfuse:w:$(FUSE_H):m -U lfuse:w:$(FUSE_L):m
73 |
74 | # rule for uploading firmware:
75 | flash_dit-dah: dit-dah.hex
76 | $(AVRDUDE) -U flash:w:dit-dah.hex:i
77 |
78 | flash_space: space.hex
79 | $(AVRDUDE) -U flash:w:space.hex:i
80 |
81 | # rule for deleting dependent files (those which can be built by Make):
82 | clean:
83 | rm -f dit-dah.{hex,lst,obj,cof,list,map,eep.hex,elf,s} space.{hex,lst,obj,cof,list,map,eep.hex,elf,s} *.o $(USBDRV_DIR)/*.o $(USBDRV_DIR)/oddebug.s $(USBDRV_DIR)/usbdrv.s
84 |
85 | # Generic rule for compiling C files:
86 | .c.o:
87 | $(COMPILE) -c $< -o $@
88 |
89 | dit-dah.o: dit-dah.c usbconfig.h usb_keyboard.h
90 |
91 | space.o: space.c usbconfig.h usb_keyboard.h
92 |
93 | # Generic rule for assembling Assembler source files:
94 | .S.o:
95 | $(COMPILE) -x assembler-with-cpp -c $< -o $@
96 | # "-x assembler-with-cpp" should not be necessary since this is the default
97 | # file type for the .S (with capital S) extension. However, upper case
98 | # characters are not always preserved on Windows. To ensure WinAVR
99 | # compatibility define the file type manually.
100 |
101 | # Generic rule for compiling C to assembler, used for debugging only.
102 | .c.s:
103 | $(COMPILE) -S $< -o $@
104 |
105 | # file targets:
106 |
107 | dit-dah.elf: $(OBJECTS) dit-dah.o
108 | $(COMPILE) -o dit-dah.elf $(OBJECTS) dit-dah.o
109 |
110 | space.elf: $(OBJECTS) space.o
111 | $(COMPILE) -o space.elf $(OBJECTS) space.o
112 |
113 | dit-dah.hex: dit-dah.elf
114 | rm -f dit-dah.hex dit-dah.eep.hex
115 | avr-objcopy -j .text -j .data -O ihex dit-dah.elf dit-dah.hex
116 | avr-size dit-dah.hex
117 |
118 | space.hex: space.elf
119 | rm -f space.hex space.eep.hex
120 | avr-objcopy -j .text -j .data -O ihex space.elf space.hex
121 | avr-size space.hex
122 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/Readme.txt:
--------------------------------------------------------------------------------
1 | Copyright 2012 Google Inc.
2 |
3 | This program is free software; you can redistribute it and/or
4 | modify it under the terms of the GNU General Public License
5 | as published by the Free Software Foundation; either version 2
6 | of the License, or (at your option) any later version.
7 |
8 | This program is distributed in the hope that it will be useful,
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | GNU General Public License for more details.
12 |
13 | You should have received a copy of the GNU General Public License
14 | along with this program; if not, write to the Free Software
15 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
16 | MA 02110-1301, USA.
17 |
18 |
19 | =====================================
20 | Summary
21 | =====================================
22 |
23 | Circuit diagram and firmwares of Morse key for Google Japanese Input.
24 |
25 |
26 | =====================================
27 | Files
28 | =====================================
29 |
30 | * V-USB library files
31 | third_party/usbdrv/
32 |
33 | This directory and files are copied from V-USB files available at
34 | http://www.obdev.at/vusb/
35 |
36 | * Documents
37 | COPYING ...... Open Source license for this software.
38 | Readme.txt ... The file you are currently reading.
39 |
40 | * Circuit diagram
41 | circuit.png
42 |
43 | * Firmware source codes
44 | Makefile
45 | dit-dah.c
46 | space.c
47 | usbconfig.h
48 | usb_keyboard.c
49 | usb_keyboard.h
50 |
51 | * Romaji table for Google Japanese Input
52 | romaji_dit-dah.txt
53 |
54 | =====================================
55 | Building & Writing Firmware
56 | =====================================
57 |
58 | * Building firmware binariese
59 |
60 | AVR-gcc is required.
61 |
62 | $ make hex
63 |
64 |
65 | * Writing to the program memory
66 |
67 | Choose one of the HEX files to write.
68 | - space.hex: Sends space key as the button is pressed.
69 | - dit-dah.hex: Sends dits, dahs.
70 |
71 | Please refer documents of AVR programmer device you use.
72 | Makefile contains "flash_space" and "flash_dit-dah" rules that writes
73 | a hex file using Avrdude as an example.
74 |
75 |
76 | * Programming the fuse bits
77 |
78 | Fuse bits must be configured in order to run the firmware correctly.
79 |
80 | lower byte: 0xef
81 | higher byte: 0xdb
82 |
83 | # ATTiny2313 FUSE_L (Fuse low byte):
84 | # 0xef = 1 1 1 0 1 1 1 1
85 | # ^ ^ \+/ \--+--/
86 | # | | | +------- CKSEL 3..0 (clock selection -> crystal @ 12 MHz)
87 | # | | +--------------- SUT 1..0 (BOD enabled, fast rising power)
88 | # | +------------------ CKOUT (clock output on CKOUT pin -> disabled)
89 | # +-------------------- CKDIV8 (divide clock by 8 -> don't divide)
90 | # ATTiny2313 FUSE_H (Fuse high byte):
91 | # 0xdb = 1 1 0 1 1 0 1 1
92 | # ^ ^ ^ ^ \-+-/ ^
93 | # | | | | | +---- RSTDISBL (disable external reset -> enabled)
94 | # | | | | +-------- BODLEVEL 2..0 (brownout trigger level -> 2.7V)
95 | # | | | +-------------- WDTON (watchdog timer always on -> disable)
96 | # | | +---------------- SPIEN (enable serial programming -> enabled)
97 | # | +------------------ EESAVE (preserve EEPROM on Chip Erase
98 | # | -> not preserved)
99 | # +-------------------- DWEN (debug wire enable)
100 |
101 | Makefile contains "fuse" rule that programs fuse bits using Avrdude as an
102 | example.
103 |
104 |
105 | ===================================================
106 | Using dit-dah firmware with Google Japanese Input
107 | ===================================================
108 |
109 | "dit-dah" firmware is intended to be combined with Google Japanese Input, whose
110 | romaji table is configured by "romaji_dit-dah.txt".
111 |
112 | Note: This process will overwrite existing romaji table.
113 | If you have customized the romaji table, you should backup your data first.
114 |
115 | 1. Open Properties
116 | 2. Press "Customize..." button
117 | 3. Open "Edit - Inport from file..."
118 | 4. Open "romaji_dit-dah.txt" in this directory
119 |
120 |
121 | ==================
122 | References
123 | ==================
124 |
125 | The firmware and circuit diagram has been developed based on V-USB.
126 |
127 | * V-USB
128 | http://www.obdev.at/vusb/
129 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/circuit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-morse/circuit.png
--------------------------------------------------------------------------------
/third_party/mozc-morse/dit-dah.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2012 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 |
21 | /*
22 | * USB keyboard to input by Morse code with help of special romaji table.
23 | * The device transmits keycodes based on a single button input:
24 | *
25 | * "." for a short tap
26 | * "-" for a long tap
27 | * "/" for a pause after a tap
28 | * [SPACE][ENTER] for a long pause after taps (convert and commit)
29 | */
30 |
31 | #include
32 | #include
33 | #include /* for _delay_ms() */
34 | #include "usb_keyboard.h"
35 |
36 | /*
37 | * Thresholds for button pressing duration.
38 | *
39 | * A counter is increased every 10 milliseconds in the main loop.
40 | * These time lengths are specified by the units of this counter.
41 | *
42 | * FYI: WPM = words per minute is commonly used unit of morse code speed.
43 | * 1 word stands for 50 dots. For example, 10 WPM means 1 dot=0.12s
44 | */
45 |
46 | #define T_DIT 12 /* 10WPM */
47 |
48 | /* minimum length of button press duration for a "dah" */
49 | #define THRESHOLD_DIT_DAH (T_DIT + 7)
50 |
51 | /* minimum length of time for a character separator */
52 | #define THRESHOLD_GAP (T_DIT * 3)
53 |
54 | /* length of time to wait before convert and commit */
55 | #define THRESHOLD_LONG_GAP 100 /* 1 second */
56 |
57 |
58 | #define EMPTY 255
59 |
60 | int __attribute__((noreturn)) main(void)
61 | {
62 | PORTB = 0xff;
63 |
64 | wdt_enable(WDTO_1S);
65 | initUsbKeyboard();
66 |
67 | /* sets up timer for button polling interval */
68 | /* timer 1 CTC mode, counts up at f[clock]/8 [Hz] */
69 | TCCR1B = (1 << WGM12) | (1 << CS11);
70 | TCNT1 = 0;
71 | OCR1A = F_CPU / 8 / 100; /* 100Hz, T=10 milliseconds */
72 |
73 | uchar key = 0;
74 |
75 | /* Keyboard keys to send.
76 | * Since we have only 1 byte buffer, the first key is dropped if the second
77 | * key is pushed before submitting it.
78 | */
79 | uchar cmdBuf = EMPTY;
80 |
81 | uchar state = 0;
82 | unsigned int count = 0;
83 | while(1) { /* main event loop */
84 | wdt_reset();
85 | usbPoll();
86 | if(usbInterruptIsReady()) {
87 | if (cmdBuf != EMPTY) {
88 | prepareInterruptReport(cmdBuf);
89 | if (cmdBuf == KEYCODE_NONE) {
90 | cmdBuf = EMPTY;
91 | } else {
92 | /* release all keys */
93 | cmdBuf = KEYCODE_NONE;
94 | }
95 | }
96 | }
97 | /* samples the key input every 10 milliseconds to avoid chattering */
98 | if (bit_is_clear(TIFR, OCF1A)) {
99 | continue;
100 | }
101 | TIFR |= _BV(OCF1A); /* clear OCF1A */
102 |
103 | key = bit_is_clear(PINB, PINB0);
104 | switch(state) {
105 | case 0: /* initial state or after a long gap */
106 | if (key) {
107 | state = 1;
108 | count = 0;
109 | }
110 | break;
111 | case 1: /* key is on */
112 | if (!key) {
113 | cmdBuf = KEYCODE_PERIOD; /* dot */
114 | state = 3;
115 | count = 0;
116 | break;
117 | }
118 | if (count++ > THRESHOLD_DIT_DAH) {
119 | state = 2;
120 | count = 0;
121 | }
122 | break;
123 | case 2: /* key has been pressed long enough to input dash */
124 | if (!key) {
125 | cmdBuf = KEYCODE_HYPHEN; /* dash */
126 | state = 3;
127 | count = 0;
128 | }
129 | break;
130 | case 3: /* key was released. */
131 | if (key) {
132 | state = 1;
133 | count = 0;
134 | break;
135 | }
136 | if (count++ > THRESHOLD_GAP) {
137 | cmdBuf = KEYCODE_SLASH; /* word separator */
138 | state = 4;
139 | }
140 | break;
141 | case 4: /* short gap, or long gap */
142 | if (key) {
143 | state = 1;
144 | count = 0;
145 | break;
146 | }
147 | if (count++ > THRESHOLD_LONG_GAP) {
148 | cmdBuf = KEYCODE_SPACE; /* start conversion */
149 | state = 5;
150 | count = 0;
151 | }
152 | break;
153 | case 5: /* long gap. pause before sending Enter key. */
154 | if (count++ > T_DIT) {
155 | cmdBuf = KEYCODE_ENTER; /* commit conversion */
156 | state = 0;
157 | count = 0;
158 | }
159 | break;
160 | }
161 | }
162 | }
163 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/romaji_dit-dah.txt:
--------------------------------------------------------------------------------
1 | -..---/ (本文)
2 | .-.-../ (段落)
3 | ...-./ (訂正or終了)
4 | .-.-.-/ 、
5 | --.--/ あ
6 | .-/ い
7 | ..-/ う
8 | -.---/ え
9 | .-.../ お
10 | .-../ か
11 | -.-../ き
12 | ...-/ く
13 | -.--/ け
14 | ----/ こ
15 | -.-.-/ さ
16 | --.-./ し
17 | ---.-/ す
18 | .---./ せ
19 | ---./ そ
20 | -./ た
21 | ..-./ ち
22 | .--./ つ
23 | .-.--/ て
24 | ..-../ と
25 | .-./ な
26 | -.-./ に
27 | ..../ ぬ
28 | --.-/ ね
29 | ..--/ の
30 | -.../ は
31 | --..-/ ひ
32 | --../ ふ
33 | ./ へ
34 | -../ ほ
35 | -..-/ ま
36 | ..-.-/ み
37 | -/ む
38 | -...-/ め
39 | -..-./ も
40 | .--/ や
41 | -..--/ ゆ
42 | --/ よ
43 | .../ ら
44 | --./ り
45 | -.--./ る
46 | ---/ れ
47 | .-.-/ ろ
48 | -.-/ わ
49 | .-..-/ ゐ
50 | .--../ ゑ
51 | .---/ を
52 | .-.-./ ん
53 | ../ ゛
54 | ..--./ ゜
55 | う../ ヴ
56 | か../ が
57 | き../ ぎ
58 | く../ ぐ
59 | け../ げ
60 | こ../ ご
61 | さ../ ざ
62 | し../ じ
63 | す../ ず
64 | せ../ ぜ
65 | そ../ ぞ
66 | た../ だ
67 | ち../ ぢ
68 | つ../ づ
69 | て../ で
70 | と../ ど
71 | は../ ば
72 | ひ../ び
73 | ふ../ ぶ
74 | へ../ べ
75 | ほ../ ぼ
76 | う..--./ ぅ
77 | は..--./ ぱ
78 | ひ..--./ ぴ
79 | ふ..--./ ぷ
80 | へ..--./ ぺ
81 | ほ..--./ ぽ
82 | か..--./ ヵ
83 | け..--./ ヶ
84 | .--.-/ ー
85 | -.--.-/ (
86 | .-..-./ )
87 | き- き -
88 | き./ き へ
89 | き.- き .-
90 | き..- き ..-
91 | き... き ...
92 | く- く -
93 | く./ く へ
94 | く.- く .-
95 | く..- く ..-
96 | く... く ...
97 | こ- こ -
98 | こ./ こ へ
99 | こ.- こ .-
100 | こ..- こ ..-
101 | こ... こ ...
102 | さ- さ -
103 | さ./ さ へ
104 | さ.- さ .-
105 | さ..- さ ..-
106 | さ... さ ...
107 | し- し -
108 | し./ し へ
109 | し.- し .-
110 | し..- し ..-
111 | し... し ...
112 | す- す -
113 | す./ す へ
114 | す.- す .-
115 | す..- す ..-
116 | す... す ...
117 | せ- せ -
118 | せ./ せ へ
119 | せ.- せ .-
120 | せ..- せ ..-
121 | せ... せ ...
122 | そ- そ -
123 | そ./ そ へ
124 | そ.- そ .-
125 | そ..- そ ..-
126 | そ... そ ...
127 | た- た -
128 | た./ た へ
129 | た.- た .-
130 | た..- た ..-
131 | た... た ...
132 | ち- ち -
133 | ち./ ち へ
134 | ち.- ち .-
135 | ち..- ち ..-
136 | ち... ち ...
137 | て- て -
138 | て./ て へ
139 | て.- て .-
140 | て..- て ..-
141 | て... て ...
142 | と- と -
143 | と./ と へ
144 | と.- と .-
145 | と..- と ..-
146 | と... と ...
147 | う- う -
148 | う.- う .-
149 | う./ う へ
150 | う... う ...
151 | う..-. う ..-.
152 | う..-/ う う
153 | う..--- う ..---
154 | う..--/ うの
155 | は- は -
156 | は.- は .-
157 | は./ は へ
158 | は... は ...
159 | は..-. は ..-.
160 | は..-/ は う
161 | は..--- は ..---
162 | は..--/ はの
163 | ひ- ひ -
164 | ひ.- ひ .-
165 | ひ./ ひ へ
166 | ひ... ひ ...
167 | ひ..-. ひ ..-.
168 | ひ..-/ ひ う
169 | ひ..--- ひ ..---
170 | ひ..--/ ひの
171 | ふ- ふ -
172 | ふ.- ふ .-
173 | ふ./ ふ へ
174 | ふ... ふ ...
175 | ふ..-. ふ ..-.
176 | ふ..-/ ふ う
177 | ふ..--- ふ ..---
178 | ふ..--/ ふの
179 | へ- へ -
180 | へ.- へ .-
181 | へ./ へ へ
182 | へ... へ ...
183 | へ..-. へ ..-.
184 | へ..-/ へ う
185 | へ..--- へ ..---
186 | へ..--/ への
187 | ほ- ほ -
188 | ほ.- ほ .-
189 | ほ./ ほ へ
190 | ほ... ほ ...
191 | ほ..-. ほ ..-.
192 | ほ..-/ ほ う
193 | ほ..--- ほ ..---
194 | ほ..--/ ほの
195 | つ- つ -
196 | つ.- つ .-
197 | つ./ つ へ
198 | つ... つ ...
199 | つ..-. つ ..-.
200 | つ..-/ つ う
201 | つ..--- つ ..---
202 | つ..--/ つの
203 | か- か -
204 | か.- か .-
205 | か./ か へ
206 | か... か ...
207 | か..-. か ..-.
208 | か..-/ か う
209 | か..--- か ..---
210 | か..--/ かの
211 | け- け -
212 | け.- け .-
213 | け./ け へ
214 | け... け ...
215 | け..-. け ..-.
216 | け..-/ け う
217 | け..--- け ..---
218 | け..--/ けの
219 | つ..--./ っ
220 | や- や -
221 | や.- や .-
222 | や./ や へ
223 | や../ や゛
224 | や... や ...
225 | や..-. や ..-.
226 | や..-/ や う
227 | や..--- や ..---
228 | や..--/ やの
229 | や..--./ ゃ
230 | ゆ- ゆ -
231 | ゆ.- ゆ .-
232 | ゆ./ ゆ へ
233 | ゆ../ ゆ゛
234 | ゆ... ゆ ...
235 | ゆ..-. ゆ ..-.
236 | ゆ..-/ ゆ う
237 | ゆ..--- ゆ ..---
238 | ゆ..--/ ゆの
239 | ゆ..--./ ゅ
240 | よ- よ -
241 | よ.- よ .-
242 | よ./ よ へ
243 | よ../ よ゛
244 | よ... よ ...
245 | よ..-. よ ..-.
246 | よ..-/ よ う
247 | よ..--- よ ..---
248 | よ..--/ よの
249 | よ..--./ ょ
250 | あ- あ -
251 | あ.- あ .-
252 | あ./ あ へ
253 | あ../ あ゛
254 | あ... あ ...
255 | あ..-. あ ..-.
256 | あ..-/ あ う
257 | あ..--- あ ..---
258 | あ..--/ あの
259 | あ..--./ ぁ
260 | い- い -
261 | い.- い .-
262 | い./ い へ
263 | い../ い゛
264 | い... い ...
265 | い..-. い ..-.
266 | い..-/ い う
267 | い..--- い ..---
268 | い..--/ いの
269 | い..--./ ぃ
270 | え- え -
271 | え.- え .-
272 | え./ え へ
273 | え../ え゛
274 | え... え ...
275 | え..-. え ..-.
276 | え..-/ え う
277 | え..--- え ..---
278 | え..--/ えの
279 | え..--./ ぇ
280 | お- お -
281 | お.- お .-
282 | お./ お へ
283 | お../ お゛
284 | お... お ...
285 | お..-. お ..-.
286 | お..-/ お う
287 | お..--- お ..---
288 | お..--/ おの
289 | お..--./ ぉ
290 | わ- わ -
291 | わ.- わ .-
292 | わ./ わ へ
293 | わ../ わ゛
294 | わ... わ ...
295 | わ..-. わ ..-.
296 | わ..-/ わ う
297 | わ..--- わ ..---
298 | わ..--/ わの
299 | わ..--./ ゎ
300 | .----/ 1
301 | ..---/ 2
302 | ...--/ 3
303 | ....-/ 4
304 | ...../ 5
305 | -..../ 6
306 | --.../ 7
307 | ---../ 8
308 | ----./ 9
309 | -----/ 0
310 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/space.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2012 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 |
21 | /*
22 | * USB space key.
23 | * Connect a nomally-open switch to PB0. The device works as a space bar.
24 | */
25 |
26 | #include
27 | #include
28 | #include /* for _delay_ms() */
29 | #include "usb_keyboard.h"
30 |
31 | int __attribute__((noreturn)) main(void)
32 | {
33 | PORTB = 0xff;
34 |
35 | wdt_enable(WDTO_1S);
36 |
37 | initUsbKeyboard();
38 |
39 | /* sets up timer for button polling interval */
40 | /* timer 1 CTC mode, counts up at f[clock]/8 [Hz] */
41 | TCCR1B = (1 << WGM12) | (1 << CS11);
42 | TCNT1 = 0;
43 | OCR1A = F_CPU / 8 / 100; /* 100Hz, T=10 milliseconds */
44 |
45 | uchar key = 0;
46 | uchar lastKey = 0;
47 |
48 | while(1) { /* main event loop */
49 | wdt_reset();
50 | usbPoll();
51 |
52 | /* samples the key input every 10 milliseconds to avoid chattering */
53 | if (bit_is_clear(TIFR, OCF1A)) {
54 | continue;
55 | }
56 | TIFR |= _BV(OCF1A); /* clear OCF1A */
57 |
58 | if(usbInterruptIsReady()){
59 | key = bit_is_clear(PINB, PINB0) ? KEYCODE_SPACE : KEYCODE_NONE;
60 | if (key != lastKey) {
61 | lastKey = key;
62 | prepareInterruptReport(key);
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/usb_keyboard.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2012 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 | #include "usb_keyboard.h"
21 |
22 | #include /* for sei() */
23 | #include
24 | #include /* for _delay_ms() */
25 |
26 | /* USB report descriptor, size must match usbconfig.h */
27 | const PROGMEM char usbHidReportDescriptor[35] = {
28 | 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
29 | 0x09, 0x06, // USAGE (Keyboard)
30 | 0xa1, 0x01, // COLLECTION (Application)
31 | 0x05, 0x07, // USAGE_PAGE (Keyboard)
32 | 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
33 | 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
34 | 0x15, 0x00, // LOGICAL_MINIMUM (0)
35 | 0x25, 0x01, // LOGICAL_MAXIMUM (1)
36 | 0x75, 0x01, // REPORT_SIZE (1)
37 | 0x95, 0x08, // REPORT_COUNT (8)
38 | 0x81, 0x02, // INPUT (Data,Var,Abs)
39 | 0x95, 0x01, // REPORT_COUNT (1)
40 | 0x75, 0x08, // REPORT_SIZE (8)
41 | 0x25, 0x65, // LOGICAL_MAXIMUM (101)
42 | 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
43 | 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
44 | 0x81, 0x00, // INPUT (Data,Ary,Abs)
45 | 0xc0 // END_COLLECTION
46 | };
47 |
48 | static uchar reportBuffer[2];
49 | static uchar idleRate; /* repeat rate for keyboards */
50 |
51 | #define MOD_CONTROL_LEFT (1<<0)
52 | #define MOD_SHIFT_LEFT (1<<1)
53 | #define MOD_ALT_LEFT (1<<2)
54 | #define MOD_GUI_LEFT (1<<3)
55 | #define MOD_CONTROL_RIGHT (1<<4)
56 | #define MOD_SHIFT_RIGHT (1<<5)
57 | #define MOD_ALT_RIGHT (1<<6)
58 | #define MOD_GUI_RIGHT (1<<7)
59 |
60 | uchar keyReport[2];
61 |
62 | usbMsgLen_t usbFunctionSetup(uchar data[8])
63 | {
64 | usbRequest_t *rq = (void *)data;
65 |
66 | /* The following requests are never used. But since they are required by
67 | * the specification, we implement them in this example.
68 | */
69 | if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS) {
70 | /* class request type */
71 | /* wValue: ReportType (highbyte), ReportID (lowbyte) */
72 | if(rq->bRequest == USBRQ_HID_GET_REPORT) {
73 | /* we only have one report type, so don't look at wValue */
74 | usbMsgPtr = (void *)&reportBuffer;
75 | return sizeof(reportBuffer);
76 | } else if(rq->bRequest == USBRQ_HID_GET_IDLE) {
77 | usbMsgPtr = &idleRate;
78 | return 1;
79 | } else if(rq->bRequest == USBRQ_HID_SET_IDLE) {
80 | idleRate = rq->wValue.bytes[1];
81 | }
82 | } else {
83 | /* no vendor specific requests implemented */
84 | }
85 | /* default for not implemented requests: return no data back to host */
86 | return 0;
87 | }
88 |
89 | void initUsbKeyboard() {
90 | usbInit();
91 | /* enforce re-enumeration, do this while interrupts are disabled! */
92 | usbDeviceDisconnect();
93 | uchar i;
94 | i = 0;
95 | while(--i) { /* fake USB disconnect for > 250 ms */
96 | wdt_reset();
97 | _delay_ms(1);
98 | }
99 | usbDeviceConnect();
100 | sei();
101 | }
102 |
103 | void prepareInterruptReport(uchar keycode) {
104 | reportBuffer[0] = 0; /* modifier keys */
105 | reportBuffer[1] = keycode;
106 | /* called after every poll of the interrupt endpoint */
107 | usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer));
108 | }
109 |
--------------------------------------------------------------------------------
/third_party/mozc-morse/usb_keyboard.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2012 Google Inc.
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program; if not, write to the Free Software
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 | * MA 02110-1301, USA.
18 | */
19 |
20 | #include "usbdrv.h"
21 |
22 | usbMsgLen_t usbFunctionSetup(uchar data[8]);
23 | void initUsbKeyboard();
24 | void prepareInterruptReport(uchar key);
25 |
26 | #define KEYCODE_NONE 0x00
27 | #define KEYCODE_SPACE 0x2c
28 | #define KEYCODE_PERIOD 0x37
29 | #define KEYCODE_HYPHEN 0x2d
30 | #define KEYCODE_SLASH 0x38
31 | #define KEYCODE_ENTER 0x28
32 | #define KEYCODE_SEMICOLON 0x33
33 |
--------------------------------------------------------------------------------
/third_party/mozc-puchi/README.md:
--------------------------------------------------------------------------------
1 |
2 | Summary
3 | =====================================
4 |
5 | Mechanical design, circuit diagram and firmware of Google Japanese Input
6 | puchi-puchi version.
7 |
8 |
9 | Building your device
10 | =====================================
11 |
12 | 
13 |
14 | ## Electronic parts
15 |
16 | ### Desktop type
17 |
18 | * Arduino Leonardo
19 | * Adafruit motor driver shield
20 | * Microswitch * 5
21 | * LED * 5
22 | * 330[ohm] Resistors * 5
23 |
24 | ### Handheld type
25 |
26 | * Arduino Micro
27 | * Microswitch * 5
28 |
29 |
30 | Files
31 | =====================================
32 |
33 | * README.md ----> this file
34 | * LICENSE ----> license file
35 | * circuit/
36 | * circuit.jpg ----> circuit diagram of both desktop/handheld devices
37 | * desktop/
38 | * 3Dprinter ----> data to print for 3D printer
39 | * desktop.igs
40 | * desktop.stl
41 | * desktop.stp
42 | * Arduino/ ----> Arduino sketch file to drive board (Leonardo)
43 | * desktop/desktop.ino
44 | * handheld/
45 | * 3Dprinter/ ----> data to print for 3D printer
46 | * handheld.igs
47 | * handheld.stl
48 | * handheld.stp
49 | * Arduino/ ----> Arduino sketch file to drive board (Arduino Micro)
50 | * handheld/handheld.ino
51 |
--------------------------------------------------------------------------------
/third_party/mozc-puchi/circuit/circuit.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-puchi/circuit/circuit.jpg
--------------------------------------------------------------------------------
/third_party/mozc-puchi/desktop/3Dprinter/desktop.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-puchi/desktop/3Dprinter/desktop.stl
--------------------------------------------------------------------------------
/third_party/mozc-puchi/handheld/3Dprinter/handheld.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-puchi/handheld/3Dprinter/handheld.stl
--------------------------------------------------------------------------------
/third_party/mozc-puchi/photo/device_desktop.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/mozc-devices/2dafea49c6411f20ee17bf920a865a0c1cf4cfe1/third_party/mozc-puchi/photo/device_desktop.jpg
--------------------------------------------------------------------------------
/third_party/usbdrv/oddebug.c:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.c
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | * This Revision: $Id$
9 | */
10 |
11 | #include "oddebug.h"
12 |
13 | #if DEBUG_LEVEL > 0
14 |
15 | #warning "Never compile production devices with debugging enabled"
16 |
17 | static void uartPutc(char c)
18 | {
19 | while(!(ODDBG_USR & (1 << ODDBG_UDRE))); /* wait for data register empty */
20 | ODDBG_UDR = c;
21 | }
22 |
23 | static uchar hexAscii(uchar h)
24 | {
25 | h &= 0xf;
26 | if(h >= 10)
27 | h += 'a' - (uchar)10 - '0';
28 | h += '0';
29 | return h;
30 | }
31 |
32 | static void printHex(uchar c)
33 | {
34 | uartPutc(hexAscii(c >> 4));
35 | uartPutc(hexAscii(c));
36 | }
37 |
38 | void odDebug(uchar prefix, uchar *data, uchar len)
39 | {
40 | printHex(prefix);
41 | uartPutc(':');
42 | while(len--){
43 | uartPutc(' ');
44 | printHex(*data++);
45 | }
46 | uartPutc('\r');
47 | uartPutc('\n');
48 | }
49 |
50 | #endif
51 |
--------------------------------------------------------------------------------
/third_party/usbdrv/oddebug.h:
--------------------------------------------------------------------------------
1 | /* Name: oddebug.h
2 | * Project: AVR library
3 | * Author: Christian Starkjohann
4 | * Creation Date: 2005-01-16
5 | * Tabsize: 4
6 | * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 | * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 | * This Revision: $Id$
9 | */
10 |
11 | #ifndef __oddebug_h_included__
12 | #define __oddebug_h_included__
13 |
14 | /*
15 | General Description:
16 | This module implements a function for debug logs on the serial line of the
17 | AVR microcontroller. Debugging can be configured with the define
18 | 'DEBUG_LEVEL'. If this macro is not defined or defined to 0, all debugging
19 | calls are no-ops. If it is 1, DBG1 logs will appear, but not DBG2. If it is
20 | 2, DBG1 and DBG2 logs will be printed.
21 |
22 | A debug log consists of a label ('prefix') to indicate which debug log created
23 | the output and a memory block to dump in hex ('data' and 'len').
24 | */
25 |
26 |
27 | #ifndef F_CPU
28 | # define F_CPU 12000000 /* 12 MHz */
29 | #endif
30 |
31 | /* make sure we have the UART defines: */
32 | #include "usbportability.h"
33 |
34 | #ifndef uchar
35 | # define uchar unsigned char
36 | #endif
37 |
38 | #if DEBUG_LEVEL > 0 && !(defined TXEN || defined TXEN0) /* no UART in device */
39 | # warning "Debugging disabled because device has no UART"
40 | # undef DEBUG_LEVEL
41 | #endif
42 |
43 | #ifndef DEBUG_LEVEL
44 | # define DEBUG_LEVEL 0
45 | #endif
46 |
47 | /* ------------------------------------------------------------------------- */
48 |
49 | #if DEBUG_LEVEL > 0
50 | # define DBG1(prefix, data, len) odDebug(prefix, data, len)
51 | #else
52 | # define DBG1(prefix, data, len)
53 | #endif
54 |
55 | #if DEBUG_LEVEL > 1
56 | # define DBG2(prefix, data, len) odDebug(prefix, data, len)
57 | #else
58 | # define DBG2(prefix, data, len)
59 | #endif
60 |
61 | /* ------------------------------------------------------------------------- */
62 |
63 | #if DEBUG_LEVEL > 0
64 | extern void odDebug(uchar prefix, uchar *data, uchar len);
65 |
66 | /* Try to find our control registers; ATMEL likes to rename these */
67 |
68 | #if defined UBRR
69 | # define ODDBG_UBRR UBRR
70 | #elif defined UBRRL
71 | # define ODDBG_UBRR UBRRL
72 | #elif defined UBRR0
73 | # define ODDBG_UBRR UBRR0
74 | #elif defined UBRR0L
75 | # define ODDBG_UBRR UBRR0L
76 | #endif
77 |
78 | #if defined UCR
79 | # define ODDBG_UCR UCR
80 | #elif defined UCSRB
81 | # define ODDBG_UCR UCSRB
82 | #elif defined UCSR0B
83 | # define ODDBG_UCR UCSR0B
84 | #endif
85 |
86 | #if defined TXEN
87 | # define ODDBG_TXEN TXEN
88 | #else
89 | # define ODDBG_TXEN TXEN0
90 | #endif
91 |
92 | #if defined USR
93 | # define ODDBG_USR USR
94 | #elif defined UCSRA
95 | # define ODDBG_USR UCSRA
96 | #elif defined UCSR0A
97 | # define ODDBG_USR UCSR0A
98 | #endif
99 |
100 | #if defined UDRE
101 | # define ODDBG_UDRE UDRE
102 | #else
103 | # define ODDBG_UDRE UDRE0
104 | #endif
105 |
106 | #if defined UDR
107 | # define ODDBG_UDR UDR
108 | #elif defined UDR0
109 | # define ODDBG_UDR UDR0
110 | #endif
111 |
112 | static inline void odDebugInit(void)
113 | {
114 | ODDBG_UCR |= (1<