Add mozc double sided version.
Change-Id: I3c50b5c3435c3c01c79bfc14c5d605701a423356 Co-authored-by: Takashi Toyoshima <toyoshim@google.com> Co-authored-by: Shun Ikejima <ikejima@google.com> Reviewed-by: Eliot Courtney <edcourtney@google.com>
269
mozc-doublesided/README.md
Normal file
@@ -0,0 +1,269 @@
|
||||
# Gboard double sided version
|
||||
|
||||
This directory contains the firmware and hardware design for Gboard double sided
|
||||
version, which was released on **Oct 1, 2024**.
|
||||
|
||||
This is not an officially supported Google product.
|
||||
|
||||

|
||||
|
||||
## Contents
|
||||
|
||||
The directory structure is as follows:
|
||||
|
||||
- case/ : STL files for case
|
||||
- board/ : KiCad schematics and PCB layouts
|
||||
- firmware/ : Firmware resources for STM32CubeIDE
|
||||
- gerber/ : Gerber data for PCB production and assembly
|
||||
|
||||
## Building Gboard double-sided Version
|
||||
|
||||
### Parts
|
||||
|
||||
- Assembled A Type Board: 26 boards (incl. 1 primary board) - See BOM below
|
||||
- Assembled B Type Board: 26 boards (incl. 1 primary board) - See BOM below
|
||||
- USB Board: 1 board - See BOM below
|
||||
- Cable A; JST ZH 1.5mm pitch 8pin 100mm forward double head: 25 units
|
||||
- Cable B; JST ZH 1.5mm pitch 7pin 100mm forward double head: 1 units
|
||||
- Pin Header; 1x4 pin 2.54mm pitch 12+mm height,
|
||||
([sample](https://akizukidenshi.com/catalog/g/g101382/)): 52 headers.
|
||||
- 3D printed case: 26 pcs
|
||||
- Self tapping screw (M2 10mm): 52 pcs
|
||||
- Key switch (Cherry MX or compatible): 208 pcs.
|
||||
- Key caps (For Cherry MX switch): 208 pcs.
|
||||
|
||||
#### A Type Board BOM
|
||||
|
||||
| Reference | Description | Qty | Note |
|
||||
| --------- | ----------------------------------- | --- | ------------------ |
|
||||
| R1-R2 | 0402(metric: 1005) Resistor 510 ohm | 2 | |
|
||||
| R3-R4 | 0603(metric: 1608) Resistor 1K ohm | 2 | Primary board only |
|
||||
| J2-J3 | JST S8B-ZR | 2 | |
|
||||
| J4 | JST S7B-ZR | 1 | Primary board only |
|
||||
| U1 | STMicro STM32F042F4P6 | 1 | |
|
||||
| SW1-SW4 | Kailh CPG151101S11-1 | 4 | |
|
||||
| D1-D4 | OPSCO Optoelectronics SK6812MINI-E | 4 | |
|
||||
| D5-D8 | 0805(metric: 2012) Small Signal | 4 | |
|
||||
: : Switching Diode : : :
|
||||
| C1 | 0402(metric: 1005) Capacitor 0.1uF | 1 | |
|
||||
|
||||
The parts that are only on the primary board are not included in the BOM file
|
||||
(in `gerber/` directory), so make sure that you choose one board to be the
|
||||
primary board and solder in the primary board specific parts.
|
||||
|
||||
#### B Type Board BOM
|
||||
|
||||
Reference | Description | Qty | Note
|
||||
--------- | ----------------------------------------------- | --- | ----
|
||||
R2 | 0402(metric: 1005) Resistor 510 ohm | 1 |
|
||||
SW1-SW4 | Kailh CPG151101S11-1 | 4 |
|
||||
D1-D4 | OPSCO Optoelectronics SK6812MINI-E | 4 |
|
||||
D5-D8 | 0805(metric: 2012) Small Signal Switching Diode | 4 |
|
||||
|
||||
#### USB Board BOM
|
||||
|
||||
Reference | Description | Qty | Note
|
||||
--------- | ------------------------------------ | --- | ----
|
||||
U1 | 1A/3.3V Regulator AMS1117-3.3 | 1 |
|
||||
R1-R2 | 0402(metric: 1005) Resistor 5.1K ohm | 2 |
|
||||
R3-R4 | 0402(metric: 1005) Resistor 22 ohm | 2 |
|
||||
R5 | 0402(metric: 1005) Resistor 1.5K ohm | 1 |
|
||||
J1 | JST S7B-ZR | 1 |
|
||||
J2 | USB Type-C 16pin connector | 1 |
|
||||
C1 | 0402(metric: 1005) Capacitor 10uF | 1 |
|
||||
C2 | 0402(metric: 1005) Capacitor 2.2uF | 1 |
|
||||
C3-C4 | 0402(metric: 1005) Capacitor 47pF | 2 |
|
||||
|
||||
### Hardware
|
||||
|
||||
#### Step 1: Prepare 3d printed parts
|
||||
|
||||
The `case/` directory of this repository has STL files for the case. The case
|
||||
consists of 26 parts (case00.stl - case25.stl). Each part has a number engraved
|
||||
on the inside. For example, when assembling, you will insert the protrusion of
|
||||
case 0 into the hole of case 1.
|
||||
|
||||
We also provide a jig (`case/jig.stl`) for soldering between the A type boards
|
||||
and B type boards. Please print this too.
|
||||
|
||||
#### Step 2: Prepare PCB
|
||||
|
||||
**PCB Production and Assembly**
|
||||
|
||||
First, you need to build 26 A type boards and 26 B type boards, and one USB
|
||||
board. You may be able to use existing gerber data, BOM, and CPL (positions)
|
||||
from `gerber/` directory.
|
||||
|
||||
Board Type | Gerber | BOM | CPL
|
||||
---------- | -------------- | ------------------ | ------------------------
|
||||
A | main_panel.zip | main_panel_bom.csv | main_panel_positions.csv
|
||||
B | sub_panel.zip | sub_panel_bom.csv | sub_panel_positions.csv
|
||||
USB | usb.zip | usb_bom.csv | usb_positions.csv
|
||||
|
||||
Prepared board data for the A type board and the B type board contains 9 boards
|
||||
in a panel. So, you need to produce 3 panels to build 27 (26 required + 1 spare)
|
||||
boards. You also need one USB board.
|
||||
|
||||
**Firmware upload**
|
||||
|
||||
Next, let's burn the prebuilt firmware.
|
||||
|
||||
Connect the following 4 pads, SWDIO, SWCLK, GND, and +3.3V with ST-LINK. You can
|
||||
use
|
||||
[STM32CubeProgrammer](https://www.st.com/ja/development-tools/stm32cubeprog.html)
|
||||
to configure the device and to burn the prebuilt firmware. There's no connector,
|
||||
just holes in the PCB so make sure you keep a secure connection while
|
||||
programming the device.
|
||||
|
||||

|
||||
|
||||
Once the programmer establishes the connection with the A type board, you need
|
||||
to write the `Option bytes`. Under the `User Configuration` section, you will
|
||||
see the `BOOT_SEL` bit. You need to ensure the bit is unchecked before pushing
|
||||
the `Apply` button.
|
||||
|
||||
Next, you will go to the `Erasing & Programming` section to burn the prebuilt
|
||||
firmware, `firmware/prebuilt/mozc.elf`. Select the binary from the `Browse`
|
||||
button, put `0x08000000` for the `Start address`, then press the `Start
|
||||
Programming` button.
|
||||
|
||||
You need to burn the same settings and firmware into all the Boards A.
|
||||
|
||||
**Primary A Type Board Specific Modifications**
|
||||
|
||||
You need to choose one of the A type boards to be the primary A type board and
|
||||
add three parts to it.
|
||||
|
||||
1. J4 JST S7B-ZR connector header
|
||||
2. R3 0603 Resistor 1K ohm
|
||||
3. R4 0603 Resistor 1K ohm
|
||||
|
||||

|
||||
|
||||
**Construct the A/B Type Board Pair Modules**
|
||||
|
||||
You need to prepare 26 pairs of the A type board and B type board. They should
|
||||
be paired as the following picture shows. Each `P Connector` and each `S
|
||||
connector` should be connected using the 1x4 pin headers respectively.
|
||||
|
||||
Make sure that the `IN` side of the A type board and B type board face each
|
||||
other.
|
||||
|
||||

|
||||
|
||||
Also, the distance should be adjusted to fit the case. It will help to print the
|
||||
included jig STL to hold both boards while soldering the pin headers.
|
||||
|
||||

|
||||

|
||||
|
||||
#### Step 3: Insert PCB to case
|
||||
|
||||
**Primary A/B Pair Module**
|
||||
|
||||
Connect the primary module and the USB board.
|
||||
|
||||

|
||||
|
||||
Insert the USB board into case 0.
|
||||
|
||||

|
||||
|
||||
**All Pair Modules**
|
||||
|
||||
Insert each paired module into a case. You need to ensure the A type board is
|
||||
always placed on the bottom side.
|
||||
|
||||

|
||||
|
||||
#### Step 4: Connect the cases together
|
||||
|
||||
You need to connect all the `UP` socket and `DOWN` socket pairs. Please be
|
||||
careful not to connect the same type of socket, i.e. `UP` and `UP`, or `DOWN`
|
||||
and `DOWN` together. It will cause a short circuit and destroy the chips when
|
||||
powered on. If you notice a smell or see smoke, disconnect the power
|
||||
immediately. This may prevent damage to the boards.
|
||||
|
||||

|
||||
|
||||
The below picture shows the connections. Please make sure that module 0 and
|
||||
module 25 are not connected to each other.
|
||||
|
||||
Note that this picture is simplified and doesn't reflect the 3d structure of the
|
||||
keyboard. So, module 25 will be placed upside down.
|
||||
|
||||

|
||||
|
||||
You can use screws to keep the boards tightly connected.
|
||||
|
||||
### Firmware
|
||||
|
||||
#### Step 1: Environment setup
|
||||
|
||||
You need to install STMicroelectronics's official tools to develop STM32.
|
||||
|
||||
- [STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html) -
|
||||
Confirmed with 1.16.1.
|
||||
- [STM32CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html) -
|
||||
Confirmed with 6.12.1.
|
||||
|
||||
Alternatively, you can use Visual Studio Code with the STM32 VS Code Extension,
|
||||
STM32CubeMX, and STM32CubeCLT if your development environment is not on Windows.
|
||||
|
||||
- [Visual Studio Code](https://code.visualstudio.com/) - Confirmed with
|
||||
1.93.0.
|
||||
- [STM32 VS Code Extension](https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension) -
|
||||
Confirmed with 2.1.0.
|
||||
- [STM32CubeCLT](https://www.st.com/en/development-tools/stm32cubeclt.html) -
|
||||
Confirmed with 1.16.1. You will be asked to specify the path to the VS Code
|
||||
Extension. You may add `{ "STM32VSCodeExtension.cubeCLT.path":
|
||||
"/opt/ST/STM32CubeCLT_1.16.1" }` to `.vscode/settings.json`.
|
||||
|
||||
You will need the
|
||||
[ST-LINK](https://www.st.com/ja/development-tools/st-link-v2.html) or
|
||||
something equivalent to upload the firmware.
|
||||
|
||||
#### Step 2: Compile and upload
|
||||
|
||||
**Steps for the STM32CubeIDE:**
|
||||
|
||||
1. Launch STM32CubeIDE with `mozc-doublesided` directory as `workspace`.
|
||||
2. Start a project via `Start new project from STM32CubeMX file (.ioc)` to open
|
||||
a configuration dialog.
|
||||
3. Select `firmware/mozc-doublesided.ioc` as `STM32CubeMX .ioc file` and push
|
||||
`Finish` button to generated required resources.
|
||||
4. Apply patches. (See the following instructions)
|
||||
5. Set `Release` as the active project, from `Project > Build Configurations >
|
||||
Set Active > 2 Release`. `Debug` doesn't fit the available memory size.
|
||||
6. Build, from `Project > Build All`.
|
||||
|
||||
The built binary will be produced at `firmware/Release/firmware.elf`.
|
||||
|
||||
**Steps for the Visual Studio Code:**
|
||||
|
||||
1. Open `firmware/mozc-doublesided.ioc` by STM32CubeMX and push the `GENERATE
|
||||
CODE` button. You may need to follow instructions if you are asked to
|
||||
install something required in the process.
|
||||
2. Launch VSCode and open the folder `firmware`.
|
||||
3. Apply patches. (See the following instructions)
|
||||
4. Select `Release` or `RelWithDebInfo` from the build presets. `Debug` doesn't
|
||||
fit the available memory size.
|
||||
5. `Build` from the status bar, or other user interfaces.
|
||||
|
||||
The built binary will be produced at `build/Release/firmware.elf`.
|
||||
|
||||
If you saw errors on linking the binary involving `STM32F042F6Px_FLASH.ld`, you
|
||||
may need a patch to make it work with your installed toolchain.
|
||||
|
||||
Try `patch < STM32F042F6Px_FLASH.ld.diff`.
|
||||
|
||||
**Steps to apply patches:**
|
||||
|
||||
In the `firmware` directory, apply the `firmware.diff` patch to the generate
|
||||
resources via the following command.
|
||||
|
||||
`$ patch -p1 < firmware.diff`
|
||||
|
||||
## License
|
||||
|
||||
See [LICENSE](../LICENSE) file in this directory.
|
||||
238
mozc-doublesided/README_ja.md
Normal file
@@ -0,0 +1,238 @@
|
||||
# Gboard 両面バージョン
|
||||
|
||||
このディレクトリは 2024 年 10 月 1 日にリリースされた Gboard 両面バージョンの設計データとファームウエアを含んでいます。
|
||||
|
||||
Gboard 両面バージョンは正式な Google 製品ではありません。
|
||||
|
||||

|
||||
|
||||
## 内容
|
||||
|
||||
このディレクトリには以下の物が含まれています。
|
||||
|
||||
- case/ : ケース用のSTLファイル
|
||||
- board/ : KiCad用の回路図と基板のレイアウトデータ
|
||||
- firmware/ : STM32CubeIDE向けファームウェア開発リソース一式
|
||||
- gerber/ : 基板製造用ガーバーデータと組み立て用の配置情報
|
||||
|
||||
## Gboard 両面バージョンの制作
|
||||
|
||||
### 部品
|
||||
|
||||
- 組み立て済みAタイプ基板: 26個(プライマリ基板1枚を含む) - 下記の部品表を参照
|
||||
- 組み立て済みBタイプ基板: 26個(プライマリ基板1枚を含む) - 下記の部品表を参照
|
||||
- USB基板: 1個 - 下記の部品表を参照
|
||||
- ケーブルA(JST ZH 1.5mmピッチ 8ピン 100mm長 ストレート結線 両面メス): 25個
|
||||
- ケーブルB(JST ZH 1.5mmピッチ 7ピン 100mm長 ストレート結線 両面メス): 1個
|
||||
- ピンヘッダ(2.54mmピッチ 1x4ピン 12mm以上の高さ,
|
||||
[参考](https://akizukidenshi.com/catalog/g/g101382/)): 52個
|
||||
- 3D プリントしたケース部品 : 26種類1つずつ
|
||||
- セルフタッピングビス(M2): 52本
|
||||
- キースイッチ(Cherry MXもしくは相当品): 208個
|
||||
- キーキャップ(Cherry MXスイッチ用): 208個
|
||||
|
||||
#### Aタイプ基板 部品表
|
||||
|
||||
参照名 | 内容 | 数 | 備考
|
||||
------- | ---------------------------------- | --- | ---------
|
||||
R1-R2 | 0402(1005) 抵抗 510 Ω | 2 |
|
||||
R3-R4 | 0603(1608) 抵抗 1K Ω | 2 | プライマリ基板のみ
|
||||
J2-J3 | JST S8B-ZR | 2 |
|
||||
J4 | JST S7B-ZR | 1 | プライマリ基板のみ
|
||||
U1 | STMicro STM32F042F4P6 | 1 |
|
||||
SW1-SW4 | Kailh CPG151101S11-1 | 4 |
|
||||
D1-D4 | OPSCO Optoelectronics SK6812MINI-E | 4 |
|
||||
D5-D8 | 0805(2012) 小信号用スイッチングダイオード | 4 |
|
||||
C1 | 0402(1005) コンデンサ 0.1uF | 1 |
|
||||
|
||||
プライマリ基板のみの部品は基板組立データには含まれていないため、別途手作業で組み立てるために調達して下さい。
|
||||
|
||||
#### Bタイプ基板 部品表
|
||||
|
||||
参照名 | 内容 | 数 | 備考
|
||||
------- | ---------------------------------- | --- | ---
|
||||
R2 | 0402(1005) 抵抗 510 Ω | 1 |
|
||||
SW1-SW4 | Kailh CPG151101S11-1 | 4 |
|
||||
D1-D4 | OPSCO Optoelectronics SK6812MINI-E | 4 |
|
||||
D5-D8 | 0805(2012) 小信号用スイッチングダイオード | 4 |
|
||||
|
||||
#### USB基板 部品表
|
||||
|
||||
参照名 | 内容 | 数 | 備考
|
||||
----- | -------------------------- | --- | ---
|
||||
U1 | 1A/3.3V レギュレータ AMS1117-3.3 | 1 |
|
||||
R1-R2 | 0402(1005) 抵抗 5.1K Ω | 2 |
|
||||
R3-R4 | 0402(1005) 抵抗 22 Ω | 2 |
|
||||
R5 | 0402(1005) 抵抗 1.5K Ω | 1 |
|
||||
J1 | JST S7B-ZR | 1 |
|
||||
J2 | USB Type-C 16ピン コネクタ | 1 |
|
||||
C1 | 0402(1005) コンデンサ 10uF | 1 |
|
||||
C2 | 0402(1005) コンデンサ 2.2uF | 1 |
|
||||
C3-C4 | 0402(1005) コンデンサ 47pF | 2 |
|
||||
|
||||
### ハードウェア
|
||||
|
||||
#### ステップ1: 3Dプリント用パーツの準備
|
||||
|
||||
`case/` ディレクトリにはケース用のSTLファイルがあります。 ケースは26個のパーツからなります (parts00.stl -
|
||||
parts25.stl)。 それぞれのパーツの内側にはパーツ番号が刻印されています。 例えばパーツ0の突起をパーツ1に差し込む形で組み立てる事になります。
|
||||
|
||||
また、基板AタイプとBタイプをはんだ付けするための治具が `case/jig.stl` も用意してありますので、これも印刷しておきます。
|
||||
|
||||
#### ステップ2: 基板の準備
|
||||
|
||||
**基板の製造と組立**
|
||||
|
||||
まず、Aタイプ、Bタイプそれぞれの基板を26枚ずつ、USB基板を1枚作る必要があります。 `gerber/`
|
||||
ディレクトリにあるガーバーデータ、BOMデータ、CPLデータを参考にして下さい。
|
||||
|
||||
基板タイプ | ガーバー | BOM | CPL
|
||||
----- | -------------- | ------------------ | ------------------------
|
||||
Aタイプ | main_panel.zip | main_panel_bom.csv | main_panel_positions.csv
|
||||
Bタイプ | sub_panel.zip | sub_panel_bom.csv | sub_panel_positions.csv
|
||||
USB | usb.zip | usb_bom.csv | usb_positions.csv
|
||||
|
||||
Aタイプ、Bタイプ基板向けのデータは9個の基板がパネル化されたデータになっています。
|
||||
このパネル化されたデータで3枚製造すると、27枚(必要な26枚と予備1枚)の基板が得られます。 USB基板は単体で1枚だけ必要です。
|
||||
|
||||
**ファームウェア書き込み**
|
||||
|
||||
次にファームウェアを書き込みます。
|
||||
|
||||
図のSWDIO、SWCLK、GND、そして+3.3Vの端子をST-LINKと繋ぎます。
|
||||
[STM32CubeProgrammer](https://www.st.com/ja/development-tools/stm32cubeprog.html)
|
||||
を使って設定やファームウェアの書き込みを行えます。 コネクタ等は用意されていない生の端子なので、きちんと接触するように注意しながら書き込みます。
|
||||
|
||||

|
||||
|
||||
Aタイプ基板との接続が確立したら、まず`Option bytes`を書き込みます。 `User
|
||||
Configuration`の項に`BOOT_SEL`があるので、そのチェックを外して`Apply`ボタンを押して設定を更新します。
|
||||
|
||||
次に`Erasing & Programming`の項からファームウェアを書き込みます。
|
||||
`Browse`ボタンを押して`firmware/prebuilt/mozc.elf`を選びます。 `Start
|
||||
address`には`0x08000000`を指定し、`Start Programming`ボタンを押します。
|
||||
|
||||
同様にして全てのAタイプ基板に設定とファームウェアを書き込みます。
|
||||
|
||||
**プライマリAタイプ基板固有の実装**
|
||||
|
||||
以下の3つの部品をプライマリ基板にのみ実装します。
|
||||
|
||||
1. J4 JST S7B-ZR コネクタ ヘッダ端子
|
||||
2. R3 0603(1608) 抵抗 1K Ω
|
||||
3. R4 0603(1608) 抵抗 1K o
|
||||
|
||||

|
||||
|
||||
**A/Bボードペアモジュールの作成**
|
||||
|
||||
26対のAタイプ基板、Bタイプ基板のペアモジュールを作成する必要があります。 下図のように、`P Connector`と`S
|
||||
connector`それぞれ同じコネクタ同士を1x4のピンヘッダで連結します。
|
||||
|
||||
この最、`IN`と書かれた基板面がそれぞれ内側を向くように注意しましょう。
|
||||
|
||||

|
||||
|
||||
また、基板の距離がケースにフィットするよう適切に調整されている必要があります。 この作業用の特別なケースを3Dプリントして用いると効率的に作業できます。
|
||||
実際のケースを使って確認しながら作業する事も可能です。
|
||||
|
||||

|
||||

|
||||
|
||||
#### ステップ3: 基板をケースに入れる
|
||||
|
||||
**プライマリモジュール固有の作業**
|
||||
|
||||
まず、プライマリモジュールとUSB基板をケーブルで接続します。
|
||||
|
||||

|
||||
|
||||
次にUSB基板を0番のケースに格納します。
|
||||
|
||||

|
||||
|
||||
**全てのモジュール共通の作業**
|
||||
|
||||
全てのペアモジュールを0から25番のケースにそれぞれ格納します。 Aタイプ基板が常に下側になるよう気をつけます。
|
||||
|
||||

|
||||
|
||||
#### ステップ4: ケース同士を連結する
|
||||
|
||||
`UP`端子と`DOWN`端子の対をケーブルで接続していきます。 同じ端子同士を誤って接続しないよう注意して下さい。
|
||||
電源を入れた時にショートによりチップが焼け焦げる事になります。 (匂いや煙に気づいたら直ぐに電源を抜けば壊れずに済むことも多いです)
|
||||
|
||||

|
||||
|
||||
次の全体図を参考にしてください。 最初のモジュール0と最後のモジュール25は接続されていない事に注意します。
|
||||
|
||||
また、この図は簡単のために本来発生する「ねじれ」を考慮した図になっていません。 実際に組み立てた際にはモジュール25は上下逆さの向きになります。
|
||||
|
||||

|
||||
|
||||
ネジを使って各ボード間をしっかり固定してください。
|
||||
|
||||
### ファームウェア
|
||||
|
||||
#### ステップ1: 開発環境の構築
|
||||
|
||||
STMicroelectronics社公式のSTM32開発ツールが必要になるので、以下からインストールします。
|
||||
|
||||
- [STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html) -
|
||||
1.16.1にて確認
|
||||
- [STM32CubeMX](https://www.st.com/en/development-tools/stm32cubemx.html) -
|
||||
6.12.1にて確認
|
||||
|
||||
また、Windows以外の環境では、Visual Studio CodeにSTM32 VS Code Extensionをインストールする事でも開発できます。
|
||||
STM32CubeMXとSTM32CubeCLTを別途公式からインストールする必要があります。
|
||||
|
||||
- [Visual Studio Code](https://code.visualstudio.com/) - 1.93.0にて確認
|
||||
- [STM32 VS Code Extension](https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension) -
|
||||
2.1.0にて確認
|
||||
- [STM32CubeCLT](https://www.st.com/en/development-tools/stm32cubeclt.html) -
|
||||
1.16.1にて確認 VS Code ExtensionではCLTのパスを設定するよう指示がでるかもしれません。
|
||||
その際には以下を参考に`.vscode/settings.json`へ設定を書いて下さい。 `{
|
||||
"STM32VSCodeExtension.cubeCLT.path": "/opt/ST/STM32CubeCLT_1.16.1" }`
|
||||
|
||||
また、書き込みには[ST-LINK](https://www.st.com/ja/development-tools/st-link-v2.html)などのデバイスが必要になります。
|
||||
|
||||
#### ステップ2: コンパイルと書き込み
|
||||
|
||||
**STM32CubeIDEの場合**
|
||||
|
||||
1. STM32CubeIDEを起動し、`mozc-doublesided`ディレクトリを`workspace`として指定します。
|
||||
2. `Start new project from STM32CubeMX file (.ioc)`から設定ダイアログを開きます。
|
||||
3. `STM32CubeMX .ioc
|
||||
file`として`firmware/mozc-doublesided.ioc`を選び、`Finish`ボタンを押して必要なリソースを生成します。
|
||||
4. パッチをあてます(後述)
|
||||
5. `Project > Build Configurations > Set Active > 2 Release`から
|
||||
アクティブプロジェクトを`Release`に指定します。 `Debug`ではプログラムが大きくなりメモリに入り切りません。
|
||||
6. `Project > Build All`からビルドします。
|
||||
|
||||
ファームウェアは`firmware/Release/firmware.elf`として生成されます。
|
||||
|
||||
**Visual Studio Codeの場合**
|
||||
|
||||
1. STM32CubeMXから`firmware/mozc-doublesided.ioc`を開き、`GENERATE CODE`を押します。
|
||||
追加で何かインストールを促された場合には指示に従ってください。
|
||||
2. Codeを起動し、`firmware`を開きます。
|
||||
3. パッチをあてます(後述)
|
||||
4. ビルドプリセット設定から`Release`か`RelWithDebInfo`を選びます。
|
||||
`Debug`ではプログラムが大きくなりメモリに入り切りません。
|
||||
5. ステータスバーから`Build`を押します。他のUIからビルドする方法もありますが、ここでは触れません。
|
||||
|
||||
ファームウェアは`build/Release/firmware.elf`として生成されます。
|
||||
|
||||
もしリンク時に`STM32F042F6Px_FLASH.ld`が原因でエラーが出ていたら、該当ファイルに修正を加える必要があります。
|
||||
|
||||
パッチを用意したので`patch < STM32F042F6Px_FLASH.ld.diff`をお試し下さい。
|
||||
|
||||
**パッチ手順**
|
||||
|
||||
`firmware`ディレクトリにて、以下のコマンドで生成されたファイルに`firmware.diff`をパッチとして適用して下さい。
|
||||
|
||||
`$ patch -p1 < firmware.diff`
|
||||
|
||||
## ライセンス
|
||||
|
||||
このディレクトリに置かれた[LICENSE](../LICENSE)ファイルを参照してください。
|
||||
259
mozc-doublesided/board/Library.kicad_sym
Normal file
@@ -0,0 +1,259 @@
|
||||
(kicad_symbol_lib
|
||||
(version 20231120)
|
||||
(generator "kicad_symbol_editor")
|
||||
(generator_version "8.0")
|
||||
(symbol "SK6812MINIe"
|
||||
(pin_names
|
||||
(offset 0.254)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "D"
|
||||
(at 5.08 5.715 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify right bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "SK6812MINIe"
|
||||
(at 1.27 -5.715 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "LED_SMD:LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm"
|
||||
(at 1.27 -7.62 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf"
|
||||
(at 2.54 -9.525 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify left top)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "RGB LED with integrated controller"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "RGB LED NeoPixel Mini addressable"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_fp_filters" "LED*SK6812MINI*PLCC*3.5x3.5mm*P1.75mm*"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "SK6812MINIe_0_0"
|
||||
(text "RGB"
|
||||
(at 2.286 -4.191 0)
|
||||
(effects
|
||||
(font
|
||||
(size 0.762 0.762)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "SK6812MINIe_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -3.556) (xy 1.778 -3.556)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 -2.54) (xy 1.778 -2.54)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 4.699 -3.556) (xy 2.667 -3.556)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.286 -2.54) (xy 1.27 -3.556) (xy 1.27 -3.048)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.286 -1.524) (xy 1.27 -2.54) (xy 1.27 -2.032)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.683 -1.016) (xy 3.683 -3.556) (xy 3.683 -4.064)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 4.699 -1.524) (xy 2.667 -1.524) (xy 3.683 -3.556) (xy 4.699 -1.524)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(rectangle
|
||||
(start 5.08 5.08)
|
||||
(end -5.08 -5.08)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type background)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "SK6812MINIe_1_1"
|
||||
(pin power_in line
|
||||
(at 0 7.62 270)
|
||||
(length 2.54)
|
||||
(name "VDD"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin output line
|
||||
(at 7.62 0 180)
|
||||
(length 2.54)
|
||||
(name "DOUT"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "2"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin power_in line
|
||||
(at 0 -7.62 90)
|
||||
(length 2.54)
|
||||
(name "VSS"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "3"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pin input line
|
||||
(at -7.62 0 0)
|
||||
(length 2.54)
|
||||
(name "DIN"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "4"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
157
mozc-doublesided/board/Library.pretty/CUT.kicad_mod
Normal file
@@ -0,0 +1,157 @@
|
||||
(footprint "CUT"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 2.75 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f0529529-e7ad-4a57-8e7c-8304f8fad623")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "CUT"
|
||||
(at 0 -3.556 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "083d266b-e8f8-45fe-a99a-e0833140eab2")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "CUT"
|
||||
(at 0 -3.048 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "ada22d4b-0035-4ba2-bfd4-5c13580d04b1")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "0a279097-fb8e-4256-8351-f65668097495")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "33b51e5b-386b-4a58-8dae-e5735447e6fe")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -1.25 4.25)
|
||||
(end -1.25 -3.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "863182fd-f10e-4540-873b-887dc0d75756")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.25 38)
|
||||
(end -1.25 -38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "fca3fa1c-3fcc-4972-9e14-2378578f24dd")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.25 -38)
|
||||
(end -1.25 -38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "cb003dda-7a74-4e65-b2dc-9a1a65af324d")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.25 -38)
|
||||
(end 1.25 38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "7870eede-df43-4abc-a041-03331377be7d")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.25 -3.75)
|
||||
(end 1.25 4.25)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5134138d-302e-4316-9dd7-d93e68134713")
|
||||
)
|
||||
(fp_line
|
||||
(start 1.25 38)
|
||||
(end -1.25 38)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "6f3b0a45-c7dc-4b72-9881-33b989816b1c")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 -2.032 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "222f8e4d-c3d8-487f-b7eb-87c90827f1de")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at -0.5 0)
|
||||
(size 1.5 78)
|
||||
(drill oval 1.5 78)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "d335cf29-973d-48d2-9d86-023c8a6b979f")
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at 0.5 0)
|
||||
(size 1.5 78)
|
||||
(drill oval 1.5 78)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "74231be5-5b0c-450d-bd9a-2904e007056f")
|
||||
)
|
||||
)
|
||||
208
mozc-doublesided/board/Library.pretty/JST_S7B_ZR.kicad_mod
Normal file
@@ -0,0 +1,208 @@
|
||||
(footprint "JST_S7B_ZR"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -2.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bae32462-6c5e-4a07-a152-387c5a2b4f4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "JST_S7B_ZR"
|
||||
(at 0 6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "181081ae-416d-43a9-92dd-7cbe06e4f148")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "JST_S7B_ZR"
|
||||
(at 0 -5.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9a65e609-9750-4cb1-a97d-44b75c6cb701")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at -0.5 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "1cba1d40-e7f9-4068-af6a-8936a0eb9721")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at -0.5 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "60c16c84-892a-4f57-936a-8937e5d62eff")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -6 -1.5)
|
||||
(end -6 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "12ecbc05-5bba-4dbf-b092-4085a80779ca")
|
||||
)
|
||||
(fp_line
|
||||
(start -6 4.6)
|
||||
(end 6 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1ab22b04-51a7-4a6f-9078-6ed0f29fac48")
|
||||
)
|
||||
(fp_line
|
||||
(start -5 0.75)
|
||||
(end -4 0.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "60399dd4-79ef-4503-89d0-7f2514c5fe97")
|
||||
)
|
||||
(fp_line
|
||||
(start -4.5 1.75)
|
||||
(end -5 0.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4a15179f-edf6-4b12-97e3-5b02d5df5e98")
|
||||
)
|
||||
(fp_line
|
||||
(start -4 0.75)
|
||||
(end -4.5 1.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "41a30844-4207-4c50-854e-3af7a189c512")
|
||||
)
|
||||
(fp_line
|
||||
(start 6 -1.5)
|
||||
(end -6 -1.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "868f0f71-d45d-4d3b-8176-b9c2710fe60d")
|
||||
)
|
||||
(fp_line
|
||||
(start 6 -1.5)
|
||||
(end 6 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4e256072-d085-4fc2-8bb8-35ec8977a21c")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 7.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "90f9e58f-4754-4219-9391-3fd081552975")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -4.5 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "7f2da7e6-74ad-487a-af0c-6f90fc58ea85")
|
||||
)
|
||||
(pad "2" thru_hole rect
|
||||
(at -3 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "cf13f5f9-53d8-4a75-a2a6-9a6682958630")
|
||||
)
|
||||
(pad "3" thru_hole rect
|
||||
(at -1.5 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8d1f0ecd-3600-4939-acfd-62e9c7e7df2e")
|
||||
)
|
||||
(pad "4" thru_hole rect
|
||||
(at 0 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "0d4e7676-f11b-4563-8cd2-8b5b199c5a44")
|
||||
)
|
||||
(pad "5" thru_hole rect
|
||||
(at 1.5 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a48f4b70-013e-460e-a4d7-9f21019485ca")
|
||||
)
|
||||
(pad "6" thru_hole rect
|
||||
(at 3 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "74072075-f09d-4091-a205-b40d78e11534")
|
||||
)
|
||||
(pad "7" thru_hole rect
|
||||
(at 4.5 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "240bb452-6231-44a3-9834-2206c827d892")
|
||||
)
|
||||
)
|
||||
216
mozc-doublesided/board/Library.pretty/JST_S8B_ZR.kicad_mod
Normal file
@@ -0,0 +1,216 @@
|
||||
(footprint "JST_S8B_ZR"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at -0.75 -2.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "bae32462-6c5e-4a07-a152-387c5a2b4f4a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "JST_S8B_ZR"
|
||||
(at 0 6 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "181081ae-416d-43a9-92dd-7cbe06e4f148")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "JST_S7B_ZR"
|
||||
(at 0 -5.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "9a65e609-9750-4cb1-a97d-44b75c6cb701")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at -1.25 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "1cba1d40-e7f9-4068-af6a-8936a0eb9721")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at -1.25 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "60c16c84-892a-4f57-936a-8937e5d62eff")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -6.75 -1.5)
|
||||
(end -6.75 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "12ecbc05-5bba-4dbf-b092-4085a80779ca")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.75 4.6)
|
||||
(end 6.75 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "1ab22b04-51a7-4a6f-9078-6ed0f29fac48")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.75 0.75)
|
||||
(end -4.75 0.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "60399dd4-79ef-4503-89d0-7f2514c5fe97")
|
||||
)
|
||||
(fp_line
|
||||
(start -5.25 1.75)
|
||||
(end -5.75 0.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4a15179f-edf6-4b12-97e3-5b02d5df5e98")
|
||||
)
|
||||
(fp_line
|
||||
(start -4.75 0.75)
|
||||
(end -5.25 1.75)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "41a30844-4207-4c50-854e-3af7a189c512")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.75 -1.5)
|
||||
(end -6.75 -1.5)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "868f0f71-d45d-4d3b-8176-b9c2710fe60d")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.75 -1.5)
|
||||
(end 6.75 4.6)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "4e256072-d085-4fc2-8bb8-35ec8977a21c")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 7.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "90f9e58f-4754-4219-9391-3fd081552975")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "1" thru_hole rect
|
||||
(at -5.25 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "7f2da7e6-74ad-487a-af0c-6f90fc58ea85")
|
||||
)
|
||||
(pad "2" thru_hole rect
|
||||
(at -3.75 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "cf13f5f9-53d8-4a75-a2a6-9a6682958630")
|
||||
)
|
||||
(pad "3" thru_hole rect
|
||||
(at -2.25 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "8d1f0ecd-3600-4939-acfd-62e9c7e7df2e")
|
||||
)
|
||||
(pad "4" thru_hole rect
|
||||
(at -0.75 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "0d4e7676-f11b-4563-8cd2-8b5b199c5a44")
|
||||
)
|
||||
(pad "5" thru_hole rect
|
||||
(at 0.75 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "a48f4b70-013e-460e-a4d7-9f21019485ca")
|
||||
)
|
||||
(pad "6" thru_hole rect
|
||||
(at 2.25 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "74072075-f09d-4091-a205-b40d78e11534")
|
||||
)
|
||||
(pad "7" thru_hole rect
|
||||
(at 3.75 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "240bb452-6231-44a3-9834-2206c827d892")
|
||||
)
|
||||
(pad "8" thru_hole rect
|
||||
(at 5.25 0)
|
||||
(size 1.2 1.2)
|
||||
(drill 0.762)
|
||||
(layers "*.Cu" "*.Mask")
|
||||
(remove_unused_layers no)
|
||||
(uuid "5935f949-12ee-4fd0-a053-a302725c15c8")
|
||||
)
|
||||
)
|
||||
201
mozc-doublesided/board/Library.pretty/Keyswitch.kicad_mod
Normal file
@@ -0,0 +1,201 @@
|
||||
(footprint "Keyswitch"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -0.5 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "0a8dcc72-c147-4804-b650-a6bd830f8008")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Keyswitch"
|
||||
(at 0 -7.62 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "718bfec1-ec51-4c07-b755-636a4d91c4d1")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Keyswitch"
|
||||
(at -0.1 -9.525 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "91e8520f-61fb-412f-8468-f66cc861e94e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "c3c783c3-f6fa-4c4a-93c2-36635e2f68a4")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "2d08db83-5937-45ed-bd45-935f7c04dc50")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -6.985 -6.985)
|
||||
(end 6.985 -6.985)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(layer "B.CrtYd")
|
||||
(uuid "5201e7cc-c732-40f4-bee7-66aed32470e5")
|
||||
)
|
||||
(fp_line
|
||||
(start -6.985 6.985)
|
||||
(end -6.985 -6.985)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(layer "B.CrtYd")
|
||||
(uuid "98d3f658-1439-4b1f-a883-752d85a6c31c")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.985 -6.985)
|
||||
(end 6.985 6.985)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(layer "B.CrtYd")
|
||||
(uuid "4318bc1d-2c18-463c-ab17-504fd2fa5a9a")
|
||||
)
|
||||
(fp_line
|
||||
(start 6.985 6.985)
|
||||
(end -6.985 6.985)
|
||||
(stroke
|
||||
(width 0.05)
|
||||
(type default)
|
||||
)
|
||||
(layer "B.CrtYd")
|
||||
(uuid "e5443cdc-cb4f-4cb5-9285-36e6bdf40f91")
|
||||
)
|
||||
(fp_line
|
||||
(start 3.81 5.08)
|
||||
(end -3.81 5.08)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "User.2")
|
||||
(uuid "d2741143-81d0-422e-b905-ea9496ce9ed0")
|
||||
)
|
||||
(fp_rect
|
||||
(start -4.445 -6.985)
|
||||
(end -8.255 -3.175)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "User.2")
|
||||
(uuid "a851abba-f4c5-4aec-9cb6-3bdfc214acbb")
|
||||
)
|
||||
(fp_rect
|
||||
(start 9.525 -4.445)
|
||||
(end 5.715 -0.635)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "User.2")
|
||||
(uuid "f28b8bf4-ac96-46e8-9b4f-7273158b7e71")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 -5.715 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "256b44ce-2967-4db3-b7ac-cb3d0f94ed3a")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at -5.08 0)
|
||||
(size 1.7526 1.7526)
|
||||
(drill 1.7526)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "382e6dad-e08d-413b-8277-895111c64112")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at -2.54 -5.08)
|
||||
(size 3.05 3.05)
|
||||
(drill 3.05)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "8f9f6045-4247-4b53-bc82-51b37112e39c")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at 0 0)
|
||||
(size 4.0894 4.0894)
|
||||
(drill 4.0894)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "f7bfcaf5-2702-4bbb-8457-9c2bb1f3c21b")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at 3.81 -2.54)
|
||||
(size 3.05 3.05)
|
||||
(drill 3.05)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "c98c1390-f969-4b22-bf72-ac3409f460f6")
|
||||
)
|
||||
(pad "" np_thru_hole circle
|
||||
(at 5.08 0)
|
||||
(size 1.7526 1.7526)
|
||||
(drill 1.7526)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "7335aeb7-7726-4139-bc74-e642fc4dd835")
|
||||
)
|
||||
(pad "1" smd rect
|
||||
(at -6.35 -5.08)
|
||||
(size 3.5 3.5)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "2a0404a2-0053-4fd2-bf42-02c78d3af3bf")
|
||||
)
|
||||
(pad "2" smd rect
|
||||
(at 7.62 -2.54)
|
||||
(size 3.5 3.5)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "0db5fccc-d2ae-479c-a26e-732c3b75d329")
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,213 @@
|
||||
(footprint "SK6812MINIe (Reverse)"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 2.75 0)
|
||||
(unlocked yes)
|
||||
(layer "F.SilkS")
|
||||
(uuid "f0529529-e7ad-4a57-8e7c-8304f8fad623")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SK6812MINIe"
|
||||
(at 0 -3.556 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "083d266b-e8f8-45fe-a99a-e0833140eab2")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "SK6812MINIe (Reverse)"
|
||||
(at 0 -3.048 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "ada22d4b-0035-4ba2-bfd4-5c13580d04b1")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "0a279097-fb8e-4256-8351-f65668097495")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "33b51e5b-386b-4a58-8dae-e5735447e6fe")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr through_hole)
|
||||
(fp_line
|
||||
(start -2 -2)
|
||||
(end -2 1.25)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "d276074e-3eb1-41e3-ac25-8f9eeb8842a9")
|
||||
)
|
||||
(fp_line
|
||||
(start -2 1.25)
|
||||
(end -1.25 2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a0cd938d-69fd-4778-899c-eb62edbf048d")
|
||||
)
|
||||
(fp_line
|
||||
(start -1.25 2)
|
||||
(end 2 2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "53cf1a29-b708-41d7-b5f3-3556ea5c1bd7")
|
||||
)
|
||||
(fp_line
|
||||
(start 2 -2)
|
||||
(end -2 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "a70455ac-9fd6-4244-a066-171f4bf503db")
|
||||
)
|
||||
(fp_line
|
||||
(start 2 2)
|
||||
(end 2 -2)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(layer "F.SilkS")
|
||||
(uuid "b7a22319-2db9-45dc-82b8-e1d76e88a7a3")
|
||||
)
|
||||
(fp_rect
|
||||
(start 1.6 -1.4)
|
||||
(end -1.6 1.4)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type solid)
|
||||
)
|
||||
(fill none)
|
||||
(layer "User.2")
|
||||
(uuid "023d3fbb-47d4-4673-80bd-cec1d8598f6a")
|
||||
)
|
||||
(fp_rect
|
||||
(start 3 -1.4)
|
||||
(end -3 1.4)
|
||||
(stroke
|
||||
(width 0.1)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "User.2")
|
||||
(uuid "14011cdf-2739-41e7-ba89-c479e0afdf21")
|
||||
)
|
||||
(fp_text user "${REFERENCE}"
|
||||
(at 0 -2.032 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(uuid "222f8e4d-c3d8-487f-b7eb-87c90827f1de")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at -1 0 90)
|
||||
(size 3.5 1.5)
|
||||
(drill oval 3.5 1.5)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "d335cf29-973d-48d2-9d86-023c8a6b979f")
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at 0 -1 180)
|
||||
(size 3.5 1.5)
|
||||
(drill oval 3.5 1.5)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "3df47cf9-27dc-4c4b-8145-5758815af33e")
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at 0 0 90)
|
||||
(size 3.5 1.5)
|
||||
(drill oval 3.5 1.5)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "05f55096-2580-4a59-ac5f-e7dca0ffc95b")
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at 0 1 180)
|
||||
(size 3.5 1.5)
|
||||
(drill oval 3.5 1.5)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "8b051ef9-20b6-45f2-965a-05da1d06395d")
|
||||
)
|
||||
(pad "" np_thru_hole oval
|
||||
(at 1 0 90)
|
||||
(size 3.5 1.5)
|
||||
(drill oval 3.5 1.5)
|
||||
(layers "F&B.Cu" "*.Mask")
|
||||
(uuid "7978914e-afc7-400b-8225-98ddfcac3a14")
|
||||
)
|
||||
(pad "1" smd rect
|
||||
(at 2.5 -0.762)
|
||||
(size 1.25 1)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "ed7c6070-e4ae-4ef6-b84d-78cf2f579a28")
|
||||
)
|
||||
(pad "2" smd rect
|
||||
(at 2.5 0.762)
|
||||
(size 1.25 1)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "6089f4bf-3836-4f78-ae63-fa92da1b501c")
|
||||
)
|
||||
(pad "3" smd rect
|
||||
(at -2.5 0.75)
|
||||
(size 1.25 1)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "f91154ac-6669-46e5-b592-95a9a1e75aa5")
|
||||
)
|
||||
(pad "4" smd rect
|
||||
(at -2.5 -0.762)
|
||||
(size 1.25 1)
|
||||
(layers "F.Cu" "F.Paste" "F.Mask")
|
||||
(uuid "0c0396b6-ee7b-4ebf-8d4a-1ca94b57e18c")
|
||||
)
|
||||
)
|
||||
4
mozc-doublesided/board/main/fp-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
|
||||
)
|
||||
14514
mozc-doublesided/board/main/main.kicad_pcb
Normal file
82
mozc-doublesided/board/main/main.kicad_prl
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 51,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "8083fff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "main.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
665
mozc-doublesided/board/main/main.kicad_pro
Normal file
@@ -0,0 +1,665 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "warning",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "warning",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "warning",
|
||||
"hole_near_hole": "error",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.08,
|
||||
0.1,
|
||||
0.2,
|
||||
0.25,
|
||||
0.35,
|
||||
0.4,
|
||||
0.5,
|
||||
1.0
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [
|
||||
{
|
||||
"diameter": 0.0,
|
||||
"drill": 0.0
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"lib_symbol_issues": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"unannotated": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "main.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.13,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.13,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.19,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Power",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": [
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "GND"
|
||||
},
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "+5V"
|
||||
},
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "+3.3V"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "../../../../../Applications/KiCad8/",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "main.dsn",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "#",
|
||||
"name": "${ITEM_NUMBER}",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "説明",
|
||||
"name": "Description",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MPN",
|
||||
"name": "MPN",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Pins",
|
||||
"name": "Sim.Pins",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Device",
|
||||
"name": "Sim.Device",
|
||||
"show": false
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "",
|
||||
"sort_asc": false,
|
||||
"sort_field": "${DNP}"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"19fff015-baa7-48a6-920d-86375e3a91d6",
|
||||
"ルート"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
7634
mozc-doublesided/board/main/main.kicad_sch
Normal file
4
mozc-doublesided/board/main/sym-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
|
||||
128906
mozc-doublesided/board/main_panel/main_panel.kicad_pcb
Normal file
82
mozc-doublesided/board/main_panel/main_panel.kicad_prl
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 32,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "00410fc_80000007",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "main_panel.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
273
mozc-doublesided/board/main_panel/main_panel.kicad_pro
Normal file
@@ -0,0 +1,273 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "main_panel.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": []
|
||||
},
|
||||
"sheets": [],
|
||||
"text_variables": {}
|
||||
}
|
||||
5
mozc-doublesided/board/main_panel/main_panel.kicad_sch
Normal file
@@ -0,0 +1,5 @@
|
||||
(kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
|
||||
(paper "A4")
|
||||
(lib_symbols)
|
||||
(symbol_instances)
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
|
||||
4
mozc-doublesided/board/sub/fp-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
|
||||
)
|
||||
6411
mozc-doublesided/board/sub/sub.kicad_pcb
Normal file
82
mozc-doublesided/board/sub/sub.kicad_prl
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 37,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "ffcffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "sub.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
662
mozc-doublesided/board/sub/sub.kicad_pro
Normal file
@@ -0,0 +1,662 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "warning",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "warning",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "warning",
|
||||
"hole_near_hole": "error",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.1,
|
||||
0.2,
|
||||
0.35,
|
||||
0.4,
|
||||
0.5,
|
||||
1.0
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [
|
||||
{
|
||||
"diameter": 0.0,
|
||||
"drill": 0.0
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"lib_symbol_issues": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"unannotated": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "sub.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.13,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.13,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
},
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.19,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Power",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": [
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "GND"
|
||||
},
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "+5V"
|
||||
},
|
||||
{
|
||||
"netclass": "Power",
|
||||
"pattern": "+3.3V"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "../../../../../Applications/KiCad8/",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "sub.dsn",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "#",
|
||||
"name": "${ITEM_NUMBER}",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "説明",
|
||||
"name": "Description",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MPN",
|
||||
"name": "MPN",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Pins",
|
||||
"name": "Sim.Pins",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Device",
|
||||
"name": "Sim.Device",
|
||||
"show": false
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "",
|
||||
"sort_asc": false,
|
||||
"sort_field": "${DNP}"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"19fff015-baa7-48a6-920d-86375e3a91d6",
|
||||
"ルート"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
3362
mozc-doublesided/board/sub/sub.kicad_sch
Normal file
98
mozc-doublesided/board/sub/sub.rules
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
(rules PCB sub
|
||||
(snap_angle
|
||||
fortyfive_degree
|
||||
)
|
||||
(autoroute_settings
|
||||
(fanout off)
|
||||
(autoroute on)
|
||||
(postroute on)
|
||||
(vias on)
|
||||
(via_costs 50)
|
||||
(plane_via_costs 5)
|
||||
(start_ripup_costs 100)
|
||||
(start_pass_no 277)
|
||||
(layer_rule F.Cu
|
||||
(active on)
|
||||
(preferred_direction vertical)
|
||||
(preferred_direction_trace_costs 1.0)
|
||||
(against_preferred_direction_trace_costs 5.0)
|
||||
)
|
||||
(layer_rule B.Cu
|
||||
(active on)
|
||||
(preferred_direction horizontal)
|
||||
(preferred_direction_trace_costs 1.0)
|
||||
(against_preferred_direction_trace_costs 1.3)
|
||||
)
|
||||
)
|
||||
(rule
|
||||
(width 130.0)
|
||||
(clear 130.0)
|
||||
(clear 65.0 (type smd_to_turn_gap))
|
||||
(clear 190.0 (type default_Power))
|
||||
(clear 32.6 (type smd_smd))
|
||||
(clear 190.0 (type smd_Power))
|
||||
(clear 190.0 (type "kicad_default"_Power))
|
||||
(clear 190.0 (type Power_Power))
|
||||
)
|
||||
(padstack "Via[0-1]_600:300_um"
|
||||
(shape
|
||||
(circle F.Cu 600.0 0.0 0.0)
|
||||
)
|
||||
(shape
|
||||
(circle B.Cu 600.0 0.0 0.0)
|
||||
)
|
||||
(attach off)
|
||||
)
|
||||
(via
|
||||
"Via[0-1]_600:300_um" "Via[0-1]_600:300_um" default
|
||||
)
|
||||
(via
|
||||
"Via[0-1]_600:300_um-kicad_default" "Via[0-1]_600:300_um" "kicad_default"
|
||||
)
|
||||
(via
|
||||
"Via[0-1]_600:300_um-Power" "Via[0-1]_600:300_um" Power
|
||||
)
|
||||
(via_rule
|
||||
default "Via[0-1]_600:300_um"
|
||||
)
|
||||
(via_rule
|
||||
"kicad_default" "Via[0-1]_600:300_um-kicad_default"
|
||||
)
|
||||
(via_rule
|
||||
Power "Via[0-1]_600:300_um-Power"
|
||||
)
|
||||
(class default
|
||||
(clearance_class default)
|
||||
(via_rule default)
|
||||
(rule
|
||||
(width 130.0)
|
||||
)
|
||||
(circuit
|
||||
(use_layer F.Cu B.Cu)
|
||||
)
|
||||
)
|
||||
(class "kicad_default"
|
||||
"Net-(D1-DOUT)" "Net-(D2-DOUT)" "Net-(D3-DOUT)" /LED2 /SW1 /SW2 /SW3 /SW4
|
||||
"Net-(D5-A)" "unconnected-(R2-Pad2)" "Net-(D6-A)" "Net-(D7-A)" "Net-(D8-A)" /COM2
|
||||
(clearance_class "kicad_default")
|
||||
(via_rule kicad_default)
|
||||
(rule
|
||||
(width 130.0)
|
||||
)
|
||||
(circuit
|
||||
(use_layer F.Cu B.Cu)
|
||||
)
|
||||
)
|
||||
(class Power
|
||||
+5V GND
|
||||
(clearance_class Power)
|
||||
(via_rule Power)
|
||||
(rule
|
||||
(width 200.0)
|
||||
)
|
||||
(circuit
|
||||
(use_layer F.Cu B.Cu)
|
||||
)
|
||||
)
|
||||
)
|
||||
4
mozc-doublesided/board/sub/sym-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
|
||||
56523
mozc-doublesided/board/sub_panel/sub_panel.kicad_pcb
Normal file
82
mozc-doublesided/board/sub_panel/sub_panel.kicad_prl
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "7ffffff_80000001",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "sub_panel.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
273
mozc-doublesided/board/sub_panel/sub_panel.kicad_pro
Normal file
@@ -0,0 +1,273 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "sub_panel.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": []
|
||||
},
|
||||
"sheets": [],
|
||||
"text_variables": {}
|
||||
}
|
||||
5
mozc-doublesided/board/sub_panel/sub_panel.kicad_sch
Normal file
@@ -0,0 +1,5 @@
|
||||
(kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
|
||||
(paper "A4")
|
||||
(lib_symbols)
|
||||
(symbol_instances)
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}
|
||||
4
mozc-doublesided/board/usb/fp-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(fp_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
|
||||
)
|
||||
4
mozc-doublesided/board/usb/sym-lib-table
Normal file
@@ -0,0 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
5168
mozc-doublesided/board/usb/usb.kicad_pcb
Normal file
82
mozc-doublesided/board/usb/usb.kicad_prl
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 44,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
12,
|
||||
13,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
19,
|
||||
20,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
27,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
],
|
||||
"visible_layers": "ff8ffff_ffffffff",
|
||||
"zone_display_mode": 1
|
||||
},
|
||||
"git": {
|
||||
"repo_password": "",
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "usb.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
630
mozc-doublesided/board/usb/usb.kicad_pro
Normal file
@@ -0,0 +1,630 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": false,
|
||||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.762,
|
||||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [
|
||||
{
|
||||
"gap": 0.0,
|
||||
"via_gap": 0.0,
|
||||
"width": 0.0
|
||||
}
|
||||
],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "warning",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "warning",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "warning",
|
||||
"hole_near_hole": "error",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.005,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [
|
||||
0.0,
|
||||
0.1,
|
||||
0.2,
|
||||
0.25,
|
||||
0.3,
|
||||
0.35,
|
||||
0.4,
|
||||
0.5,
|
||||
0.6,
|
||||
0.7,
|
||||
0.8,
|
||||
1.0
|
||||
],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [
|
||||
{
|
||||
"diameter": 0.0,
|
||||
"drill": 0.0
|
||||
}
|
||||
],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"lib_symbol_issues": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"unannotated": "error",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "usb.kicad_pro",
|
||||
"version": 1
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.19,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "../../../../../Applications/KiCad8/",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "mozc2024.dsn",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "#",
|
||||
"name": "${ITEM_NUMBER}",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "説明",
|
||||
"name": "Description",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "MPN",
|
||||
"name": "MPN",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Note",
|
||||
"name": "Note",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "",
|
||||
"sort_asc": false,
|
||||
"sort_field": "${DNP}"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"19fff015-baa7-48a6-920d-86375e3a91d6",
|
||||
"ルート"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
4010
mozc-doublesided/board/usb/usb.kicad_sch
Normal file
79
mozc-doublesided/board/usb/usb.rules
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
(rules PCB mozc2024
|
||||
(snap_angle
|
||||
fortyfive_degree
|
||||
)
|
||||
(autoroute_settings
|
||||
(fanout off)
|
||||
(autoroute on)
|
||||
(postroute on)
|
||||
(vias on)
|
||||
(via_costs 50)
|
||||
(plane_via_costs 5)
|
||||
(start_ripup_costs 100)
|
||||
(start_pass_no 1467)
|
||||
(layer_rule F.Cu
|
||||
(active on)
|
||||
(preferred_direction vertical)
|
||||
(preferred_direction_trace_costs 1.0)
|
||||
(against_preferred_direction_trace_costs 5.0)
|
||||
)
|
||||
(layer_rule B.Cu
|
||||
(active on)
|
||||
(preferred_direction horizontal)
|
||||
(preferred_direction_trace_costs 1.0)
|
||||
(against_preferred_direction_trace_costs 1.3)
|
||||
)
|
||||
)
|
||||
(rule
|
||||
(width 200.0)
|
||||
(clear 200.0)
|
||||
(clear 100.0 (type smd_to_turn_gap))
|
||||
(clear 50.0 (type smd_smd))
|
||||
)
|
||||
(padstack "Via[0-1]_600:300_um"
|
||||
(shape
|
||||
(circle F.Cu 600.0 0.0 0.0)
|
||||
)
|
||||
(shape
|
||||
(circle B.Cu 600.0 0.0 0.0)
|
||||
)
|
||||
(attach off)
|
||||
)
|
||||
(via
|
||||
"Via[0-1]_600:300_um" "Via[0-1]_600:300_um" default
|
||||
)
|
||||
(via
|
||||
"Via[0-1]_600:300_um-kicad_default" "Via[0-1]_600:300_um" "kicad_default"
|
||||
)
|
||||
(via_rule
|
||||
default "Via[0-1]_600:300_um"
|
||||
)
|
||||
(via_rule
|
||||
"kicad_default" "Via[0-1]_600:300_um-kicad_default"
|
||||
)
|
||||
(class default
|
||||
(clearance_class default)
|
||||
(via_rule default)
|
||||
(rule
|
||||
(width 200.0)
|
||||
)
|
||||
(circuit
|
||||
(use_layer F.Cu B.Cu)
|
||||
)
|
||||
)
|
||||
(class "kicad_default"
|
||||
"Net-(D1-DOUT)" +5V "Net-(D1-DIN)" GND "Net-(D2-DOUT)" "Net-(D3-DOUT)" "Net-(D4-DOUT)" /SW1
|
||||
/SW2 /SW3 /SW4 /SDA +3.3V /RDYout /DP "Net-(U1-PB8)"
|
||||
/DM /SWCLK /SWDIO /SCL /RDYin /LED "unconnected-(U1-PA7-Pad13)" "unconnected-(U1-NRST-Pad4)"
|
||||
"unconnected-(U1-PA6-Pad12)" "unconnected-(R2-Pad2)"
|
||||
(clearance_class "kicad_default")
|
||||
(via_rule kicad_default)
|
||||
(rule
|
||||
(width 200.0)
|
||||
)
|
||||
(circuit
|
||||
(use_layer F.Cu B.Cu)
|
||||
)
|
||||
)
|
||||
)
|
||||
BIN
mozc-doublesided/case/case00.stl
Normal file
BIN
mozc-doublesided/case/case01.stl
Normal file
BIN
mozc-doublesided/case/case02.stl
Normal file
BIN
mozc-doublesided/case/case03.stl
Normal file
BIN
mozc-doublesided/case/case04.stl
Normal file
BIN
mozc-doublesided/case/case05.stl
Normal file
BIN
mozc-doublesided/case/case06.stl
Normal file
BIN
mozc-doublesided/case/case07.stl
Normal file
BIN
mozc-doublesided/case/case08.stl
Normal file
BIN
mozc-doublesided/case/case09.stl
Normal file
BIN
mozc-doublesided/case/case10.stl
Normal file
BIN
mozc-doublesided/case/case11.stl
Normal file
BIN
mozc-doublesided/case/case12.stl
Normal file
BIN
mozc-doublesided/case/case13.stl
Normal file
BIN
mozc-doublesided/case/case14.stl
Normal file
BIN
mozc-doublesided/case/case15.stl
Normal file
BIN
mozc-doublesided/case/case16.stl
Normal file
BIN
mozc-doublesided/case/case17.stl
Normal file
BIN
mozc-doublesided/case/case18.stl
Normal file
BIN
mozc-doublesided/case/case19.stl
Normal file
BIN
mozc-doublesided/case/case20.stl
Normal file
BIN
mozc-doublesided/case/case21.stl
Normal file
BIN
mozc-doublesided/case/case22.stl
Normal file
BIN
mozc-doublesided/case/case23.stl
Normal file
BIN
mozc-doublesided/case/case24.stl
Normal file
BIN
mozc-doublesided/case/case25.stl
Normal file
BIN
mozc-doublesided/case/jig.stl
Normal file
29
mozc-doublesided/examples/webhid.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<html>
|
||||
<button onclick="connect()">キーボードを接続</button>
|
||||
<hr>
|
||||
<textarea id="text"></textarea>
|
||||
<script>
|
||||
async function connect() {
|
||||
const [device] = await navigator.hid.requestDevice({
|
||||
'filters': [
|
||||
{ 'vendorId': 1155, 'productId': 22352 }]
|
||||
});
|
||||
// May fail to open common HID devices on macOS.
|
||||
await device.open();
|
||||
device.addEventListener("inputreport", e => {
|
||||
const view = new Uint16Array(e.data.buffer);
|
||||
const codepoint = [];
|
||||
for (code of view) {
|
||||
if (code) {
|
||||
codepoint.push(code);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
document.getElementById('text').value +=
|
||||
String.fromCodePoint.apply(null, codepoint);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</html>
|
||||
72
mozc-doublesided/firmware/CMakeLists.txt
Normal file
@@ -0,0 +1,72 @@
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
#
|
||||
# This file is generated only once,
|
||||
# and is not re-generated if converter is called multiple times.
|
||||
#
|
||||
# User is free to modify the file as much as necessary
|
||||
#
|
||||
|
||||
# Setup compiler settings
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_C_EXTENSIONS ON)
|
||||
|
||||
|
||||
# Define the build type
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
|
||||
# Set the project name
|
||||
set(CMAKE_PROJECT_NAME firmware)
|
||||
|
||||
# Include toolchain file
|
||||
include("cmake/gcc-arm-none-eabi.cmake")
|
||||
|
||||
# Enable compile command to ease indexing with e.g. clangd
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
|
||||
|
||||
# Enable CMake support for ASM and C languages
|
||||
enable_language(C ASM)
|
||||
|
||||
# Core project settings
|
||||
project(${CMAKE_PROJECT_NAME})
|
||||
message("Build type: " ${CMAKE_BUILD_TYPE})
|
||||
|
||||
# Create an executable object type
|
||||
add_executable(${CMAKE_PROJECT_NAME})
|
||||
|
||||
# Add STM32CubeMX generated sources
|
||||
add_subdirectory(cmake/stm32cubemx)
|
||||
|
||||
# Link directories setup
|
||||
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
# Add user defined library search paths
|
||||
)
|
||||
|
||||
# Add sources to executable
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
# Add user sources here
|
||||
Core/Src/hid.c
|
||||
Core/Src/i2c.c
|
||||
Core/Src/led.c
|
||||
Core/Src/mozc.c
|
||||
)
|
||||
|
||||
# Add include paths
|
||||
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
# Add user defined include paths
|
||||
)
|
||||
|
||||
# Add project symbols (macros)
|
||||
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
# Add user defined symbols
|
||||
)
|
||||
|
||||
# Add linked libraries
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME}
|
||||
stm32cubemx
|
||||
|
||||
# Add user defined libraries
|
||||
)
|
||||
14
mozc-doublesided/firmware/Core/Inc/hid.h
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#ifndef HID_H_
|
||||
#define HID_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void hid_init(void);
|
||||
void hid_update(const uint8_t* keys);
|
||||
void hid_deinit(void);
|
||||
|
||||
#endif // HID_H_
|
||||
15
mozc-doublesided/firmware/Core/Inc/i2c.h
Normal file
@@ -0,0 +1,15 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#ifndef I2C_H_
|
||||
#define I2C_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
void i2c_init(void);
|
||||
bool i2c_is_host(void);
|
||||
void i2c_activate_host(void);
|
||||
void i2c_maybe_listen(void);
|
||||
|
||||
#endif // I2C_H_
|
||||
13
mozc-doublesided/firmware/Core/Inc/led.h
Normal file
@@ -0,0 +1,13 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#ifndef LED_H_
|
||||
#define LED_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void led_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
|
||||
void led_flush(void);
|
||||
|
||||
#endif // LED_H_
|
||||
11
mozc-doublesided/firmware/Core/Inc/mozc.h
Normal file
@@ -0,0 +1,11 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#ifndef MOZC_H_
|
||||
#define MOZC_H_
|
||||
|
||||
void mozc_init(void);
|
||||
void mozc_loop(void);
|
||||
|
||||
#endif // MOZC_H_
|
||||
262
mozc-doublesided/firmware/Core/Src/hid.c
Normal file
@@ -0,0 +1,262 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#include "hid.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "i2c.h"
|
||||
#include "usbd_customhid.h"
|
||||
|
||||
extern USBD_HandleTypeDef hUsbDeviceFS;
|
||||
|
||||
#define REPORT_SIZE 17
|
||||
#define KEYBOARD_REPORT_ID 1
|
||||
#define KEYBOARD_REPORT_MODIFIER_OFFSET 1
|
||||
#define KEYBOARD_REPORT_OFFSET 3
|
||||
#define UNICODE_REPORT_ID 2
|
||||
#define UNICODE_REPORT_OFFSET 1
|
||||
#define KEY_LINES 26
|
||||
#define KEY_COLUMNS 8
|
||||
|
||||
static bool active = false;
|
||||
static uint8_t prev_keys[KEY_LINES];
|
||||
static uint8_t prev_key_message[REPORT_SIZE];
|
||||
static uint8_t key_message[REPORT_SIZE];
|
||||
static uint8_t key_index = KEYBOARD_REPORT_OFFSET;
|
||||
static uint8_t unicode_message[REPORT_SIZE];
|
||||
static uint8_t unicode_index = UNICODE_REPORT_OFFSET;
|
||||
static uint8_t usage_id[26][8] = {
|
||||
{0x1f, 0x1a, 0x16, 0x1d, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x20, 0x08, 0x07, 0x1b, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x21, 0x15, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x22, 0x17, 0x0a, 0x19, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x23, 0x1c, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x24, 0x18, 0x0d, 0x11, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x25, 0x0c, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x26, 0x12, 0x0f, 0x36, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x27, 0x13, 0x33, 0x37, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x2d, 0x2f, 0x34, 0x38, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x2e, 0x30, 0x32, 0x87, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x89, 0x2a, 0x28, 0xe6, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3a, 0x2c, 0xe4, 0xe5, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3b, 0x46, 0x49, 0x4c, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3c, 0x47, 0x4a, 0x4d, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3d, 0x48, 0x4b, 0x4e, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3e, 0x53, 0x50, 0xe3, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x3f, 0x52, 0x51, 0x54, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x40, 0x55, 0x4f, 0x62, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x41, 0x5f, 0x5c, 0x59, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x42, 0x60, 0x5d, 0x5a, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x43, 0x61, 0x5e, 0x5b, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x44, 0x56, 0x57, 0x58, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x45, 0x8b, 0x8a, 0x4c, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x29, 0x2b, 0xe0, 0xe1, 0x39, 0x88, 0x28, 0x2a},
|
||||
{0x1e, 0x14, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x2c},
|
||||
};
|
||||
|
||||
static uint16_t unicode[26][8] = {
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3075, 0x3066, 0x3068, 0x3064},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3042, 0x3044, 0x3057, 0x3055},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3046, 0x3059, 0x306f, 0x305d},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3048, 0x304b, 0x304d, 0x3072},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x304a, 0x3093, 0x304f, 0x3053},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3084, 0x306a, 0x307e, 0x307f},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3086, 0x306b, 0x306e, 0x3082},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3088, 0x3089, 0x308a, 0x306d},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x308f, 0x305b, 0x308c, 0x308b},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x307b, 0x307b, 0x3051, 0x3081},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x3078, 0x309c, 0x3080, 0x308d},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x30FC, 0x0000, 0x0001, 0x0002},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0003, 0x0004, 0x0005, 0x0006},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0007, 0x0008, 0x0009, 0x000a},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x000b, 0x000c, 0x000d, 0x000e},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x000f, 0x0010, 0x0011, 0x0012},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0013, 0x0014, 0x0015, 0x0016},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0017, 0x0018, 0x0019, 0x001a},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x001b, 0x001c, 0x2797, 0x001d},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x001e, 0x001f, 0x0020, 0x0021},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0022, 0x0023, 0x0024, 0x0025},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x0026, 0x0027, 0x0028, 0x0029},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x267e, 0x2796, 0x2795, 0x002a},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x002b, 0x002c, 0x002d, 0x002e},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff},
|
||||
{0xffff, 0xffff, 0xffff, 0xffff, 0x306c, 0x305f, 0x3061, 0xffff},
|
||||
};
|
||||
|
||||
static uint16_t unicode_sequence_00[] = {0xd83d, 0xde48, 0}; // 🙈
|
||||
static uint16_t unicode_sequence_01[] = {0xd83d, 0xde49, 0}; // 🙉
|
||||
static uint16_t unicode_sequence_02[] = {0xd83d, 0xde4a, 0}; // 🙊
|
||||
static uint16_t unicode_sequence_03[] = {0xd83d, 0xde00, 0}; // 😀
|
||||
static uint16_t unicode_sequence_04[] = {0xd83d, 0xde04, 0}; // 😄
|
||||
static uint16_t unicode_sequence_05[] = {0xd83d, 0xde01, 0}; // 😁
|
||||
static uint16_t unicode_sequence_06[] = {0xd83d, 0xde06, 0}; // 😆
|
||||
static uint16_t unicode_sequence_07[] = {0xd83d, 0xde05, 0}; // 😆
|
||||
static uint16_t unicode_sequence_08[] = {0xd83d, 0xde02, 0}; // 😆
|
||||
static uint16_t unicode_sequence_09[] = {0xd83e, 0xdd23, 0}; // 🤣
|
||||
static uint16_t unicode_sequence_0a[] = {0xd83d, 0xde2d, 0}; // 😭
|
||||
static uint16_t unicode_sequence_0b[] = {0xd83d, 0xde09, 0}; // 😉
|
||||
static uint16_t unicode_sequence_0c[] = {0xd83d, 0xde17, 0}; // 😗
|
||||
static uint16_t unicode_sequence_0d[] = {0xd83d, 0xde1a, 0}; // 😚
|
||||
static uint16_t unicode_sequence_0e[] = {0xd83d, 0xde18, 0}; // 😘
|
||||
static uint16_t unicode_sequence_0f[] = {0xd83e, 0xdd70, 0}; // 🥰
|
||||
static uint16_t unicode_sequence_10[] = {0xd83d, 0xde0d, 0}; // 😍
|
||||
static uint16_t unicode_sequence_11[] = {0xd83e, 0xdd29, 0}; // 🤩
|
||||
static uint16_t unicode_sequence_12[] = {0xd83e, 0xdd73, 0}; // 🥳
|
||||
static uint16_t unicode_sequence_13[] = {0xd83e, 0xdee0, 0}; // 🫠
|
||||
static uint16_t unicode_sequence_14[] = {0xd83d, 0xde43, 0}; // 🙃
|
||||
static uint16_t unicode_sequence_15[] = {0xd83e, 0xdd72, 0}; // 🥲
|
||||
static uint16_t unicode_sequence_16[] = {0xd83e, 0xdd79, 0}; // 🥹
|
||||
static uint16_t unicode_sequence_17[] = {0xd83e, 0xdee1, 0}; // 🫡
|
||||
static uint16_t unicode_sequence_18[] = {0xd83e, 0xdd14, 0}; // 🤔
|
||||
static uint16_t unicode_sequence_19[] = {0xd83e, 0xdee2, 0}; // 🫢
|
||||
static uint16_t unicode_sequence_1a[] = {0xd83d, 0xde31, 0}; // 😱
|
||||
static uint16_t unicode_sequence_1b[] = {0xd83d, 0xdd25, 0}; // 🔥
|
||||
static uint16_t unicode_sequence_1c[] = {0x2716, 0xfe0f, 0}; // ✖
|
||||
static uint16_t unicode_sequence_1d[] = {0x0030, 0xfe0f, 0x20e3, 0}; // 0️⃣
|
||||
static uint16_t unicode_sequence_1e[] = {0xd83d, 0xdd1f, 0}; // 🔟
|
||||
static uint16_t unicode_sequence_1f[] = {0x0037, 0xfe0f, 0x20e3, 0}; // 7️⃣
|
||||
static uint16_t unicode_sequence_20[] = {0x0034, 0xfe0f, 0x20e3, 0}; // 4️⃣
|
||||
static uint16_t unicode_sequence_21[] = {0x0031, 0xfe0f, 0x20e3, 0}; // 1️⃣
|
||||
static uint16_t unicode_sequence_22[] = {0x2764, 0xfe0f, 0}; // ❤️
|
||||
static uint16_t unicode_sequence_23[] = {0x0038, 0xfe0f, 0x20e3, 0}; // 8️⃣
|
||||
static uint16_t unicode_sequence_24[] = {0x0035, 0xfe0f, 0x20e3, 0}; // 5️⃣
|
||||
static uint16_t unicode_sequence_25[] = {0x0032, 0xfe0f, 0x20e3, 0}; // 2️⃣
|
||||
static uint16_t unicode_sequence_26[] = {0x2764, 0xfe0f, 0x200d,
|
||||
0xd83e, 0xde79, 0}; // ❤️🩹
|
||||
static uint16_t unicode_sequence_27[] = {0x0039, 0xfe0f, 0x20e3, 0}; // 9️⃣
|
||||
static uint16_t unicode_sequence_28[] = {0x0036, 0xfe0f, 0x20e3, 0}; // 6️⃣
|
||||
static uint16_t unicode_sequence_29[] = {0x0033, 0xfe0f, 0x20e3, 0}; // 3️⃣
|
||||
static uint16_t unicode_sequence_2a[] = {0xd83d, 0xdff0, 0}; // 🟰
|
||||
static uint16_t unicode_sequence_2b[] = {0xd83d, 0xdc4c, 0}; // 👌
|
||||
static uint16_t unicode_sequence_2c[] = {0xd83d, 0xde4f, 0}; // 🙏
|
||||
static uint16_t unicode_sequence_2d[] = {0xd83d, 0xdc4d, 0}; // 👍
|
||||
static uint16_t unicode_sequence_2e[] = {0xd83e, 0xdef5, 0}; // 🫵
|
||||
|
||||
static uint16_t* unicode_sequence[] = {
|
||||
unicode_sequence_00, unicode_sequence_01, unicode_sequence_02,
|
||||
unicode_sequence_03, unicode_sequence_04, unicode_sequence_05,
|
||||
unicode_sequence_06, unicode_sequence_07, unicode_sequence_08,
|
||||
unicode_sequence_09, unicode_sequence_0a, unicode_sequence_0b,
|
||||
unicode_sequence_0c, unicode_sequence_0d, unicode_sequence_0e,
|
||||
unicode_sequence_0f, unicode_sequence_10, unicode_sequence_11,
|
||||
unicode_sequence_12, unicode_sequence_13, unicode_sequence_14,
|
||||
unicode_sequence_15, unicode_sequence_16, unicode_sequence_17,
|
||||
unicode_sequence_18, unicode_sequence_19, unicode_sequence_1a,
|
||||
unicode_sequence_1b, unicode_sequence_1c, unicode_sequence_1d,
|
||||
unicode_sequence_1e, unicode_sequence_1f, unicode_sequence_20,
|
||||
unicode_sequence_21, unicode_sequence_22, unicode_sequence_23,
|
||||
unicode_sequence_24, unicode_sequence_25, unicode_sequence_26,
|
||||
unicode_sequence_27, unicode_sequence_28, unicode_sequence_29,
|
||||
unicode_sequence_2a, unicode_sequence_2b, unicode_sequence_2c,
|
||||
unicode_sequence_2d, unicode_sequence_2e,
|
||||
};
|
||||
|
||||
static void message_reset(void) {
|
||||
for (int i = 0; i < REPORT_SIZE; ++i) {
|
||||
prev_key_message[i] = key_message[i];
|
||||
key_message[i] = 0;
|
||||
unicode_message[i] = 0;
|
||||
}
|
||||
key_index = KEYBOARD_REPORT_OFFSET;
|
||||
unicode_index = UNICODE_REPORT_OFFSET;
|
||||
key_message[0] = KEYBOARD_REPORT_ID;
|
||||
unicode_message[0] = UNICODE_REPORT_ID;
|
||||
}
|
||||
|
||||
static void message_set_phantom_state(void) {
|
||||
for (int i = KEYBOARD_REPORT_OFFSET; i < REPORT_SIZE; ++i) {
|
||||
key_message[i] = 1;
|
||||
}
|
||||
key_index = REPORT_SIZE + 1;
|
||||
for (int i = UNICODE_REPORT_OFFSET; i < REPORT_SIZE; ++i) {
|
||||
unicode_message[i] = 0;
|
||||
}
|
||||
unicode_index = REPORT_SIZE + 1;
|
||||
}
|
||||
|
||||
static void message_push_usage(uint8_t usage) {
|
||||
if (0xe0 <= usage && usage <= 0xe7) {
|
||||
// modifiers
|
||||
key_message[KEYBOARD_REPORT_MODIFIER_OFFSET] |= (1 << (usage & 7));
|
||||
return;
|
||||
}
|
||||
if (key_index == REPORT_SIZE) {
|
||||
message_set_phantom_state();
|
||||
} else if (key_index < REPORT_SIZE) {
|
||||
key_message[key_index++] = usage;
|
||||
}
|
||||
}
|
||||
|
||||
// Experimental to send Unicode events over HID report.
|
||||
// Unicode Page (0x10) is defined in the HID spec, but haven't used for
|
||||
// keyboards and no operating system seems to support the case for now.
|
||||
// You can handle this directly if your application can speak HID directly,
|
||||
// e.g. web sites using WebHID.
|
||||
// Unicode Page assumes the Unicode Standard, Version 1.1 that was the newest
|
||||
// version when the usage page was defined, and 16bit code here is expected
|
||||
// to be UCS-2. However, we may send UTF-16 here as a natural expansion.
|
||||
static void message_push_unicode(uint16_t code) {
|
||||
if (unicode_index == REPORT_SIZE) {
|
||||
message_set_phantom_state();
|
||||
} else if (unicode_index < REPORT_SIZE) {
|
||||
unicode_message[unicode_index++] = code & 0xff;
|
||||
unicode_message[unicode_index++] = code >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
void hid_init(void) {
|
||||
if (!i2c_is_host()) {
|
||||
i2c_activate_host();
|
||||
}
|
||||
active = true;
|
||||
for (int i = 0; i < KEY_LINES; ++i) {
|
||||
prev_keys[i] = 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
void hid_update(const uint8_t* keys) {
|
||||
if (!active) {
|
||||
return;
|
||||
}
|
||||
message_reset();
|
||||
for (int i = 0; i < KEY_LINES; ++i) {
|
||||
for (int bit = 0; bit < KEY_COLUMNS; ++bit) {
|
||||
if ((keys[i] & (1 << bit)) == 0) {
|
||||
uint8_t usage = usage_id[i][bit];
|
||||
if (usage) {
|
||||
message_push_usage(usage);
|
||||
} else if (prev_keys[i] & (1 << bit)) {
|
||||
// Unicode sequence will be sent only on pushing edge.
|
||||
uint16_t code = unicode[i][bit];
|
||||
if (code < 0x0100) {
|
||||
for (int sequence = 0; unicode_sequence[code][sequence];
|
||||
++sequence) {
|
||||
message_push_unicode(unicode_sequence[code][sequence]);
|
||||
}
|
||||
} else if (code != 0xffff) {
|
||||
message_push_unicode(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
prev_keys[i] = keys[i];
|
||||
}
|
||||
bool changed = false;
|
||||
for (int i = 0; i < REPORT_SIZE; ++i) {
|
||||
if (prev_key_message[i] != key_message[i]) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, key_message, REPORT_SIZE);
|
||||
}
|
||||
|
||||
if (unicode_index > UNICODE_REPORT_OFFSET) {
|
||||
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, unicode_message, REPORT_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
void hid_deinit(void) { active = false; }
|
||||
300
mozc-doublesided/firmware/Core/Src/i2c.c
Normal file
@@ -0,0 +1,300 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#include "i2c.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "hid.h"
|
||||
#include "led.h"
|
||||
#include "main.h"
|
||||
|
||||
extern I2C_HandleTypeDef hi2c1;
|
||||
|
||||
enum {
|
||||
STATE_IDLE,
|
||||
STATE_LISTENING,
|
||||
STATE_WRITTEN,
|
||||
STATE_READ,
|
||||
STATE_HOST,
|
||||
STATE_INIT_HOST,
|
||||
};
|
||||
|
||||
static volatile uint8_t state = STATE_IDLE;
|
||||
static volatile uint8_t address = 0;
|
||||
static volatile uint8_t commands[24];
|
||||
static volatile uint8_t sw_pushed = 0xff;
|
||||
static volatile uint8_t sw_current = 0xff;
|
||||
static bool ready = false;
|
||||
static uint8_t keys[26];
|
||||
static uint8_t leds[26 * 24];
|
||||
|
||||
void HAL_I2C_AddrCallback(I2C_HandleTypeDef* hi2c, uint8_t TransferDirection,
|
||||
uint16_t AddrMatchCode) {
|
||||
address = AddrMatchCode >> 1;
|
||||
if (TransferDirection == I2C_DIRECTION_RECEIVE) {
|
||||
HAL_I2C_Slave_Seq_Transmit_IT(hi2c, &sw_pushed, 1,
|
||||
I2C_FIRST_AND_LAST_FRAME);
|
||||
} else {
|
||||
if (address == 0x01) {
|
||||
HAL_I2C_Slave_Seq_Receive_IT(hi2c, commands, 1, I2C_FIRST_AND_LAST_FRAME);
|
||||
} else {
|
||||
HAL_I2C_Slave_Seq_Receive_IT(hi2c, commands, 24,
|
||||
I2C_FIRST_AND_LAST_FRAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef* I2cHandle) {
|
||||
state = STATE_READ;
|
||||
}
|
||||
|
||||
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef* I2cHandle) {
|
||||
state = STATE_WRITTEN;
|
||||
}
|
||||
|
||||
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef* hi2c) { state = STATE_IDLE; }
|
||||
|
||||
static void update_leds(uint8_t* data) {
|
||||
led_set(0, data[0], data[1], data[2]);
|
||||
led_set(1, data[3], data[4], data[5]);
|
||||
led_set(2, data[6], data[7], data[8]);
|
||||
led_set(3, data[9], data[10], data[11]);
|
||||
led_set(4, data[12], data[13], data[14]);
|
||||
led_set(5, data[15], data[16], data[17]);
|
||||
led_set(6, data[18], data[19], data[20]);
|
||||
led_set(7, data[21], data[22], data[23]);
|
||||
led_flush();
|
||||
}
|
||||
|
||||
static void h2rgb(uint8_t h, uint8_t* r, uint8_t* g, uint8_t* b) {
|
||||
uint8_t i = h / 30;
|
||||
uint8_t k = (h % 30) * 6;
|
||||
uint8_t n = 180 - k;
|
||||
switch (i) {
|
||||
case 0:
|
||||
*r = 180;
|
||||
*g = k;
|
||||
*b = 180;
|
||||
break;
|
||||
case 1:
|
||||
*r = n;
|
||||
*g = 180;
|
||||
*b = 180;
|
||||
break;
|
||||
case 2:
|
||||
*r = 180;
|
||||
*g = 180;
|
||||
*b = k;
|
||||
break;
|
||||
case 3:
|
||||
*r = 180;
|
||||
*g = n;
|
||||
*b = 180;
|
||||
break;
|
||||
case 4:
|
||||
*r = k;
|
||||
*g = 180;
|
||||
*b = 180;
|
||||
break;
|
||||
case 5:
|
||||
*r = 180;
|
||||
*g = 180;
|
||||
*b = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void led_step(void) {
|
||||
uint8_t data[26 * 24];
|
||||
for (int i = 0; i < 26 * 24; ++i) {
|
||||
uint8_t half = leds[i] >> 1;
|
||||
uint8_t quarter = half >> 1;
|
||||
data[i] = half + quarter;
|
||||
}
|
||||
for (int i = 0; i < 26 * 24; ++i) {
|
||||
uint16_t v = data[i] >> 5;
|
||||
v += (data[(i + 26 * 24 - 24) % (26 * 24)] >> 1) +
|
||||
(data[(i + 24) % (26 * 24)] >> 1);
|
||||
v += (data[(i + 26 * 24 - 3) % (26 * 24)] >> 5) +
|
||||
(data[(i + 3) % (26 * 24)] >> 5);
|
||||
leds[i] = (v > 128) ? 128 : v;
|
||||
}
|
||||
}
|
||||
|
||||
static void setup_pull(bool pullup) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = pullup ? GPIO_PULLUP : GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_I2C1;
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
static void setup_host(void) {
|
||||
hi2c1.Init.Timing = 0x00101D2D;
|
||||
hi2c1.Init.OwnAddress1 = 0;
|
||||
HAL_I2C_Init(&hi2c1);
|
||||
|
||||
setup_pull(true);
|
||||
state = STATE_HOST;
|
||||
uint8_t addr = 0xa0;
|
||||
for (int i = 0; i < 24; ++i) {
|
||||
commands[i] = 0;
|
||||
}
|
||||
while (GPIO_PIN_RESET == HAL_GPIO_ReadPin(RDYin_GPIO_Port, RDYin_Pin)) {
|
||||
HAL_StatusTypeDef s =
|
||||
HAL_I2C_Master_Transmit(&hi2c1, 1 << 1, &addr, 1, 100);
|
||||
if (s == HAL_OK) {
|
||||
HAL_Delay(50);
|
||||
HAL_I2C_Master_Transmit(&hi2c1, addr << 1, commands, 24, 100);
|
||||
addr++;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 26; ++i) {
|
||||
keys[i] = 0xff;
|
||||
for (int j = 0; j < 24; ++j) {
|
||||
leds[i * 24 + j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void setup_client(uint8_t address) {
|
||||
hi2c1.Init.OwnAddress1 = address << 1;
|
||||
HAL_I2C_Init(&hi2c1);
|
||||
|
||||
setup_pull(false);
|
||||
}
|
||||
|
||||
void i2c_init(void) {
|
||||
HAL_GPIO_WritePin(RDYout_GPIO_Port, RDYout_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(COM2_GPIO_Port, COM2_Pin, GPIO_PIN_SET);
|
||||
const bool is_host = !HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) &&
|
||||
!HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin) &&
|
||||
!HAL_GPIO_ReadPin(SW3_GPIO_Port, SW3_Pin) &&
|
||||
!HAL_GPIO_ReadPin(SW4_GPIO_Port, SW4_Pin);
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_SET);
|
||||
if (is_host) {
|
||||
setup_host();
|
||||
} else {
|
||||
setup_client(0x00);
|
||||
}
|
||||
}
|
||||
|
||||
static void maybe_listen_client(void) {
|
||||
HAL_GPIO_WritePin(COM2_GPIO_Port, COM2_Pin, GPIO_PIN_RESET);
|
||||
uint8_t sw = HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) << 4 |
|
||||
HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin) << 5 |
|
||||
HAL_GPIO_ReadPin(SW3_GPIO_Port, SW3_Pin) << 6 |
|
||||
HAL_GPIO_ReadPin(SW4_GPIO_Port, SW4_Pin) << 7;
|
||||
HAL_GPIO_WritePin(COM2_GPIO_Port, COM2_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_RESET);
|
||||
|
||||
const bool ready_now =
|
||||
GPIO_PIN_SET == HAL_GPIO_ReadPin(RDYin_GPIO_Port, RDYin_Pin);
|
||||
if (ready != ready_now) {
|
||||
ready = ready_now;
|
||||
HAL_I2C_DisableListen_IT(&hi2c1);
|
||||
setup_client(ready ? 0x01 : 0x00);
|
||||
state = STATE_IDLE;
|
||||
}
|
||||
|
||||
sw |= HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) << 0 |
|
||||
HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin) << 1 |
|
||||
HAL_GPIO_ReadPin(SW3_GPIO_Port, SW3_Pin) << 2 |
|
||||
HAL_GPIO_ReadPin(SW4_GPIO_Port, SW4_Pin) << 3;
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_SET);
|
||||
sw_current = sw;
|
||||
sw_pushed &= sw;
|
||||
|
||||
if (state != STATE_LISTENING) {
|
||||
if (state == STATE_READ) {
|
||||
sw_pushed |= sw_current;
|
||||
} else if (state == STATE_WRITTEN) {
|
||||
if (address == 1) {
|
||||
uint8_t new_address = commands[0] & 0x7f;
|
||||
setup_client(new_address);
|
||||
HAL_GPIO_WritePin(RDYout_GPIO_Port, RDYout_Pin, GPIO_PIN_SET);
|
||||
if (commands[0] & 0x80) {
|
||||
for (uint8_t bit = 0; bit < 8; ++bit) {
|
||||
uint8_t v = new_address & (1 << bit) ? 255 : 0;
|
||||
led_set(bit, v, v, v);
|
||||
}
|
||||
led_flush();
|
||||
}
|
||||
} else {
|
||||
update_leds(commands);
|
||||
}
|
||||
}
|
||||
if (HAL_OK == HAL_I2C_EnableListen_IT(&hi2c1)) {
|
||||
state = STATE_LISTENING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void maybe_listen_host(void) {
|
||||
HAL_GPIO_WritePin(COM2_GPIO_Port, COM2_Pin, GPIO_PIN_RESET);
|
||||
keys[25] = HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) << 4 |
|
||||
HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin) << 5 |
|
||||
HAL_GPIO_ReadPin(SW3_GPIO_Port, SW3_Pin) << 6 |
|
||||
HAL_GPIO_ReadPin(SW4_GPIO_Port, SW4_Pin) << 7;
|
||||
HAL_GPIO_WritePin(COM2_GPIO_Port, COM2_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_RESET);
|
||||
for (uint8_t addr = 0; addr < 25; ++addr) {
|
||||
HAL_I2C_Master_Receive(&hi2c1, (0x20 + addr) << 1, &keys[addr], 1, 100);
|
||||
}
|
||||
keys[25] |= HAL_GPIO_ReadPin(SW1_GPIO_Port, SW1_Pin) << 0 |
|
||||
HAL_GPIO_ReadPin(SW2_GPIO_Port, SW2_Pin) << 1 |
|
||||
HAL_GPIO_ReadPin(SW3_GPIO_Port, SW3_Pin) << 2 |
|
||||
HAL_GPIO_ReadPin(SW4_GPIO_Port, SW4_Pin) << 3;
|
||||
HAL_GPIO_WritePin(COM1_GPIO_Port, COM1_Pin, GPIO_PIN_SET);
|
||||
|
||||
hid_update(keys);
|
||||
|
||||
led_step();
|
||||
|
||||
static uint8_t h = 0;
|
||||
uint8_t r = 0;
|
||||
uint8_t g = 0;
|
||||
uint8_t b = 0;
|
||||
h2rgb(h, &r, &g, &b);
|
||||
h = (h + 1) % 180;
|
||||
|
||||
for (int i = 0; i < 26; ++i) {
|
||||
uint8_t key = keys[i];
|
||||
uint8_t* led = &leds[i * 24];
|
||||
for (uint8_t mask = 0x01; mask != 0; mask <<= 1) {
|
||||
if (0 == (key & mask)) {
|
||||
led[0] = r;
|
||||
led[1] = g;
|
||||
led[2] = b;
|
||||
}
|
||||
led += 3;
|
||||
}
|
||||
if (i != 25) {
|
||||
HAL_I2C_Master_Transmit(&hi2c1, (0x20 + i) << 1, led - 24, 24, 100);
|
||||
} else {
|
||||
update_leds(led - 24);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool i2c_is_host(void) { return state == STATE_HOST; }
|
||||
|
||||
void i2c_activate_host(void) { state = STATE_INIT_HOST; }
|
||||
|
||||
void i2c_maybe_listen(void) {
|
||||
if (state == STATE_INIT_HOST) {
|
||||
setup_host();
|
||||
}
|
||||
if (state == STATE_HOST) {
|
||||
maybe_listen_host();
|
||||
} else {
|
||||
maybe_listen_client();
|
||||
}
|
||||
}
|
||||
57
mozc-doublesided/firmware/Core/Src/led.c
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#include "led.h"
|
||||
|
||||
#include "main.h"
|
||||
|
||||
extern SPI_HandleTypeDef hspi1;
|
||||
|
||||
#define RESET_COUNT 16
|
||||
#define LED_COUNT 8
|
||||
#define DATA_LENGTH 6
|
||||
#define DMA_BUFFER_SIZE (RESET_COUNT + LED_COUNT * DATA_LENGTH + 1) << 1
|
||||
|
||||
// 0xe: 1110 - HIGH
|
||||
// 0x8: 1000 - LOW
|
||||
static uint16_t dma_buffer[DMA_BUFFER_SIZE] = {
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // RESET
|
||||
0, 0, 0, 0, 0, 0, // LED 0
|
||||
0, 0, 0, 0, 0, 0, // LED 1
|
||||
0, 0, 0, 0, 0, 0, // LED 2
|
||||
0, 0, 0, 0, 0, 0, // LED 3
|
||||
0, 0, 0, 0, 0, 0, // LED 4
|
||||
0, 0, 0, 0, 0, 0, // LED 5
|
||||
0, 0, 0, 0, 0, 0, // LED 6
|
||||
0, 0, 0, 0, 0, 0, // LED 7
|
||||
0xffff, // EOD
|
||||
};
|
||||
|
||||
static uint32_t to_spi_value(uint8_t value) {
|
||||
uint32_t spi_value = 0;
|
||||
for (uint8_t bit_mask = 0x80; bit_mask != 0; bit_mask >>= 1) {
|
||||
spi_value <<= 4;
|
||||
if (value & bit_mask) {
|
||||
spi_value |= 0xe;
|
||||
} else {
|
||||
spi_value |= 0x8;
|
||||
}
|
||||
}
|
||||
return spi_value;
|
||||
}
|
||||
|
||||
void set_spi_value(uint8_t offset, uint32_t value) {
|
||||
dma_buffer[RESET_COUNT + offset * 2 + 0] = value >> 16;
|
||||
dma_buffer[RESET_COUNT + offset * 2 + 1] = value & 0xffff;
|
||||
}
|
||||
|
||||
void led_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
|
||||
set_spi_value(index * 3 + 0, to_spi_value(g));
|
||||
set_spi_value(index * 3 + 1, to_spi_value(r));
|
||||
set_spi_value(index * 3 + 2, to_spi_value(b));
|
||||
}
|
||||
|
||||
void led_flush(void) {
|
||||
HAL_SPI_Transmit_DMA(&hspi1, (uint8_t *)dma_buffer, DMA_BUFFER_SIZE);
|
||||
}
|
||||
15
mozc-doublesided/firmware/Core/Src/mozc.c
Normal file
@@ -0,0 +1,15 @@
|
||||
// Copyright 2024 Google Inc.
|
||||
// Use of this source code is governed by an Apache License that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
#include "mozc.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "i2c.h"
|
||||
#include "main.h"
|
||||
|
||||
void mozc_init(void) { i2c_init(); }
|
||||
|
||||
void mozc_loop(void) { i2c_maybe_listen(); }
|
||||
80
mozc-doublesided/firmware/STM32F042F6Px_FLASH.ld.diff
Normal file
@@ -0,0 +1,80 @@
|
||||
*** STM32F042F6Px_FLASH.ld Sat Sep 21 21:47:11 2024
|
||||
--- STM32F042F6Px_FLASH.ld.fixed Sat Sep 21 21:47:59 2024
|
||||
***************
|
||||
*** 53,59 ****
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Highest address of the user mode stack */
|
||||
! _estack = ORIGIN() + LENGTH(); /* end of RAM */
|
||||
/* Generate a link error if heap and stack don't fit into RAM */
|
||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||
--- 53,59 ----
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
/* Highest address of the user mode stack */
|
||||
! _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of RAM */
|
||||
/* Generate a link error if heap and stack don't fit into RAM */
|
||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
||||
***************
|
||||
*** 143,149 ****
|
||||
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* define a global symbol at data end */
|
||||
! } > AT> FLASH
|
||||
|
||||
|
||||
/* Uninitialized data section */
|
||||
--- 143,149 ----
|
||||
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* define a global symbol at data end */
|
||||
! } >RAM AT> FLASH
|
||||
|
||||
|
||||
/* Uninitialized data section */
|
||||
***************
|
||||
*** 160,166 ****
|
||||
. = ALIGN(4);
|
||||
_ebss = .; /* define a global symbol at bss end */
|
||||
__bss_end__ = _ebss;
|
||||
! } >
|
||||
|
||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||
._user_heap_stack :
|
||||
--- 160,166 ----
|
||||
. = ALIGN(4);
|
||||
_ebss = .; /* define a global symbol at bss end */
|
||||
__bss_end__ = _ebss;
|
||||
! } >RAM
|
||||
|
||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
||||
._user_heap_stack :
|
||||
***************
|
||||
*** 171,177 ****
|
||||
. = . + _Min_Heap_Size;
|
||||
. = . + _Min_Stack_Size;
|
||||
. = ALIGN(8);
|
||||
! } >
|
||||
|
||||
|
||||
|
||||
--- 171,177 ----
|
||||
. = . + _Min_Heap_Size;
|
||||
. = . + _Min_Stack_Size;
|
||||
. = ALIGN(8);
|
||||
! } >RAM
|
||||
|
||||
|
||||
|
||||
***************
|
||||
*** 183,188 ****
|
||||
--- 183,189 ----
|
||||
libgcc.a ( * )
|
||||
}
|
||||
|
||||
+ .ARM.attributes 0 : { *(.ARM.attributes) }
|
||||
}
|
||||
|
||||
|
||||
171
mozc-doublesided/firmware/firmware.diff
Normal file
@@ -0,0 +1,171 @@
|
||||
diff -cr orig/Core/Src/main.c ./Core/Src/main.c
|
||||
*** orig/Core/Src/main.c Fri Sep 27 02:22:08 2024
|
||||
--- ./Core/Src/main.c Fri Sep 27 02:22:08 2024
|
||||
***************
|
||||
*** 22,28 ****
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
!
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
--- 22,28 ----
|
||||
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
! #include "mozc.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
***************
|
||||
*** 99,111 ****
|
||||
MX_USB_DEVICE_Init();
|
||||
MX_SPI1_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
!
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
--- 99,112 ----
|
||||
MX_USB_DEVICE_Init();
|
||||
MX_SPI1_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
! mozc_init();
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
while (1)
|
||||
{
|
||||
+ mozc_loop();
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
diff -cr orig/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h ./Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h
|
||||
*** orig/Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h Fri Sep 27 02:22:08 2024
|
||||
--- ./Middlewares/ST/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h Fri Sep 27 02:22:08 2024
|
||||
***************
|
||||
*** 42,48 ****
|
||||
* @{
|
||||
*/
|
||||
#define CUSTOM_HID_EPIN_ADDR 0x81U
|
||||
! #define CUSTOM_HID_EPIN_SIZE 0x02U
|
||||
|
||||
#define CUSTOM_HID_EPOUT_ADDR 0x01U
|
||||
#define CUSTOM_HID_EPOUT_SIZE 0x02U
|
||||
--- 42,48 ----
|
||||
* @{
|
||||
*/
|
||||
#define CUSTOM_HID_EPIN_ADDR 0x81U
|
||||
! #define CUSTOM_HID_EPIN_SIZE 0x11U
|
||||
|
||||
#define CUSTOM_HID_EPOUT_ADDR 0x01U
|
||||
#define CUSTOM_HID_EPOUT_SIZE 0x02U
|
||||
diff -cr orig/USB_DEVICE/App/usbd_custom_hid_if.c ./USB_DEVICE/App/usbd_custom_hid_if.c
|
||||
*** orig/USB_DEVICE/App/usbd_custom_hid_if.c Fri Sep 27 02:22:08 2024
|
||||
--- ./USB_DEVICE/App/usbd_custom_hid_if.c Fri Sep 27 02:22:08 2024
|
||||
***************
|
||||
*** 22,28 ****
|
||||
#include "usbd_custom_hid_if.h"
|
||||
|
||||
/* USER CODE BEGIN INCLUDE */
|
||||
!
|
||||
/* USER CODE END INCLUDE */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
--- 22,28 ----
|
||||
#include "usbd_custom_hid_if.h"
|
||||
|
||||
/* USER CODE BEGIN INCLUDE */
|
||||
! #include "hid.h"
|
||||
/* USER CODE END INCLUDE */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
***************
|
||||
*** 91,97 ****
|
||||
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
|
||||
{
|
||||
/* USER CODE BEGIN 0 */
|
||||
! 0x00,
|
||||
/* USER CODE END 0 */
|
||||
0xC0 /* END_COLLECTION */
|
||||
};
|
||||
--- 91,140 ----
|
||||
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
|
||||
{
|
||||
/* USER CODE BEGIN 0 */
|
||||
! 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
|
||||
! 0x09, 0x06, /* USAGE (Keyboard) */
|
||||
! 0xa1, 0x01, /* COLLECTION (Application) */
|
||||
! 0x85, 0x01, /* REPORT ID (1) */
|
||||
! 0x05, 0x07, /* USAGE_PAGE (Keyboard) */
|
||||
! 0x19, 0xe0, /* USAGE_MINIMUM (224) */
|
||||
! 0x29, 0xe7, /* USAGE_MAXIMUM (231) */
|
||||
! 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
! 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
|
||||
! 0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
! 0x95, 0x08, /* REPORT_COUNT (8) */
|
||||
! 0x81, 0x02, /* INPUT (Data,Var,Abs); Modifier byte */
|
||||
! 0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
! 0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
! 0x81, 0x01, /* INPUT (Constant); Reserved byte */
|
||||
! 0x75, 0x01, /* REPORT_SIZE (1) */
|
||||
! 0x95, 0x05, /* REPORT_COUNT (5) */
|
||||
! 0x05, 0x08, /* USAGE_PAGE (LEDs) */
|
||||
! 0x19, 0x01, /* USAGE_MINIMUM (1) */
|
||||
! 0x29, 0x05, /* USAGE_MAXIMUM (5) */
|
||||
! 0x91, 0x02, /* OUTPUT (Data,Var,Abs); LED report */
|
||||
! 0x75, 0x03, /* REPORT_SIZE (3) */
|
||||
! 0x95, 0x01, /* REPORT_COUNT (1) */
|
||||
! 0x91, 0x01, /* OUTPUT (Constant); LED report padding */
|
||||
! 0x75, 0x08, /* REPORT_SIZE (8) */
|
||||
! 0x95, 0x06, /* REPORT_COUNT (6) */
|
||||
! 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
! 0x25, 0x65, /* LOGICAL_MAXIMUM (101) */
|
||||
! 0x05, 0x07, /* USAGE_PAGE (Keyboard) */
|
||||
! 0x19, 0x00, /* USAGE_MINIMUM (0) */
|
||||
! 0x29, 0x65, /* USAGE_MAXIMUM (101) */
|
||||
! 0x81, 0x00, /* INPUT (Data,Ary,Abs) */
|
||||
! 0xC0, /* END_COLLECTION */
|
||||
! 0x05, 0x10, /* USAGE_PAGE (Unicode) */
|
||||
! 0x09, 0x00, /* USAGE (0) */
|
||||
! 0xa1, 0x01, /* COLLECTION (Application) */
|
||||
! 0x85, 0x02, /* REPORT ID (2) */
|
||||
! 0x75, 0x10, /* REPORT_SIZE (16) */
|
||||
! 0x95, 0x08, /* REPORT_COUNT (8) */
|
||||
! 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
|
||||
! 0x27, 0xff, 0xff, 0x00, 0x00, /* LOGICAL_MAXIMUM (65535) */
|
||||
! 0x19, 0x00, /* USAGE_MINIMUM (0) */
|
||||
! 0x2a, 0xff, 0xff, /* USAGE_MAXIMUM (65535) */
|
||||
! 0x81, 0x00, /* INPUT (Data,Ary,Abs) */
|
||||
/* USER CODE END 0 */
|
||||
0xC0 /* END_COLLECTION */
|
||||
};
|
||||
***************
|
||||
*** 152,157 ****
|
||||
--- 195,201 ----
|
||||
static int8_t CUSTOM_HID_Init_FS(void)
|
||||
{
|
||||
/* USER CODE BEGIN 4 */
|
||||
+ hid_init();
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 4 */
|
||||
}
|
||||
***************
|
||||
*** 163,168 ****
|
||||
--- 207,213 ----
|
||||
static int8_t CUSTOM_HID_DeInit_FS(void)
|
||||
{
|
||||
/* USER CODE BEGIN 5 */
|
||||
+ hid_deinit();
|
||||
return (USBD_OK);
|
||||
/* USER CODE END 5 */
|
||||
}
|
||||
Only in .: orig
|
||||
219
mozc-doublesided/firmware/firmware.ioc
Normal file
@@ -0,0 +1,219 @@
|
||||
#MicroXplorer Configuration settings - do not modify
|
||||
CAD.formats=
|
||||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
Dma.Request0=SPI1_TX
|
||||
Dma.RequestsNb=1
|
||||
Dma.SPI1_TX.0.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.SPI1_TX.0.Instance=DMA1_Channel3
|
||||
Dma.SPI1_TX.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
|
||||
Dma.SPI1_TX.0.MemInc=DMA_MINC_ENABLE
|
||||
Dma.SPI1_TX.0.Mode=DMA_NORMAL
|
||||
Dma.SPI1_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
||||
Dma.SPI1_TX.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.SPI1_TX.0.Priority=DMA_PRIORITY_LOW
|
||||
Dma.SPI1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Group By Peripherals
|
||||
I2C1.Analog_Filter=I2C_ANALOGFILTER_DISABLE
|
||||
I2C1.I2C_Coeff_DF=0
|
||||
I2C1.I2C_Fall_Time=0
|
||||
I2C1.I2C_Rise_Time=0
|
||||
I2C1.I2C_Speed_Mode=I2C_Standard
|
||||
I2C1.IPParameters=I2C_Speed_Mode,Analog_Filter,Timing,Speed,I2C_Rise_Time,I2C_Fall_Time,I2C_Coeff_DF
|
||||
I2C1.Speed=50
|
||||
I2C1.Timing=0x00101D7D
|
||||
KeepUserPlacement=false
|
||||
Mcu.CPN=STM32F042F6P6
|
||||
Mcu.Family=STM32F0
|
||||
Mcu.IP0=DMA
|
||||
Mcu.IP1=I2C1
|
||||
Mcu.IP2=NVIC
|
||||
Mcu.IP3=RCC
|
||||
Mcu.IP4=SPI1
|
||||
Mcu.IP5=SYS
|
||||
Mcu.IP6=USB
|
||||
Mcu.IP7=USB_DEVICE
|
||||
Mcu.IPNb=8
|
||||
Mcu.Name=STM32F042F6Px
|
||||
Mcu.Package=TSSOP20
|
||||
Mcu.Pin0=PB8
|
||||
Mcu.Pin1=PF0-OSC_IN
|
||||
Mcu.Pin10=PA7
|
||||
Mcu.Pin11=PB1
|
||||
Mcu.Pin12=PA11
|
||||
Mcu.Pin13=PA12
|
||||
Mcu.Pin14=PA13
|
||||
Mcu.Pin15=PA14
|
||||
Mcu.Pin16=VP_RCC_USB
|
||||
Mcu.Pin17=VP_SYS_VS_PINREMAP
|
||||
Mcu.Pin18=VP_SYS_VS_Systick
|
||||
Mcu.Pin19=VP_USB_DEVICE_VS_USB_DEVICE_CUSTOM_HID_FS
|
||||
Mcu.Pin2=PF1-OSC_OUT
|
||||
Mcu.Pin3=PA0
|
||||
Mcu.Pin4=PA1
|
||||
Mcu.Pin5=PA2
|
||||
Mcu.Pin6=PA3
|
||||
Mcu.Pin7=PA4
|
||||
Mcu.Pin8=PA5
|
||||
Mcu.Pin9=PA6
|
||||
Mcu.PinsNb=20
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserName=STM32F042F6Px
|
||||
MxCube.Version=6.12.1
|
||||
MxDb.Version=DB.6.0.121
|
||||
NVIC.DMA1_Channel2_3_IRQn=true\:2\:0\:true\:false\:true\:false\:true\:true
|
||||
NVIC.ForceEnableDMAVector=true
|
||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.I2C1_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.RCC_CRS_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:true
|
||||
NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
|
||||
NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false
|
||||
NVIC.USB_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true
|
||||
PA0.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA0.GPIO_Label=SW1
|
||||
PA0.GPIO_PuPd=GPIO_PULLUP
|
||||
PA0.Locked=true
|
||||
PA0.Signal=GPIO_Input
|
||||
PA1.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA1.GPIO_Label=SW2
|
||||
PA1.GPIO_PuPd=GPIO_PULLUP
|
||||
PA1.Locked=true
|
||||
PA1.Signal=GPIO_Input
|
||||
PA11.Locked=true
|
||||
PA11.Mode=Device
|
||||
PA11.Signal=USB_DM
|
||||
PA12.Mode=Device
|
||||
PA12.Signal=USB_DP
|
||||
PA13.Mode=Serial_Wire
|
||||
PA13.Signal=SYS_SWDIO
|
||||
PA14.Mode=Serial_Wire
|
||||
PA14.Signal=SYS_SWCLK
|
||||
PA2.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA2.GPIO_Label=SW3
|
||||
PA2.GPIO_PuPd=GPIO_PULLUP
|
||||
PA2.Locked=true
|
||||
PA2.Signal=GPIO_Input
|
||||
PA3.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA3.GPIO_Label=SW4
|
||||
PA3.GPIO_PuPd=GPIO_PULLUP
|
||||
PA3.Locked=true
|
||||
PA3.Signal=GPIO_Input
|
||||
PA4.GPIOParameters=GPIO_PuPd,GPIO_Label
|
||||
PA4.GPIO_Label=RDYin
|
||||
PA4.GPIO_PuPd=GPIO_PULLUP
|
||||
PA4.Locked=true
|
||||
PA4.Signal=GPIO_Input
|
||||
PA5.Locked=true
|
||||
PA5.Mode=TX_Only_Simplex_Unidirect_Master
|
||||
PA5.Signal=SPI1_SCK
|
||||
PA6.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||
PA6.GPIO_Label=RDYout
|
||||
PA6.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
|
||||
PA6.GPIO_PuPd=GPIO_NOPULL
|
||||
PA6.Locked=true
|
||||
PA6.Signal=GPIO_Output
|
||||
PA7.Locked=true
|
||||
PA7.Mode=TX_Only_Simplex_Unidirect_Master
|
||||
PA7.Signal=SPI1_MOSI
|
||||
PB1.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||
PB1.GPIO_Label=COM1
|
||||
PB1.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
|
||||
PB1.GPIO_PuPd=GPIO_NOPULL
|
||||
PB1.GPIO_Speed=GPIO_SPEED_FREQ_LOW
|
||||
PB1.Locked=true
|
||||
PB1.PinState=GPIO_PIN_SET
|
||||
PB1.Signal=GPIO_Output
|
||||
PB8.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||
PB8.GPIO_Label=COM2
|
||||
PB8.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_OD
|
||||
PB8.GPIO_PuPd=GPIO_NOPULL
|
||||
PB8.Locked=true
|
||||
PB8.PinState=GPIO_PIN_SET
|
||||
PB8.Signal=GPIO_Output
|
||||
PF0-OSC_IN.GPIOParameters=GPIO_Pu
|
||||
PF0-OSC_IN.GPIO_Pu=GPIO_NOPULL
|
||||
PF0-OSC_IN.Locked=true
|
||||
PF0-OSC_IN.Mode=I2C
|
||||
PF0-OSC_IN.Signal=I2C1_SDA
|
||||
PF1-OSC_OUT.GPIOParameters=GPIO_Pu
|
||||
PF1-OSC_OUT.GPIO_Pu=GPIO_NOPULL
|
||||
PF1-OSC_OUT.Locked=true
|
||||
PF1-OSC_OUT.Mode=I2C
|
||||
PF1-OSC_OUT.Signal=I2C1_SCL
|
||||
PinOutPanel.RotationAngle=0
|
||||
ProjectManager.AskForMigrate=true
|
||||
ProjectManager.BackupPrevious=false
|
||||
ProjectManager.CompilerOptimize=6
|
||||
ProjectManager.ComputerToolchain=false
|
||||
ProjectManager.CoupleFile=false
|
||||
ProjectManager.CustomerFirmwarePackage=
|
||||
ProjectManager.DefaultFWLocation=true
|
||||
ProjectManager.DeletePrevious=true
|
||||
ProjectManager.DeviceId=STM32F042F6Px
|
||||
ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.11.5
|
||||
ProjectManager.FreePins=false
|
||||
ProjectManager.HalAssertFull=false
|
||||
ProjectManager.HeapSize=0x200
|
||||
ProjectManager.KeepUserCode=true
|
||||
ProjectManager.LastFirmware=true
|
||||
ProjectManager.LibraryCopy=0
|
||||
ProjectManager.MainLocation=Core/Src
|
||||
ProjectManager.NoMain=false
|
||||
ProjectManager.PreviousToolchain=
|
||||
ProjectManager.ProjectBuild=false
|
||||
ProjectManager.ProjectFileName=firmware.ioc
|
||||
ProjectManager.ProjectName=firmware
|
||||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=
|
||||
ProjectManager.StackSize=0x400
|
||||
ProjectManager.TargetToolchain=CMake
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
ProjectManager.UAScriptBeforePath=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,6-MX_SPI1_Init-SPI1-false-HAL-true
|
||||
RCC.AHBFreq_Value=24000000
|
||||
RCC.APB1Freq_Value=24000000
|
||||
RCC.APB1TimFreq_Value=24000000
|
||||
RCC.CECFreq_Value=32786.88524590164
|
||||
RCC.FCLKCortexFreq_Value=24000000
|
||||
RCC.FamilyName=M
|
||||
RCC.HCLKFreq_Value=24000000
|
||||
RCC.HSICECFreq_Value=32786.88524590164
|
||||
RCC.I2SFreq_Value=24000000
|
||||
RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,CECFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSICECFreq_Value,I2SFreq_Value,PLLCLKFreq_Value,PLLMUL,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USART1Freq_Value,VCOOutput2Freq_Value
|
||||
RCC.PLLCLKFreq_Value=24000000
|
||||
RCC.PLLMUL=RCC_PLL_MUL3
|
||||
RCC.SYSCLKFreq_VALUE=24000000
|
||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||
RCC.TimSysFreq_Value=24000000
|
||||
RCC.USART1Freq_Value=24000000
|
||||
RCC.VCOOutput2Freq_Value=8000000
|
||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8
|
||||
SPI1.CalculateBaudRate=3.0 MBits/s
|
||||
SPI1.DataSize=SPI_DATASIZE_16BIT
|
||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||
SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate,DataSize,NSSPMode
|
||||
SPI1.Mode=SPI_MODE_MASTER
|
||||
SPI1.NSSPMode=SPI_NSS_PULSE_DISABLE
|
||||
SPI1.VirtualType=VM_MASTER
|
||||
USB_DEVICE.CLASS_NAME_FS=CUSTOM_HID
|
||||
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,USBD_SELF_POWERED,USBD_CUSTOM_HID_REPORT_DESC_SIZE,USBD_CUSTOMHID_OUTREPORT_BUF_SIZE
|
||||
USB_DEVICE.USBD_CUSTOMHID_OUTREPORT_BUF_SIZE=16
|
||||
USB_DEVICE.USBD_CUSTOM_HID_REPORT_DESC_SIZE=92
|
||||
USB_DEVICE.USBD_SELF_POWERED=0
|
||||
USB_DEVICE.VirtualMode=CustomHid
|
||||
USB_DEVICE.VirtualModeFS=Custom_Hid_FS
|
||||
VP_RCC_USB.Mode=CRS SYNC Source USB
|
||||
VP_RCC_USB.Signal=RCC_USB
|
||||
VP_SYS_VS_PINREMAP.Mode=PINREMAP
|
||||
VP_SYS_VS_PINREMAP.Signal=SYS_VS_PINREMAP
|
||||
VP_SYS_VS_Systick.Mode=SysTick
|
||||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
||||
VP_USB_DEVICE_VS_USB_DEVICE_CUSTOM_HID_FS.Mode=CUSTOM_HID_FS
|
||||
VP_USB_DEVICE_VS_USB_DEVICE_CUSTOM_HID_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CUSTOM_HID_FS
|
||||
board=custom
|
||||
BIN
mozc-doublesided/firmware/prebuilt/mozc.elf
Executable file
BIN
mozc-doublesided/gerber/main_panel.zip
Normal file
10
mozc-doublesided/gerber/main_panel_bom.csv
Normal file
@@ -0,0 +1,10 @@
|
||||
Designator,Footprint,Quantity,Value,LCSC Part #
|
||||
"C1_9, C1_8, C1_7, C1_6, C1_5, C1_4, C1_3, C1_2, C1",0402,9,0.1u,
|
||||
"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,
|
||||
"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
|
||||
"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
|
||||
"J2_9, J2_8, J2_7, J2_6, J2_5, J2_4, J2_3, J2_2, J2",JST_S8B_ZR,9,Conn_Upstream,C2845571
|
||||
"J3_9, J3_8, J3_7, J3_6, J3_5, J3_4, J3_3, J3_2, J3",JST_S8B_ZR,9,Conn_Downstream,C2845571
|
||||
"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,
|
||||
"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
|
||||
"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
|
||||
|
181
mozc-doublesided/gerber/main_panel_positions.csv
Normal file
@@ -0,0 +1,181 @@
|
||||
Designator,Mid X,Mid Y,Rotation,Layer
|
||||
C1_9,237.26,-84.573,0.0,bottom
|
||||
C1_8,213.26,-84.573,0.0,bottom
|
||||
C1_7,165.26,-84.573,0.0,bottom
|
||||
C1_6,189.26,-84.573,0.0,bottom
|
||||
C1_5,117.26,-84.573,0.0,bottom
|
||||
C1_4,93.26,-84.573,0.0,bottom
|
||||
C1_3,45.26,-84.573,0.0,bottom
|
||||
C1_2,141.26,-84.573,0.0,bottom
|
||||
C1,69.26,-84.573,0.0,bottom
|
||||
CUT1_9,160.0,-90.0,0.0,top
|
||||
CUT1_8,112.0,-90.0,0.0,top
|
||||
CUT1_7,64.0,-90.0,0.0,top
|
||||
CUT1_6,136.0,-90.0,0.0,top
|
||||
CUT1_5,208.0,-90.0,0.0,top
|
||||
CUT1_4,184.0,-90.0,0.0,top
|
||||
CUT1_3,40.0,-90.0,0.0,top
|
||||
CUT1_2,88.0,-90.0,0.0,top
|
||||
CUT1,232.0,-90.0,0.0,top
|
||||
CUT2_9,85.52,-90.0,0.0,top
|
||||
CUT2_8,253.52,-90.0,0.0,top
|
||||
CUT2_7,109.52,-90.0,0.0,top
|
||||
CUT2_6,229.52,-90.0,0.0,top
|
||||
CUT2_5,133.52,-90.0,0.0,top
|
||||
CUT2_4,205.52,-90.0,0.0,top
|
||||
CUT2_3,157.52,-90.0,0.0,top
|
||||
CUT2_2,61.52,-90.0,0.0,top
|
||||
CUT2,181.52,-90.0,0.0,top
|
||||
D1_9,218.96,-66.59,0.0,bottom
|
||||
D1_8,98.96,-66.59,0.0,bottom
|
||||
D1_7,122.96,-66.59,0.0,bottom
|
||||
D1_6,194.96,-66.59,0.0,bottom
|
||||
D1_5,170.96,-66.59,0.0,bottom
|
||||
D1_4,74.96,-66.59,0.0,bottom
|
||||
D1_3,146.96,-66.59,0.0,bottom
|
||||
D1_2,242.96,-66.59,0.0,bottom
|
||||
D1,50.96,-66.59,0.0,bottom
|
||||
D2_9,242.76,-85.99,270.0,bottom
|
||||
D2_8,50.76,-85.99,270.0,bottom
|
||||
D2_7,122.76,-85.99,270.0,bottom
|
||||
D2_6,74.76,-85.99,270.0,bottom
|
||||
D2_5,170.76,-85.99,270.0,bottom
|
||||
D2_4,194.76,-85.99,270.0,bottom
|
||||
D2_3,146.76,-85.99,270.0,bottom
|
||||
D2_2,218.76,-85.99,270.0,bottom
|
||||
D2,98.76,-85.99,270.0,bottom
|
||||
D3_9,218.864,-104.59,0.0,bottom
|
||||
D3_8,98.864,-104.59,0.0,bottom
|
||||
D3_7,194.864,-104.59,0.0,bottom
|
||||
D3_6,122.864,-104.59,0.0,bottom
|
||||
D3_5,74.864,-104.59,0.0,bottom
|
||||
D3_4,50.864,-104.59,0.0,bottom
|
||||
D3_3,170.864,-104.59,0.0,bottom
|
||||
D3_2,242.864,-104.59,0.0,bottom
|
||||
D3,146.864,-104.59,0.0,bottom
|
||||
D4_9,122.864,-123.59,0.0,bottom
|
||||
D4_8,242.864,-123.59,0.0,bottom
|
||||
D4_7,98.864,-123.59,0.0,bottom
|
||||
D4_6,146.864,-123.59,0.0,bottom
|
||||
D4_5,170.864,-123.59,0.0,bottom
|
||||
D4_4,50.864,-123.59,0.0,bottom
|
||||
D4_3,74.864,-123.59,0.0,bottom
|
||||
D4_2,194.864,-123.59,0.0,bottom
|
||||
D4,218.864,-123.59,0.0,bottom
|
||||
D5_9,66.26,-62.49,90.0,bottom
|
||||
D5_8,186.26,-62.49,90.0,bottom
|
||||
D5_7,210.26,-62.49,90.0,bottom
|
||||
D5_6,90.26,-62.49,90.0,bottom
|
||||
D5_5,138.26,-62.49,90.0,bottom
|
||||
D5_4,234.26,-62.49,90.0,bottom
|
||||
D5_3,162.26,-62.49,90.0,bottom
|
||||
D5_2,114.26,-62.49,90.0,bottom
|
||||
D5,42.26,-62.49,90.0,bottom
|
||||
D6_9,186.26,-81.49,90.0,bottom
|
||||
D6_8,210.26,-81.49,90.0,bottom
|
||||
D6_7,234.26,-81.49,90.0,bottom
|
||||
D6_6,42.26,-81.49,90.0,bottom
|
||||
D6_5,162.26,-81.49,90.0,bottom
|
||||
D6_4,90.26,-81.49,90.0,bottom
|
||||
D6_3,66.26,-81.49,90.0,bottom
|
||||
D6_2,114.26,-81.49,90.0,bottom
|
||||
D6,138.26,-81.49,90.0,bottom
|
||||
D7_9,210.96,-99.69,0.0,bottom
|
||||
D7_8,42.96,-99.69,0.0,bottom
|
||||
D7_7,114.96,-99.69,0.0,bottom
|
||||
D7_6,90.96,-99.69,0.0,bottom
|
||||
D7_5,234.96,-99.69,0.0,bottom
|
||||
D7_4,186.96,-99.69,0.0,bottom
|
||||
D7_3,162.96,-99.69,0.0,bottom
|
||||
D7_2,138.96,-99.69,0.0,bottom
|
||||
D7,66.96,-99.69,0.0,bottom
|
||||
D8_9,234.26,-119.49,90.0,bottom
|
||||
D8_8,138.26,-119.49,90.0,bottom
|
||||
D8_7,114.26,-119.49,90.0,bottom
|
||||
D8_6,42.26,-119.49,90.0,bottom
|
||||
D8_5,210.26,-119.49,90.0,bottom
|
||||
D8_4,66.26,-119.49,90.0,bottom
|
||||
D8_3,90.26,-119.49,90.0,bottom
|
||||
D8_2,162.26,-119.49,90.0,bottom
|
||||
D8,186.26,-119.49,90.0,bottom
|
||||
J2_9,58.76,-65.99,270.0,bottom
|
||||
J2_8,250.76,-65.99,270.0,bottom
|
||||
J2_7,222.76,-65.99,270.0,bottom
|
||||
J2_6,154.76,-65.99,270.0,bottom
|
||||
J2_5,82.76,-65.99,270.0,bottom
|
||||
J2_4,202.76,-65.99,270.0,bottom
|
||||
J2_3,178.76,-65.99,270.0,bottom
|
||||
J2_2,106.76,-65.99,270.0,bottom
|
||||
J2,130.76,-65.99,270.0,bottom
|
||||
J3_9,66.76,-107.49,90.0,bottom
|
||||
J3_8,90.76,-107.49,90.0,bottom
|
||||
J3_7,162.76,-107.49,90.0,bottom
|
||||
J3_6,138.76,-107.49,90.0,bottom
|
||||
J3_5,186.76,-107.49,90.0,bottom
|
||||
J3_4,42.76,-107.49,90.0,bottom
|
||||
J3_3,114.76,-107.49,90.0,bottom
|
||||
J3_2,234.76,-107.49,90.0,bottom
|
||||
J3,210.76,-107.49,90.0,bottom
|
||||
R1_9,245.51,-64.24,270.0,bottom
|
||||
R1_8,221.51,-64.24,270.0,bottom
|
||||
R1_7,125.51,-64.24,270.0,bottom
|
||||
R1_6,53.51,-64.24,270.0,bottom
|
||||
R1_5,197.51,-64.24,270.0,bottom
|
||||
R1_4,173.51,-64.24,270.0,bottom
|
||||
R1_3,149.51,-64.24,270.0,bottom
|
||||
R1_2,101.51,-64.24,270.0,bottom
|
||||
R1,77.51,-64.24,270.0,bottom
|
||||
R2_9,45.76,-123.99,0.0,bottom
|
||||
R2_8,93.76,-123.99,0.0,bottom
|
||||
R2_7,117.76,-123.99,0.0,bottom
|
||||
R2_6,141.76,-123.99,0.0,bottom
|
||||
R2_5,69.76,-123.99,0.0,bottom
|
||||
R2_4,237.76,-123.99,0.0,bottom
|
||||
R2_3,213.76,-123.99,0.0,bottom
|
||||
R2_2,165.76,-123.99,0.0,bottom
|
||||
R2,189.76,-123.99,0.0,bottom
|
||||
SW1_9,242.16,-57.6775,180.0,bottom
|
||||
SW1_8,170.16,-57.6775,180.0,bottom
|
||||
SW1_7,98.16,-57.6775,180.0,bottom
|
||||
SW1_6,74.16,-57.6775,180.0,bottom
|
||||
SW1_5,50.16,-57.6775,180.0,bottom
|
||||
SW1_4,122.16,-57.6775,180.0,bottom
|
||||
SW1_3,146.16,-57.6775,180.0,bottom
|
||||
SW1_2,194.16,-57.6775,180.0,bottom
|
||||
SW1,218.16,-57.6775,180.0,bottom
|
||||
SW2_9,218.16,-76.6775,180.0,bottom
|
||||
SW2_8,146.16,-76.6775,180.0,bottom
|
||||
SW2_7,194.16,-76.6775,180.0,bottom
|
||||
SW2_6,74.16,-76.6775,180.0,bottom
|
||||
SW2_5,170.16,-76.6775,180.0,bottom
|
||||
SW2_4,50.16,-76.6775,180.0,bottom
|
||||
SW2_3,242.16,-76.6775,180.0,bottom
|
||||
SW2_2,122.16,-76.6775,180.0,bottom
|
||||
SW2,98.16,-76.6775,180.0,bottom
|
||||
SW3_9,242.24,-95.6775,180.0,bottom
|
||||
SW3_8,122.24,-95.6775,180.0,bottom
|
||||
SW3_7,146.24,-95.6775,180.0,bottom
|
||||
SW3_6,98.24,-95.6775,180.0,bottom
|
||||
SW3_5,218.24,-95.6775,180.0,bottom
|
||||
SW3_4,74.24,-95.6775,180.0,bottom
|
||||
SW3_3,194.24,-95.6775,180.0,bottom
|
||||
SW3_2,50.24,-95.6775,180.0,bottom
|
||||
SW3,170.24,-95.6775,180.0,bottom
|
||||
SW4_9,242.24,-114.6775,180.0,bottom
|
||||
SW4_8,170.24,-114.6775,180.0,bottom
|
||||
SW4_7,122.24,-114.6775,180.0,bottom
|
||||
SW4_6,146.24,-114.6775,180.0,bottom
|
||||
SW4_5,98.24,-114.6775,180.0,bottom
|
||||
SW4_4,74.24,-114.6775,180.0,bottom
|
||||
SW4_3,50.24,-114.6775,180.0,bottom
|
||||
SW4_2,194.24,-114.6775,180.0,bottom
|
||||
SW4,218.24,-114.6775,180.0,bottom
|
||||
U1_9,69.26,-88.9575,0.0,bottom
|
||||
U1_8,237.26,-88.9575,0.0,bottom
|
||||
U1_7,117.26,-88.9575,0.0,bottom
|
||||
U1_6,93.26,-88.9575,0.0,bottom
|
||||
U1_5,141.26,-88.9575,0.0,bottom
|
||||
U1_4,213.26,-88.9575,0.0,bottom
|
||||
U1_3,189.26,-88.9575,0.0,bottom
|
||||
U1_2,45.26,-88.9575,0.0,bottom
|
||||
U1,165.26,-88.9575,0.0,bottom
|
||||
|
BIN
mozc-doublesided/gerber/sub_panel.zip
Normal file
5
mozc-doublesided/gerber/sub_panel_bom.csv
Normal file
@@ -0,0 +1,5 @@
|
||||
Designator,Footprint,Quantity,Value,LCSC Part #
|
||||
"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
|
||||
"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
|
||||
"R2_9, R2_8, R2_7, R2_6, R2_5, R2_4, R2_3, R2_2, R2",0402,9,510,
|
||||
"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
|
||||
|
118
mozc-doublesided/gerber/sub_panel_positions.csv
Normal file
@@ -0,0 +1,118 @@
|
||||
Designator,Mid X,Mid Y,Rotation,Layer
|
||||
D1_9,172.3,-91.4,180.0,bottom
|
||||
D1_8,134.3,-91.4,180.0,bottom
|
||||
D1_7,39.3,-91.4,180.0,bottom
|
||||
D1_6,191.3,-91.4,180.0,bottom
|
||||
D1_5,115.3,-91.4,180.0,bottom
|
||||
D1_4,77.3,-91.4,180.0,bottom
|
||||
D1_3,153.3,-91.4,180.0,bottom
|
||||
D1_2,96.3,-91.4,180.0,bottom
|
||||
D1,58.3,-91.4,180.0,bottom
|
||||
D2_9,77.3,-72.4,180.0,bottom
|
||||
D2_8,172.3,-72.4,180.0,bottom
|
||||
D2_7,134.3,-72.4,180.0,bottom
|
||||
D2_6,191.3,-72.4,180.0,bottom
|
||||
D2_5,115.3,-72.4,180.0,bottom
|
||||
D2_4,96.3,-72.4,180.0,bottom
|
||||
D2_3,39.3,-72.4,180.0,bottom
|
||||
D2_2,153.3,-72.4,180.0,bottom
|
||||
D2,58.3,-72.4,180.0,bottom
|
||||
D3_9,77.396,-53.4,180.0,bottom
|
||||
D3_8,172.396,-53.4,180.0,bottom
|
||||
D3_7,58.396,-53.4,180.0,bottom
|
||||
D3_6,134.396,-53.4,180.0,bottom
|
||||
D3_5,191.396,-53.4,180.0,bottom
|
||||
D3_4,115.396,-53.4,180.0,bottom
|
||||
D3_3,96.396,-53.4,180.0,bottom
|
||||
D3_2,153.396,-53.4,180.0,bottom
|
||||
D3,39.396,-53.4,180.0,bottom
|
||||
D4_9,115.396,-34.4,180.0,bottom
|
||||
D4_8,77.396,-34.4,180.0,bottom
|
||||
D4_7,39.396,-34.4,180.0,bottom
|
||||
D4_6,134.396,-34.4,180.0,bottom
|
||||
D4_5,172.396,-34.4,180.0,bottom
|
||||
D4_4,153.396,-34.4,180.0,bottom
|
||||
D4_3,58.396,-34.4,180.0,bottom
|
||||
D4_2,191.396,-34.4,180.0,bottom
|
||||
D4,96.396,-34.4,180.0,bottom
|
||||
D5_9,86.0,-95.5,270.0,bottom
|
||||
D5_8,181.0,-95.5,270.0,bottom
|
||||
D5_7,143.0,-95.5,270.0,bottom
|
||||
D5_6,200.0,-95.5,270.0,bottom
|
||||
D5_5,67.0,-95.5,270.0,bottom
|
||||
D5_4,105.0,-95.5,270.0,bottom
|
||||
D5_3,48.0,-95.5,270.0,bottom
|
||||
D5_2,124.0,-95.5,270.0,bottom
|
||||
D5,162.0,-95.5,270.0,bottom
|
||||
D6_9,162.0,-76.5,270.0,bottom
|
||||
D6_8,181.0,-76.5,270.0,bottom
|
||||
D6_7,143.0,-76.5,270.0,bottom
|
||||
D6_6,124.0,-76.5,270.0,bottom
|
||||
D6_5,67.0,-76.5,270.0,bottom
|
||||
D6_4,200.0,-76.5,270.0,bottom
|
||||
D6_3,105.0,-76.5,270.0,bottom
|
||||
D6_2,86.0,-76.5,270.0,bottom
|
||||
D6,48.0,-76.5,270.0,bottom
|
||||
D7_9,199.3,-58.3,180.0,bottom
|
||||
D7_8,180.3,-58.3,180.0,bottom
|
||||
D7_7,85.3,-58.3,180.0,bottom
|
||||
D7_6,161.3,-58.3,180.0,bottom
|
||||
D7_5,66.3,-58.3,180.0,bottom
|
||||
D7_4,123.3,-58.3,180.0,bottom
|
||||
D7_3,142.3,-58.3,180.0,bottom
|
||||
D7_2,47.3,-58.3,180.0,bottom
|
||||
D7,104.3,-58.3,180.0,bottom
|
||||
D8_9,200.0,-38.5,270.0,bottom
|
||||
D8_8,105.0,-38.5,270.0,bottom
|
||||
D8_7,67.0,-38.5,270.0,bottom
|
||||
D8_6,48.0,-38.5,270.0,bottom
|
||||
D8_5,181.0,-38.5,270.0,bottom
|
||||
D8_4,86.0,-38.5,270.0,bottom
|
||||
D8_3,162.0,-38.5,270.0,bottom
|
||||
D8_2,124.0,-38.5,270.0,bottom
|
||||
D8,143.0,-38.5,270.0,bottom
|
||||
R2_9,196.5,-34.0,180.0,bottom
|
||||
R2_8,44.5,-34.0,180.0,bottom
|
||||
R2_7,158.5,-34.0,180.0,bottom
|
||||
R2_6,177.5,-34.0,180.0,bottom
|
||||
R2_5,120.5,-34.0,180.0,bottom
|
||||
R2_4,101.5,-34.0,180.0,bottom
|
||||
R2_3,82.5,-34.0,180.0,bottom
|
||||
R2_2,139.5,-34.0,180.0,bottom
|
||||
R2,63.5,-34.0,180.0,bottom
|
||||
SW1_9,59.1,-100.3125,0.0,bottom
|
||||
SW1_8,154.1,-100.3125,0.0,bottom
|
||||
SW1_7,135.1,-100.3125,0.0,bottom
|
||||
SW1_6,78.1,-100.3125,0.0,bottom
|
||||
SW1_5,97.1,-100.3125,0.0,bottom
|
||||
SW1_4,173.1,-100.3125,0.0,bottom
|
||||
SW1_3,40.1,-100.3125,0.0,bottom
|
||||
SW1_2,116.1,-100.3125,0.0,bottom
|
||||
SW1,192.1,-100.3125,0.0,bottom
|
||||
SW2_9,116.1,-81.3125,0.0,bottom
|
||||
SW2_8,78.1,-81.3125,0.0,bottom
|
||||
SW2_7,173.1,-81.3125,0.0,bottom
|
||||
SW2_6,40.1,-81.3125,0.0,bottom
|
||||
SW2_5,135.1,-81.3125,0.0,bottom
|
||||
SW2_4,97.1,-81.3125,0.0,bottom
|
||||
SW2_3,154.1,-81.3125,0.0,bottom
|
||||
SW2_2,59.1,-81.3125,0.0,bottom
|
||||
SW2,192.1,-81.3125,0.0,bottom
|
||||
SW3_9,40.02,-62.3125,0.0,bottom
|
||||
SW3_8,59.02,-62.3125,0.0,bottom
|
||||
SW3_7,154.02,-62.3125,0.0,bottom
|
||||
SW3_6,97.02,-62.3125,0.0,bottom
|
||||
SW3_5,173.02,-62.3125,0.0,bottom
|
||||
SW3_4,135.02,-62.3125,0.0,bottom
|
||||
SW3_3,78.02,-62.3125,0.0,bottom
|
||||
SW3_2,116.02,-62.3125,0.0,bottom
|
||||
SW3,192.02,-62.3125,0.0,bottom
|
||||
SW4_9,78.02,-43.3125,0.0,bottom
|
||||
SW4_8,59.02,-43.3125,0.0,bottom
|
||||
SW4_7,192.02,-43.3125,0.0,bottom
|
||||
SW4_6,116.02,-43.3125,0.0,bottom
|
||||
SW4_5,173.02,-43.3125,0.0,bottom
|
||||
SW4_4,40.02,-43.3125,0.0,bottom
|
||||
SW4_3,154.02,-43.3125,0.0,bottom
|
||||
SW4_2,135.02,-43.3125,0.0,bottom
|
||||
SW4,97.02,-43.3125,0.0,bottom
|
||||
|
BIN
mozc-doublesided/gerber/usb.zip
Normal file
10
mozc-doublesided/gerber/usb_bom.csv
Normal file
@@ -0,0 +1,10 @@
|
||||
Designator,Footprint,Quantity,Value,LCSC Part #
|
||||
C1,0402,1,10u,
|
||||
C2,0402,1,2.2u,
|
||||
"C3, C4",0402,2,47p,
|
||||
J1,JST_S7B_ZR,1,JST_ZH_7P,C160734
|
||||
J2,USB_C_Receptacle_XKB_U262-16XN-4BVC11,1,USB,
|
||||
"R1, R2",0402,2,5.1K,
|
||||
"R3, R4",0402,2,22,
|
||||
R5,0402,1,1.5K,
|
||||
U1,SOT-223-3_TabPin2,1,AMS1117-3.3,C347222
|
||||
|
13
mozc-doublesided/gerber/usb_positions.csv
Normal file
@@ -0,0 +1,13 @@
|
||||
Designator,Mid X,Mid Y,Rotation,Layer
|
||||
C1,29.22,-34.47,0.0,top
|
||||
C2,33.27,-35.76,180.0,top
|
||||
C3,36.15,-39.65,270.0,top
|
||||
C4,36.15,-41.55,270.0,top
|
||||
J1,32.0,-48.5,0.0,top
|
||||
J2,32.01,-29.145,180.0,top
|
||||
R1,27.3,-35.55,0.0,top
|
||||
R2,27.31,-34.47,0.0,top
|
||||
R3,37.15,-41.55,270.0,top
|
||||
R4,37.15,-39.65,90.0,top
|
||||
R5,27.7,-44.1,90.0,top
|
||||
U1,32.0,-40.65,90.0,top
|
||||
|
BIN
mozc-doublesided/images/connect_boards.png
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
mozc-doublesided/images/connections.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
mozc-doublesided/images/header.webp
Normal file
|
After Width: | Height: | Size: 312 KiB |
BIN
mozc-doublesided/images/pairing_case.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
mozc-doublesided/images/pairing_helper.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
mozc-doublesided/images/pcb_pair.png
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
mozc-doublesided/images/pcb_primary.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
mozc-doublesided/images/pcb_swd.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
mozc-doublesided/images/primary_case.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
mozc-doublesided/images/primary_usb.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |