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>
This commit is contained in:
Takashi Toyoshima
2024-09-19 16:07:44 +09:00
parent f803ba8751
commit 65db5df370
115 changed files with 233230 additions and 26 deletions

269
mozc-doublesided/README.md Normal file
View 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.
![Gboard double sided version](./images/header.webp)
## 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.
![Required SWD and power pins](./images/pcb_swd.png)
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
![Primary A Type Board Modifications Points](./images/pcb_primary.png)
**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.
![Pairing A type board and B type boards](./images/pcb_pair.png)
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.
![Pairing with actual case](./images/pairing_case.webp)
![Pairing with helper case](./images/pairing_helper.webp)
#### Step 3: Insert PCB to case
**Primary A/B Pair Module**
Connect the primary module and the USB board.
![Connect Primary and USB board](./images/primary_usb.webp)
Insert the USB board into case 0.
![Insert USB board to the case](./images/usb_case.webp)
**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.
![Insert the pair board into the case](./images/primary_case.webp)
#### 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.
![Connect boards](./images/connect_boards.png)
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.
![Connections](./images/connections.png)
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.

View File

@@ -0,0 +1,238 @@
# Gboard 両面バージョン
このディレクトリは 2024 年 10 月 1 日にリリースされた Gboard 両面バージョンの設計データとファームウエアを含んでいます。
Gboard 両面バージョンは正式な Google 製品ではありません。
![Gboard double sided version](./images/header.webp)
## 内容
このディレクトリには以下の物が含まれています。
- case/ : ケース用のSTLファイル
- board/ : KiCad用の回路図と基板のレイアウトデータ
- firmware/ : STM32CubeIDE向けファームウェア開発リソース一式
- gerber/ : 基板製造用ガーバーデータと組み立て用の配置情報
## Gboard 両面バージョンの制作
### 部品
- 組み立て済みAタイプ基板: 26個プライマリ基板1枚を含む - 下記の部品表を参照
- 組み立て済みBタイプ基板: 26個プライマリ基板1枚を含む - 下記の部品表を参照
- USB基板: 1個 - 下記の部品表を参照
- ケーブルAJST ZH 1.5mmピッチ 8ピン 100mm長 ストレート結線 両面メス): 25個
- ケーブルBJST 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)
を使って設定やファームウェアの書き込みを行えます。 コネクタ等は用意されていない生の端子なので、きちんと接触するように注意しながら書き込みます。
![必要となるSWDと電源関連のピン](./images/pcb_swd.png)
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タイプ基板変更箇所](./images/pcb_primary.png)
**A/Bボードペアモジュールの作成**
26対のAタイプ基板、Bタイプ基板のペアモジュールを作成する必要があります。 下図のように、`P Connector``S
connector`それぞれ同じコネクタ同士を1x4のピンヘッダで連結します。
この最、`IN`と書かれた基板面がそれぞれ内側を向くように注意しましょう。
![AタイプとBタイプの基板を連結する](./images/pcb_pair.png)
また、基板の距離がケースにフィットするよう適切に調整されている必要があります。 この作業用の特別なケースを3Dプリントして用いると効率的に作業できます。
実際のケースを使って確認しながら作業する事も可能です。
![実際のケースを使って](./images/pairing_case.webp)
![作業用ケースを使って](./images/pairing_helper.webp)
#### ステップ3: 基板をケースに入れる
**プライマリモジュール固有の作業**
まず、プライマリモジュールとUSB基板をケーブルで接続します。
![プライマリモジュールとUSB基板の接続](./images/primary_usb.webp)
次にUSB基板を0番のケースに格納します。
![USB基板をケースに格納](./images/usb_case.webp)
**全てのモジュール共通の作業**
全てのペアモジュールを0から25番のケースにそれぞれ格納します。 Aタイプ基板が常に下側になるよう気をつけます。
![ペアモジュールをケースに格納](./images/primary_case.webp)
#### ステップ4: ケース同士を連結する
`UP`端子と`DOWN`端子の対をケーブルで接続していきます。 同じ端子同士を誤って接続しないよう注意して下さい。
電源を入れた時にショートによりチップが焼け焦げる事になります。 (匂いや煙に気づいたら直ぐに電源を抜けば壊れずに済むことも多いです)
![基板の接続](./images/connect_boards.png)
次の全体図を参考にしてください。 最初のモジュール0と最後のモジュール25は接続されていない事に注意します。
また、この図は簡単のために本来発生する「ねじれ」を考慮した図になっていません。 実際に組み立てた際にはモジュール25は上下逆さの向きになります。
![連結](./images/connections.png)
ネジを使って各ボード間をしっかり固定してください。
### ファームウェア
#### ステップ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)ファイルを参照してください

View 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)
)
)
)
)
)
)
)

View 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")
)
)

View 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")
)
)

View 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")
)
)

View 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")
)
)

View File

@@ -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")
)
)

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

View 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": []
}
}

View 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": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
)

View File

@@ -0,0 +1 @@
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}

File diff suppressed because it is too large Load Diff

View 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": []
}
}

View 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": {}
}

View File

@@ -0,0 +1,5 @@
(kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
(paper "A4")
(lib_symbols)
(symbol_instances)
)

View File

@@ -0,0 +1 @@
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

View 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": []
}
}

View 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": {}
}

File diff suppressed because it is too large Load Diff

View 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)
)
)
)

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
)

View File

@@ -0,0 +1 @@
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": true, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}

File diff suppressed because it is too large Load Diff

View 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": []
}
}

View 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": {}
}

View File

@@ -0,0 +1,5 @@
(kicad_sch (version 20231120) (generator "eeschema") (generator_version "8.0")
(paper "A4")
(lib_symbols)
(symbol_instances)
)

View File

@@ -0,0 +1 @@
{"EXTRA_LAYERS": "", "EXTEND_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": true}

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.pretty")(options "")(descr ""))
)

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "Library")(type "KiCad")(uri "${KIPRJMOD}/../Library.kicad_sym")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

View 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": []
}
}

View 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": {}
}

File diff suppressed because it is too large Load Diff

View 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)
)
)
)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View 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>

View 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
)

View 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_

View 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_

View 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_

View 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_

View 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; }

View 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();
}
}

View 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);
}

View 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(); }

View 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) }
}

View 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

View 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

Binary file not shown.

Binary file not shown.

View 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
1 Designator Footprint Quantity Value LCSC Part #
2 C1_9, C1_8, C1_7, C1_6, C1_5, C1_4, C1_3, C1_2, C1 0402 9 0.1u
3 CUT1_9, CUT1_8, CUT1_7, CUT1_6, CUT1_5, CUT1_4, CUT1_3, CUT1_2, CUT1, CUT2_9, CUT2_8, CUT2_7, CUT2_6, CUT2_5, CUT2_4, CUT2_3, CUT2_2, CUT2 CUT 18 CUT
4 D1_9, D1_8, D1_7, D1_6, D1_5, D1_4, D1_3, D1_2, D1, D2_9, D2_8, D2_7, D2_6, D2_5, D2_4, D2_3, D2_2, D2, D3_9, D3_8, D3_7, D3_6, D3_5, D3_4, D3_3, D3_2, D3, D4_9, D4_8, D4_7, D4_6, D4_5, D4_4, D4_3, D4_2, D4 SK6812MINIe (Reverse) 36 SK6812MINIe C5149201
5 D5_9, D5_8, D5_7, D5_6, D5_5, D5_4, D5_3, D5_2, D5, D6_9, D6_8, D6_7, D6_6, D6_5, D6_4, D6_3, D6_2, D6, D7_9, D7_8, D7_7, D7_6, D7_5, D7_4, D7_3, D7_2, D7, D8_9, D8_8, D8_7, D8_6, D8_5, D8_4, D8_3, D8_2, D8 0805 36 D C109001
6 J2_9, J2_8, J2_7, J2_6, J2_5, J2_4, J2_3, J2_2, J2 JST_S8B_ZR 9 Conn_Upstream C2845571
7 J3_9, J3_8, J3_7, J3_6, J3_5, J3_4, J3_3, J3_2, J3 JST_S8B_ZR 9 Conn_Downstream C2845571
8 R1_9, R1_8, R1_7, R1_6, R1_5, R1_4, R1_3, R1_2, R1, R2_9, R2_8, R2_7, R2_6, R2_5, R2_4, R2_3, R2_2, R2 0402 18 510
9 SW1_9, SW1_8, SW1_7, SW1_6, SW1_5, SW1_4, SW1_3, SW1_2, SW1, SW2_9, SW2_8, SW2_7, SW2_6, SW2_5, SW2_4, SW2_3, SW2_2, SW2, SW3_9, SW3_8, SW3_7, SW3_6, SW3_5, SW3_4, SW3_3, SW3_2, SW3, SW4_9, SW4_8, SW4_7, SW4_6, SW4_5, SW4_4, SW4_3, SW4_2, SW4 Keyswitch 36 SW_Push C5184526
10 U1_9, U1_8, U1_7, U1_6, U1_5, U1_4, U1_3, U1_2, U1 TSSOP-20_4.4x6.5mm_P0.65mm 9 STM32F042F4Px C81002

View 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
1 Designator Mid X Mid Y Rotation Layer
2 C1_9 237.26 -84.573 0.0 bottom
3 C1_8 213.26 -84.573 0.0 bottom
4 C1_7 165.26 -84.573 0.0 bottom
5 C1_6 189.26 -84.573 0.0 bottom
6 C1_5 117.26 -84.573 0.0 bottom
7 C1_4 93.26 -84.573 0.0 bottom
8 C1_3 45.26 -84.573 0.0 bottom
9 C1_2 141.26 -84.573 0.0 bottom
10 C1 69.26 -84.573 0.0 bottom
11 CUT1_9 160.0 -90.0 0.0 top
12 CUT1_8 112.0 -90.0 0.0 top
13 CUT1_7 64.0 -90.0 0.0 top
14 CUT1_6 136.0 -90.0 0.0 top
15 CUT1_5 208.0 -90.0 0.0 top
16 CUT1_4 184.0 -90.0 0.0 top
17 CUT1_3 40.0 -90.0 0.0 top
18 CUT1_2 88.0 -90.0 0.0 top
19 CUT1 232.0 -90.0 0.0 top
20 CUT2_9 85.52 -90.0 0.0 top
21 CUT2_8 253.52 -90.0 0.0 top
22 CUT2_7 109.52 -90.0 0.0 top
23 CUT2_6 229.52 -90.0 0.0 top
24 CUT2_5 133.52 -90.0 0.0 top
25 CUT2_4 205.52 -90.0 0.0 top
26 CUT2_3 157.52 -90.0 0.0 top
27 CUT2_2 61.52 -90.0 0.0 top
28 CUT2 181.52 -90.0 0.0 top
29 D1_9 218.96 -66.59 0.0 bottom
30 D1_8 98.96 -66.59 0.0 bottom
31 D1_7 122.96 -66.59 0.0 bottom
32 D1_6 194.96 -66.59 0.0 bottom
33 D1_5 170.96 -66.59 0.0 bottom
34 D1_4 74.96 -66.59 0.0 bottom
35 D1_3 146.96 -66.59 0.0 bottom
36 D1_2 242.96 -66.59 0.0 bottom
37 D1 50.96 -66.59 0.0 bottom
38 D2_9 242.76 -85.99 270.0 bottom
39 D2_8 50.76 -85.99 270.0 bottom
40 D2_7 122.76 -85.99 270.0 bottom
41 D2_6 74.76 -85.99 270.0 bottom
42 D2_5 170.76 -85.99 270.0 bottom
43 D2_4 194.76 -85.99 270.0 bottom
44 D2_3 146.76 -85.99 270.0 bottom
45 D2_2 218.76 -85.99 270.0 bottom
46 D2 98.76 -85.99 270.0 bottom
47 D3_9 218.864 -104.59 0.0 bottom
48 D3_8 98.864 -104.59 0.0 bottom
49 D3_7 194.864 -104.59 0.0 bottom
50 D3_6 122.864 -104.59 0.0 bottom
51 D3_5 74.864 -104.59 0.0 bottom
52 D3_4 50.864 -104.59 0.0 bottom
53 D3_3 170.864 -104.59 0.0 bottom
54 D3_2 242.864 -104.59 0.0 bottom
55 D3 146.864 -104.59 0.0 bottom
56 D4_9 122.864 -123.59 0.0 bottom
57 D4_8 242.864 -123.59 0.0 bottom
58 D4_7 98.864 -123.59 0.0 bottom
59 D4_6 146.864 -123.59 0.0 bottom
60 D4_5 170.864 -123.59 0.0 bottom
61 D4_4 50.864 -123.59 0.0 bottom
62 D4_3 74.864 -123.59 0.0 bottom
63 D4_2 194.864 -123.59 0.0 bottom
64 D4 218.864 -123.59 0.0 bottom
65 D5_9 66.26 -62.49 90.0 bottom
66 D5_8 186.26 -62.49 90.0 bottom
67 D5_7 210.26 -62.49 90.0 bottom
68 D5_6 90.26 -62.49 90.0 bottom
69 D5_5 138.26 -62.49 90.0 bottom
70 D5_4 234.26 -62.49 90.0 bottom
71 D5_3 162.26 -62.49 90.0 bottom
72 D5_2 114.26 -62.49 90.0 bottom
73 D5 42.26 -62.49 90.0 bottom
74 D6_9 186.26 -81.49 90.0 bottom
75 D6_8 210.26 -81.49 90.0 bottom
76 D6_7 234.26 -81.49 90.0 bottom
77 D6_6 42.26 -81.49 90.0 bottom
78 D6_5 162.26 -81.49 90.0 bottom
79 D6_4 90.26 -81.49 90.0 bottom
80 D6_3 66.26 -81.49 90.0 bottom
81 D6_2 114.26 -81.49 90.0 bottom
82 D6 138.26 -81.49 90.0 bottom
83 D7_9 210.96 -99.69 0.0 bottom
84 D7_8 42.96 -99.69 0.0 bottom
85 D7_7 114.96 -99.69 0.0 bottom
86 D7_6 90.96 -99.69 0.0 bottom
87 D7_5 234.96 -99.69 0.0 bottom
88 D7_4 186.96 -99.69 0.0 bottom
89 D7_3 162.96 -99.69 0.0 bottom
90 D7_2 138.96 -99.69 0.0 bottom
91 D7 66.96 -99.69 0.0 bottom
92 D8_9 234.26 -119.49 90.0 bottom
93 D8_8 138.26 -119.49 90.0 bottom
94 D8_7 114.26 -119.49 90.0 bottom
95 D8_6 42.26 -119.49 90.0 bottom
96 D8_5 210.26 -119.49 90.0 bottom
97 D8_4 66.26 -119.49 90.0 bottom
98 D8_3 90.26 -119.49 90.0 bottom
99 D8_2 162.26 -119.49 90.0 bottom
100 D8 186.26 -119.49 90.0 bottom
101 J2_9 58.76 -65.99 270.0 bottom
102 J2_8 250.76 -65.99 270.0 bottom
103 J2_7 222.76 -65.99 270.0 bottom
104 J2_6 154.76 -65.99 270.0 bottom
105 J2_5 82.76 -65.99 270.0 bottom
106 J2_4 202.76 -65.99 270.0 bottom
107 J2_3 178.76 -65.99 270.0 bottom
108 J2_2 106.76 -65.99 270.0 bottom
109 J2 130.76 -65.99 270.0 bottom
110 J3_9 66.76 -107.49 90.0 bottom
111 J3_8 90.76 -107.49 90.0 bottom
112 J3_7 162.76 -107.49 90.0 bottom
113 J3_6 138.76 -107.49 90.0 bottom
114 J3_5 186.76 -107.49 90.0 bottom
115 J3_4 42.76 -107.49 90.0 bottom
116 J3_3 114.76 -107.49 90.0 bottom
117 J3_2 234.76 -107.49 90.0 bottom
118 J3 210.76 -107.49 90.0 bottom
119 R1_9 245.51 -64.24 270.0 bottom
120 R1_8 221.51 -64.24 270.0 bottom
121 R1_7 125.51 -64.24 270.0 bottom
122 R1_6 53.51 -64.24 270.0 bottom
123 R1_5 197.51 -64.24 270.0 bottom
124 R1_4 173.51 -64.24 270.0 bottom
125 R1_3 149.51 -64.24 270.0 bottom
126 R1_2 101.51 -64.24 270.0 bottom
127 R1 77.51 -64.24 270.0 bottom
128 R2_9 45.76 -123.99 0.0 bottom
129 R2_8 93.76 -123.99 0.0 bottom
130 R2_7 117.76 -123.99 0.0 bottom
131 R2_6 141.76 -123.99 0.0 bottom
132 R2_5 69.76 -123.99 0.0 bottom
133 R2_4 237.76 -123.99 0.0 bottom
134 R2_3 213.76 -123.99 0.0 bottom
135 R2_2 165.76 -123.99 0.0 bottom
136 R2 189.76 -123.99 0.0 bottom
137 SW1_9 242.16 -57.6775 180.0 bottom
138 SW1_8 170.16 -57.6775 180.0 bottom
139 SW1_7 98.16 -57.6775 180.0 bottom
140 SW1_6 74.16 -57.6775 180.0 bottom
141 SW1_5 50.16 -57.6775 180.0 bottom
142 SW1_4 122.16 -57.6775 180.0 bottom
143 SW1_3 146.16 -57.6775 180.0 bottom
144 SW1_2 194.16 -57.6775 180.0 bottom
145 SW1 218.16 -57.6775 180.0 bottom
146 SW2_9 218.16 -76.6775 180.0 bottom
147 SW2_8 146.16 -76.6775 180.0 bottom
148 SW2_7 194.16 -76.6775 180.0 bottom
149 SW2_6 74.16 -76.6775 180.0 bottom
150 SW2_5 170.16 -76.6775 180.0 bottom
151 SW2_4 50.16 -76.6775 180.0 bottom
152 SW2_3 242.16 -76.6775 180.0 bottom
153 SW2_2 122.16 -76.6775 180.0 bottom
154 SW2 98.16 -76.6775 180.0 bottom
155 SW3_9 242.24 -95.6775 180.0 bottom
156 SW3_8 122.24 -95.6775 180.0 bottom
157 SW3_7 146.24 -95.6775 180.0 bottom
158 SW3_6 98.24 -95.6775 180.0 bottom
159 SW3_5 218.24 -95.6775 180.0 bottom
160 SW3_4 74.24 -95.6775 180.0 bottom
161 SW3_3 194.24 -95.6775 180.0 bottom
162 SW3_2 50.24 -95.6775 180.0 bottom
163 SW3 170.24 -95.6775 180.0 bottom
164 SW4_9 242.24 -114.6775 180.0 bottom
165 SW4_8 170.24 -114.6775 180.0 bottom
166 SW4_7 122.24 -114.6775 180.0 bottom
167 SW4_6 146.24 -114.6775 180.0 bottom
168 SW4_5 98.24 -114.6775 180.0 bottom
169 SW4_4 74.24 -114.6775 180.0 bottom
170 SW4_3 50.24 -114.6775 180.0 bottom
171 SW4_2 194.24 -114.6775 180.0 bottom
172 SW4 218.24 -114.6775 180.0 bottom
173 U1_9 69.26 -88.9575 0.0 bottom
174 U1_8 237.26 -88.9575 0.0 bottom
175 U1_7 117.26 -88.9575 0.0 bottom
176 U1_6 93.26 -88.9575 0.0 bottom
177 U1_5 141.26 -88.9575 0.0 bottom
178 U1_4 213.26 -88.9575 0.0 bottom
179 U1_3 189.26 -88.9575 0.0 bottom
180 U1_2 45.26 -88.9575 0.0 bottom
181 U1 165.26 -88.9575 0.0 bottom

Binary file not shown.

View 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
1 Designator Footprint Quantity Value LCSC Part #
2 D1_9, D1_8, D1_7, D1_6, D1_5, D1_4, D1_3, D1_2, D1, D2_9, D2_8, D2_7, D2_6, D2_5, D2_4, D2_3, D2_2, D2, D3_9, D3_8, D3_7, D3_6, D3_5, D3_4, D3_3, D3_2, D3, D4_9, D4_8, D4_7, D4_6, D4_5, D4_4, D4_3, D4_2, D4 SK6812MINIe (Reverse) 36 SK6812MINIe C5149201
3 D5_9, D5_8, D5_7, D5_6, D5_5, D5_4, D5_3, D5_2, D5, D6_9, D6_8, D6_7, D6_6, D6_5, D6_4, D6_3, D6_2, D6, D7_9, D7_8, D7_7, D7_6, D7_5, D7_4, D7_3, D7_2, D7, D8_9, D8_8, D8_7, D8_6, D8_5, D8_4, D8_3, D8_2, D8 0805 36 D C109001
4 R2_9, R2_8, R2_7, R2_6, R2_5, R2_4, R2_3, R2_2, R2 0402 9 510
5 SW1_9, SW1_8, SW1_7, SW1_6, SW1_5, SW1_4, SW1_3, SW1_2, SW1, SW2_9, SW2_8, SW2_7, SW2_6, SW2_5, SW2_4, SW2_3, SW2_2, SW2, SW3_9, SW3_8, SW3_7, SW3_6, SW3_5, SW3_4, SW3_3, SW3_2, SW3, SW4_9, SW4_8, SW4_7, SW4_6, SW4_5, SW4_4, SW4_3, SW4_2, SW4 Keyswitch 36 SW_Push C5184526

View 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
1 Designator Mid X Mid Y Rotation Layer
2 D1_9 172.3 -91.4 180.0 bottom
3 D1_8 134.3 -91.4 180.0 bottom
4 D1_7 39.3 -91.4 180.0 bottom
5 D1_6 191.3 -91.4 180.0 bottom
6 D1_5 115.3 -91.4 180.0 bottom
7 D1_4 77.3 -91.4 180.0 bottom
8 D1_3 153.3 -91.4 180.0 bottom
9 D1_2 96.3 -91.4 180.0 bottom
10 D1 58.3 -91.4 180.0 bottom
11 D2_9 77.3 -72.4 180.0 bottom
12 D2_8 172.3 -72.4 180.0 bottom
13 D2_7 134.3 -72.4 180.0 bottom
14 D2_6 191.3 -72.4 180.0 bottom
15 D2_5 115.3 -72.4 180.0 bottom
16 D2_4 96.3 -72.4 180.0 bottom
17 D2_3 39.3 -72.4 180.0 bottom
18 D2_2 153.3 -72.4 180.0 bottom
19 D2 58.3 -72.4 180.0 bottom
20 D3_9 77.396 -53.4 180.0 bottom
21 D3_8 172.396 -53.4 180.0 bottom
22 D3_7 58.396 -53.4 180.0 bottom
23 D3_6 134.396 -53.4 180.0 bottom
24 D3_5 191.396 -53.4 180.0 bottom
25 D3_4 115.396 -53.4 180.0 bottom
26 D3_3 96.396 -53.4 180.0 bottom
27 D3_2 153.396 -53.4 180.0 bottom
28 D3 39.396 -53.4 180.0 bottom
29 D4_9 115.396 -34.4 180.0 bottom
30 D4_8 77.396 -34.4 180.0 bottom
31 D4_7 39.396 -34.4 180.0 bottom
32 D4_6 134.396 -34.4 180.0 bottom
33 D4_5 172.396 -34.4 180.0 bottom
34 D4_4 153.396 -34.4 180.0 bottom
35 D4_3 58.396 -34.4 180.0 bottom
36 D4_2 191.396 -34.4 180.0 bottom
37 D4 96.396 -34.4 180.0 bottom
38 D5_9 86.0 -95.5 270.0 bottom
39 D5_8 181.0 -95.5 270.0 bottom
40 D5_7 143.0 -95.5 270.0 bottom
41 D5_6 200.0 -95.5 270.0 bottom
42 D5_5 67.0 -95.5 270.0 bottom
43 D5_4 105.0 -95.5 270.0 bottom
44 D5_3 48.0 -95.5 270.0 bottom
45 D5_2 124.0 -95.5 270.0 bottom
46 D5 162.0 -95.5 270.0 bottom
47 D6_9 162.0 -76.5 270.0 bottom
48 D6_8 181.0 -76.5 270.0 bottom
49 D6_7 143.0 -76.5 270.0 bottom
50 D6_6 124.0 -76.5 270.0 bottom
51 D6_5 67.0 -76.5 270.0 bottom
52 D6_4 200.0 -76.5 270.0 bottom
53 D6_3 105.0 -76.5 270.0 bottom
54 D6_2 86.0 -76.5 270.0 bottom
55 D6 48.0 -76.5 270.0 bottom
56 D7_9 199.3 -58.3 180.0 bottom
57 D7_8 180.3 -58.3 180.0 bottom
58 D7_7 85.3 -58.3 180.0 bottom
59 D7_6 161.3 -58.3 180.0 bottom
60 D7_5 66.3 -58.3 180.0 bottom
61 D7_4 123.3 -58.3 180.0 bottom
62 D7_3 142.3 -58.3 180.0 bottom
63 D7_2 47.3 -58.3 180.0 bottom
64 D7 104.3 -58.3 180.0 bottom
65 D8_9 200.0 -38.5 270.0 bottom
66 D8_8 105.0 -38.5 270.0 bottom
67 D8_7 67.0 -38.5 270.0 bottom
68 D8_6 48.0 -38.5 270.0 bottom
69 D8_5 181.0 -38.5 270.0 bottom
70 D8_4 86.0 -38.5 270.0 bottom
71 D8_3 162.0 -38.5 270.0 bottom
72 D8_2 124.0 -38.5 270.0 bottom
73 D8 143.0 -38.5 270.0 bottom
74 R2_9 196.5 -34.0 180.0 bottom
75 R2_8 44.5 -34.0 180.0 bottom
76 R2_7 158.5 -34.0 180.0 bottom
77 R2_6 177.5 -34.0 180.0 bottom
78 R2_5 120.5 -34.0 180.0 bottom
79 R2_4 101.5 -34.0 180.0 bottom
80 R2_3 82.5 -34.0 180.0 bottom
81 R2_2 139.5 -34.0 180.0 bottom
82 R2 63.5 -34.0 180.0 bottom
83 SW1_9 59.1 -100.3125 0.0 bottom
84 SW1_8 154.1 -100.3125 0.0 bottom
85 SW1_7 135.1 -100.3125 0.0 bottom
86 SW1_6 78.1 -100.3125 0.0 bottom
87 SW1_5 97.1 -100.3125 0.0 bottom
88 SW1_4 173.1 -100.3125 0.0 bottom
89 SW1_3 40.1 -100.3125 0.0 bottom
90 SW1_2 116.1 -100.3125 0.0 bottom
91 SW1 192.1 -100.3125 0.0 bottom
92 SW2_9 116.1 -81.3125 0.0 bottom
93 SW2_8 78.1 -81.3125 0.0 bottom
94 SW2_7 173.1 -81.3125 0.0 bottom
95 SW2_6 40.1 -81.3125 0.0 bottom
96 SW2_5 135.1 -81.3125 0.0 bottom
97 SW2_4 97.1 -81.3125 0.0 bottom
98 SW2_3 154.1 -81.3125 0.0 bottom
99 SW2_2 59.1 -81.3125 0.0 bottom
100 SW2 192.1 -81.3125 0.0 bottom
101 SW3_9 40.02 -62.3125 0.0 bottom
102 SW3_8 59.02 -62.3125 0.0 bottom
103 SW3_7 154.02 -62.3125 0.0 bottom
104 SW3_6 97.02 -62.3125 0.0 bottom
105 SW3_5 173.02 -62.3125 0.0 bottom
106 SW3_4 135.02 -62.3125 0.0 bottom
107 SW3_3 78.02 -62.3125 0.0 bottom
108 SW3_2 116.02 -62.3125 0.0 bottom
109 SW3 192.02 -62.3125 0.0 bottom
110 SW4_9 78.02 -43.3125 0.0 bottom
111 SW4_8 59.02 -43.3125 0.0 bottom
112 SW4_7 192.02 -43.3125 0.0 bottom
113 SW4_6 116.02 -43.3125 0.0 bottom
114 SW4_5 173.02 -43.3125 0.0 bottom
115 SW4_4 40.02 -43.3125 0.0 bottom
116 SW4_3 154.02 -43.3125 0.0 bottom
117 SW4_2 135.02 -43.3125 0.0 bottom
118 SW4 97.02 -43.3125 0.0 bottom

Binary file not shown.

View 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
1 Designator Footprint Quantity Value LCSC Part #
2 C1 0402 1 10u
3 C2 0402 1 2.2u
4 C3, C4 0402 2 47p
5 J1 JST_S7B_ZR 1 JST_ZH_7P C160734
6 J2 USB_C_Receptacle_XKB_U262-16XN-4BVC11 1 USB
7 R1, R2 0402 2 5.1K
8 R3, R4 0402 2 22
9 R5 0402 1 1.5K
10 U1 SOT-223-3_TabPin2 1 AMS1117-3.3 C347222

View 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
1 Designator Mid X Mid Y Rotation Layer
2 C1 29.22 -34.47 0.0 top
3 C2 33.27 -35.76 180.0 top
4 C3 36.15 -39.65 270.0 top
5 C4 36.15 -41.55 270.0 top
6 J1 32.0 -48.5 0.0 top
7 J2 32.01 -29.145 180.0 top
8 R1 27.3 -35.55 0.0 top
9 R2 27.31 -34.47 0.0 top
10 R3 37.15 -41.55 270.0 top
11 R4 37.15 -39.65 90.0 top
12 R5 27.7 -44.1 90.0 top
13 U1 32.0 -40.65 90.0 top

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

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