├── .gitignore
├── ESP32-SIDView.ino
├── LICENSE
├── README.md
├── img
├── ESP32-SIDViewer.png
├── HVSC_Search.dia
├── HVSC_Search.png
├── HVSC_Search.svg
├── SID32x11.png
├── SID32x8.png
├── SIDFile.jpeg
├── TOBOSID.png
├── acoustic-coupler-70x26.jpg
├── acoustic-coupler-70x26.png
├── acoustic-coupler-88x26-1.png
├── acoustic-coupler-88x26.png
├── amigaball_16x16.jpg
├── dl_8x8.jpg
├── dotted-square-8x8.jpg
├── espressif-commodore.png
├── header128x32.jpg
├── header48x12.jpg
├── header64x16.jpg
├── icondisk.jpg
├── iconfolder1.jpg
├── iconfolder2.jpg
├── iconinfo.jpg
├── iconlist.jpg
├── iconloop.jpg
├── iconpage.jpg
├── iconrandom.jpg
├── iconsidfile-8bit.png
├── iconsidfile.jpg
├── iconsidfile.png
├── icontool.jpg
├── icontool.png
├── iconup.jpg
├── insertdisk.jpg
├── insertdisk.png
├── noise.jpg
├── pulse.jpg
├── sawtooth.jpg
├── screenshot.jpg
├── sid-player-deepsid-resized.mp4
├── sid-player-deepsid.mp4
├── single.jpg
├── soundoff.jpg
├── soundoff.png
└── triangle.jpg
├── pcb
├── v1
│ ├── WbkPkpG.png
│ ├── breadboard.jpeg
│ ├── daughterboard.png
│ ├── esp32-FPGA-SID-perfboard-WIP_circuit imprimé.png
│ ├── esp32-FPGA-SID-perfboard.fzz
│ ├── esp32-FPGA-SID-perfboard_contour.gm1
│ ├── esp32-FPGA-SID-perfboard_copperBottom.gbl
│ ├── esp32-FPGA-SID-perfboard_copperTop.gtl
│ ├── esp32-FPGA-SID-perfboard_drill.txt
│ ├── esp32-FPGA-SID-perfboard_maskBottom.gbs
│ ├── esp32-FPGA-SID-perfboard_maskTop.gts
│ ├── esp32-FPGA-SID-perfboard_netlist.xml
│ ├── esp32-FPGA-SID-perfboard_pasteMaskTop.gtp
│ ├── esp32-FPGA-SID-perfboard_pnp.txt
│ ├── esp32-FPGA-SID-perfboard_schéma.svg
│ ├── esp32-FPGA-SID-perfboard_silkBottom.gbo
│ ├── esp32-FPGA-SID-perfboard_silkTop.gto
│ ├── esp32-FPGA-SID-perfboard_spice.cir
│ ├── fritzing-schema.png
│ ├── full-proto.jpeg
│ ├── jlpcb.jpg
│ ├── lolin_d32pro_shield.jpeg
│ ├── notes.txt
│ ├── oshpark.png
│ ├── perfboard-frontside.jpeg
│ └── sandwich-fpga.png
└── v2
│ ├── Schema-v2.0.1.pdf
│ └── v2.0.1
│ └── esp32pcb
│ ├── esp32SID.mp4
│ ├── esp32pcb-backups
│ ├── esp32pcb-2022-12-05_205057.zip
│ ├── esp32pcb-2022-12-05_210302.zip
│ ├── esp32pcb-2022-12-05_213018.zip
│ ├── esp32pcb-2022-12-05_214006.zip
│ ├── esp32pcb-2022-12-05_223030.zip
│ ├── esp32pcb-2022-12-06_231508.zip
│ ├── esp32pcb-2022-12-06_232028.zip
│ ├── esp32pcb-2022-12-06_232735.zip
│ ├── esp32pcb-2022-12-06_234100.zip
│ ├── esp32pcb-2022-12-06_234735.zip
│ ├── esp32pcb-2022-12-07_115314.zip
│ ├── esp32pcb-2022-12-07_122033.zip
│ ├── esp32pcb-2022-12-07_123233.zip
│ ├── esp32pcb-2022-12-07_124702.zip
│ ├── esp32pcb-2022-12-07_130107.zip
│ └── esp32pcb-2022-12-07_131701.zip
│ ├── esp32pcb.kicad_pcb
│ ├── esp32pcb.kicad_prl
│ ├── esp32pcb.kicad_pro
│ ├── esp32pcb.kicad_sch
│ ├── esp32pcb.round-tracks-config
│ ├── esp32pcb.v2.0.1.kicad_pcb
│ ├── esp32pcb.v2.0.1.kicad_prl
│ ├── esp32pcb.v2.0.1.kicad_pro
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── logs
│ └── freerouting.log
│ ├── needed_libraries
│ ├── 74HC595
│ │ ├── 74HC595.dcm
│ │ └── 74HC595.lib
│ ├── Exiron 5-Way Switch
│ │ ├── 5-Way_Tactile_Switch_BOB_v10_v1_2021-05-09 (1).dxf
│ │ ├── 5-Way_Tactile_Switch_BOB_v10_v1_2021-05-09.dxf
│ │ ├── Exiron 5-Way Switch.pretty
│ │ │ └── Exiron_5-Way_Switch.kicad_mod
│ │ ├── Exiron_5-Way_Switch.bck
│ │ ├── Exiron_5-Way_Switch.dcm
│ │ └── Exiron_5-Way_Switch.lib
│ ├── Items CO2
│ │ └── Items_CO2.pretty
│ │ │ └── C_Disc_D5.0mm_W2.5mm_P2.50mm.kicad_mod
│ ├── Lolin D32 Pro
│ │ ├── Lolin_D32_pro.bck
│ │ ├── Lolin_D32_pro.dcm
│ │ ├── Lolin_D32_pro.lib
│ │ ├── Lolin_d32_pro.pretty
│ │ │ ├── Lolin_d32_pro_back.kicad_mod
│ │ │ └── Lolind32pro.kicad_mod
│ │ └── other
│ │ │ ├── 3d-Model
│ │ │ ├── LolinD32Pro.step
│ │ │ ├── PinHeader_1x16_P2.54mm_Vertical.step
│ │ │ ├── PinHeader_1x16_P2.54mm_Vertical.wrl
│ │ │ ├── PinSocket_1x16_P2.54mm_Vertical.kicad_mod
│ │ │ ├── PinSocket_1x16_P2.54mm_Vertical.step
│ │ │ └── PinSocket_1x16_P2.54mm_Vertical.wrl
│ │ │ ├── LOLIN-D32-PRO_2021-05-09.dxf
│ │ │ ├── LOLIN-D32-PRO_2021-05-09.png
│ │ │ └── d32_pro_v2.0.0_3_16x9.jpg
│ ├── Piezo Buzzer MH-FMD YL-44
│ │ ├── 3d_model
│ │ │ └── Buzzer_Module_FC-07.step
│ │ ├── Piezo Buzzer MH-FMD YL-44.pretty
│ │ │ ├── Piezo_Buzzer_MH-FMD.kicad_mod
│ │ │ └── Piezo_Buzzer_MH-FMD_back.kicad_mod
│ │ ├── Piezo_Buzzer_MH-FMD_YL-44.bck
│ │ ├── Piezo_Buzzer_MH-FMD_YL-44.dcm
│ │ └── Piezo_Buzzer_MH-FMD_YL-44.lib
│ ├── SCD30
│ │ ├── 3d_model
│ │ │ ├── PinHeader_1x07_P2.54mm_Vertical.step
│ │ │ ├── PinSocket_1x07_P2.54mm_Vertical.step
│ │ │ └── Sensirion_SCD30.step
│ │ ├── MODULE_SCD30.pretty
│ │ │ ├── MODULE_SCD30.kicad_mod
│ │ │ └── MODULE_SCD30_back.kicad_mod
│ │ ├── SCD30--3DModel-STEP-56544.STEP
│ │ ├── SCD30.bck
│ │ ├── SCD30.dcm
│ │ ├── SCD30.lib
│ │ ├── SCD30.step
│ │ └── how-to-import.htm
│ └── SSH1106 OLED display
│ │ ├── 1.3_OLED_v.1.0.bck
│ │ ├── 1.3_OLED_v.1.0.dcm
│ │ ├── 1.3_OLED_v.1.0.lib
│ │ └── SSH1106 OLED display.pretty
│ │ └── PinSocket_1x07_P2.54mm_Vertical.kicad_mod
│ ├── production
│ ├── bom.csv
│ ├── designators.csv
│ ├── gerber.zip
│ ├── netlist.ipc
│ └── positions.csv
│ ├── project_module.pretty
│ ├── 74HC5955.kicad_mod
│ ├── D32Pro.kicad_mod
│ ├── D32Pro_HeadersOnly.kicad_mod
│ ├── D32Pro_PinSocket_2x1x16_P2.54mm_Vertical.kicad_mod
│ ├── DD06AJSA.kicad_mod
│ ├── LED_RGBA_RECT_5.0mm_2.45mm.kicad_mod
│ ├── M2_5x10-Spacer.step
│ ├── M2_5x12-Spacer.step
│ ├── M2_5x5-Screw.step
│ ├── SW_420_L10.0mm_D5.5mm_P15.00mm_Horizontal.kicad_mod
│ ├── TFT_1_8_SPI_128x160.kicad_mod
│ ├── TFT_1_8_SPI_128x160_PinSocket_1x16_P2.54mm_Vertical.kicad_mod
│ ├── hole_0_5mm.kicad_mod
│ ├── hole_1mm.kicad_mod
│ ├── led_rgb_rectangle.step
│ ├── logo_marsu31_L5mm_H6mm.kicad_mod
│ ├── project_RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm.kicad_mod
│ ├── project_SW_PUSH-12mm-BLUE.kicad_mod
│ ├── project_SW_PUSH-12mm-GREEN.kicad_mod
│ ├── project_SW_PUSH-12mm-RED.kicad_mod
│ ├── project_SW_PUSH-12mm-YELLOW.kicad_mod
│ ├── project_SW_PUSH-12mm.kicad_mod
│ ├── push_button.step
│ ├── push_button_capuchon_bleu.step
│ ├── push_button_capuchon_jaune.step
│ ├── push_button_capuchon_rouge.step
│ ├── push_button_capuchon_vert.step
│ ├── rotative_push_button.step
│ ├── rotative_push_button_capuchon.step
│ ├── sw-420_15mm_Horizontal.step
│ ├── tft_1_8in_128x160.step
│ ├── waveform.kicad_mod
│ └── wemos_lolin_d32_pro.step
│ ├── tobopcb-rescue.dcm
│ ├── tobopcb-rescue.lib
│ ├── waveform-monochrome.png
│ └── waveform.png
└── src
├── ADSR
├── ADSR.cpp
└── ADSR.hpp
├── Cache
├── SIDCacheManager.cpp
├── SIDCacheManager.hpp
├── SIDSearch.cpp
├── SIDSearch.hpp
├── SIDVirtualFolders.cpp
└── SIDVirtualFolders.hpp
├── Filters
└── LowPass.hpp
├── Oscillo
├── Oscillator.cpp
├── Oscillator.hpp
├── OscilloView.cpp
└── OscilloView.hpp
├── UI
├── SIDExplorer.cpp
├── SIDExplorer.hpp
├── ScrollableItem.cpp
├── ScrollableItem.hpp
├── UI_Utils.cpp
└── UI_Utils.hpp
├── assets
└── assets.h
├── config.h
├── helpers
├── Downloader
│ ├── SIDArchiveManager.cpp
│ ├── SIDArchiveManager.hpp
│ └── web.h
├── HID
│ ├── HID_Common.cpp
│ ├── HID_Common.hpp
│ ├── Serial
│ │ ├── HID_Serial.cpp
│ │ └── HID_Serial.hpp
│ ├── Touch
│ │ ├── HID_Touch.cpp
│ │ └── HID_Touch.hpp
│ ├── USB
│ │ ├── HID_USB.cpp
│ │ ├── HID_USB.hpp
│ │ ├── HID_USB_KbdParser.cpp
│ │ ├── HID_USB_KbdParser.hpp
│ │ └── HID_USB_Keys.h
│ └── Xpad
│ │ ├── HID_XPad.cpp
│ │ └── HID_XPad.hpp
├── NVS
│ ├── prefs.cpp
│ └── prefs.hpp
├── Path_Utils.hpp
├── SDUpdater
│ ├── PartitionManager.cpp
│ ├── PartitionManager.hpp
│ ├── SDUpdaterHooks.cpp
│ └── SDUpdaterHooks.hpp
├── WiFiManager
│ ├── WiFiManagerHooks.cpp
│ └── WiFiManagerHooks.hpp
├── intro_sound.hpp
└── types.hpp
├── main.cpp
└── main.hpp
/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 |
--------------------------------------------------------------------------------
/ESP32-SIDView.ino:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | This project is an attempt to provide a visual dimension to chiptune music and
7 | is heavily inspired by SIDWizPlus (https://github.com/maxim-zhao/SidWizPlus).
8 |
9 | You'll need either a genuine SID6581 or any clone (FPGASID, TeenSID, SwinSID, etc)
10 | and a PCB handling the communication with the ESP32 along with the audio output.
11 | See the /pcb/ folder of this project for more details about the hardware.
12 |
13 | MIT License
14 |
15 | Copyright (c) 2020 tobozo
16 |
17 | Permission is hereby granted, free of charge, to any person obtaining a copy
18 | of this software and associated documentation files (the "Software"), to deal
19 | in the Software without restriction, including without limitation the rights
20 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21 | copies of the Software, and to permit persons to whom the Software is
22 | furnished to do so, subject to the following conditions:
23 |
24 | The above copyright notice and this permission notice shall be included in all
25 | copies or substantial portions of the Software.
26 |
27 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33 | SOFTWARE.
34 |
35 | -----------------------------------------------------------------------------
36 |
37 | Library dependencies (all available from the Arduino Library Manager):
38 |
39 | - https://github.com/hpwit/SID6581
40 | - https://github.com/lovyan03/LovyanGFX
41 | - https://github.com/PaulStoffregen/Time
42 | - https://github.com/GOB52/gob_json
43 | - https://github.com/tobozo/ESP32-Targz
44 | - https://github.com/tobozo/ESP32-Chimera-Core
45 | - https://github.com/tobozo/M5Stack-SD-Updater
46 | - https://github.com/tzapu/WiFiManager
47 | - https://github.com/tobozo/WiFiManagerTz
48 | [optional]
49 | - https://github.com/tobozo/ESP32-USB-Soft-Host
50 |
51 |
52 | \*/
53 |
54 |
55 | // empty file to satisfy Arduino IDE **and** Platformio/VSCode requirements
56 |
57 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 tobozo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ESP32-SIDView
2 |
3 | This project is an attempt to provide a visual dimension to chiptune music while browsing the [High Voltage SID Collection](https://hvsc.c64.org) using an C64-themed UI.
4 |
5 | The Waveform viewer is heavily inspired by [SIDWizPlus](https://github.com/maxim-zhao/SidWizPlus).
6 |
7 |
8 | Features:
9 | ---------
10 | - [HVSC](https://hvsc.c64.org/) compliant SID music player: can play SID Files / subsongs in SID files / playlists.
11 | - File browser: with dircache and playlist cache generation on first access.
12 | - Waveform viewer: using SID information (this is not analog capture!).
13 | - HVSC Archive downloader: because dowloading and unzipping manually is so 2020.
14 | - SD-Updatable: so the SD Card can host other loadable binaries (e.g. WiFi configurator, MIDI relay, etc).
15 |
16 | Demos:
17 | ------
18 | - https://www.youtube.com/watch?v=vK3MDsCDaJo
19 | - https://www.youtube.com/watch?v=0w8IsVCzwHA
20 |
21 | Bill of materials:
22 | ------------------
23 | - ESP32 LoLin D32 Pro (Wroom works too but Wrover is recommended)
24 | - SPI TFT 1.4 128x128 (e.g. Wemos 1.44“ inch TFT LCD shield)
25 | - I2C [XPad Buttons Shield](https://www.tindie.com/products/deshipu/x-pad-buttons-shield-for-d1-mini-version-60/)
26 | - SPI Micro SD Card reader
27 | - SID6581/[FPGASID](http://www.fpgasid.de/)/[TeenSID](https://github.com/kokotisp/6581-SID-teensy)/[SwinSID](https://www.c64-wiki.com/wiki/SwinSID)
28 | - [ESP32 <=> SID shield](https://github.com/hpwit/SID6581/blob/master/extras/Schematic_SIDESP32_Sheet_1_20200319160853.png)
29 |
30 | Library Requirements:
31 | ----------------------
32 | - https://github.com/hpwit/SID6581
33 | - https://github.com/Lovyan03/LovyanGFX
34 | - https://github.com/GOB52/gob_json
35 | - https://github.com/PaulStoffregen/Time
36 | - https://github.com/tzapu/WiFiManager
37 | - https://github.com/tobozo/M5Stack-SD-Updater
38 | - https://github.com/tobozo/ESP32-Chimera-Core
39 | - https://github.com/tobozo/ESP32-targz
40 | - https://github.com/tobozo/WiFiManagerTz
41 | - (optional/experimental) https://github.com/tobozo/ESP32-USB-Soft-Host
42 |
43 | Usage:
44 | ------
45 | - Build yourself a SID6581 to ESP32 PCB (see the [/pcb](pcb/) folder or [hwpit](https://github.com/hpwit/SID6581/blob/master/extras/Schematic_SIDESP32_Sheet_1_20200319160853.png)'s stereo implementation
46 | - Flash your ESP32 with the sketch
47 | - Deploy the [HVSC archive](https://hvsc.c64.org/) on the SD Card by either:
48 | - Letting the ESP32-SIDViewer download and unzip it (this can take up to 4 hours and may require to setup the WiFi SSID/PASS in `config.h`)
49 | - Manually copying the `MUSICIANS`, `GAMES` and `DEMO` folders from the HVSC archive into the `/sid` folder and the `Songlengths.md5` file into the `/md5` folder.
50 | - Let the ESP32 do the indexing of the MD5 file, this is only a one time operation.
51 |
52 | Credits:
53 | --------
54 | - [@hpwit](https://github.com/hpwit)
55 | - http://www.earlevel.com/main/2013/06/01/envelope-generators/
56 | - https://github.com/fdeste/ADSR
57 | - https://github.com/JonArintok/ResonantLowPassFilterExample
58 | - http://archive.6502.org/datasheets/mos_6581_sid.pdf
59 | - https://hvsc.c64.org
60 |
--------------------------------------------------------------------------------
/img/ESP32-SIDViewer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/ESP32-SIDViewer.png
--------------------------------------------------------------------------------
/img/HVSC_Search.dia:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/HVSC_Search.dia
--------------------------------------------------------------------------------
/img/HVSC_Search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/HVSC_Search.png
--------------------------------------------------------------------------------
/img/SID32x11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/SID32x11.png
--------------------------------------------------------------------------------
/img/SID32x8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/SID32x8.png
--------------------------------------------------------------------------------
/img/SIDFile.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/SIDFile.jpeg
--------------------------------------------------------------------------------
/img/TOBOSID.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/TOBOSID.png
--------------------------------------------------------------------------------
/img/acoustic-coupler-70x26.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/acoustic-coupler-70x26.jpg
--------------------------------------------------------------------------------
/img/acoustic-coupler-70x26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/acoustic-coupler-70x26.png
--------------------------------------------------------------------------------
/img/acoustic-coupler-88x26-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/acoustic-coupler-88x26-1.png
--------------------------------------------------------------------------------
/img/acoustic-coupler-88x26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/acoustic-coupler-88x26.png
--------------------------------------------------------------------------------
/img/amigaball_16x16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/amigaball_16x16.jpg
--------------------------------------------------------------------------------
/img/dl_8x8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/dl_8x8.jpg
--------------------------------------------------------------------------------
/img/dotted-square-8x8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/dotted-square-8x8.jpg
--------------------------------------------------------------------------------
/img/espressif-commodore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/espressif-commodore.png
--------------------------------------------------------------------------------
/img/header128x32.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/header128x32.jpg
--------------------------------------------------------------------------------
/img/header48x12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/header48x12.jpg
--------------------------------------------------------------------------------
/img/header64x16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/header64x16.jpg
--------------------------------------------------------------------------------
/img/icondisk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/icondisk.jpg
--------------------------------------------------------------------------------
/img/iconfolder1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconfolder1.jpg
--------------------------------------------------------------------------------
/img/iconfolder2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconfolder2.jpg
--------------------------------------------------------------------------------
/img/iconinfo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconinfo.jpg
--------------------------------------------------------------------------------
/img/iconlist.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconlist.jpg
--------------------------------------------------------------------------------
/img/iconloop.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconloop.jpg
--------------------------------------------------------------------------------
/img/iconpage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconpage.jpg
--------------------------------------------------------------------------------
/img/iconrandom.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconrandom.jpg
--------------------------------------------------------------------------------
/img/iconsidfile-8bit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconsidfile-8bit.png
--------------------------------------------------------------------------------
/img/iconsidfile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconsidfile.jpg
--------------------------------------------------------------------------------
/img/iconsidfile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconsidfile.png
--------------------------------------------------------------------------------
/img/icontool.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/icontool.jpg
--------------------------------------------------------------------------------
/img/icontool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/icontool.png
--------------------------------------------------------------------------------
/img/iconup.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/iconup.jpg
--------------------------------------------------------------------------------
/img/insertdisk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/insertdisk.jpg
--------------------------------------------------------------------------------
/img/insertdisk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/insertdisk.png
--------------------------------------------------------------------------------
/img/noise.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/noise.jpg
--------------------------------------------------------------------------------
/img/pulse.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/pulse.jpg
--------------------------------------------------------------------------------
/img/sawtooth.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/sawtooth.jpg
--------------------------------------------------------------------------------
/img/screenshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/screenshot.jpg
--------------------------------------------------------------------------------
/img/sid-player-deepsid-resized.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/sid-player-deepsid-resized.mp4
--------------------------------------------------------------------------------
/img/sid-player-deepsid.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/sid-player-deepsid.mp4
--------------------------------------------------------------------------------
/img/single.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/single.jpg
--------------------------------------------------------------------------------
/img/soundoff.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/soundoff.jpg
--------------------------------------------------------------------------------
/img/soundoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/soundoff.png
--------------------------------------------------------------------------------
/img/triangle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/img/triangle.jpg
--------------------------------------------------------------------------------
/pcb/v1/WbkPkpG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/WbkPkpG.png
--------------------------------------------------------------------------------
/pcb/v1/breadboard.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/breadboard.jpeg
--------------------------------------------------------------------------------
/pcb/v1/daughterboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/daughterboard.png
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard-WIP_circuit imprimé.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/esp32-FPGA-SID-perfboard-WIP_circuit imprimé.png
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard.fzz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/esp32-FPGA-SID-perfboard.fzz
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_contour.gm1:
--------------------------------------------------------------------------------
1 | G04 MADE WITH FRITZING*
2 | G04 WWW.FRITZING.ORG*
3 | G04 DOUBLE SIDED*
4 | G04 HOLES PLATED*
5 | G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
6 | %ASAXBY*%
7 | %FSLAX23Y23*%
8 | %MOIN*%
9 | %OFA0B0*%
10 | %SFA1.0B1.0*%
11 | %ADD10R,3.311300X2.451860*%
12 | %ADD11C,0.008000*%
13 | %ADD10C,0.008*%
14 | %LNCONTOUR*%
15 | G90*
16 | G70*
17 | G54D10*
18 | G54D11*
19 | X4Y2448D02*
20 | X3307Y2448D01*
21 | X3307Y4D01*
22 | X4Y4D01*
23 | X4Y2448D01*
24 | D02*
25 | G04 End of contour*
26 | M02*
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_drill.txt:
--------------------------------------------------------------------------------
1 | ; NON-PLATED HOLES START AT T1
2 | ; THROUGH (PLATED) HOLES START AT T100
3 | M48
4 | INCH
5 | T100C0.030000
6 | T101C0.035000
7 | T102C0.035433
8 | %
9 | T100
10 | X008418Y012170
11 | X007420Y012170
12 | X006418Y012170
13 | X009420Y012170
14 | T101
15 | X026096Y020570
16 | X019335Y019275
17 | X017335Y019275
18 | X029096Y017570
19 | X015335Y007275
20 | X029096Y020570
21 | X018335Y013275
22 | X026096Y018570
23 | X011335Y010275
24 | X014335Y019275
25 | X015335Y019275
26 | X007335Y019275
27 | X011335Y013275
28 | X029096Y019570
29 | X014335Y013275
30 | X010335Y007275
31 | X014335Y010275
32 | X008335Y019275
33 | X018335Y019275
34 | X026096Y014570
35 | X010335Y013275
36 | X014335Y007275
37 | X015335Y010275
38 | X026096Y016570
39 | X026096Y013570
40 | X013335Y007275
41 | X009335Y019275
42 | X008335Y013275
43 | X013335Y010275
44 | X026096Y015570
45 | X015335Y013275
46 | X017335Y007275
47 | X006335Y019275
48 | X016335Y019275
49 | X016335Y010275
50 | X012335Y013275
51 | X019335Y013275
52 | X029096Y018570
53 | X029096Y014570
54 | X012335Y010275
55 | X029096Y013570
56 | X016335Y013275
57 | X010335Y010275
58 | X017335Y013275
59 | X016335Y007275
60 | X010335Y019275
61 | X026096Y017570
62 | X029096Y016570
63 | X013335Y019275
64 | X026096Y019570
65 | X012335Y007275
66 | X006335Y013275
67 | X012335Y019275
68 | X011335Y007275
69 | X009335Y013275
70 | X029096Y015570
71 | X013335Y013275
72 | X007335Y013275
73 | X017335Y010275
74 | X011335Y019275
75 | T102
76 | X008520Y004718
77 | X017640Y004958
78 | X005400Y003998
79 | X009240Y010958
80 | X004680Y005198
81 | X021480Y013118
82 | X006360Y002558
83 | T00
84 | M30
85 |
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_maskBottom.gbs:
--------------------------------------------------------------------------------
1 | G04 MADE WITH FRITZING*
2 | G04 WWW.FRITZING.ORG*
3 | G04 DOUBLE SIDED*
4 | G04 HOLES PLATED*
5 | G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
6 | %ASAXBY*%
7 | %FSLAX23Y23*%
8 | %MOIN*%
9 | %OFA0B0*%
10 | %SFA1.0B1.0*%
11 | %ADD10C,0.080000*%
12 | %ADD11C,0.085433*%
13 | %ADD12C,0.085000*%
14 | %ADD13R,0.085000X0.085000*%
15 | %ADD14C,0.030000*%
16 | %LNMASK0*%
17 | G90*
18 | G70*
19 | G54D10*
20 | X742Y1217D03*
21 | X642Y1217D03*
22 | X942Y1217D03*
23 | X842Y1217D03*
24 | G54D11*
25 | X924Y1096D03*
26 | X852Y472D03*
27 | X540Y400D03*
28 | X636Y256D03*
29 | X1764Y496D03*
30 | X2148Y1312D03*
31 | X468Y520D03*
32 | G54D12*
33 | X634Y1328D03*
34 | X634Y1928D03*
35 | X734Y1328D03*
36 | X734Y1928D03*
37 | X834Y1328D03*
38 | X834Y1928D03*
39 | X934Y1328D03*
40 | X934Y1928D03*
41 | X1034Y1328D03*
42 | X1034Y1928D03*
43 | X1134Y1328D03*
44 | X1134Y1928D03*
45 | X1234Y1328D03*
46 | X1234Y1928D03*
47 | X1334Y1328D03*
48 | X1334Y1928D03*
49 | X1434Y1328D03*
50 | X1434Y1928D03*
51 | X1534Y1328D03*
52 | X1534Y1928D03*
53 | X1634Y1328D03*
54 | X1634Y1928D03*
55 | X1734Y1328D03*
56 | X1734Y1928D03*
57 | X1834Y1328D03*
58 | X1834Y1928D03*
59 | X1934Y1328D03*
60 | X1934Y1928D03*
61 | X1734Y1028D03*
62 | X1734Y728D03*
63 | X1634Y1028D03*
64 | X1634Y728D03*
65 | X1534Y1028D03*
66 | X1534Y728D03*
67 | X1434Y1028D03*
68 | X1434Y728D03*
69 | X1334Y1028D03*
70 | X1334Y728D03*
71 | X1234Y1028D03*
72 | X1234Y728D03*
73 | X1134Y1028D03*
74 | X1134Y728D03*
75 | X1034Y1028D03*
76 | X1034Y728D03*
77 | X2610Y2057D03*
78 | X2910Y2057D03*
79 | X2610Y1957D03*
80 | X2910Y1957D03*
81 | X2610Y1857D03*
82 | X2910Y1857D03*
83 | X2610Y1757D03*
84 | X2910Y1757D03*
85 | X2610Y1657D03*
86 | X2910Y1657D03*
87 | X2610Y1557D03*
88 | X2910Y1557D03*
89 | X2610Y1457D03*
90 | X2910Y1457D03*
91 | X2610Y1357D03*
92 | X2910Y1357D03*
93 | G54D13*
94 | X634Y1328D03*
95 | X2610Y2057D03*
96 | G54D14*
97 | G36*
98 | X1761Y1000D02*
99 | X1706Y1000D01*
100 | X1706Y1055D01*
101 | X1761Y1055D01*
102 | X1761Y1000D01*
103 | G37*
104 | D02*
105 | G04 End of Mask0*
106 | M02*
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_maskTop.gts:
--------------------------------------------------------------------------------
1 | G04 MADE WITH FRITZING*
2 | G04 WWW.FRITZING.ORG*
3 | G04 DOUBLE SIDED*
4 | G04 HOLES PLATED*
5 | G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
6 | %ASAXBY*%
7 | %FSLAX23Y23*%
8 | %MOIN*%
9 | %OFA0B0*%
10 | %SFA1.0B1.0*%
11 | %ADD10C,0.080000*%
12 | %ADD11C,0.085433*%
13 | %ADD12C,0.085000*%
14 | %ADD13R,0.049370X0.088740*%
15 | %ADD14R,0.085000X0.085000*%
16 | %ADD15C,0.030000*%
17 | %LNMASK1*%
18 | G90*
19 | G70*
20 | G54D10*
21 | X742Y1217D03*
22 | X642Y1217D03*
23 | X942Y1217D03*
24 | X842Y1217D03*
25 | G54D11*
26 | X924Y1096D03*
27 | X852Y472D03*
28 | X540Y400D03*
29 | X636Y256D03*
30 | X1764Y496D03*
31 | X2148Y1312D03*
32 | X468Y520D03*
33 | G54D12*
34 | X634Y1328D03*
35 | X634Y1928D03*
36 | X734Y1328D03*
37 | X734Y1928D03*
38 | X834Y1328D03*
39 | X834Y1928D03*
40 | X934Y1328D03*
41 | X934Y1928D03*
42 | X1034Y1328D03*
43 | X1034Y1928D03*
44 | X1134Y1328D03*
45 | X1134Y1928D03*
46 | X1234Y1328D03*
47 | X1234Y1928D03*
48 | X1334Y1328D03*
49 | X1334Y1928D03*
50 | X1434Y1328D03*
51 | X1434Y1928D03*
52 | X1534Y1328D03*
53 | X1534Y1928D03*
54 | X1634Y1328D03*
55 | X1634Y1928D03*
56 | X1734Y1328D03*
57 | X1734Y1928D03*
58 | X1834Y1328D03*
59 | X1834Y1928D03*
60 | X1934Y1328D03*
61 | X1934Y1928D03*
62 | X1734Y1028D03*
63 | X1734Y728D03*
64 | X1634Y1028D03*
65 | X1634Y728D03*
66 | X1534Y1028D03*
67 | X1534Y728D03*
68 | X1434Y1028D03*
69 | X1434Y728D03*
70 | X1334Y1028D03*
71 | X1334Y728D03*
72 | X1234Y1028D03*
73 | X1234Y728D03*
74 | X1134Y1028D03*
75 | X1134Y728D03*
76 | X1034Y1028D03*
77 | X1034Y728D03*
78 | X2610Y2057D03*
79 | X2910Y2057D03*
80 | X2610Y1957D03*
81 | X2910Y1957D03*
82 | X2610Y1857D03*
83 | X2910Y1857D03*
84 | X2610Y1757D03*
85 | X2910Y1757D03*
86 | X2610Y1657D03*
87 | X2910Y1657D03*
88 | X2610Y1557D03*
89 | X2910Y1557D03*
90 | X2610Y1457D03*
91 | X2910Y1457D03*
92 | X2610Y1357D03*
93 | X2910Y1357D03*
94 | G54D13*
95 | X934Y228D03*
96 | X734Y228D03*
97 | X534Y228D03*
98 | X334Y228D03*
99 | X1034Y357D03*
100 | X834Y357D03*
101 | X634Y357D03*
102 | X434Y357D03*
103 | G54D14*
104 | X634Y1328D03*
105 | X2610Y2057D03*
106 | G54D15*
107 | G36*
108 | X1761Y1000D02*
109 | X1706Y1000D01*
110 | X1706Y1055D01*
111 | X1761Y1055D01*
112 | X1761Y1000D01*
113 | G37*
114 | D02*
115 | G04 End of Mask1*
116 | M02*
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_pasteMaskTop.gtp:
--------------------------------------------------------------------------------
1 | G04 MADE WITH FRITZING*
2 | G04 WWW.FRITZING.ORG*
3 | G04 DOUBLE SIDED*
4 | G04 HOLES PLATED*
5 | G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
6 | %ASAXBY*%
7 | %FSLAX23Y23*%
8 | %MOIN*%
9 | %OFA0B0*%
10 | %SFA1.0B1.0*%
11 | %ADD10R,0.039370X0.078740*%
12 | %LNPASTEMASK1*%
13 | G90*
14 | G70*
15 | G54D10*
16 | X934Y228D03*
17 | X734Y228D03*
18 | X534Y228D03*
19 | X334Y228D03*
20 | X1034Y357D03*
21 | X834Y357D03*
22 | X634Y357D03*
23 | X434Y357D03*
24 | G04 End of PasteMask1*
25 | M02*
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_pnp.txt:
--------------------------------------------------------------------------------
1 | *Pick And Place List
2 | *Company=
3 | *Author=
4 | *eMail=
5 | *
6 | *Project=esp32-FPGA-SID-perfboard
7 | *Date=18:31:35
8 | *CreatedBy=Fritzing 0.9.3b.04.19.5c895d327c44a3114e5fcc9d8260daf0cbb52806
9 | *
10 | *
11 | *Coordinates in mm, always center of component
12 | *Origin 0/0=Lower left corner of PCB
13 | *Rotation in degree (0-360, math. pos.)
14 | *
15 | *No;Value;Package;X;Y;Rotation;Side;Name
16 | 1;;;23.4697;-27.8349;0;Bottom;Via2
17 | 2;;;11.8872;-13.2045;0;Bottom;Via4
18 | 3;;1x08_smd;17.3617;-7.42936;180;Top;12v Au Sid Lat Clk Dat 5v V-
19 | 4;;DIP16 [THT];70.0955;-43.3582;0;Bottom;74HC597
20 | 5;2.2nF;100 mil [THT, multilayer];17.5776;-30.9133;180;Bottom;C4
21 | 6;;;16.1545;-6.49894;0;Bottom;Via7
22 | 7;;;54.5593;-33.3213;0;Bottom;Via5
23 | 8;;;44.8057;-12.5949;0;Bottom;Via1
24 | 9;2.2nF;100 mil [THT, multilayer];22.6576;-30.9133;180;Bottom;C3
25 | 10;;;13.716;-10.1565;0;Bottom;Via6
26 | 11;;;21.6409;-11.9853;0;Bottom;Via3
27 | 12;;DIP16 [THT];35.1417;-22.2894;90;Bottom;74HC596
28 | 13;;DIP (Dual Inline) [THT];32.6017;-41.3394;-90;Bottom;SID6581 / SID6582 / FPGASID
29 |
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_silkBottom.gbo:
--------------------------------------------------------------------------------
1 | G04 MADE WITH FRITZING*
2 | G04 WWW.FRITZING.ORG*
3 | G04 DOUBLE SIDED*
4 | G04 HOLES PLATED*
5 | G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
6 | %ASAXBY*%
7 | %FSLAX23Y23*%
8 | %MOIN*%
9 | %OFA0B0*%
10 | %SFA1.0B1.0*%
11 | %ADD10R,3.311300X2.451860X3.295300X2.435860*%
12 | %ADD11C,0.008000*%
13 | %LNSILK0*%
14 | G90*
15 | G70*
16 | G54D11*
17 | X4Y2448D02*
18 | X3307Y2448D01*
19 | X3307Y4D01*
20 | X4Y4D01*
21 | X4Y2448D01*
22 | D02*
23 | G04 End of Silk0*
24 | M02*
--------------------------------------------------------------------------------
/pcb/v1/esp32-FPGA-SID-perfboard_spice.cir:
--------------------------------------------------------------------------------
1 | esp32-FPGA-SID-perfboard
2 | C3 15 16 2.2nF IC=0
3 | C4 14 13 2.2nF IC=0
4 |
5 | .TRAN 1ms 100ms
6 | * .AC DEC 100 100 1MEG
7 | .END
8 |
--------------------------------------------------------------------------------
/pcb/v1/fritzing-schema.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/fritzing-schema.png
--------------------------------------------------------------------------------
/pcb/v1/full-proto.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/full-proto.jpeg
--------------------------------------------------------------------------------
/pcb/v1/jlpcb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/jlpcb.jpg
--------------------------------------------------------------------------------
/pcb/v1/lolin_d32pro_shield.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/lolin_d32pro_shield.jpeg
--------------------------------------------------------------------------------
/pcb/v1/notes.txt:
--------------------------------------------------------------------------------
1 |
2 | 1mhz oscillo
3 |
4 | 12.9mm
5 |
6 | ^
7 | l <-> 2.64mm
8 | v
9 |
10 | 0.433071 inches = 1.1cm ... viewbox 31.1811 ... r = 1.84465
11 |
12 |
13 | 6,13953488372
14 |
15 |
16 | 43.3 * 68
17 |
--------------------------------------------------------------------------------
/pcb/v1/oshpark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/oshpark.png
--------------------------------------------------------------------------------
/pcb/v1/perfboard-frontside.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/perfboard-frontside.jpeg
--------------------------------------------------------------------------------
/pcb/v1/sandwich-fpga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v1/sandwich-fpga.png
--------------------------------------------------------------------------------
/pcb/v2/Schema-v2.0.1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/Schema-v2.0.1.pdf
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32SID.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32SID.mp4
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_205057.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_205057.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_210302.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_210302.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_213018.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_213018.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_214006.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_214006.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_223030.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-05_223030.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_231508.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_231508.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_232028.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_232028.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_232735.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_232735.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_234100.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_234100.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_234735.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-06_234735.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_115314.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_115314.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_122033.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_122033.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_123233.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_123233.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_124702.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_124702.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_130107.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_130107.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_131701.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/esp32pcb-backups/esp32pcb-2022-12-07_131701.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "All Layers",
5 | "auto_track_width": true,
6 | "hidden_nets": [],
7 | "high_contrast_mode": 1,
8 | "net_color_mode": 1,
9 | "opacity": {
10 | "pads": 1.0,
11 | "tracks": 1.0,
12 | "vias": 1.0,
13 | "zones": 0.6
14 | },
15 | "ratsnest_display_mode": 0,
16 | "selection_filter": {
17 | "dimensions": true,
18 | "footprints": true,
19 | "graphics": true,
20 | "keepouts": true,
21 | "lockedItems": true,
22 | "otherItems": true,
23 | "pads": true,
24 | "text": true,
25 | "tracks": true,
26 | "vias": true,
27 | "zones": true
28 | },
29 | "visible_items": [
30 | 0,
31 | 1,
32 | 2,
33 | 3,
34 | 4,
35 | 5,
36 | 8,
37 | 9,
38 | 10,
39 | 11,
40 | 12,
41 | 13,
42 | 14,
43 | 15,
44 | 16,
45 | 17,
46 | 18,
47 | 19,
48 | 20,
49 | 21,
50 | 22,
51 | 23,
52 | 24,
53 | 25,
54 | 26,
55 | 27,
56 | 28,
57 | 29,
58 | 30,
59 | 32,
60 | 33,
61 | 34,
62 | 35,
63 | 36
64 | ],
65 | "visible_layers": "fffffff_ffffffff",
66 | "zone_display_mode": 0
67 | },
68 | "meta": {
69 | "filename": "esp32pcb.kicad_prl",
70 | "version": 3
71 | },
72 | "project": {
73 | "files": []
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb.round-tracks-config:
--------------------------------------------------------------------------------
1 | Default True 2.0 3
2 | False True False
3 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/esp32pcb.v2.0.1.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 45,
4 | "active_layer_preset": "Front Assembly View",
5 | "auto_track_width": true,
6 | "hidden_nets": [],
7 | "high_contrast_mode": 0,
8 | "net_color_mode": 1,
9 | "opacity": {
10 | "pads": 1.0,
11 | "tracks": 1.0,
12 | "vias": 1.0,
13 | "zones": 0.6
14 | },
15 | "ratsnest_display_mode": 0,
16 | "selection_filter": {
17 | "dimensions": true,
18 | "footprints": true,
19 | "graphics": true,
20 | "keepouts": true,
21 | "lockedItems": true,
22 | "otherItems": true,
23 | "pads": true,
24 | "text": true,
25 | "tracks": true,
26 | "vias": true,
27 | "zones": true
28 | },
29 | "visible_items": [
30 | 0,
31 | 1,
32 | 2,
33 | 3,
34 | 4,
35 | 5,
36 | 8,
37 | 9,
38 | 10,
39 | 11,
40 | 12,
41 | 13,
42 | 14,
43 | 15,
44 | 16,
45 | 17,
46 | 18,
47 | 19,
48 | 20,
49 | 21,
50 | 22,
51 | 23,
52 | 24,
53 | 25,
54 | 26,
55 | 27,
56 | 28,
57 | 29,
58 | 30,
59 | 32,
60 | 33,
61 | 34,
62 | 35,
63 | 36
64 | ],
65 | "visible_layers": "00290a0_00000000",
66 | "zone_display_mode": 0
67 | },
68 | "meta": {
69 | "filename": "esp32pcb.v2.0.1.kicad_prl",
70 | "version": 3
71 | },
72 | "project": {
73 | "files": []
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name "AudioJack")(type "KiCad")(uri "/home/vRAk/_src/c64/sid6581/esp32-fpgasid-daugterboard/mod/AudioJack.3dshapes")(options "")(descr ""))
3 | (lib (name 74HC595)(type KiCad)(uri /home/vRAk/_src/c64/kicad_ddc_pico_fnirs/test_setup.pretty/74HC595.pretty/)(options "")(descr ""))
4 | )
5 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/74HC595/74HC595.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/74HC595/74HC595.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # 74HC595
5 | #
6 | DEF 74HC595 IC 0 40 Y Y 1 L N
7 | F0 "IC" -300 -701 50 H V L BNN
8 | F1 "74HC595" 0 0 50 H I L BNN
9 | F2 "SO16" 0 0 50 H I L BNN
10 | F3 "" 0 0 50 H I L BNN
11 | DRAW
12 | T 0 -300 501 70 0 0 0 74HC595 Normal 0 L B
13 | S -300 -600 300 500 0 0 15 f
14 | X Q1 1 -400 200 100 R 40 40 0 0 T
15 | X ~MR 10 400 -400 100 L 40 40 0 0 I
16 | X SCLK 11 400 -300 100 L 40 40 0 0 I
17 | X RCLK 12 400 -200 100 L 40 40 0 0 I
18 | X DS 14 400 0 100 L 40 40 0 0 I
19 | X Q0 15 400 100 100 L 40 40 0 0 T
20 | X VCC 16 400 200 100 L 40 40 0 0 W
21 | X Q2 2 -400 100 100 R 40 40 0 0 T
22 | X Q3 3 -400 0 100 R 40 40 0 0 T
23 | X Q4 4 -400 -100 100 R 40 40 0 0 T
24 | X Q5 5 -400 -200 100 R 40 40 0 0 T
25 | X Q6 6 -400 -300 100 R 40 40 0 0 T
26 | X Q7 7 -400 -400 100 R 40 40 0 0 T
27 | X GND 8 -400 -500 100 R 40 40 0 0 W
28 | X Q7' 9 400 -500 100 L 40 40 0 0 T
29 | X ~OE 13 400 -100 100 L 40 40 1 1 I
30 | ENDDRAW
31 | ENDDEF
32 | #
33 | #End Library
34 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Exiron 5-Way Switch/Exiron_5-Way_Switch.bck:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | $CMP Exiron_5-Way_Switch
4 | F http://cdn.sparkfun.com/datasheets/BreakoutBoards/5-Way_Tactile_Switch_BOB_v10.pdf
5 | $ENDCMP
6 | #
7 | $CMP SF303GJ26
8 | F https://www.sparkfun.com/datasheets/Components/Buttons/SF303GJ26-3.pdf
9 | $ENDCMP
10 | #
11 | #End Doc Library
12 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Exiron 5-Way Switch/Exiron_5-Way_Switch.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | $CMP Exiron_5-Way_Switch
4 | F http://cdn.sparkfun.com/datasheets/BreakoutBoards/5-Way_Tactile_Switch_BOB_v10.pdf
5 | $ENDCMP
6 | #
7 | $CMP SF303GJ26
8 | F https://www.sparkfun.com/datasheets/Components/Buttons/SF303GJ26-3.pdf
9 | $ENDCMP
10 | #
11 | #End Doc Library
12 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Exiron 5-Way Switch/Exiron_5-Way_Switch.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # Exiron_5-Way_Switch
5 | #
6 | DEF Exiron_5-Way_Switch S 0 40 Y Y 1 F N
7 | F0 "S" 0 400 50 H V C CNN
8 | F1 "Exiron_5-Way_Switch" 0 500 50 H V C CNN
9 | F2 "Exiron 5-Way Switch:Exiron_5-Way_Switch" -250 -150 50 H I C CNN
10 | F3 "" -250 -150 50 H I C CNN
11 | ALIAS SF303GJ26
12 | DRAW
13 | S 300 350 -250 -350 0 1 0 f
14 | X - 1 -350 -300 100 R 50 50 1 1 w
15 | X R 2 -350 -200 100 R 50 50 1 1 O
16 | X D 3 -350 -100 100 R 50 50 1 1 O
17 | X L 4 -350 0 100 R 50 50 1 1 O
18 | X C 5 -350 100 100 R 50 50 1 1 O
19 | X U 6 -350 200 100 R 50 50 1 1 O
20 | X + 7 -350 300 100 R 50 50 1 1 W
21 | ENDDRAW
22 | ENDDEF
23 | #
24 | #End Library
25 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Items CO2/Items_CO2.pretty/C_Disc_D5.0mm_W2.5mm_P2.50mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module C_Disc_D5.0mm_W2.5mm_P2.50mm (layer F.Cu) (tedit 60B8812A)
2 | (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=5*2.5mm^2, Capacitor, http://cdn-reichelt.de/documents/datenblatt/B300/DS_KERKO_TC.pdf")
3 | (tags "C Disc series Radial pin pitch 2.50mm diameter 5mm width 2.5mm Capacitor")
4 | (fp_text reference REF** (at 1.25 -2.5) (layer Dwgs.User)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value 0.1uF-Capacitor (at 1.25 2.5) (layer F.SilkS)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -1.25 -1.25) (end -1.25 1.25) (layer F.Fab) (width 0.1))
11 | (fp_line (start -1.25 1.25) (end 3.75 1.25) (layer F.Fab) (width 0.1))
12 | (fp_line (start 3.75 1.25) (end 3.75 -1.25) (layer F.Fab) (width 0.1))
13 | (fp_line (start 3.75 -1.25) (end -1.25 -1.25) (layer F.Fab) (width 0.1))
14 | (fp_line (start -1.37 -1.37) (end 3.87 -1.37) (layer F.SilkS) (width 0.12))
15 | (fp_line (start -1.37 1.37) (end 3.87 1.37) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -1.37 -1.37) (end -1.37 1.37) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 3.87 -1.37) (end 3.87 1.37) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -1.5 -1.5) (end -1.5 1.5) (layer F.CrtYd) (width 0.05))
19 | (fp_line (start -1.5 1.5) (end 4 1.5) (layer F.CrtYd) (width 0.05))
20 | (fp_line (start 4 1.5) (end 4 -1.5) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start 4 -1.5) (end -1.5 -1.5) (layer F.CrtYd) (width 0.05))
22 | (fp_text user %R (at 1.25 0) (layer F.Fab)
23 | (effects (font (size 1 1) (thickness 0.15)))
24 | )
25 | (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
26 | (pad 2 thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
27 | (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D5.0mm_W2.5mm_P2.50mm.wrl
28 | (at (xyz 0 0 0))
29 | (scale (xyz 1 1 1))
30 | (rotate (xyz 0 0 0))
31 | )
32 | )
33 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/Lolin_D32_pro.bck:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | $CMP LolinD32pro
4 | F https://www.wemos.cc/en/latest/_static/files/sch_d32_pro_v2.0.0.pdf
5 | $ENDCMP
6 | #
7 | $CMP LolinD32pro_back
8 | F https://www.wemos.cc/en/latest/_static/files/sch_d32_pro_v2.0.0.pdf
9 | $ENDCMP
10 | #
11 | $CMP esp32
12 | F https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
13 | $ENDCMP
14 | #
15 | $CMP esp32_copy
16 | F https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
17 | $ENDCMP
18 | #
19 | #End Doc Library
20 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/Lolin_D32_pro.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | $CMP LolinD32pro
4 | F https://www.wemos.cc/en/latest/_static/files/sch_d32_pro_v2.0.0.pdf
5 | $ENDCMP
6 | #
7 | $CMP LolinD32pro_back
8 | F https://www.wemos.cc/en/latest/_static/files/sch_d32_pro_v2.0.0.pdf
9 | $ENDCMP
10 | #
11 | $CMP esp32
12 | F https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
13 | $ENDCMP
14 | #
15 | $CMP esp32_copy
16 | F https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
17 | $ENDCMP
18 | #
19 | #End Doc Library
20 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/Lolin_D32_pro.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # LolinD32pro
5 | #
6 | DEF LolinD32pro K 0 40 Y Y 1 F N
7 | F0 "K" 0 1000 50 H V C CNN
8 | F1 "LolinD32pro" 0 1100 50 H V C CNN
9 | F2 "Lolin_d32_pro:Lolind32pro" 0 -800 50 H I C CNN
10 | F3 "" 0 -900 50 H I C CNN
11 | ALIAS esp32
12 | DRAW
13 | S -450 -950 450 950 1 0 0 f
14 | X 3V3 1 -750 750 300 R 50 50 1 1 w
15 | X PIN27 10 -750 -150 300 R 50 50 1 1 B
16 | X PIN14 11 -750 -250 300 R 50 50 1 1 B
17 | X PIN12 12 -750 -350 300 R 50 50 1 1 B
18 | X PIN13 13 -750 -450 300 R 50 50 1 1 B
19 | X EN 14 -750 -550 300 R 50 50 1 1 I
20 | X USB 15 -750 -650 300 R 50 50 1 1 I
21 | X BAT 16 -750 -750 300 R 50 50 1 1 I
22 | X GND 17 750 750 300 L 50 50 1 1 W
23 | X PIN23 18 750 650 300 L 50 50 1 1 B
24 | X PIN22 19 750 550 300 L 50 50 1 1 B
25 | X RST 2 -750 650 300 R 50 50 1 1 I
26 | X TX 20 750 450 300 L 50 50 1 1 I
27 | X RX 21 750 350 300 L 50 50 1 1 I
28 | X PIN21 22 750 250 300 L 50 50 1 1 B
29 | X PIN19 23 750 150 300 L 50 50 1 1 B
30 | X PIN18 24 750 50 300 L 50 50 1 1 B
31 | X PIN5 25 750 -50 300 L 50 50 1 1 B
32 | X N.C 26 750 -150 300 L 50 50 1 1 N
33 | X N.C 27 750 -250 300 L 50 50 1 1 N
34 | X PIN4 28 750 -350 300 L 50 50 1 1 B
35 | X PIN0 29 750 -450 300 L 50 50 1 1 B
36 | X PIN36/VP 3 -750 550 300 R 50 50 1 1 B
37 | X PIN2 30 750 -550 300 L 50 50 1 1 B
38 | X PIN15 31 750 -650 300 L 50 50 1 1 B
39 | X GND 32 750 -750 300 L 50 50 1 1 W
40 | X PIN39/VN 4 -750 450 300 R 50 50 1 1 B
41 | X PIN34 5 -750 350 300 R 50 50 1 1 B
42 | X PIN32 6 -750 250 300 R 50 50 1 1 B
43 | X PIN33 7 -750 150 300 R 50 50 1 1 B
44 | X PIN25 8 -750 50 300 R 50 50 1 1 B
45 | X PIN26 9 -750 -50 300 R 50 50 1 1 B
46 | ENDDRAW
47 | ENDDEF
48 | #
49 | # LolinD32pro_back
50 | #
51 | DEF LolinD32pro_back K 0 40 Y Y 1 F N
52 | F0 "K" 0 1000 50 H V C CNN
53 | F1 "LolinD32pro_back" 0 1100 50 H V C CNN
54 | F2 "Lolin_d32_pro:Lolin_d32_pro_back" 0 -800 50 H I C CNN
55 | F3 "" 0 -900 50 H I C CNN
56 | ALIAS esp32_copy
57 | DRAW
58 | S 450 -950 -450 950 1 0 0 f
59 | X 3V3 1 750 750 300 L 50 50 1 1 w
60 | X PIN27 10 750 -150 300 L 50 50 1 1 B
61 | X PIN14 11 750 -250 300 L 50 50 1 1 B
62 | X PIN12 12 750 -350 300 L 50 50 1 1 B
63 | X PIN13 13 750 -450 300 L 50 50 1 1 B
64 | X EN 14 750 -550 300 L 50 50 1 1 I
65 | X USB 15 750 -650 300 L 50 50 1 1 I
66 | X BAT 16 750 -750 300 L 50 50 1 1 I
67 | X GND 17 -750 750 300 R 50 50 1 1 W
68 | X PIN23 18 -750 650 300 R 50 50 1 1 B
69 | X PIN22 19 -750 550 300 R 50 50 1 1 B
70 | X RST 2 750 650 300 L 50 50 1 1 I
71 | X TX 20 -750 450 300 R 50 50 1 1 I
72 | X RX 21 -750 350 300 R 50 50 1 1 I
73 | X PIN21 22 -750 250 300 R 50 50 1 1 B
74 | X PIN19 23 -750 150 300 R 50 50 1 1 B
75 | X PIN18 24 -750 50 300 R 50 50 1 1 B
76 | X PIN5 25 -750 -50 300 R 50 50 1 1 B
77 | X N.C 26 -750 -150 300 R 50 50 1 1 N
78 | X N.C 27 -750 -250 300 R 50 50 1 1 N
79 | X PIN4 28 -750 -350 300 R 50 50 1 1 B
80 | X PIN0 29 -750 -450 300 R 50 50 1 1 B
81 | X PIN36/VP 3 750 550 300 L 50 50 1 1 B
82 | X PIN2 30 -750 -550 300 R 50 50 1 1 B
83 | X PIN15 31 -750 -650 300 R 50 50 1 1 B
84 | X GND 32 -750 -750 300 R 50 50 1 1 W
85 | X PIN39/VN 4 750 450 300 L 50 50 1 1 B
86 | X PIN34 5 750 350 300 L 50 50 1 1 B
87 | X PIN32 6 750 250 300 L 50 50 1 1 B
88 | X PIN33 7 750 150 300 L 50 50 1 1 B
89 | X PIN25 8 750 50 300 L 50 50 1 1 B
90 | X PIN26 9 750 -50 300 L 50 50 1 1 B
91 | ENDDRAW
92 | ENDDEF
93 | #
94 | #End Library
95 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/other/3d-Model/PinSocket_1x16_P2.54mm_Vertical.kicad_mod:
--------------------------------------------------------------------------------
1 | (module PinSocket_1x16_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A41E)
2 | (descr "Through hole straight socket strip, 1x16, 2.54mm pitch, single row (from Kicad 4.0.7), script generated")
3 | (tags "Through hole socket strip THT 1x16 2.54mm single row")
4 | (fp_text reference REF** (at 0 -2.77) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value PinSocket_1x16_P2.54mm_Vertical (at 0 40.87) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1))
12 | (fp_line (start 1.27 -0.635) (end 1.27 39.37) (layer F.Fab) (width 0.1))
13 | (fp_line (start 1.27 39.37) (end -1.27 39.37) (layer F.Fab) (width 0.1))
14 | (fp_line (start -1.27 39.37) (end -1.27 -1.27) (layer F.Fab) (width 0.1))
15 | (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -1.33 1.27) (end -1.33 39.43) (layer F.SilkS) (width 0.12))
17 | (fp_line (start -1.33 39.43) (end 1.33 39.43) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 1.33 1.27) (end 1.33 39.43) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12))
20 | (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12))
21 | (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 1.75 -1.8) (end 1.75 39.9) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 1.75 39.9) (end -1.8 39.9) (layer F.CrtYd) (width 0.05))
24 | (fp_line (start -1.8 39.9) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
25 | (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
26 | (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
27 | (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
28 | (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
29 | (pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
30 | (pad 6 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
31 | (pad 7 thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
32 | (pad 8 thru_hole oval (at 0 17.78) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
33 | (pad 9 thru_hole oval (at 0 20.32) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
34 | (pad 10 thru_hole oval (at 0 22.86) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
35 | (pad 11 thru_hole oval (at 0 25.4) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
36 | (pad 12 thru_hole oval (at 0 27.94) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
37 | (pad 13 thru_hole oval (at 0 30.48) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
38 | (pad 14 thru_hole oval (at 0 33.02) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
39 | (pad 15 thru_hole oval (at 0 35.56) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
40 | (pad 16 thru_hole oval (at 0 38.1) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
41 | (fp_text user %R (at 0 19.05 90) (layer F.Fab)
42 | (effects (font (size 1 1) (thickness 0.15)))
43 | )
44 | (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x16_P2.54mm_Vertical.wrl
45 | (at (xyz 0 0 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/other/LOLIN-D32-PRO_2021-05-09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/other/LOLIN-D32-PRO_2021-05-09.png
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/other/d32_pro_v2.0.0_3_16x9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Lolin D32 Pro/other/d32_pro_v2.0.0_3_16x9.jpg
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Piezo Buzzer MH-FMD YL-44/Piezo Buzzer MH-FMD YL-44.pretty/Piezo_Buzzer_MH-FMD.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Piezo_Buzzer_MH-FMD (layer F.Cu) (tedit 609849F9)
2 | (descr "Through hole straight socket strip, 1x03, 2.54mm pitch, single row (from Kicad 4.0.7), script generated")
3 | (tags "Through hole socket strip THT 1x03 2.54mm single row")
4 | (fp_text reference REF** (at -14.5288 -5.3354) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value Piezo_Buzzer_MH-FMD (at 0.1016 5.1308) (layer F.SilkS)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 16.5862 6.4516) (end -16.5608 6.4516) (layer F.SilkS) (width 0.12))
11 | (fp_line (start 16.5862 -6.5024) (end 16.5862 6.4516) (layer F.SilkS) (width 0.12))
12 | (fp_line (start -16.5608 -6.5024) (end 16.5862 -6.5024) (layer F.SilkS) (width 0.12))
13 | (fp_line (start -16.5608 6.4516) (end -16.5608 -6.5024) (layer F.SilkS) (width 0.12))
14 | (fp_line (start -16.3288 4.2846) (end -16.3288 -4.3654) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -12.7788 4.2846) (end -16.3288 4.2846) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -12.7788 -4.3654) (end -12.7788 4.2846) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start -16.3288 -4.3654) (end -12.7788 -4.3654) (layer F.CrtYd) (width 0.05))
18 | (fp_line (start -14.5288 -3.8954) (end -13.1988 -3.8954) (layer F.SilkS) (width 0.12))
19 | (fp_line (start -13.1988 -3.8954) (end -13.1988 -2.5654) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -13.1988 -1.2954) (end -13.1988 3.8446) (layer F.SilkS) (width 0.12))
21 | (fp_line (start -15.8588 3.8446) (end -13.1988 3.8446) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -15.8588 -1.2954) (end -15.8588 3.8446) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -15.8588 -1.2954) (end -13.1988 -1.2954) (layer F.SilkS) (width 0.12))
24 | (fp_line (start -15.7988 3.7846) (end -15.7988 -3.8354) (layer F.Fab) (width 0.1))
25 | (fp_line (start -13.2588 3.7846) (end -15.7988 3.7846) (layer F.Fab) (width 0.1))
26 | (fp_line (start -13.2588 -3.2004) (end -13.2588 3.7846) (layer F.Fab) (width 0.1))
27 | (fp_line (start -13.8938 -3.8354) (end -13.2588 -3.2004) (layer F.Fab) (width 0.1))
28 | (fp_line (start -15.7988 -3.8354) (end -13.8938 -3.8354) (layer F.Fab) (width 0.1))
29 | (fp_text user %R (at -14.5288 -0.0254 90) (layer F.Fab)
30 | (effects (font (size 1 1) (thickness 0.15)))
31 | )
32 | (pad 1 thru_hole rect (at -14.5288 -2.5654) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at -14.5288 -0.0254) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
34 | (pad 3 thru_hole oval (at -14.5288 2.5146) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
35 | (pad 4 thru_hole circle (at 0.0254 -0.0254) (size 4 4) (drill 3) (layers *.Cu *.Mask))
36 | (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x03_P2.54mm_Vertical.wrl
37 | (offset (xyz -14.5 2.5 0))
38 | (scale (xyz 1 1 1))
39 | (rotate (xyz 0 0 0))
40 | )
41 | )
42 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Piezo Buzzer MH-FMD YL-44/Piezo Buzzer MH-FMD YL-44.pretty/Piezo_Buzzer_MH-FMD_back.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Piezo_Buzzer_MH-FMD_back (layer F.Cu) (tedit 609848FA)
2 | (descr "Through hole straight socket strip, 1x03, 2.54mm pitch, single row (from Kicad 4.0.7), script generated")
3 | (tags "Through hole socket strip THT 1x03 2.54mm single row")
4 | (fp_text reference REF** (at -14.5288 5.3354 180) (layer B.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
6 | )
7 | (fp_text value Piezo_Buzzer_MH-FMD_back (at 0.1016 -5.1308 180) (layer B.SilkS)
8 | (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
9 | )
10 | (fp_line (start -15.7988 3.8354) (end -13.8938 3.8354) (layer F.Fab) (width 0.1))
11 | (fp_line (start -13.8938 3.8354) (end -13.2588 3.2004) (layer F.Fab) (width 0.1))
12 | (fp_line (start -13.2588 3.2004) (end -13.2588 -3.7846) (layer F.Fab) (width 0.1))
13 | (fp_line (start -13.2588 -3.7846) (end -15.7988 -3.7846) (layer F.Fab) (width 0.1))
14 | (fp_line (start -15.7988 -3.7846) (end -15.7988 3.8354) (layer F.Fab) (width 0.1))
15 | (fp_line (start -15.8588 1.2954) (end -13.1988 1.2954) (layer B.SilkS) (width 0.12))
16 | (fp_line (start -15.8588 1.2954) (end -15.8588 -3.8446) (layer B.SilkS) (width 0.12))
17 | (fp_line (start -15.8588 -3.8446) (end -13.1988 -3.8446) (layer B.SilkS) (width 0.12))
18 | (fp_line (start -13.1988 1.2954) (end -13.1988 -3.8446) (layer B.SilkS) (width 0.12))
19 | (fp_line (start -13.1988 3.8954) (end -13.1988 2.5654) (layer B.SilkS) (width 0.12))
20 | (fp_line (start -14.5288 3.8954) (end -13.1988 3.8954) (layer B.SilkS) (width 0.12))
21 | (fp_line (start -16.3288 4.3654) (end -12.7788 4.3654) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start -12.7788 4.3654) (end -12.7788 -4.2846) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start -12.7788 -4.2846) (end -16.3288 -4.2846) (layer F.CrtYd) (width 0.05))
24 | (fp_line (start -16.3288 -4.2846) (end -16.3288 4.3654) (layer F.CrtYd) (width 0.05))
25 | (fp_text user %R (at -14.5288 0.0254 270) (layer F.Fab)
26 | (effects (font (size 1 1) (thickness 0.15)))
27 | )
28 | (fp_line (start -16.5608 -6.4516) (end -16.5608 6.5024) (layer B.SilkS) (width 0.12))
29 | (fp_line (start -16.5608 6.5024) (end 16.5862 6.5024) (layer B.SilkS) (width 0.12))
30 | (fp_line (start 16.5862 6.5024) (end 16.5862 -6.4516) (layer B.SilkS) (width 0.12))
31 | (fp_line (start 16.5862 -6.4516) (end -16.5608 -6.4516) (layer B.SilkS) (width 0.12))
32 | (pad 1 thru_hole rect (at -14.5288 2.5654 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at -14.5288 0.0254 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
34 | (pad 3 thru_hole oval (at -14.5288 -2.5146 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
35 | (pad 4 thru_hole circle (at 0.0254 0.0254 180) (size 4 4) (drill 3) (layers *.Cu *.Mask))
36 | (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x03_P2.54mm_Vertical.wrl
37 | (offset (xyz -14.5 2.5 -1.5))
38 | (scale (xyz 1 1 1))
39 | (rotate (xyz 0 180 0))
40 | )
41 | )
42 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Piezo Buzzer MH-FMD YL-44/Piezo_Buzzer_MH-FMD_YL-44.bck:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Piezo Buzzer MH-FMD YL-44/Piezo_Buzzer_MH-FMD_YL-44.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/Piezo Buzzer MH-FMD YL-44/Piezo_Buzzer_MH-FMD_YL-44.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # PiezoBuzzerMH-FMD
5 | #
6 | DEF PiezoBuzzerMH-FMD P 0 40 Y Y 1 F N
7 | F0 "P" 0 300 50 H V C CNN
8 | F1 "PiezoBuzzerMH-FMD" 0 200 50 H V C CNN
9 | F2 "Piezo Buzzer MH-FMD YL-44:Piezo_Buzzer_MH-FMD" 0 0 50 H I C CNN
10 | F3 "" 0 0 50 H I C CNN
11 | ALIAS Passive_Buzzer
12 | DRAW
13 | S -100 150 150 -150 0 1 0 f
14 | X VCC 1 -200 100 100 R 50 50 1 1 W
15 | X I/O 2 -200 0 100 R 50 50 1 1 I
16 | X GND 3 -200 -100 100 R 50 50 1 1 w
17 | ENDDRAW
18 | ENDDEF
19 | #
20 | # PiezoBuzzerMH-FMD_back
21 | #
22 | DEF PiezoBuzzerMH-FMD_back P 0 40 Y Y 1 F N
23 | F0 "P" 0 300 50 H V C CNN
24 | F1 "PiezoBuzzerMH-FMD_back" 0 200 50 H V C CNN
25 | F2 "Piezo Buzzer MH-FMD YL-44:Piezo_Buzzer_MH-FMD_back" 0 0 50 H I C CNN
26 | F3 "" 0 0 50 H I C CNN
27 | ALIAS Passive_Buzzer_copy
28 | DRAW
29 | S 100 150 -150 -150 0 1 0 f
30 | X VCC 1 200 100 100 L 50 50 1 1 W
31 | X I/O 2 200 0 100 L 50 50 1 1 I
32 | X GND 3 200 -100 100 L 50 50 1 1 w
33 | ENDDRAW
34 | ENDDEF
35 | #
36 | #End Library
37 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/MODULE_SCD30.pretty/MODULE_SCD30.kicad_mod:
--------------------------------------------------------------------------------
1 | (module MODULE_SCD30 (layer F.Cu) (tedit 60984AE7)
2 | (fp_text reference REF** (at -14.605 -13.335) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.015)))
4 | )
5 | (fp_text value SCD30-SENSOR (at -11.049 10.287) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.115)))
7 | )
8 | (fp_line (start 17.5 -11.5) (end 17.5 11.5) (layer F.Fab) (width 0.127))
9 | (fp_line (start 17.5 11.5) (end -17.5 11.5) (layer F.Fab) (width 0.127))
10 | (fp_line (start -17.5 11.5) (end -17.5 -11.5) (layer F.Fab) (width 0.127))
11 | (fp_line (start -17.5 -11.5) (end 17.5 -11.5) (layer F.Fab) (width 0.127))
12 | (fp_line (start -17.5 -11.5) (end 17.5 -11.5) (layer F.SilkS) (width 0.127))
13 | (fp_line (start 17.5 -11.5) (end 17.5 11.5) (layer F.SilkS) (width 0.127))
14 | (fp_line (start -17.5 11.5) (end -17.5 -11.5) (layer F.SilkS) (width 0.127))
15 | (fp_line (start 17.5 11.5) (end -17.5 11.5) (layer F.SilkS) (width 0.127))
16 | (fp_line (start 17.75 -11.75) (end 17.75 11.75) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start 17.75 11.75) (end -17.75 11.75) (layer F.CrtYd) (width 0.05))
18 | (fp_line (start -17.75 11.75) (end -17.75 -11.75) (layer F.CrtYd) (width 0.05))
19 | (fp_line (start -17.75 -11.75) (end 17.75 -11.75) (layer F.CrtYd) (width 0.05))
20 | (fp_circle (center -18.3 -10.1) (end -18.2 -10.1) (layer F.SilkS) (width 0.2))
21 | (fp_circle (center -18.3 -10.1) (end -18.2 -10.1) (layer F.Fab) (width 0.2))
22 | (pad 1 thru_hole rect (at -16.1 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
23 | (pad 2 thru_hole circle (at -13.56 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
24 | (pad 3 thru_hole circle (at -11.02 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
25 | (pad 4 thru_hole circle (at -8.48 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
26 | (pad 5 thru_hole circle (at -5.94 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
27 | (pad 6 thru_hole circle (at -3.4 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
28 | (pad 7 thru_hole circle (at -0.86 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
29 | (model "D:/I A N SCHULE/Gym3/TK/KiCad/Libraries/00_selfmade/3d Model/PinSocket_1x07_P2.54mm_Vertical.step"
30 | (offset (xyz -0.9 10.1 0))
31 | (scale (xyz 1 1 1))
32 | (rotate (xyz 0 0 90))
33 | )
34 | )
35 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/MODULE_SCD30.pretty/MODULE_SCD30_back.kicad_mod:
--------------------------------------------------------------------------------
1 | (module MODULE_SCD30_back (layer F.Cu) (tedit 60984C51)
2 | (fp_text reference REF** (at 14.605 -13.335) (layer B.SilkS)
3 | (effects (font (size 1 1) (thickness 0.015)))
4 | )
5 | (fp_text value SCD30-SENSOR (at 11.049 10.287) (layer B.SilkS)
6 | (effects (font (size 1 1) (thickness 0.115)) (justify mirror))
7 | )
8 | (fp_circle (center 18.3 -10.1) (end 18.2 -10.1) (layer F.Fab) (width 0.2))
9 | (fp_circle (center 18.3 -10.1) (end 18.4 -10.1) (layer B.SilkS) (width 0.2))
10 | (fp_line (start 17.75 -11.75) (end -17.75 -11.75) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start 17.75 11.75) (end 17.75 -11.75) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start -17.75 11.75) (end 17.75 11.75) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -17.75 -11.75) (end -17.75 11.75) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -17.5 11.5) (end 17.5 11.5) (layer B.SilkS) (width 0.127))
15 | (fp_line (start 17.5 11.5) (end 17.5 -11.5) (layer B.SilkS) (width 0.127))
16 | (fp_line (start -17.5 -11.5) (end -17.5 11.5) (layer B.SilkS) (width 0.127))
17 | (fp_line (start 17.5 -11.5) (end -17.5 -11.5) (layer B.SilkS) (width 0.127))
18 | (fp_line (start 17.5 -11.5) (end -17.5 -11.5) (layer F.Fab) (width 0.127))
19 | (fp_line (start 17.5 11.5) (end 17.5 -11.5) (layer F.Fab) (width 0.127))
20 | (fp_line (start -17.5 11.5) (end 17.5 11.5) (layer F.Fab) (width 0.127))
21 | (fp_line (start -17.5 -11.5) (end -17.5 11.5) (layer F.Fab) (width 0.127))
22 | (pad 1 thru_hole rect (at 16.1 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
23 | (pad 2 thru_hole circle (at 13.56 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
24 | (pad 3 thru_hole circle (at 11.02 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
25 | (pad 4 thru_hole circle (at 8.48 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
26 | (pad 5 thru_hole circle (at 5.94 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
27 | (pad 6 thru_hole circle (at 3.4 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
28 | (pad 7 thru_hole circle (at 0.86 -10.1) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask))
29 | (model "D:/I A N SCHULE/Gym3/TK/KiCad/Libraries/00_selfmade/3d Model/PinSocket_1x07_P2.54mm_Vertical.step"
30 | (offset (xyz 0.9 10.1 -1.7))
31 | (scale (xyz 1 1 1))
32 | (rotate (xyz 180 0 90))
33 | )
34 | )
35 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/SCD30.bck:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/SCD30.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/SCD30.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # SCD30
5 | #
6 | DEF SCD30 U 0 40 Y Y 1 L N
7 | F0 "U" -30 470 50 H V L BNN
8 | F1 "SCD30" -125 385 50 H V L BNN
9 | F2 "MODULE_SCD30" 200 50 50 H I L BNN
10 | F3 "" 200 50 50 H I L BNN
11 | F4 "7.0mm" 200 50 50 H I L BNN "MAXIMUM_PACKAGE_HEIGHT"
12 | F5 "D1" 200 50 50 H I L BNN "PARTREV"
13 | F6 "Sensirion" 200 50 50 H I L BNN "MANUFACTURER"
14 | F7 "Manufacturer Recommendations" 200 50 50 H I L BNN "STANDARD"
15 | DRAW
16 | S -200 350 200 -350 1 1 0 f
17 | X VDD 1 -300 -300 100 R 40 40 0 0 W
18 | X GND 2 -300 -200 100 R 40 40 0 0 w
19 | X TX/SCL 3 -300 -100 100 R 40 40 0 0 B
20 | X RX/SDA 4 -300 0 100 R 40 40 0 0 B
21 | X RDY 5 -300 100 100 R 40 40 0 0 B
22 | X PWM 6 -300 200 100 R 40 40 0 0 O
23 | X SEL 7 -300 300 100 R 40 40 0 0 I
24 | ENDDRAW
25 | ENDDEF
26 | #
27 | # SCD30_back
28 | #
29 | DEF SCD30_back U 0 40 Y Y 1 F N
30 | F0 "U" -30 470 50 H V L BNN
31 | F1 "SCD30_back" -200 400 50 H V L BNN
32 | F2 "MODULE_SCD30:MODULE_SCD30_back" -200 50 50 H I L BNN
33 | F3 "" -200 50 50 H I L BNN
34 | F4 "7.0mm" -200 50 50 H I L BNN "MAXIMUM_PACKAGE_HEIGHT"
35 | F5 "D1" -200 50 50 H I L BNN "PARTREV"
36 | F6 "Sensirion" -200 50 50 H I L BNN "MANUFACTURER"
37 | F7 "Manufacturer Recommendations" -200 50 50 H I L BNN "STANDARD"
38 | DRAW
39 | S 200 350 -200 -350 1 1 0 f
40 | X VDD 1 300 -300 100 L 40 40 0 0 W
41 | X GND 2 300 -200 100 L 40 40 0 0 w
42 | X TX/SCL 3 300 -100 100 L 40 40 0 0 B
43 | X RX/SDA 4 300 0 100 L 40 40 0 0 B
44 | X RDY 5 300 100 100 L 40 40 0 0 B
45 | X PWM 6 300 200 100 L 40 40 0 0 O
46 | X SEL 7 300 300 100 L 40 40 0 0 I
47 | ENDDRAW
48 | ENDDEF
49 | #
50 | #End Library
51 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SCD30/how-to-import.htm:
--------------------------------------------------------------------------------
1 |
Page Redirection If you are not redirected automatically, follow this link to the import guide.
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SSH1106 OLED display/1.3_OLED_v.1.0.bck:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SSH1106 OLED display/1.3_OLED_v.1.0.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SSH1106 OLED display/1.3_OLED_v.1.0.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # 1.3"OLED_Display
5 | #
6 | DEF 1.3"OLED_Display P 0 40 Y Y 1 F N
7 | F0 "P" 0 -250 50 H V C CNN
8 | F1 "1.3\"OLED_Display" 0 -350 50 H V C CNN
9 | F2 "SSH1106 OLED display:PinSocket_1x07_P2.54mm_Vertical" 150 200 50 H I C CNN
10 | F3 "" 150 200 50 H I C CNN
11 | DRAW
12 | S -350 200 350 -200 0 1 0 f
13 | X GND 1 -300 300 100 D 50 50 1 1 w
14 | X VCC 2 -200 300 100 D 50 50 1 1 W
15 | X CLK/D0 3 -100 300 100 D 50 50 1 1 B
16 | X MOSI/D1 4 0 300 100 D 50 50 1 1 B
17 | X RES 5 100 300 100 D 50 50 1 1 I
18 | X D/C 6 200 300 100 D 50 50 1 1 I
19 | X CS 7 300 300 100 D 50 50 1 1 I
20 | ENDDRAW
21 | ENDDEF
22 | #
23 | #End Library
24 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/needed_libraries/SSH1106 OLED display/SSH1106 OLED display.pretty/PinSocket_1x07_P2.54mm_Vertical.kicad_mod:
--------------------------------------------------------------------------------
1 | (module PinSocket_1x07_P2.54mm_Vertical (layer F.Cu) (tedit 6097F93D)
2 | (descr "Through hole straight socket strip, 1x07, 2.54mm pitch, single row (from Kicad 4.0.7), script generated")
3 | (tags "Through hole socket strip THT 1x07 2.54mm single row")
4 | (fp_text reference REF** (at 9.144 0 180) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value "1.3\" OLED V1.0" (at 23.876 0 90) (layer F.SilkS)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 30.988 7.112) (end 30.988 17.78) (layer F.SilkS) (width 0.12))
11 | (fp_line (start 30.988 -17.78) (end 30.988 -7.112) (layer F.SilkS) (width 0.12))
12 | (fp_line (start 25.4 -7.112) (end 25.4 7.112) (layer F.SilkS) (width 0.12))
13 | (fp_line (start 30.988 -7.112) (end 25.4 -7.112) (layer F.SilkS) (width 0.12))
14 | (fp_line (start 30.988 7.112) (end 25.4 7.112) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 30.988 17.78) (end -2.54 17.78) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -2.54 -17.78) (end 30.988 -17.78) (layer F.SilkS) (width 0.12))
17 | (fp_line (start -2.54 17.78) (end -2.54 -17.78) (layer F.SilkS) (width 0.12))
18 | (fp_text user %R (at -0.508 0 270) (layer F.Fab)
19 | (effects (font (size 1 1) (thickness 0.15)))
20 | )
21 | (pad 1 thru_hole rect (at -0.508 7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
22 | (pad 2 thru_hole oval (at -0.508 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
23 | (pad 3 thru_hole oval (at -0.508 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
24 | (pad 4 thru_hole oval (at -0.508 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
25 | (pad 5 thru_hole oval (at -0.508 -2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
26 | (pad 6 thru_hole oval (at -0.508 -5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
27 | (pad 7 thru_hole oval (at -0.508 -7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
28 | (pad 8 thru_hole circle (at 28.448 -15.24) (size 4 4) (drill 3) (layers *.Cu *.Mask))
29 | (pad 9 thru_hole circle (at 28.448 15.24) (size 4 4) (drill 3) (layers *.Cu *.Mask))
30 | (pad 10 thru_hole circle (at 0 15.24) (size 4 4) (drill 3) (layers *.Cu *.Mask))
31 | (pad 11 thru_hole circle (at 0 -15.24) (size 4 4) (drill 3) (layers *.Cu *.Mask))
32 | (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x07_P2.54mm_Vertical.wrl
33 | (offset (xyz -0.5 7.6 0))
34 | (scale (xyz 1 1 1))
35 | (rotate (xyz 0 0 0))
36 | )
37 | )
38 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/production/bom.csv:
--------------------------------------------------------------------------------
1 | Designator,Footprint,Quantity,Value,LCSC Part #
2 | 10uf_2,CP_Radial_D5.0mm_P2.50mm,1,C3,
3 | 10uf,CP_Radial_D5.0mm_P2.50mm,1,C1,
4 | 1K,R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal,1,R1,
5 | 1MHz OSC,AEL9710A,1,AEL9710A,
6 | 1uf,CP_Radial_D5.0mm_P2.50mm,1,C2,
7 | "75HC595_2, 75HC595",DIP-16_W7.62mm_Socket,2,74HC595,
8 | "C4, C5",C_Disc_D3.0mm_W1.6mm_P2.50mm,2,C(222),
9 | DD06AJSA,DD06AJSA,1,U2,
10 | ESP32-SID v2.0.1,D32Pro_HeadersOnly,1,LolinD32pro,
11 | J1,3.5MM_SWITCHCRAFT_35RAPC4BHN2,1,Audio Out,
12 | PHI Select,SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm,1,JP1,
13 | SID,DIP-28_W15.24mm_Socket,1,MOS6581_6582_8580SID,
14 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/production/designators.csv:
--------------------------------------------------------------------------------
1 | 10uf:2
2 | 1K:1
3 | 1MHz OSC:1
4 | 1uf:1
5 | 75HC595:2
6 | C4:1
7 | C5:1
8 | DD06AJSA:1
9 | ESP32-SID v2.0.1:1
10 | G***:4
11 | J1:1
12 | PHI Select:1
13 | SID:1
14 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/production/gerber.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/production/gerber.zip
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/production/positions.csv:
--------------------------------------------------------------------------------
1 | Designator,Mid X,Mid Y,Rotation,Layer
2 | 10uf_2,13.7,20.46,180.0,top
3 | 10uf,19.05,20.46,0.0,top
4 | 1K,24.13,15.04,180.0,top
5 | 1MHz OSC,33.02,22.86,180.0,top
6 | 1uf,3.54,20.46,0.0,top
7 | 75HC595_2,30.4,38.26,180.0,top
8 | 75HC595,11.12,36.82,180.0,top
9 | C4,30.48,62.3,-90.0,top
10 | C5,30.48,64.84,90.0,top
11 | DD06AJSA,4.3275,12.4125,-90.0,top
12 | ESP32-SID v2.0.1,15.24,71.12,0.0,top
13 | J1,33.02,7.62,0.0,top
14 | SID,34.26,67.38,180.0,bottom
15 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/74HC5955.kicad_mod:
--------------------------------------------------------------------------------
1 |
2 | (module SO16 (layer F.Cu) (tedit 60BD1527)
3 | (descr "Small Outline package 150 mil")
4 | (fp_text reference REF** (at -6.36252 -0.63624 900) (layer F.SilkS)
5 | (effects (font (size 1.00196850394 1.00196850394) (thickness 0.015)))
6 | )
7 | (fp_text value SO16 (at 0 0) (layer F.Fab)
8 | (effects (font (size 0.787401574803 0.787401574803) (thickness 0.015)))
9 | )
10 | (fp_line (start 5.08 -1.9558) (end -5.08 -1.9558) (layer F.SilkS) (width 0.1524))
11 | (fp_line (start -5.08 1.9558) (end 5.08 1.9558) (layer F.SilkS) (width 0.1524))
12 | (fp_line (start 5.08 1.9558) (end 5.08 -1.9558) (layer F.SilkS) (width 0.1524))
13 | (fp_arc (start -5.08 0.0) (end -5.08 -0.635) (angle 180.0) (layer F.SilkS) (width 0.1524))
14 | (fp_line (start -5.08 1.6002) (end 5.08 1.6002) (layer F.SilkS) (width 0.0508))
15 | (fp_poly
16 | (pts
17 | (xy -0.890254 -3.0988)
18 | (xy -0.381 -3.0988)
19 | (xy -0.381 -1.95856)
20 | (xy -0.890254 -1.95856)
21 | ) (layer F.Fab) (width 0.01)
22 | )
23 | (fp_poly
24 | (pts
25 | (xy -4.70042 1.9558)
26 | (xy -4.191 1.9558)
27 | (xy -4.191 3.09974)
28 | (xy -4.70042 3.09974)
29 | ) (layer F.Fab) (width 0.01)
30 | )
31 | (fp_poly
32 | (pts
33 | (xy -3.42933 1.9558)
34 | (xy -2.921 1.9558)
35 | (xy -2.921 3.0991)
36 | (xy -3.42933 3.0991)
37 | ) (layer F.Fab) (width 0.01)
38 | )
39 | (fp_poly
40 | (pts
41 | (xy -2.15947 1.9304)
42 | (xy -1.651 1.9304)
43 | (xy -1.651 3.07407)
44 | (xy -2.15947 3.07407)
45 | ) (layer F.Fab) (width 0.01)
46 | )
47 | (fp_poly
48 | (pts
49 | (xy -0.890714 1.9558)
50 | (xy -0.381 1.9558)
51 | (xy -0.381 3.10478)
52 | (xy -0.890714 3.10478)
53 | ) (layer F.Fab) (width 0.01)
54 | )
55 | (fp_poly
56 | (pts
57 | (xy -2.16023 -3.0988)
58 | (xy -1.651 -3.0988)
59 | (xy -1.651 -1.95691)
60 | (xy -2.16023 -1.95691)
61 | ) (layer F.Fab) (width 0.01)
62 | )
63 | (fp_poly
64 | (pts
65 | (xy -3.43131 -3.0988)
66 | (xy -2.921 -3.0988)
67 | (xy -2.921 -1.95712)
68 | (xy -3.43131 -1.95712)
69 | ) (layer F.Fab) (width 0.01)
70 | )
71 | (fp_poly
72 | (pts
73 | (xy -4.70327 -3.0988)
74 | (xy -4.191 -3.0988)
75 | (xy -4.191 -1.95758)
76 | (xy -4.70327 -1.95758)
77 | ) (layer F.Fab) (width 0.01)
78 | )
79 | (fp_poly
80 | (pts
81 | (xy 0.381138 1.9558)
82 | (xy 0.889 1.9558)
83 | (xy 0.889 3.09992)
84 | (xy 0.381138 3.09992)
85 | ) (layer F.Fab) (width 0.01)
86 | )
87 | (fp_poly
88 | (pts
89 | (xy 1.652 1.9558)
90 | (xy 2.159 1.9558)
91 | (xy 2.159 3.10069)
92 | (xy 1.652 3.10069)
93 | ) (layer F.Fab) (width 0.01)
94 | )
95 | (fp_poly
96 | (pts
97 | (xy 2.92247 1.9558)
98 | (xy 3.429 1.9558)
99 | (xy 3.429 3.10036)
100 | (xy 2.92247 3.10036)
101 | ) (layer F.Fab) (width 0.01)
102 | )
103 | (fp_poly
104 | (pts
105 | (xy 4.19314 1.9558)
106 | (xy 4.699 1.9558)
107 | (xy 4.699 3.10038)
108 | (xy 4.19314 3.10038)
109 | ) (layer F.Fab) (width 0.01)
110 | )
111 | (fp_poly
112 | (pts
113 | (xy 0.381136 -3.0988)
114 | (xy 0.889 -3.0988)
115 | (xy 0.889 -1.9565)
116 | (xy 0.381136 -1.9565)
117 | ) (layer F.Fab) (width 0.01)
118 | )
119 | (fp_poly
120 | (pts
121 | (xy 1.65367 -3.0988)
122 | (xy 2.159 -3.0988)
123 | (xy 2.159 -1.95897)
124 | (xy 1.65367 -1.95897)
125 | ) (layer F.Fab) (width 0.01)
126 | )
127 | (fp_poly
128 | (pts
129 | (xy 2.92672 -3.0988)
130 | (xy 3.429 -3.0988)
131 | (xy 3.429 -1.95963)
132 | (xy 2.92672 -1.95963)
133 | ) (layer F.Fab) (width 0.01)
134 | )
135 | (fp_poly
136 | (pts
137 | (xy 4.19273 -3.0988)
138 | (xy 4.699 -3.0988)
139 | (xy 4.699 -1.95661)
140 | (xy 4.19273 -1.95661)
141 | ) (layer F.Fab) (width 0.01)
142 | )
143 | (fp_line (start -5.08 1.9558) (end -5.08 0.635) (layer F.SilkS) (width 0.1524))
144 | (fp_line (start -5.08 -0.635) (end -5.08 -1.9558) (layer F.SilkS) (width 0.1524))
145 | (pad 1 smd rect (at -4.445 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
146 | (pad 2 smd rect (at -3.175 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
147 | (pad 3 smd rect (at -1.905 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
148 | (pad 4 smd rect (at -0.635 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
149 | (pad 5 smd rect (at 0.635 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
150 | (pad 6 smd rect (at 1.905 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
151 | (pad 7 smd rect (at 3.175 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
152 | (pad 8 smd rect (at 4.445 2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
153 | (pad 9 smd rect (at 4.445 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
154 | (pad 10 smd rect (at 3.175 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
155 | (pad 11 smd rect (at 1.905 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
156 | (pad 12 smd rect (at 0.635 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
157 | (pad 13 smd rect (at -0.635 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
158 | (pad 14 smd rect (at -1.905 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
159 | (pad 15 smd rect (at -3.175 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
160 | (pad 16 smd rect (at -4.445 -2.8) (size 0.6 1.2) (layers F.Cu F.Mask F.Paste))
161 | )
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/D32Pro.kicad_mod:
--------------------------------------------------------------------------------
1 | (module D32Pro (layer F.Cu) (tedit 5D452817)
2 | (descr "Wemos D32 Pro https://wiki.wemos.cc/products:d32:d32_pro")
3 | (tags "wemos lolin d32 pro")
4 | (fp_text reference REF** (at 11.5 -9) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value D32Pro (at 13.5 18 90) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_text user %R (at 11 18 90) (layer F.Fab)
11 | (effects (font (size 1 1) (thickness 0.15)))
12 | )
13 | (fp_line (start 19 24) (end 3.5 24) (layer F.SilkS) (width 0.12))
14 | (fp_line (start 3.5 24) (end 3.5 0) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 3.5 0) (end 13.5 0) (layer F.SilkS) (width 0.12))
16 | (fp_line (start 13.5 0) (end 13.5 4) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 13.5 4) (end 19 4) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 19 4) (end 19 24) (layer F.SilkS) (width 0.12))
19 | (fp_line (start -1.27 -6.858) (end 24.13 -6.858) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.27 58.166) (end 24.13 58.166) (layer F.SilkS) (width 0.12))
21 | (fp_line (start -1.27 -6.858) (end -1.27 58.166) (layer F.SilkS) (width 0.12))
22 | (fp_line (start 24.13 58.166) (end 24.13 -6.858) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -1.27 39.37) (end 1.27 39.37) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 1.27 39.37) (end 1.27 -1.27) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 1.27 -1.27) (end -1.27 -1.27) (layer F.SilkS) (width 0.12))
26 | (fp_circle (center 21.844 -4.572) (end 21.844 -6.096) (layer Eco2.User) (width 0.12))
27 | (fp_circle (center 1.016 -4.572) (end 1.016 -6.096) (layer Eco2.User) (width 0.12))
28 | (fp_line (start -1.27 41.148) (end 2.794 41.148) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 2.794 41.148) (end 2.794 46.99) (layer F.SilkS) (width 0.12))
30 | (fp_line (start 2.794 46.99) (end -1.27 46.99) (layer F.SilkS) (width 0.12))
31 | (fp_line (start -1.27 49.022) (end 4.826 49.022) (layer F.SilkS) (width 0.12))
32 | (fp_line (start 4.826 49.022) (end 4.826 57.15) (layer F.SilkS) (width 0.12))
33 | (fp_line (start 4.826 57.15) (end -1.27 57.15) (layer F.SilkS) (width 0.12))
34 | (fp_line (start 9.398 58.166) (end 9.398 52.832) (layer F.SilkS) (width 0.12))
35 | (fp_line (start 9.398 52.832) (end 16.51 52.832) (layer F.SilkS) (width 0.12))
36 | (fp_line (start 16.51 52.832) (end 16.51 58.166) (layer F.SilkS) (width 0.12))
37 | (fp_line (start 23.114 57.404) (end 23.114 54.356) (layer F.SilkS) (width 0.12))
38 | (fp_line (start 23.114 54.356) (end 19.05 54.356) (layer F.SilkS) (width 0.12))
39 | (fp_line (start 19.05 54.356) (end 19.05 57.404) (layer F.SilkS) (width 0.12))
40 | (fp_line (start 19.05 57.404) (end 23.114 57.404) (layer F.SilkS) (width 0.12))
41 | (fp_line (start 24.13 52.07) (end 19.05 52.07) (layer F.SilkS) (width 0.12))
42 | (fp_line (start 19.05 52.07) (end 19.05 40.894) (layer F.SilkS) (width 0.12))
43 | (fp_line (start 19.05 40.894) (end 24.13 40.894) (layer F.SilkS) (width 0.12))
44 | (fp_line (start 11.938 24.892) (end 11.938 37.084) (layer F.SilkS) (width 0.12))
45 | (fp_line (start 11.938 37.084) (end 14.986 37.084) (layer F.SilkS) (width 0.12))
46 | (fp_line (start 14.986 37.084) (end 14.986 24.892) (layer F.SilkS) (width 0.12))
47 | (fp_line (start 14.986 24.892) (end 11.938 24.892) (layer F.SilkS) (width 0.12))
48 | (fp_circle (center 6.35 38.608) (end 6.35 37.084) (layer Eco2.User) (width 0.12))
49 | (fp_circle (center 21.082 55.88) (end 21.59 55.118) (layer F.SilkS) (width 0.12))
50 | (fp_line (start 24.13 39.37) (end 21.59 39.37) (layer F.SilkS) (width 0.12))
51 | (fp_line (start 21.59 39.37) (end 21.59 -1.27) (layer F.SilkS) (width 0.12))
52 | (fp_line (start 21.59 -1.27) (end 24.13 -1.27) (layer F.SilkS) (width 0.12))
53 | (fp_line (start 1.27 1.27) (end -1.27 1.27) (layer F.SilkS) (width 0.12))
54 | (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
55 | (pad 2 thru_hole circle (at 0 2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
56 | (pad 3 thru_hole circle (at 0 5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
57 | (pad 4 thru_hole circle (at 0 7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
58 | (pad 5 thru_hole circle (at 0 10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
59 | (pad 6 thru_hole circle (at 0 12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
60 | (pad 7 thru_hole circle (at 0 15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
61 | (pad 8 thru_hole circle (at 0 17.78) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
62 | (pad 9 thru_hole circle (at 0 20.32) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
63 | (pad 10 thru_hole circle (at 0 22.86) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
64 | (pad 11 thru_hole circle (at 0 25.4) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
65 | (pad 12 thru_hole circle (at 0 27.94) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
66 | (pad 13 thru_hole circle (at 0 30.48) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
67 | (pad 14 thru_hole circle (at 0 33.02) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
68 | (pad 15 thru_hole circle (at 0 35.56) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
69 | (pad 16 thru_hole circle (at 0 38.1) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
70 | (pad 19 thru_hole circle (at 22.86 33.02) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
71 | (pad 17 thru_hole circle (at 22.86 38.1) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
72 | (pad 18 thru_hole circle (at 22.86 35.56) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
73 | (pad 20 thru_hole circle (at 22.86 30.48) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
74 | (pad 21 thru_hole circle (at 22.86 27.94) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
75 | (pad 22 thru_hole circle (at 22.86 25.4) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
76 | (pad 23 thru_hole circle (at 22.86 22.86) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
77 | (pad 24 thru_hole circle (at 22.86 20.32) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
78 | (pad 25 thru_hole circle (at 22.86 17.78) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
79 | (pad 26 thru_hole circle (at 22.86 15.24) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
80 | (pad 27 thru_hole circle (at 22.86 12.7) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
81 | (pad 28 thru_hole circle (at 22.86 10.16) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
82 | (pad 29 thru_hole circle (at 22.86 7.62) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
83 | (pad 30 thru_hole circle (at 22.86 5.08) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
84 | (pad 31 thru_hole circle (at 22.86 2.54) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
85 | (pad 32 thru_hole circle (at 22.86 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
86 | (model ${KISYS3DMOD}/Module.3dshapes/Arduino_Nano_WithMountingHoles.wrl
87 | (at (xyz 0 0 0))
88 | (scale (xyz 1 1 1))
89 | (rotate (xyz 0 0 0))
90 | )
91 | )
92 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/DD06AJSA.kicad_mod:
--------------------------------------------------------------------------------
1 | (module DD06AJSA (layer F.Cu) (tedit 5AA70ADB)
2 | (fp_text reference U2 (at 7.62 1.27) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value DD06AJSA (at 5.08 -21.59) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_line (start 10.16 0) (end 10.16 -20) (layer F.Fab) (width 0.15))
9 | (fp_line (start 0 -20) (end 10.16 -20) (layer F.Fab) (width 0.15))
10 | (fp_line (start 0 0) (end 10.16 0) (layer F.Fab) (width 0.15))
11 | (fp_line (start 0 0) (end 0 -20) (layer F.Fab) (width 0.15))
12 | (pad 1 thru_hole circle (at 1.27 -1.27) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
13 | (pad 2 thru_hole circle (at 3.81 -1.27) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
14 | (pad 3 thru_hole circle (at 6.35 -1.27) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
15 | (pad 4 thru_hole circle (at 8.89 -1.27) (size 1.8 1.8) (drill 1) (layers *.Cu *.Mask))
16 | )
17 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/LED_RGBA_RECT_5.0mm_2.45mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module LED_RGBA_RECT_5.0mm_2.45mm (layer F.Cu) (tedit 5D489847)
2 | (descr "LED, diameter 5.0mm, 2 pins, diameter 5.0mm, 3 pins, diameter 5.0mm, 4 pins, http://www.kingbright.com/attachments/file/psearch/000/00/00/L-154A4SUREQBFZGEW(Ver.9A).pdf")
3 | (tags "LED diameter 5.0mm 2 pins diameter 5.0mm 3 pins diameter 5.0mm 4 pins RGB RGBLED")
4 | (fp_text reference REF** (at 2.2 -2.6) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value LED_RGBA_RECT_5.0mm_2.45mm (at 2.1 3) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -1 -1.6) (end -1 1.6) (layer F.CrtYd) (width 0.05))
11 | (fp_line (start -1 1.6) (end 4.8 1.6) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 4.8 1.6) (end 4.8 -1.6) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start 4.8 -1.6) (end -1 -1.6) (layer F.CrtYd) (width 0.05))
14 | (fp_text user %R (at 2.2 -2.6) (layer F.Fab)
15 | (effects (font (size 1 1) (thickness 0.15)))
16 | )
17 | (fp_line (start -0.6 1.2) (end -0.6 -1.2) (layer F.Fab) (width 0.12))
18 | (fp_line (start -0.6 -1.2) (end 4.4 -1.2) (layer F.Fab) (width 0.12))
19 | (fp_line (start 4.4 -1.2) (end 4.4 1.2) (layer F.Fab) (width 0.12))
20 | (fp_line (start 4.4 1.2) (end -0.6 1.2) (layer F.Fab) (width 0.12))
21 | (fp_line (start -0.7 -1.3) (end 4.5 -1.3) (layer F.SilkS) (width 0.12))
22 | (fp_line (start 4.5 -1.3) (end 4.5 1.3) (layer F.SilkS) (width 0.12))
23 | (fp_line (start 4.5 1.3) (end -0.7 1.3) (layer F.SilkS) (width 0.12))
24 | (fp_line (start -0.7 1.3) (end -0.7 -1.3) (layer F.SilkS) (width 0.12))
25 | (pad 1 thru_hole rect (at 0 0) (size 1.07 1.8) (drill 0.9) (layers *.Cu *.Mask))
26 | (pad 2 thru_hole oval (at 1.27 0) (size 1.07 1.8) (drill 0.9) (layers *.Cu *.Mask))
27 | (pad 3 thru_hole oval (at 2.54 0) (size 1.07 1.8) (drill 0.9) (layers *.Cu *.Mask))
28 | (pad 4 thru_hole oval (at 3.81 0) (size 1.07 1.8) (drill 0.9) (layers *.Cu *.Mask))
29 | (model ${KIPRJMOD}/project_module.pretty/led_rgb_rectangle.step
30 | (offset (xyz 1.9 0 9.5))
31 | (scale (xyz 1 1 1))
32 | (rotate (xyz 0 0 0))
33 | )
34 | )
35 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/SW_420_L10.0mm_D5.5mm_P15.00mm_Horizontal.kicad_mod:
--------------------------------------------------------------------------------
1 | (module SW_420_L10.0mm_D5.5mm_P15.00mm_Horizontal (layer F.Cu) (tedit 5D47D46A)
2 | (descr "CP, Axial series, Axial, Horizontal, pin pitch=15mm, , length*diameter=10*6mm^2, Electrolytic Capacitor, , http://www.vishay.com/docs/28325/021asm.pdf")
3 | (tags "CP Axial series Axial Horizontal pin pitch 15mm length 10mm diameter 6mm Electrolytic Capacitor")
4 | (fp_text reference REF** (at 7.5 -4.12) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value SW_420_L10.0mm_D5.5mm_P15.00mm_Horizontal (at 7.5 4.12) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 2.5 -2.8) (end 2.5 2.7) (layer F.Fab) (width 0.1))
11 | (fp_line (start 12.5 -2.8) (end 12.5 2.7) (layer F.Fab) (width 0.1))
12 | (fp_line (start 2.5 -2.8) (end 12.5 -2.8) (layer F.Fab) (width 0.1))
13 | (fp_line (start 2.5 2.7) (end 12.5 2.7) (layer F.Fab) (width 0.1))
14 | (fp_line (start 0 0) (end 2.5 0) (layer F.Fab) (width 0.1))
15 | (fp_line (start 15 0) (end 12.5 0) (layer F.Fab) (width 0.1))
16 | (fp_line (start 2.38 -2.9) (end 2.38 2.8) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.62 -2.9) (end 12.62 2.8) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 2.38 -2.9) (end 12.62 -2.9) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 2.38 2.8) (end 12.62 2.8) (layer F.SilkS) (width 0.12))
20 | (fp_line (start 1.24 0) (end 2.38 0) (layer F.SilkS) (width 0.12))
21 | (fp_line (start 13.76 0) (end 12.62 0) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -1.25 -3.25) (end -1.25 3.25) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start -1.25 3.25) (end 16.25 3.25) (layer F.CrtYd) (width 0.05))
24 | (fp_line (start 16.25 3.25) (end 16.25 -3.25) (layer F.CrtYd) (width 0.05))
25 | (fp_line (start 16.25 -3.25) (end -1.25 -3.25) (layer F.CrtYd) (width 0.05))
26 | (fp_text user %R (at 7.5 0) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.15)))
28 | )
29 | (pad 1 thru_hole rect (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
30 | (pad 2 thru_hole oval (at 15 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
31 | (model ${KIPRJMOD}/project_module.pretty/sw-420_15mm_Horizontal.step
32 | (offset (xyz 7.5 0 0))
33 | (scale (xyz 1 1 1))
34 | (rotate (xyz 0 0 0))
35 | )
36 | )
37 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/TFT_1_8_SPI_128x160.kicad_mod:
--------------------------------------------------------------------------------
1 | (module TFT_1_8_SPI_128x160 (layer F.Cu) (tedit 5D47E7AB)
2 | (fp_text reference REF** (at -3 -5) (layer F.SilkS)
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value TFT_1_8_SPI_128x160 (at 2.5 -8.5) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_line (start -1 -1) (end 1 -1) (layer F.SilkS) (width 0.12))
9 | (fp_line (start 1 -1) (end 1 38.5) (layer F.SilkS) (width 0.12))
10 | (fp_line (start 1 38.5) (end -1 38.5) (layer F.SilkS) (width 0.12))
11 | (fp_line (start -1 38.5) (end -1 -1) (layer F.SilkS) (width 0.12))
12 | (fp_line (start -1 -1) (end -1 -4) (layer F.SilkS) (width 0.12))
13 | (fp_line (start -1 -4) (end 50 -4) (layer F.SilkS) (width 0.12))
14 | (fp_line (start 50 -4) (end 50 42) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 50 42) (end -1 42) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -1 42) (end -1 38.5) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 50 1.5) (end 5 1.5) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 5 1.5) (end 5 35.5) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 5 35.5) (end 50 35.5) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1 -4) (end 50 -4) (layer F.CrtYd) (width 0.12))
21 | (fp_line (start 50 -4) (end 50 42) (layer F.CrtYd) (width 0.12))
22 | (fp_line (start 50 42) (end -1 42) (layer F.CrtYd) (width 0.12))
23 | (fp_line (start -1 42) (end -1 -4) (layer F.CrtYd) (width 0.12))
24 | (fp_line (start -1 -4) (end 50 -4) (layer F.Fab) (width 0.12))
25 | (fp_line (start 50 -4) (end 50 42) (layer F.Fab) (width 0.12))
26 | (fp_line (start 50 42) (end -1 42) (layer F.Fab) (width 0.12))
27 | (fp_line (start -1 42) (end -1 -4) (layer F.Fab) (width 0.12))
28 | (fp_line (start -1 -2.5) (end 0.5 -4) (layer F.Fab) (width 0.12))
29 | (pad 1 thru_hole rect (at 0 0) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
30 | (pad 2 thru_hole circle (at 0 2.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
31 | (pad 3 thru_hole circle (at 0 5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
32 | (pad 4 thru_hole circle (at 0 7.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
33 | (pad 5 thru_hole circle (at 0 10) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
34 | (pad 6 thru_hole circle (at 0 12.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
35 | (pad 7 thru_hole circle (at 0 15) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
36 | (pad 8 thru_hole circle (at 0 17.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
37 | (pad 9 thru_hole circle (at 0 20) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
38 | (pad 10 thru_hole circle (at 0 22.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
39 | (pad 11 thru_hole circle (at 0 25) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
40 | (pad 12 thru_hole circle (at 0 27.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
41 | (pad 13 thru_hole circle (at 0 30) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
42 | (pad 14 thru_hole circle (at 0 32.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
43 | (pad 15 thru_hole circle (at 0 35) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
44 | (pad 16 thru_hole circle (at 0 37.5) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask))
45 | (model ${KIPRJMOD}/project_module.pretty/tft_1_8in_128x160.step
46 | (offset (xyz 24.25 -42.05 2.54))
47 | (scale (xyz 1 1 1))
48 | (rotate (xyz 0 0 0))
49 | )
50 | )
51 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/TFT_1_8_SPI_128x160_PinSocket_1x16_P2.54mm_Vertical.kicad_mod:
--------------------------------------------------------------------------------
1 | (module TFT_1_8_SPI_128x160_PinSocket_1x16_P2.54mm_Vertical (layer F.Cu) (tedit 5D4887F1)
2 | (descr "Through hole straight socket strip, 1x16, 2.54mm pitch, single row (from Kicad 4.0.7), script generated")
3 | (tags "Through hole socket strip THT 1x16 2.54mm single row")
4 | (fp_text reference REF** (at 0 -2.77) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value TFT_1_8_SPI_128x160_PinSocket_1x16_P2.54mm_Vertical (at 3 19.5 90) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start -1.27 -1.27) (end 0.635 -1.27) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.635 -1.27) (end 1.27 -0.635) (layer F.Fab) (width 0.1))
12 | (fp_line (start 1.27 -0.635) (end 1.27 39.37) (layer F.Fab) (width 0.1))
13 | (fp_line (start 1.27 39.37) (end -1.27 39.37) (layer F.Fab) (width 0.1))
14 | (fp_line (start -1.27 39.37) (end -1.27 -1.27) (layer F.Fab) (width 0.1))
15 | (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
16 | (fp_line (start -1.33 1.27) (end -1.33 39.43) (layer F.SilkS) (width 0.12))
17 | (fp_line (start -1.33 39.43) (end 1.33 39.43) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 1.33 1.27) (end 1.33 39.43) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12))
20 | (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12))
21 | (fp_line (start -1.8 -1.8) (end 1.75 -1.8) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 1.75 -1.8) (end 1.75 39.9) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 1.75 39.9) (end -1.8 39.9) (layer F.CrtYd) (width 0.05))
24 | (fp_line (start -1.8 39.9) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05))
25 | (fp_text user %R (at -3 19 90) (layer F.Fab)
26 | (effects (font (size 1 1) (thickness 0.15)))
27 | )
28 | (fp_circle (center 43.65 -0.95) (end 45.025 -0.95) (layer Eco2.User) (width 0.12))
29 | (fp_line (start 43.65 1.2) (end 43.65 -3.1) (layer Eco2.User) (width 0.12))
30 | (fp_line (start 41.55 -0.95) (end 45.75 -0.95) (layer Eco2.User) (width 0.12))
31 | (fp_text user 2.75 (at 46.55 -2.55) (layer Eco2.User)
32 | (effects (font (size 1 1) (thickness 0.15)))
33 | )
34 | (fp_line (start -1.5 -4) (end 49.5 -4) (layer Eco2.User) (width 0.12))
35 | (fp_line (start 49.5 -4) (end 49.5 42) (layer Eco2.User) (width 0.12))
36 | (fp_line (start 49.5 42) (end -1.5 42) (layer Eco2.User) (width 0.12))
37 | (fp_line (start -1.5 42) (end -1.5 -4) (layer Eco2.User) (width 0.12))
38 | (fp_line (start 7 -4) (end 7 16) (layer Eco2.User) (width 0.12))
39 | (fp_line (start 7 16) (end 33.5 16) (layer Eco2.User) (width 0.12))
40 | (fp_line (start 35.5 7) (end 35.5 -4) (layer Eco2.User) (width 0.12))
41 | (fp_line (start 33.5 16) (end 33.5 10.5) (layer Eco2.User) (width 0.12))
42 | (fp_line (start 33.5 10.5) (end 35.5 7) (layer Eco2.User) (width 0.12))
43 | (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
44 | (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
45 | (pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
46 | (pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
47 | (pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
48 | (pad 6 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
49 | (pad 7 thru_hole oval (at 0 15.24) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
50 | (pad 8 thru_hole oval (at 0 17.78) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
51 | (pad 9 thru_hole oval (at 0 20.32) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
52 | (pad 10 thru_hole oval (at 0 22.86) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
53 | (pad 11 thru_hole oval (at 0 25.4) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
54 | (pad 12 thru_hole oval (at 0 27.94) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
55 | (pad 13 thru_hole oval (at 0 30.48) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
56 | (pad 14 thru_hole oval (at 0 33.02) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
57 | (pad 15 thru_hole oval (at 0 35.56) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
58 | (pad 16 thru_hole oval (at 0 38.1) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
59 | (pad "" np_thru_hole circle (at 43.65 -0.95) (size 3 3) (drill 2.75) (layers *.Cu *.Mask))
60 | (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_1x16_P2.54mm_Vertical.wrl
61 | (at (xyz 0 0 0))
62 | (scale (xyz 1 1 1))
63 | (rotate (xyz 0 0 0))
64 | )
65 | (model ${KIPRJMOD}/project_module.pretty/tft_1_8in_128x160.step
66 | (offset (xyz 24.25 -42.05 10))
67 | (scale (xyz 1 1 1))
68 | (rotate (xyz 0 0 0))
69 | )
70 | (model ${KIPRJMOD}/project_module.pretty/M2_5x10-Spacer.step
71 | (offset (xyz 43.65 1.1 0))
72 | (scale (xyz 1 1 1))
73 | (rotate (xyz 0 0 0))
74 | )
75 | (model ${KIPRJMOD}/project_module.pretty/M2_5x5-Screw.step
76 | (offset (xyz 43.65 1.1 11.6))
77 | (scale (xyz 1 1 1))
78 | (rotate (xyz 0 0 0))
79 | )
80 | (model ${KIPRJMOD}/project_module.pretty/M2_5x5-Screw.step
81 | (offset (xyz 43.65 1.1 -1.8))
82 | (scale (xyz 1 1 1))
83 | (rotate (xyz 180 0 0))
84 | )
85 | )
86 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/hole_0_5mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module hole_0_5mm (layer F.Cu) (tedit 5D2F8492)
2 | (fp_text reference REF** (at 0 1.6) (layer F.SilkS) hide
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value hole_0_5mm (at 0 -1.5) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (pad "" np_thru_hole circle (at 0 0) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask))
9 | )
10 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/hole_1mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module hole_1mm (layer F.Cu) (tedit 5D2F848B)
2 | (fp_text reference REF** (at 0 1.6) (layer F.SilkS) hide
3 | (effects (font (size 1 1) (thickness 0.15)))
4 | )
5 | (fp_text value hole_1mm (at 0 -1.5) (layer F.Fab)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (pad "" np_thru_hole circle (at 0 0) (size 1 1) (drill 1) (layers *.Cu *.Mask))
9 | )
10 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/logo_marsu31_L5mm_H6mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module logo_marsu31_L5mm_H6mm (layer F.Cu) (tedit 5D337EC7)
2 | (fp_text reference G*** (at 0 0) (layer F.SilkS) hide
3 | (effects (font (size 1.524 1.524) (thickness 0.3)))
4 | )
5 | (fp_text value LOGO (at 0.75 0) (layer F.SilkS) hide
6 | (effects (font (size 1.524 1.524) (thickness 0.3)))
7 | )
8 | (fp_arc (start -0.8 -2.2) (end -1.8 -2.2) (angle -180) (layer F.SilkS) (width 0.2))
9 | (fp_arc (start -0.800558 0.699999) (end -0.200559 -2.6) (angle -20.59999543) (layer F.SilkS) (width 0.2))
10 | (fp_line (start -0.8 -1.9) (end -0.9 -1.7) (layer F.SilkS) (width 0.2))
11 | (fp_line (start -0.9 -1.7) (end -0.8 -1.4) (layer F.SilkS) (width 0.2))
12 | (fp_line (start -0.8 -1.4) (end -0.7 -1.7) (layer F.SilkS) (width 0.2))
13 | (fp_line (start -0.7 -1.7) (end -0.8 -1.9) (layer F.SilkS) (width 0.2))
14 | (fp_circle (center -0.3 -2.1) (end -0.1 -2.1) (layer F.SilkS) (width 0.2))
15 | (fp_circle (center -1.3 -2.1) (end -1.1 -2.1) (layer F.SilkS) (width 0.2))
16 | (fp_arc (start 0.8 -1.1) (end -1.5 -1.1) (angle -66.5) (layer F.SilkS) (width 0.2))
17 | (fp_arc (start 0.277419 2.510934) (end 1.18665 1.24655) (angle -49.74530259) (layer F.SilkS) (width 0.2))
18 | (fp_arc (start 3 -2.5) (end -0.04735 -0.476666) (angle -43.88843211) (layer F.SilkS) (width 0.2))
19 | (fp_arc (start 0.009812 2.40999) (end 0.609811 2.009991) (angle -101.3) (layer F.SilkS) (width 0.2))
20 | (fp_circle (center -0.6 2.1) (end -0.376393 2.1) (layer F.SilkS) (width 0.2))
21 | (fp_line (start 0.2 1.7) (end 0.9 1.1) (layer F.SilkS) (width 0.2))
22 | (fp_arc (start 1.3 -2) (end 0.300001 -1.500001) (angle -14.6) (layer F.SilkS) (width 0.2))
23 | (fp_arc (start 0.6 -0.5) (end 0.2 -2.5) (angle -21.59531971) (layer F.SilkS) (width 0.2))
24 | (fp_arc (start -2.4 -0.4) (end -1.2 -2.3) (angle -17.02052561) (layer F.SilkS) (width 0.2))
25 | (fp_circle (center 0.7 2.2) (end 0.923607 2.2) (layer F.SilkS) (width 0.2))
26 | (fp_arc (start 0.4 -0.7) (end 0.7 -1.1) (angle -153.3999984) (layer F.SilkS) (width 0.2))
27 | (fp_line (start 1.18665 1.24655) (end 2.6 2) (layer F.SilkS) (width 0.2))
28 | (fp_line (start 2.6 2) (end 2 1) (layer F.SilkS) (width 0.2))
29 | (fp_arc (start -2.7 2.8) (end 2.20649 1.070794) (angle -26.37071613) (layer F.SilkS) (width 0.2))
30 | (fp_line (start 0.7 -1.1) (end 0.927841 -0.928615) (layer F.SilkS) (width 0.2))
31 | )
32 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm (layer F.Cu) (tedit 5D472FEE)
2 | (descr "Alps rotary encoder, EC12E... with switch, vertical shaft, http://www.alps.com/prod/info/E/HTML/Encoder/Incremental/EC11/EC11E15204A3.html")
3 | (tags "rotary encoder")
4 | (fp_text reference REF** (at 2.8 -4.7) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm (at 7.5 10.4) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_text user %R (at 11.1 6.3) (layer F.Fab)
11 | (effects (font (size 1 1) (thickness 0.15)))
12 | )
13 | (fp_line (start 7 2.5) (end 8 2.5) (layer F.SilkS) (width 0.12))
14 | (fp_line (start 7.5 2) (end 7.5 3) (layer F.SilkS) (width 0.12))
15 | (fp_line (start 13.6 6) (end 13.6 8.4) (layer F.SilkS) (width 0.12))
16 | (fp_line (start 13.6 1.2) (end 13.6 3.8) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 13.6 -3.4) (end 13.6 -1) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 4.5 2.5) (end 10.5 2.5) (layer F.Fab) (width 0.12))
19 | (fp_line (start 7.5 -0.5) (end 7.5 5.5) (layer F.Fab) (width 0.12))
20 | (fp_line (start 0.3 -1.6) (end 0 -1.3) (layer F.SilkS) (width 0.12))
21 | (fp_line (start -0.3 -1.6) (end 0.3 -1.6) (layer F.SilkS) (width 0.12))
22 | (fp_line (start 0 -1.3) (end -0.3 -1.6) (layer F.SilkS) (width 0.12))
23 | (fp_line (start 1.4 -3.4) (end 1.4 8.4) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 5.5 -3.4) (end 1.4 -3.4) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 5.5 8.4) (end 1.4 8.4) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 13.6 8.4) (end 9.5 8.4) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 9.5 -3.4) (end 13.6 -3.4) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 1.5 -2.2) (end 2.5 -3.3) (layer F.Fab) (width 0.12))
29 | (fp_line (start 1.5 8.3) (end 1.5 -2.2) (layer F.Fab) (width 0.12))
30 | (fp_line (start 13.5 8.3) (end 1.5 8.3) (layer F.Fab) (width 0.12))
31 | (fp_line (start 13.5 -3.3) (end 13.5 8.3) (layer F.Fab) (width 0.12))
32 | (fp_line (start 2.5 -3.3) (end 13.5 -3.3) (layer F.Fab) (width 0.12))
33 | (fp_line (start -1.5 -4.6) (end 16 -4.6) (layer F.CrtYd) (width 0.05))
34 | (fp_line (start -1.5 -4.6) (end -1.5 9.6) (layer F.CrtYd) (width 0.05))
35 | (fp_line (start 16 9.6) (end 16 -4.6) (layer F.CrtYd) (width 0.05))
36 | (fp_line (start 16 9.6) (end -1.5 9.6) (layer F.CrtYd) (width 0.05))
37 | (fp_circle (center 7.5 2.5) (end 10.5 2.5) (layer F.SilkS) (width 0.12))
38 | (fp_circle (center 7.5 2.5) (end 10.5 2.5) (layer F.Fab) (width 0.12))
39 | (pad S1 thru_hole circle (at 14.5 5) (size 2 2) (drill 1) (layers *.Cu *.Mask))
40 | (pad S2 thru_hole circle (at 14.5 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
41 | (pad MP thru_hole rect (at 7.5 8.1) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
42 | (pad MP thru_hole rect (at 7.5 -3.1) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
43 | (pad B thru_hole circle (at 0 5) (size 2 2) (drill 1) (layers *.Cu *.Mask))
44 | (pad C thru_hole circle (at 0 2.5) (size 2 2) (drill 1) (layers *.Cu *.Mask))
45 | (pad A thru_hole rect (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
46 | (model ${KISYS3DMOD}/Rotary_Encoder.3dshapes/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm.wrl
47 | (at (xyz 0 0 0))
48 | (scale (xyz 1 1 1))
49 | (rotate (xyz 0 0 0))
50 | )
51 | (model ${KIPRJMOD}/project_module.pretty/rotative_push_button.step
52 | (offset (xyz 7.5 -2.5 7))
53 | (scale (xyz 1 1 1))
54 | (rotate (xyz 0 0 0))
55 | )
56 | (model ${KIPRJMOD}/project_module.pretty/rotative_push_button_capuchon.step
57 | (offset (xyz 7.5 -2.5 14))
58 | (scale (xyz 1 1 1))
59 | (rotate (xyz 0 0 0))
60 | )
61 | )
62 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_SW_PUSH-12mm-BLUE.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_SW_PUSH-12mm-BLUE (layer F.Cu) (tedit 5D469A6C)
2 | (descr "SW PUSH 12mm https://www.e-switch.com/system/asset/product_line/data_sheet/143/TL1100.pdf")
3 | (tags "tact sw push 12mm")
4 | (fp_text reference REF** (at 6.08 -4.66) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_SW_PUSH-12mm-BLUE (at 6.62 9.93) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 0.25 8.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.25 -3.5) (end 12.25 -3.5) (layer F.Fab) (width 0.1))
12 | (fp_line (start 12.25 -3.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
13 | (fp_text user %R (at 6.35 2.54) (layer F.Fab)
14 | (effects (font (size 1 1) (thickness 0.15)))
15 | )
16 | (fp_line (start 0.1 -3.65) (end 12.4 -3.65) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.4 0.93) (end 12.4 4.07) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 12.4 8.65) (end 0.1 8.65) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.1 -0.93) (end 0.1 -3.65) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.77 -3.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -1.77 -3.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 14.25 8.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 14.25 8.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
24 | (fp_circle (center 6.35 2.54) (end 10.16 5.08) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 0.25 -3.5) (end 0.25 8.5) (layer F.Fab) (width 0.1))
26 | (fp_line (start 0.1 8.65) (end 0.1 5.93) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 0.1 4.07) (end 0.1 0.93) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 12.4 5.93) (end 12.4 8.65) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 12.4 -3.65) (end 12.4 -0.93) (layer F.SilkS) (width 0.12))
30 | (pad 1 thru_hole oval (at 12.5 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
31 | (pad 2 thru_hole oval (at 12.5 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole oval (at 0 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 0 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
34 | (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_PUSH-12mm.wrl
35 | (at (xyz 0 0 0))
36 | (scale (xyz 1 1 1))
37 | (rotate (xyz 0 0 0))
38 | )
39 | (model ${KIPRJMOD}/project_module.pretty/push_button.step
40 | (offset (xyz 6 -2.54 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 90))
43 | )
44 | (model ${KIPRJMOD}/project_module.pretty/push_button_capuchon_bleu.step
45 | (offset (xyz 6 -2.5 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
50 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_SW_PUSH-12mm-GREEN.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_SW_PUSH-12mm-GREEN (layer F.Cu) (tedit 5D469A57)
2 | (descr "SW PUSH 12mm https://www.e-switch.com/system/asset/product_line/data_sheet/143/TL1100.pdf")
3 | (tags "tact sw push 12mm")
4 | (fp_text reference REF** (at 6.08 -4.66) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_SW_PUSH-12mm-GREEN (at 6.62 9.93) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 0.25 8.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.25 -3.5) (end 12.25 -3.5) (layer F.Fab) (width 0.1))
12 | (fp_line (start 12.25 -3.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
13 | (fp_text user %R (at 6.35 2.54) (layer F.Fab)
14 | (effects (font (size 1 1) (thickness 0.15)))
15 | )
16 | (fp_line (start 0.1 -3.65) (end 12.4 -3.65) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.4 0.93) (end 12.4 4.07) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 12.4 8.65) (end 0.1 8.65) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.1 -0.93) (end 0.1 -3.65) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.77 -3.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -1.77 -3.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 14.25 8.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 14.25 8.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
24 | (fp_circle (center 6.35 2.54) (end 10.16 5.08) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 0.25 -3.5) (end 0.25 8.5) (layer F.Fab) (width 0.1))
26 | (fp_line (start 0.1 8.65) (end 0.1 5.93) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 0.1 4.07) (end 0.1 0.93) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 12.4 5.93) (end 12.4 8.65) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 12.4 -3.65) (end 12.4 -0.93) (layer F.SilkS) (width 0.12))
30 | (pad 1 thru_hole oval (at 12.5 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
31 | (pad 2 thru_hole oval (at 12.5 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole oval (at 0 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 0 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
34 | (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_PUSH-12mm.wrl
35 | (at (xyz 0 0 0))
36 | (scale (xyz 1 1 1))
37 | (rotate (xyz 0 0 0))
38 | )
39 | (model ${KIPRJMOD}/project_module.pretty/push_button.step
40 | (offset (xyz 6 -2.54 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 90))
43 | )
44 | (model ${KIPRJMOD}/project_module.pretty/push_button_capuchon_vert.step
45 | (offset (xyz 6 -2.5 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
50 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_SW_PUSH-12mm-RED.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_SW_PUSH-12mm-RED (layer F.Cu) (tedit 5D469AE6)
2 | (descr "SW PUSH 12mm https://www.e-switch.com/system/asset/product_line/data_sheet/143/TL1100.pdf")
3 | (tags "tact sw push 12mm")
4 | (fp_text reference REF** (at 6.08 -4.66) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_SW_PUSH-12mm-RED (at 6.62 9.93) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 0.25 8.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.25 -3.5) (end 12.25 -3.5) (layer F.Fab) (width 0.1))
12 | (fp_line (start 12.25 -3.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
13 | (fp_text user %R (at 6.35 2.54) (layer F.Fab)
14 | (effects (font (size 1 1) (thickness 0.15)))
15 | )
16 | (fp_line (start 0.1 -3.65) (end 12.4 -3.65) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.4 0.93) (end 12.4 4.07) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 12.4 8.65) (end 0.1 8.65) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.1 -0.93) (end 0.1 -3.65) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.77 -3.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -1.77 -3.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 14.25 8.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 14.25 8.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
24 | (fp_circle (center 6.35 2.54) (end 10.16 5.08) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 0.25 -3.5) (end 0.25 8.5) (layer F.Fab) (width 0.1))
26 | (fp_line (start 0.1 8.65) (end 0.1 5.93) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 0.1 4.07) (end 0.1 0.93) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 12.4 5.93) (end 12.4 8.65) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 12.4 -3.65) (end 12.4 -0.93) (layer F.SilkS) (width 0.12))
30 | (pad 1 thru_hole oval (at 12.5 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
31 | (pad 2 thru_hole oval (at 12.5 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole oval (at 0 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 0 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
34 | (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_PUSH-12mm.wrl
35 | (at (xyz 0 0 0))
36 | (scale (xyz 1 1 1))
37 | (rotate (xyz 0 0 0))
38 | )
39 | (model ${KIPRJMOD}/project_module.pretty/push_button.step
40 | (offset (xyz 6 -2.54 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 90))
43 | )
44 | (model ${KIPRJMOD}/project_module.pretty/push_button_capuchon_rouge.step
45 | (offset (xyz 6 -2.5 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
50 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_SW_PUSH-12mm-YELLOW.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_SW_PUSH-12mm-YELLOW (layer F.Cu) (tedit 5D469A41)
2 | (descr "SW PUSH 12mm https://www.e-switch.com/system/asset/product_line/data_sheet/143/TL1100.pdf")
3 | (tags "tact sw push 12mm")
4 | (fp_text reference REF** (at 6.08 -4.66) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_SW_PUSH-12mm-YELLOW (at 6.62 9.93) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 0.25 8.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.25 -3.5) (end 12.25 -3.5) (layer F.Fab) (width 0.1))
12 | (fp_line (start 12.25 -3.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
13 | (fp_text user %R (at 6.35 2.54) (layer F.Fab)
14 | (effects (font (size 1 1) (thickness 0.15)))
15 | )
16 | (fp_line (start 0.1 -3.65) (end 12.4 -3.65) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.4 0.93) (end 12.4 4.07) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 12.4 8.65) (end 0.1 8.65) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.1 -0.93) (end 0.1 -3.65) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.77 -3.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -1.77 -3.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 14.25 8.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 14.25 8.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
24 | (fp_circle (center 6.35 2.54) (end 10.16 5.08) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 0.25 -3.5) (end 0.25 8.5) (layer F.Fab) (width 0.1))
26 | (fp_line (start 0.1 8.65) (end 0.1 5.93) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 0.1 4.07) (end 0.1 0.93) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 12.4 5.93) (end 12.4 8.65) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 12.4 -3.65) (end 12.4 -0.93) (layer F.SilkS) (width 0.12))
30 | (pad 1 thru_hole oval (at 12.5 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
31 | (pad 2 thru_hole oval (at 12.5 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole oval (at 0 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 0 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
34 | (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_PUSH-12mm.wrl
35 | (at (xyz 0 0 0))
36 | (scale (xyz 1 1 1))
37 | (rotate (xyz 0 0 0))
38 | )
39 | (model ${KIPRJMOD}/project_module.pretty/push_button.step
40 | (offset (xyz 6 -2.54 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 90))
43 | )
44 | (model ${KIPRJMOD}/project_module.pretty/push_button_capuchon_jaune.step
45 | (offset (xyz 6 -2.5 0))
46 | (scale (xyz 1 1 1))
47 | (rotate (xyz 0 0 0))
48 | )
49 | )
50 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/project_module.pretty/project_SW_PUSH-12mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (module project_SW_PUSH-12mm (layer F.Cu) (tedit 5D469789)
2 | (descr "SW PUSH 12mm https://www.e-switch.com/system/asset/product_line/data_sheet/143/TL1100.pdf")
3 | (tags "tact sw push 12mm")
4 | (fp_text reference REF** (at 6.08 -4.66) (layer F.SilkS)
5 | (effects (font (size 1 1) (thickness 0.15)))
6 | )
7 | (fp_text value project_SW_PUSH-12mm (at 6.62 9.93) (layer F.Fab)
8 | (effects (font (size 1 1) (thickness 0.15)))
9 | )
10 | (fp_line (start 0.25 8.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
11 | (fp_line (start 0.25 -3.5) (end 12.25 -3.5) (layer F.Fab) (width 0.1))
12 | (fp_line (start 12.25 -3.5) (end 12.25 8.5) (layer F.Fab) (width 0.1))
13 | (fp_text user %R (at 6.35 2.54) (layer F.Fab)
14 | (effects (font (size 1 1) (thickness 0.15)))
15 | )
16 | (fp_line (start 0.1 -3.65) (end 12.4 -3.65) (layer F.SilkS) (width 0.12))
17 | (fp_line (start 12.4 0.93) (end 12.4 4.07) (layer F.SilkS) (width 0.12))
18 | (fp_line (start 12.4 8.65) (end 0.1 8.65) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 0.1 -0.93) (end 0.1 -3.65) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -1.77 -3.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
21 | (fp_line (start -1.77 -3.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
22 | (fp_line (start 14.25 8.75) (end 14.25 -3.75) (layer F.CrtYd) (width 0.05))
23 | (fp_line (start 14.25 8.75) (end -1.77 8.75) (layer F.CrtYd) (width 0.05))
24 | (fp_circle (center 6.35 2.54) (end 10.16 5.08) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 0.25 -3.5) (end 0.25 8.5) (layer F.Fab) (width 0.1))
26 | (fp_line (start 0.1 8.65) (end 0.1 5.93) (layer F.SilkS) (width 0.12))
27 | (fp_line (start 0.1 4.07) (end 0.1 0.93) (layer F.SilkS) (width 0.12))
28 | (fp_line (start 12.4 5.93) (end 12.4 8.65) (layer F.SilkS) (width 0.12))
29 | (fp_line (start 12.4 -3.65) (end 12.4 -0.93) (layer F.SilkS) (width 0.12))
30 | (pad 1 thru_hole oval (at 12.5 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
31 | (pad 2 thru_hole oval (at 12.5 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
32 | (pad 1 thru_hole oval (at 0 0) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
33 | (pad 2 thru_hole oval (at 0 5) (size 3.048 1.85) (drill 1.3) (layers *.Cu *.Mask))
34 | (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_PUSH-12mm.wrl
35 | (at (xyz 0 0 0))
36 | (scale (xyz 1 1 1))
37 | (rotate (xyz 0 0 0))
38 | )
39 | (model ${KIPRJMOD}/project_module.pretty/push_button.step
40 | (offset (xyz 6 -2.54 0))
41 | (scale (xyz 1 1 1))
42 | (rotate (xyz 0 0 90))
43 | )
44 | )
45 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/tobopcb-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/tobopcb-rescue.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # MOS6581_6582_8580SID-8580sid
5 | #
6 | DEF MOS6581_6582_8580SID-8580sid U 0 40 Y Y 1 F N
7 | F0 "U" -650 1100 60 H V L CNN
8 | F1 "MOS6581_6582_8580SID-8580sid" -600 950 60 H V L CNN
9 | F2 "Housings_DIP:DIP-28_W15.24mm_Socket" 0 -1150 60 H I C CNN
10 | F3 "" -550 1250 60 H V C CNN
11 | DRAW
12 | S -650 1050 650 -1050 0 1 0 f
13 | X CAP_1A 1 -850 450 200 R 50 50 1 1 P
14 | X A1 10 850 -850 200 L 50 50 1 1 I
15 | X A2 11 850 -750 200 L 50 50 1 1 I
16 | X A3 12 850 -650 200 L 50 50 1 1 I
17 | X A4 13 850 -550 200 L 50 50 1 1 I
18 | X GND 14 -850 -950 200 R 50 50 1 1 W
19 | X D0 15 850 -400 200 L 50 50 1 1 B
20 | X D1 16 850 -300 200 L 50 50 1 1 B
21 | X D2 17 850 -200 200 L 50 50 1 1 B
22 | X D3 18 850 -100 200 L 50 50 1 1 B
23 | X D4 19 850 0 200 L 50 50 1 1 B
24 | X CAP_1B 2 -850 250 200 R 50 50 1 1 P
25 | X D5 20 850 100 200 L 50 50 1 1 B
26 | X D6 21 850 200 200 L 50 50 1 1 B
27 | X D7 22 850 300 200 L 50 50 1 1 B
28 | X POT_Y 23 850 450 200 L 50 50 1 1 I
29 | X POT_X 24 850 550 200 L 50 50 1 1 I
30 | X VCC 25 -850 800 200 R 50 50 1 1 W
31 | X EXT_IN 26 850 700 200 L 50 50 1 1 I
32 | X AUDIO_OUT 27 850 800 200 L 50 50 1 1 I
33 | X VDD 28 -850 650 200 R 50 50 1 1 W
34 | X CAP_2A 3 -850 50 200 R 50 50 1 1 P
35 | X CAP_2B 4 -850 -150 200 R 50 50 1 1 P
36 | X /RES 5 -850 -400 200 R 50 50 1 1 I
37 | X PHI2 6 -850 -500 200 R 50 50 1 1 I C
38 | X R/W 7 -850 -600 200 R 50 50 1 1 I
39 | X /CS 8 -850 -700 200 R 50 50 1 1 I
40 | X A0 9 850 -950 200 L 50 50 1 1 I
41 | ENDDRAW
42 | ENDDEF
43 | #
44 | #End Library
45 |
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/waveform-monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/waveform-monochrome.png
--------------------------------------------------------------------------------
/pcb/v2/v2.0.1/esp32pcb/waveform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tobozo/ESP32-SIDView/e733d44fbd0a74248ccc00758a6221bf4e9c43d4/pcb/v2/v2.0.1/esp32pcb/waveform.png
--------------------------------------------------------------------------------
/src/ADSR/ADSR.cpp:
--------------------------------------------------------------------------------
1 | #include "ADSR.hpp"
2 |
3 |
4 | ADSR::ADSR()
5 | {
6 | reset();
7 | setAttackRate(0);
8 | setDecayRate(0);
9 | setReleaseRate(0);
10 | setSustainLevel(1.0);
11 | setTargetRatioA(0.3);
12 | setTargetRatioDR(0.0001);
13 | }
14 |
15 |
16 | ADSR::~ADSR()
17 | {
18 | }
19 |
20 |
21 | float ADSR::process()
22 | {
23 | switch (state) {
24 | case env_idle:
25 | break;
26 | case env_attack:
27 | output = attackBase + output * attackCoef;
28 | if (output >= 1.0) {
29 | output = 1.0;
30 | state = env_decay;
31 | }
32 | break;
33 | case env_decay:
34 | output = decayBase + output * decayCoef;
35 | if (output <= sustainLevel) {
36 | output = sustainLevel;
37 | state = env_sustain;
38 | }
39 | break;
40 | case env_sustain:
41 | break;
42 | case env_release:
43 | output = releaseBase + output * releaseCoef;
44 | if (output <= 0.0) {
45 | output = 0.0;
46 | state = env_idle;
47 | }
48 | }
49 | return output;
50 | }
51 |
52 |
53 | void ADSR::gate(int gate)
54 | {
55 | if (gate)
56 | state = env_attack;
57 | else if (state != env_idle)
58 | state = env_release;
59 | }
60 |
61 |
62 | int ADSR::getState()
63 | {
64 | return state;
65 | }
66 |
67 |
68 | void ADSR::reset()
69 | {
70 | state = env_idle;
71 | output = 0.0;
72 | }
73 |
74 |
75 | float ADSR::getOutput()
76 | {
77 | return output;
78 | }
79 |
80 |
81 | void ADSR::setAttackRate(float rate)
82 | {
83 | attackRate = rate;
84 | attackCoef = calcCoef(rate, targetRatioA);
85 | attackBase = (1.0 + targetRatioA) * (1.0 - attackCoef);
86 | }
87 |
88 |
89 | void ADSR::setDecayRate(float rate)
90 | {
91 | decayRate = rate;
92 | decayCoef = calcCoef(rate, targetRatioDR);
93 | decayBase = (sustainLevel - targetRatioDR) * (1.0 - decayCoef);
94 | }
95 |
96 |
97 | void ADSR::setReleaseRate(float rate)
98 | {
99 | releaseRate = rate;
100 | releaseCoef = calcCoef(rate, targetRatioDR);
101 | releaseBase = -targetRatioDR * (1.0 - releaseCoef);
102 | }
103 |
104 |
105 | float ADSR::calcCoef(float rate, float targetRatio)
106 | {
107 | return (rate <= 0) ? 0.0 : exp(-log((1.0 + targetRatio) / targetRatio) / rate);
108 | }
109 |
110 |
111 | void ADSR::setSustainLevel(float level)
112 | {
113 | sustainLevel = level;
114 | decayBase = (sustainLevel - targetRatioDR) * (1.0 - decayCoef);
115 | }
116 |
117 |
118 | void ADSR::setTargetRatioA(float targetRatio)
119 | {
120 | if (targetRatio < 0.000000001)
121 | targetRatio = 0.000000001; // -180 dB
122 | targetRatioA = targetRatio;
123 | attackCoef = calcCoef(attackRate, targetRatioA);
124 | attackBase = (1.0 + targetRatioA) * (1.0 - attackCoef);
125 | }
126 |
127 |
128 | void ADSR::setTargetRatioDR(float targetRatio)
129 | {
130 | if (targetRatio < 0.000000001)
131 | targetRatio = 0.000000001; // -180 dB
132 | targetRatioDR = targetRatio;
133 | decayCoef = calcCoef(decayRate, targetRatioDR);
134 | releaseCoef = calcCoef(releaseRate, targetRatioDR);
135 | decayBase = (sustainLevel - targetRatioDR) * (1.0 - decayCoef);
136 | releaseBase = -targetRatioDR * (1.0 - releaseCoef);
137 | }
138 |
--------------------------------------------------------------------------------
/src/ADSR/ADSR.hpp:
--------------------------------------------------------------------------------
1 | //
2 | // ADRS.h
3 | //
4 | // Created by Nigel Redmon on 12/18/12.
5 | // EarLevel Engineering: earlevel.com
6 | // Copyright 2012 Nigel Redmon
7 | //
8 | // For a complete explanation of the ADSR envelope generator and code,
9 | // read the series of articles by the author, starting here:
10 | // http://www.earlevel.com/main/2013/06/01/envelope-generators/
11 | //
12 | // License:
13 | //
14 | // This source code is provided as is, without warranty.
15 | // You may copy and distribute verbatim copies of this document.
16 | // You may modify and use this source code to create binary code for your own purposes, free or commercial.
17 | //
18 |
19 | #pragma once
20 |
21 | #include
22 |
23 |
24 | class ADSR
25 | {
26 | public:
27 | ADSR();
28 | ~ADSR();
29 | float process();
30 | float getOutput();
31 | int getState();
32 | void gate(int on);
33 | void setAttackRate(float rate);
34 | void setDecayRate(float rate);
35 | void setReleaseRate(float rate);
36 | void setSustainLevel(float level);
37 | void setTargetRatioA(float targetRatio);
38 | void setTargetRatioDR(float targetRatio);
39 | void reset();
40 |
41 | enum envState
42 | {
43 | env_idle = 0,
44 | env_attack,
45 | env_decay,
46 | env_sustain,
47 | env_release
48 | };
49 |
50 | protected:
51 | int state;
52 | float output;
53 | float attackRate;
54 | float decayRate;
55 | float releaseRate;
56 | float attackCoef;
57 | float decayCoef;
58 | float releaseCoef;
59 | float sustainLevel;
60 | float targetRatioA;
61 | float targetRatioDR;
62 | float attackBase;
63 | float decayBase;
64 | float releaseBase;
65 |
66 | float calcCoef(float rate, float targetRatio);
67 | };
68 |
69 |
--------------------------------------------------------------------------------
/src/Cache/SIDVirtualFolders.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include "../config.h"
3 | #include "../Cache/SIDCacheManager.hpp"
4 |
5 |
6 | namespace SIDView
7 | {
8 |
9 |
10 | // default folder item (root folder)
11 | const folderTypeItem_t rootFolder =
12 | {
13 | "root",
14 | "/",
15 | F_SUBFOLDER
16 | };
17 |
18 | const folderTypeItem_t nullFolder =
19 | {
20 | "null",
21 | "/",
22 | F_UNSUPPORTED_FILE
23 | };
24 |
25 |
26 | struct VirtualFolder
27 | {
28 | VirtualFolder() { };
29 | size_t _size = 0;
30 | size_t _actionitem_size=0;
31 | size_t _listitem_size=0;
32 | std::vector folder;
33 | size_t size() { return _size; }
34 | inline void clear();
35 | inline folderTypeItem_t get( int index );
36 | inline void push_back( folderTypeItem_t item );
37 | inline std::vector::iterator begin();
38 | inline std::vector::iterator end();
39 | };
40 |
41 |
42 | struct VirtualFolderNoRam : public VirtualFolder
43 | {
44 | const char* folderName;
45 | SongCacheManager* songCache;
46 | VirtualFolderNoRam( SongCacheManager* cache ) : songCache(cache) { }
47 | void clear();
48 | folderTypeItem_t get( int index );
49 | void push_back( folderTypeItem_t item );
50 | std::vector::iterator begin() { return folder.begin(); }
51 | std::vector::iterator end() { return folder.end(); }
52 | };
53 |
54 |
55 | class FolderNav
56 | {
57 | public:
58 | FolderNav(VirtualFolderNoRam *i, uint16_t per_page ) : items(i), itemsPerPage(per_page) { }
59 | VirtualFolderNoRam *items = nullptr; // virtual folder
60 | const uint16_t itemsPerPage;
61 | char path[256] = {0}; // full path to selected item
62 | char dir[256] = {0}; // folder path where item resides
63 | uint16_t pos = 0; // item position in folder list
64 | uint16_t page_num = 0; // page number
65 | uint16_t last_page_num = -1; // previous page number
66 | folderItemType_t type; // item type
67 | uint16_t pages_count = 0; // pages count
68 | uint16_t start = 0; // page start
69 |
70 | void clearFolder();
71 | SongCacheManager* songCache();
72 | void pushItem( folderTypeItem_t item );
73 | void pushActionItem( folderTypeItem_t item );
74 | void pushListItem( folderTypeItem_t item );
75 | folderTypeItem_t getPagedItem( uint16_t item_id );
76 | folderTypeItem_t parentFolder( String label );
77 | size_t depth();
78 | size_t size();
79 | size_t pageStart();
80 | size_t pageEnd();
81 | void setPath( const char* p );
82 | void setDir( const char* d );
83 | void cdRoot() { setPath("/"); setDir("/"); }
84 | void prev();
85 | void next();
86 | bool nav_changed();
87 | bool page_changed();
88 | void freeze();
89 | void thaw();
90 | private:
91 |
92 | bool frozen = false;
93 | char _path[256] = {0};
94 | char _dir[256] = {0};
95 | uint16_t _pos;
96 | uint16_t _page_num;
97 | uint16_t _last_page_num;
98 | uint16_t _pages_count;
99 | uint16_t _start;
100 | folderItemType_t _type;
101 |
102 | };
103 |
104 |
105 | FolderNav* getFolderNav();
106 | extern FolderNav *Nav;
107 |
108 |
109 | }; // end namespace SIDView
110 |
--------------------------------------------------------------------------------
/src/Filters/LowPass.hpp:
--------------------------------------------------------------------------------
1 | #ifndef LowPass_h
2 | #define LowPass_h
3 |
4 | /*
5 | simple resonant filter
6 | inspired from mozzi
7 | */
8 |
9 | class LowPass {
10 |
11 | public:
12 |
13 | LowPass() { }
14 | ~LowPass(void) { }
15 |
16 | void setCutoffFreqAndResonance(float cutoff, float resonance)
17 | {
18 | if(cutoff==1.0f) {
19 | cutoff = 0.999f;
20 | }
21 | this->cutoff = cutoff;
22 | this->resonance = resonance;
23 | fb = resonance + resonance / ( 1.0f - cutoff );
24 | }
25 |
26 | float Process(float in) {
27 |
28 | buf0 = buf0 + cutoff * ( in - buf0 + fb * ( buf0 - buf1 ) );
29 | buf1 = buf1 + cutoff * (buf0 - buf1);
30 | return buf1;
31 | }
32 |
33 | protected:
34 |
35 | float cutoff;
36 | float resonance;
37 | float fb;
38 | float buf0;
39 | float buf1;
40 |
41 | };
42 |
43 | #endif
44 |
45 |
--------------------------------------------------------------------------------
/src/Oscillo/Oscillator.cpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 |
33 | #include "Oscillator.hpp"
34 |
35 |
36 | Oscillator::Oscillator( uint32_t freq )
37 | {
38 | setFreqHz( freq );
39 | };
40 |
41 | void Oscillator::setFreqHz( uint32_t hz )
42 | {
43 | freqHz = hz;
44 | freqms = hz * 1000.0f;
45 | if( hz == 0 ) return;
46 | period_us = 1000000 / freqHz;
47 | log_v("freqHz: %4d, freqms: %8d, period_us: %5d", freqHz, freqms, period_us );
48 | }
49 |
50 | float Oscillator::getTriangle( int32_t utime )
51 | {
52 | // ex: 3951Hz (or 3.951KHz) : 1 period_us = 253 microseconds (or 0.253 milliseconds)
53 | int32_t xpos = utime < 0 ? period_us + ((utime+1)%-period_us) : utime%period_us;
54 | int32_t doublexpos = xpos*2;
55 | int32_t ypos = doublexpos%period_us;
56 | int32_t yprogress = (ypos*50)/(period_us);
57 | int32_t doubleyprogress = (doublexpos > period_us ? yprogress : 50-yprogress);
58 | return 0.5 - (doubleyprogress / 50.0f);
59 | }
60 |
61 | float Oscillator::getSawTooth( int32_t utime )
62 | {
63 | int32_t ypos = utime < 0 ? period_us + ((utime+1)%-period_us) : utime%period_us;
64 | float yprogress = 50.0f - ( (ypos*50.0f)/(period_us) );
65 | return 0.5f - (yprogress / 50.0f);
66 | }
67 |
68 | float Oscillator::getSquare( int32_t utime, int PWn )
69 | {
70 | // Where PWn is the 12-bit number in the Pulse Width registers.
71 | // Range from 0 to 4095 ($FFF) in the C64 pulse width registers
72 | // A value of 2048 ($800) will produce a square wave
73 | // A value of 4095 will not produce a constant DC output
74 | int32_t xpos = utime < 0 ? period_us + ((utime+1)%-period_us) : utime%period_us;
75 | float pwn = (PWn/4095.0f) - 0.5f; // PWn to per one range -0.5 <-> 0.5
76 | float xlow = period_us/2 + period_us*pwn;
77 | bool state = xpos > xlow;
78 | return (state ? 0.5f : -0.5f);
79 | }
80 |
81 | float Oscillator::getNoise( int32_t utime, int PWn )
82 | {
83 | int32_t xpos = utime < 0 ? period_us + ((utime+1)%-period_us) : utime%period_us;
84 | float pwn = (PWn/4095.0f) - 0.5f; // PWn to per one range -0.5 <-> 0.5
85 | float xlow = period_us/2 + period_us*pwn;
86 | int32_t ylevel = rand()%50;
87 | bool state = xpos > xlow;
88 | return (state ? ylevel/100.0f : -ylevel/100.0f);
89 | }
90 |
--------------------------------------------------------------------------------
/src/Oscillo/Oscillator.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #pragma once
33 |
34 | #include "../config.h"
35 |
36 | #include "../ADSR/ADSR.hpp"
37 |
38 |
39 | class Oscillator
40 | {
41 |
42 | public:
43 |
44 | Oscillator() {};
45 | Oscillator( uint32_t freq );
46 |
47 | uint32_t freqHz; // cycles per second ( Hertz )
48 | uint32_t freqms; // cycles per microsecond
49 | int32_t period_us; // in microseconds
50 |
51 | void setFreqHz( uint32_t hz );
52 | float getTriangle( int32_t utime );
53 | float getSawTooth( int32_t utime );
54 | float getSquare( int32_t utime, int PWn );
55 | float getNoise( int32_t utime, int PWn );
56 |
57 | private:
58 |
59 | float invfreqms;
60 | bool state = false;
61 |
62 | };
63 |
--------------------------------------------------------------------------------
/src/UI/SIDExplorer.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #pragma once
33 |
34 | #pragma GCC diagnostic ignored "-Wunused-variable"
35 | #pragma GCC diagnostic ignored "-Wunused-label"
36 | #pragma GCC diagnostic ignored "-Wformat-truncation"
37 | #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
38 | #pragma GCC diagnostic ignored "-Wformat"
39 |
40 | #include "../config.h"
41 |
42 | #include "../assets/assets.h"
43 | #include "../Cache/SIDCacheManager.hpp"
44 | #include "../Cache/SIDVirtualFolders.hpp"
45 | #include "../helpers/Downloader/SIDArchiveManager.hpp"
46 | #include "../helpers/HID/HID_Common.hpp"
47 | #include "../helpers/NVS/prefs.hpp"
48 | #include "../helpers/WiFiManager/WiFiManagerHooks.hpp"
49 | #include "../Oscillo/OscilloView.hpp"
50 | #include "../UI/ScrollableItem.hpp"
51 | #if defined SD_UPDATABLE
52 | #include "../helpers/SDUpdater/SDUpdaterHooks.hpp" // SD Updater lobby
53 | #endif
54 |
55 | namespace SIDView
56 | {
57 |
58 | static MD5Archive HSVC =
59 | {
60 | HVSC_VERSION, // just a fancy name
61 | // nullptr, // must be URL to a tgz file if not null
62 | HVSC_VERSION // dotfile name will be derivated from that
63 | };
64 |
65 | static MD5FileConfig MD5Config =
66 | {
67 | &SID_FS, // SD
68 | &HSVC, // High Voltage SID Collection info
69 | SID_FOLDER, // /sid
70 | MD5_FOLDER, // /md5
71 | MD5_FILE, // /md5/Songlengths.full.md5
72 | MD5_FILE_IDX, // /md5/Songlengths.full.md5.idx
73 | MD5_INDEX_LOOKUP, // MD5_RAW_READ, MD5_INDEX_LOOKUP, MD5_RAINBOW_LOOKUP
74 | nullptr // callback function for progress when the init happens, overloaded later
75 | };
76 |
77 | //static TaskHandle_t renderVoicesTaskHandle = NULL;
78 | static TaskHandle_t renderUITaskHandle = NULL;
79 | static TaskHandle_t HIDTaskHandle = NULL;
80 |
81 | //static HIDControls LastHIDAction = -1;
82 | static unsigned long lastpush = millis();
83 | static int debounce = 200;
84 |
85 | static uint8_t maxVolume = 10; // value must be between 0 and 15
86 | static bool indexTaskRunning = false;
87 |
88 | #if defined SID_DOWNLOAD_ARCHIVES
89 | static SID_Archive_Checker *SidArchiveChecker = nullptr;
90 | #endif
91 |
92 | static NVSPrefs PlayerPrefs;
93 |
94 | static folderItemType_t currentBrowsingType = F_PLAYLIST;
95 | static sidEvent lastSIDEvent = SID_END_PLAY;
96 | static sidEvent nextSIDEvent = SID_END_PLAY;
97 |
98 |
99 | class SIDExplorer
100 | {
101 |
102 | public:
103 |
104 | ~SIDExplorer();
105 | SIDExplorer( MD5FileConfig *_cfg=&SIDView::MD5Config );
106 | private:
107 |
108 | void setup();
109 | void loop();
110 | // Main player task
111 | static void mainTask( void *param );
112 | // HID scan task
113 | static void HIDTask( void * param );
114 |
115 | MD5FileConfig *cfg = nullptr;
116 | SID_Meta_t *track = nullptr;
117 |
118 | uint16_t lastItemCursor[16] = {0}; // click/select history
119 |
120 | HIDControls HIDAction = HID_NONE;
121 | HIDControls LastHIDAction = HID_NONE;
122 |
123 | #ifdef BOARD_HAS_PSRAM
124 | size_t maxitems = 0; // 0 = no limit
125 | #else
126 | size_t maxitems = 1024; // Limiting folders to %d items due to lack of psram
127 | #endif
128 |
129 | unsigned long inactive_delay = 5000;
130 | unsigned long sleep_delay = 600000; // sleep after 600 seconds
131 |
132 | void processHID();
133 | void updatePagination();
134 | void animateView();
135 |
136 | void dispatchBrowsing();
137 |
138 | void handleHIDDown();
139 | void handleHIDUp();
140 | void handleHIDRight();
141 | void handleHIDLeft();
142 |
143 | void handleHIDPlayStop(); // action 0
144 | void handleHIDToggleLoopMode(); // action 1
145 | void handleHIDVolumeDown(); // action 2
146 | void handleHIDVolumeUp(); // action 3
147 |
148 | void handleTool();
149 | void handleFolder();
150 | void handlePlaylist();
151 | void handleSIDFile();
152 |
153 | void handleAutoPlay();
154 | void nextInPlaylist();
155 | void prevInPlaylist();
156 |
157 | void setUIPlayerMode( loopmode mode );
158 |
159 | bool getPaginatedFolder( size_t offset = 0, bool force_regen = false );
160 | size_t getFolder( size_t offset, size_t maxitems, bool force_regen );
161 |
162 | void resetPathCache();
163 | void resetSpreadCache();
164 |
165 | void runDeepsidModal();
166 | void runHVCSCModal();
167 |
168 | void checkArchive( bool force_check = false );
169 |
170 | // callbacks
171 | static void eventCallback( SIDTunesPlayer* player, sidEvent event );
172 | static void addFolderElement( const char* fullpath, folderItemType_t type );
173 |
174 | #if defined ENABLE_HVSC_SEARCH
175 | void handleHIDSearch();
176 | bool handleSearchPage( char* searchstr, bool search=false, size_t pagenum=0, size_t maxitems=8 );
177 | // keywords indexing task
178 | static void buildSIDWordsIndexTask( void* param );
179 | void resetWordsCache();
180 | #endif
181 |
182 | #if defined SID_DOWNLOAD_ARCHIVES
183 | void updateMd5File();
184 | #endif
185 |
186 | };
187 |
188 | }; // end namespace SIDView
189 |
190 | using SIDView::SIDExplorer; // export class to global namespace
191 |
192 |
--------------------------------------------------------------------------------
/src/UI/ScrollableItem.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "ScrollableItem.hpp"
3 | #include "UI_Utils.hpp"
4 |
5 | namespace SIDView
6 | {
7 |
8 | using namespace UI_Colors;
9 |
10 | static bool is_scrolling = false; // used to prevent simultaneous drawing when multithreaded
11 |
12 |
13 | ScrollableItem::~ScrollableItem()
14 | {
15 | if( sptr ) scrollSprite->deleteSprite();
16 | }
17 |
18 | ScrollableItem::ScrollableItem( LGFX* _display )
19 | {
20 | assert( _display );
21 | display = _display;
22 | if( !scrollSprite ) scrollSprite = new LGFX_Sprite( display );
23 | scrollSprite->setColorDepth(1);
24 | scrollSprite->setPsram( false );
25 | scrollSprite->setFont( &Font8x8C64 );
26 | };
27 |
28 |
29 | void ScrollableItem::setup( const char* _text, uint16_t _xpos, uint16_t _ypos, uint16_t _width, uint16_t _height, unsigned long _delay, bool _invert, bool _smooth )
30 | {
31 | snprintf( text, 255, " %s ", _text );
32 | xpos = _xpos;
33 | ypos = _ypos;
34 | width = _width;
35 | height = _height;
36 | delay = _delay;
37 | invert = _invert;
38 | smooth = _smooth;
39 | last = millis()-_delay;
40 |
41 | if( sptr ) scrollSprite->deleteSprite();
42 |
43 | if( smooth ) {
44 | uint8_t charwidth = scrollSprite->textWidth( "0" );
45 | sptr = scrollSprite->createSprite( width+charwidth, height );
46 | } else {
47 | sptr = scrollSprite->createSprite( width, height );
48 | }
49 | if( !sptr ) {
50 | log_e("Failed to create scroll sprite, aborting");
51 | return;
52 | }
53 | scroll = true;
54 | scrollSprite->setPaletteColor( 0, C64_DARKBLUE );
55 | scrollSprite->setPaletteColor( 1, C64_LIGHTBLUE );
56 |
57 | if( invert ) {
58 | scrollSprite->setTextColor( C64_DARKBLUE, C64_LIGHTBLUE );
59 | } else {
60 | scrollSprite->setTextColor( C64_LIGHTBLUE, C64_DARKBLUE );
61 | }
62 | //scrollSprite->fillSprite( C64_DARKBLUE );
63 | scrollSprite->setTextDatum( TL_DATUM );
64 | log_d("text:%s, xpos:%d, ypos:%d, width:%d, height:%d, delay:%d, invert:%d, smooth", _text, _xpos, _ypos, _width, _height, _delay, _invert, _smooth);
65 | }
66 |
67 |
68 | void ScrollableItem::doscroll()
69 | {
70 | if( is_scrolling ) return; // thread safe
71 | if( !scroll ) return; // init safe
72 | if( scrollSprite == nullptr ) return; // mem safe
73 | if( millis()-last < delay ) return; // time safe
74 |
75 | last = millis();
76 |
77 | is_scrolling = true;
78 |
79 | if( smooth ) {
80 | scrollSmooth();
81 | } else {
82 | scrollUgly();
83 | }
84 |
85 | is_scrolling = false;
86 | }
87 |
88 |
89 | void ScrollableItem::scrollSmooth()
90 | {
91 | if( !sptr ) return;
92 |
93 | char c = text[0];
94 | size_t len = strlen( text );
95 |
96 | if( smooth_offset == 7 ) {
97 | memmove( text, text+1, len-1 );
98 | text[len-1] = c;
99 | text[len] = '\0';
100 | smooth_offset = 0;
101 | } else {
102 | smooth_offset++;
103 | }
104 |
105 | scrollSprite->drawString( text, -smooth_offset, 0 );
106 | scrollSprite->pushSprite( xpos, ypos );
107 | }
108 |
109 |
110 | void ScrollableItem::scrollUgly()
111 | {
112 | if( !sptr ) return;
113 |
114 | char c = text[0];
115 | size_t len = strlen( text );
116 |
117 | memmove( text, text+1, len-1 );
118 | text[len-1] = c;
119 | text[len] = '\0';
120 |
121 | scrollSprite->drawString( text, 0, 0 );
122 | scrollSprite->pushSprite( xpos, ypos );
123 | }
124 |
125 |
126 | }; // end namespace SIDView
127 |
--------------------------------------------------------------------------------
/src/UI/ScrollableItem.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../config.h"
4 |
5 | namespace SIDView
6 | {
7 |
8 | class ScrollableItem
9 | {
10 | public:
11 | ~ScrollableItem();
12 | ScrollableItem(LGFX* display);
13 |
14 | bool scroll = false;
15 | bool invert = true;
16 | bool smooth = true;
17 |
18 | void setup( const char* _text, uint16_t _xpos, uint16_t _ypos, uint16_t _width, uint16_t _height, unsigned long _delay=300, bool _invert=true, bool _smooth=true );
19 | void doscroll();
20 | void scrollSmooth();
21 | void scrollUgly();
22 | private:
23 | char text[256];
24 | uint16_t xpos = 0;
25 | uint16_t ypos = 0;
26 | uint16_t width = 0;
27 | uint16_t height = 0;
28 | unsigned long last = millis();
29 | unsigned long delay = 300; // milliseconds
30 | uint8_t smooth_offset = 0;
31 | void* sptr = nullptr;
32 | LGFX_Sprite *scrollSprite = nullptr;//new LGFX_Sprite( &tft );
33 | LGFX * display = nullptr;
34 | };
35 |
36 | }
37 |
38 |
39 | namespace UI_Utils
40 | {
41 | extern SIDView::ScrollableItem *listScrollableText;
42 | extern SIDView::ScrollableItem *songScrollableText;
43 | };
44 |
--------------------------------------------------------------------------------
/src/config.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | // ---- HID Configuration ----
6 | // uncomment at least one of those
7 | #define HID_SERIAL // accept commands from serial console, better leave this uncommented
8 | #define HID_XPAD // use I2C X-Pad 8 buttons interface
9 | //#define HID_USB // use HID Keyboard, uses SDA/SCL as D+/D- for USB-LS Soft Host, highly unstable
10 | //#define HID_TOUCH // use Touch from display, very basic touch to button interface, /!\ may induce bus conflicts
11 |
12 | #define TFT_ROTATION 2 // customize this according to your display, valid values are 0...7
13 |
14 | // ---- Plugins Actication ----
15 | #define LED_VU_PIN LED_BUILTIN // Builtin (or external) LED Pin to use as a vu-meter for sound level (builtin led pin on D32Pro = LED_BUILTIN = GPIO_NUM_5)
16 | //#define SD_UPDATABLE // enable SD-Updater, disabling saves 44Kb of program storage space and ~312 bytes of heap
17 | //#define SID_DOWNLOAD_ARCHIVES // HVSC archive can be downloaded to the SD Card if it's empty on load, disabling saves ~3.5Kb of program storage space and ~2.5Kb of heap
18 | //#define ENABLE_HVSC_SEARCH // Experimental, requires HID_USB: enable elastic-search style indexing/sharding, disabling saves ~46Kb storage spage and ~256 bytes of heap
19 |
20 | #define SID_FOLDER "/sid" // local path on the SD Card where SID files can be found, NO TRAILING SLASH, MUST BE A FOLDER, CANNOT BE ROOT
21 | #define HVSC_VERSION "HVSC-78" // a unique name for a the current HVSC Version
22 |
23 |
24 | // ---- SID6581 Pins Configuration ---
25 | #if defined (CONFIG_IDF_TARGET_ESP32)
26 | #define SID_CLOCK 25
27 | #define SID_DATA 15
28 | #define SID_LATCH 2
29 | #define SID_CLOCK_PIN 26 // optional if the board already has an oscillator
30 | #define SID_PLAYER // load the sidPlayer module over the SID library
31 | #elif defined (CONFIG_IDF_TARGET_ESP32S3) //|| defined (CONFIG_IDF_TARGET_ESP32S2)
32 | #define SID_CLOCK 41 // multiplexer bus clock
33 | #define SID_DATA 39 // multiplexer bus data
34 | #define SID_LATCH 40 // multiplexer bus latch
35 | #define SID_CLOCK_PIN 4 // PHI: optional if the board already has an oscillator
36 | #define SID_PLAYER // load the sidPlayer module over the SID library
37 | #else
38 | #error "Unsupported architecture, feel free to unlock and contribute!"
39 | #endif
40 |
41 | // DON'T EDIT ANYTHING AFTER HERE
42 |
43 | #if defined ENABLE_HVSC_SEARCH && !defined HID_USB
44 | #pragma message "ENABLE_HVSC_SEARCH requires HID_USB, but HID_USB is disabled!"
45 | #pragma message "Disabling ENABLE_HVSC_SEARCH"
46 | //#undef ENABLE_HVSC_SEARCH
47 | #endif
48 |
49 |
50 | // mandatory defines for this app
51 |
52 |
53 | // ---- Filesystem Configuration ----
54 | #define SID_FS M5STACK_SD // from fs::FS filesystem or ESP32-Chimera-Core.hpp
55 | #define MD5_FOLDER "/md5" // where all the md5 stuff is stored (db file, caches, indexes)
56 | #define MD5_FILE MD5_FOLDER "/Songlengths.full.md5" // local path to the HVSC md5 file
57 | #define MD5_FILE_IDX MD5_FILE ".idx" // The MD5 data from Songlengths will be indexed into this file
58 | #define MD5_URL "https://hvsc.c64.org/download/C64Music/DOCUMENTS/Songlengths.md5" // [Optional if SID_DOWNLOAD_ARCHIVES flag is enabled] HVSC Songlengths.md5 file as is
59 |
60 | // ---- WiFi Configuration ----
61 | // optional SSID/PASS to your router can be hardcoded, will use WiFi.begin() and/or Autoconnect otherwise
62 | //#define WIFI_SSID "my-wifi-ssid"
63 | //#define WIFI_PASS "my-wifi-password"
64 | // Default SSID/Pass for WiFiManager
65 | #define WIFIMANAGER_AP_SSID "AutoConnectAP"
66 | #define WIFIMANAGER_AP_PASS "12345678"
67 |
68 |
69 | #if defined SID_DOWNLOAD_ARCHIVES
70 | #define HVSC_TGZ_URL "https://phpsecu.re/" HVSC_VERSION ".tar.gz" // [Optional if SID_DOWNLOAD_ARCHIVES flag is enabled] tgz archive containing "DEMO", "GAMES" and "MUSICIANS" folders from HVSC
71 | #define DEST_FS_USES_SD // set SD as default filesystem for ESP32-Targz
72 | #include // https://github.com/tobozo/ESP32-Targz
73 | #else
74 | #include "./helpers/Path_Utils.hpp"
75 | #endif
76 |
77 | // ---- Optional/Experimental USB-HID Configuration ----
78 | // Some core settings inherit from SID_PLAYER_CORE / SID_CPU_CORE / SID_QUEUE_CORE
79 | #if defined HID_USB
80 | // USB-Soft-Host isn't multithread-safe at the time of writing this app
81 | #define SID_MAINTASK_CORE 0
82 | #define SID_HID_CORE 1 // soft-host USB requires a full core
83 | #define SID_HIDTASK_PRIORITY 5
84 |
85 | // WARN: when using SCL/SDA, pins must not be shared
86 | // with another I2C device !
87 | #define DP_P0 SCL // always enabled
88 | #define DM_P0 SDA // always enabled
89 | #define DP_P1 -1
90 | #define DM_P1 -1
91 | #define DP_P2 -1
92 | #define DM_P2 -1
93 | #define DP_P3 -1
94 | #define DM_P3 -1
95 | #define DEBUG_ALL
96 | #include // https://github.com/tobozo/ESP32-USB-Soft-Host
97 |
98 | #elif defined HID_TOUCH || defined HID_SERIAL || defined HID_XPAD
99 | // multithread safety isn't threatened by a hacky USB driver, let
100 | // the SID6581 library assign the CPU/QUEUE core and spread
101 | // maintask and drawtask on different cores.
102 | #define SID_MAINTASK_CORE 1
103 | #define SID_HID_CORE 0
104 | #define SID_HIDTASK_PRIORITY 0
105 | #else
106 | #error "At least one HID method must be defined! (HID_SERIAL, HID_XPAD, HID_USB or HID_TOUCH)"
107 | #endif
108 |
109 | //#define SID_MAINTASK_PRIORITY SID_CPU_TASK_PRIORITY-1
110 | //#define SID_DRAWTASK_PRIORITY 4
111 |
112 |
113 | // some default settings for the player
114 | #define SONG_TIMEOUT 180 // 180s = 3mn
115 | #define SONG_TIMEOUT_MS SONG_TIMEOUT*1000
116 |
117 | #define SID_PLAYER // enable plugin
118 | #define SID_INSTRUMENTS // enable plugin
119 | #include // https://github.com/hpwit/SID6581
120 | // lazily borrowing gnu_basename() from /
121 | #define gnu_basename BufferedIndex::gnu_basename
122 |
123 | #if defined HID_TOUCH
124 | #define HAS_TOUCH // enable optional touch handling in ESP32-Chimera-Core
125 | #endif
126 | #include // https://github.com/tobozo/ESP32-Chimera-Core
127 |
128 | #if defined SD_UPDATABLE
129 | // SD Updater lobby config
130 | #define SDU_APP_NAME "SID Player"
131 | #define SDU_APP_PATH "/SIDPlayer.bin"
132 | #define SDU_APP_AUTHOR "@tobozo"
133 | #define SDU_APP_KEY "217A25432A462D4A404E635266556A586E3272357538782F413F4428472B4B62"
134 | #include // https://github.com/tobozo/M5Stack-SD-Updater
135 | #endif
136 |
137 |
138 | #include "./helpers/types.hpp"
139 |
--------------------------------------------------------------------------------
/src/helpers/Downloader/SIDArchiveManager.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #pragma once
33 |
34 | #define _SID_ARCHIVE_MANAGER_H_
35 |
36 | #include "../../config.h"
37 |
38 |
39 | #if defined SID_DOWNLOAD_ARCHIVES
40 |
41 | #include "web.h"
42 |
43 | class SID_Archive
44 | {
45 | public:
46 | char *sidRealPath;
47 | char *tgzFileName;
48 | ~SID_Archive();
49 | SID_Archive( MD5FileConfig *c);
50 | bool check();
51 | bool expand();
52 | bool exists();
53 | bool isExpanded();
54 | bool hasCache();
55 | #ifdef _SID_HVSC_DOWNLOADER_H_
56 | bool download();
57 | #endif
58 | private:
59 | MD5FileConfig *cfg;
60 | char *cachePath;
61 | void setExpanded( bool toggle = true );
62 | };
63 |
64 |
65 | class SID_Archive_Checker
66 | {
67 | public:
68 | SID_Archive_Checker( MD5FileConfig *c );
69 | void checkArchive();
70 | bool checkGzFile( bool force = false );
71 | bool checkGzExpand( bool force = false );
72 | bool checkMd5File( bool force = false );
73 | #ifdef _SID_HVSC_DOWNLOADER_H_
74 | bool wifi_occured = false;
75 | #endif
76 | private:
77 | MD5FileConfig *cfg;
78 | SID_Archive *archive = nullptr;
79 | };
80 |
81 |
82 | #endif // #if defined SID_DOWNLOAD_ARCHIVES
83 |
84 |
85 |
--------------------------------------------------------------------------------
/src/helpers/HID/HID_Common.cpp:
--------------------------------------------------------------------------------
1 | #include "HID_Common.hpp"
2 | #include "../../config.h"
3 |
4 | // extern void initXPad();
5 | // extern void HIDUSBInit();
6 | // extern void initTouch();
7 | // extern void initSerial();
8 | // extern int readXpad();
9 | // extern int readUSBHIDKeyboarD();
10 | // extern int readTouch();
11 | // extern int readSerial();
12 | // extern void beforeXpadRead();
13 | // extern void HIDBeforeRead();
14 | // extern void beforeTouchRead();
15 | // extern void beforeSerialRead();
16 | // extern void afterXpadRead();
17 | // extern void HIDAfterRead();
18 | // extern void afterTouchRead();
19 | // extern void afterSerialRead();
20 |
21 |
22 | uint32_t inactive_since = 0; // UI debouncer
23 |
24 | #if defined HID_XPAD
25 | #include "./Xpad/HID_XPad.hpp"
26 | #endif
27 | #if defined HID_USB
28 | #include "./USB/HID_USB.hpp"
29 | #endif
30 | #if defined HID_TOUCH
31 | #include "./Touch/HID_Touch.hpp"
32 | #endif
33 | #if defined HID_SERIAL
34 | #include "./Serial/HID_Serial.hpp"
35 | #endif
36 |
37 | bool HIDReady()
38 | {
39 | #if defined HID_XPAD
40 | return XPadReady();
41 | #endif
42 | #if defined HID_USB
43 | return USBReady();
44 | #endif
45 | #if defined HID_TOUCH
46 | return TouchReady();
47 | #endif
48 | #if defined HID_SERIAL
49 | return SerialReady();
50 | #endif
51 | }
52 |
53 |
54 | void initHID()
55 | {
56 | #if defined HID_XPAD
57 | initXPad();
58 | #endif
59 | #if defined HID_USB
60 | HIDUSBInit();
61 | #endif
62 | #if defined HID_TOUCH
63 | initTouch();
64 | #endif
65 | #if defined HID_SERIAL
66 | initSerial();
67 | #endif
68 | }
69 |
70 | HIDControls readHID()
71 | {
72 | HIDControls ret = HID_NONE;
73 | #if defined HID_XPAD
74 | ret = readXpad();
75 | if( ret !=HID_NONE ) return ret;
76 | #endif
77 | #if defined HID_USB
78 | ret = readUSBHIDKeyboarD();
79 | if( ret !=HID_NONE ) return ret;
80 | #endif
81 | #if defined HID_TOUCH
82 | ret = readTouch();
83 | if( ret !=HID_NONE ) return ret;
84 | #endif
85 | #if defined HID_SERIAL
86 | ret = readSerial();
87 | #endif
88 | return ret;
89 | }
90 |
91 | void beforeHIDRead()
92 | {
93 | #if defined HID_XPAD
94 | beforeXpadRead();
95 | #endif
96 | #if defined HID_USB
97 | HIDBeforeRead();
98 | #endif
99 | #if defined HID_TOUCH
100 | beforeTouchRead();
101 | #endif
102 | #if defined HID_SERIAL
103 | beforeSerialRead();
104 | #endif
105 | }
106 |
107 | void afterHIDRead()
108 | {
109 | #if defined HID_XPAD
110 | afterXpadRead();
111 | #endif
112 | #if defined HID_USB
113 | HIDAfterRead();
114 | #endif
115 | #if defined HID_TOUCH
116 | afterTouchRead();
117 | #endif
118 | #if defined HID_SERIAL
119 | afterSerialRead();
120 | #endif
121 | }
122 |
123 |
124 |
125 | HIDControlKey* getLastPressedKey()
126 | {
127 | #if defined HID_USB
128 | return getUSBLastPressedKey();
129 | #endif
130 | return nullptr;
131 | }
132 |
133 |
--------------------------------------------------------------------------------
/src/helpers/HID/HID_Common.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../../config.h"
4 |
5 | enum HIDControls
6 | {
7 | HID_NONE = 0,
8 | HID_DOWN = 1, // move down selection
9 | HID_UP = 2, // move up selection
10 | HID_LEFT = 3, // prev song/track
11 | HID_RIGHT = 4, // next song/track
12 | HID_PLAYSTOP = 5, // toggle selected
13 | HID_SEARCH = 6, // search mode requires a real keyboard (TODO: SerialHIDControls)
14 | HID_ACTION1 = 7, // toggle loop mode
15 | HID_ACTION2 = 8, // volume +
16 | HID_ACTION3 = 9, // volume -
17 | HID_ACTION4 = 10, // backspace
18 | HID_ACTION5 = 11, // escape
19 | HID_PROMPT_Y = 12, // yes/no action
20 | HID_PROMPT_N = 13, // yes/no action
21 | HID_SLEEP = 14, // turn ESP off
22 | };
23 |
24 | static constexpr const char* HIDControlStr[] =
25 | {
26 | "NONE" ,
27 | "DOWN" , // move down selection
28 | "UP" , // move up selection
29 | "LEFT" , // prev song/track
30 | "RIGHT" , // next song/track
31 | "PLAYSTOP" , // toggle selected
32 | "SEARCH" , // search mode requires a real keyboard (TODO: SerialHIDControls)
33 | "ACTION1" , // toggle loop mode
34 | "ACTION2" , // volume +
35 | "ACTION3" , // volume -
36 | "ACTION4" , // backspace
37 | "ACTION5" , // escape
38 | "PROMPT_Y" , // yes/no action
39 | "PROMPT_N" , // yes/no action
40 | "SLEEP" , // turn ESP off
41 | };
42 |
43 | struct HIDControlKey
44 | {
45 | void set( HIDControls c, int k ) { control = c; key = k; };
46 | HIDControls control = HID_NONE;
47 | int key = -1;
48 | };
49 |
50 | bool HIDReady();
51 | void initHID();
52 | HIDControls readHID();
53 | void beforeHIDRead();
54 | void afterHIDRead();
55 |
56 | HIDControlKey* getLastPressedKey();
57 |
58 | extern uint32_t inactive_since;// = 0; // UI debouncer
59 |
--------------------------------------------------------------------------------
/src/helpers/HID/Serial/HID_Serial.cpp:
--------------------------------------------------------------------------------
1 | #include "HID_Serial.hpp"
2 |
3 | #include
4 |
5 | static bool serial_begun = false;
6 |
7 |
8 | bool SerialReady()
9 | {
10 | return serial_begun;
11 | }
12 |
13 | void initSerial()
14 | {
15 | if( serial_begun ) {
16 | return;
17 | }
18 | if( !Serial.available() ) {
19 | //Serial.begin(115200);
20 | }
21 | //Wire.begin( SDA, SCL ); // connect SerialShield
22 | serial_begun = true;
23 | Serial.flush();
24 |
25 | }
26 |
27 |
28 | void beforeSerialRead()
29 | {
30 | // don't spam I2C
31 | }
32 |
33 | void afterSerialRead()
34 | {
35 | // Turn I2C on
36 | }
37 |
38 |
39 | static unsigned long serialMinDelay = 30; // min delay between queryes
40 | static unsigned long serialLastQuery = 0;
41 | char lastSerialLine[255];
42 |
43 |
44 | HIDControls readSerial()
45 | {
46 | unsigned long now = millis();
47 | if( now - serialLastQuery > serialMinDelay ) {
48 | serialLastQuery = now;
49 | } else {
50 | return HID_NONE;
51 | }
52 | if( !Serial.available() ) return HID_NONE;
53 | //Wire.requestFrom(0x10, 1); // scan buttons from SerialShield
54 | int resp = Serial.read();
55 | switch(resp) {
56 | case 's': // down
57 | return HID_UP;
58 | break;
59 | case 'w': // up
60 | return HID_DOWN;
61 | break;
62 | case 'd': // right
63 | return HID_RIGHT;
64 | break;
65 | case 'a': // left
66 | return HID_LEFT;
67 | break;
68 | case ' ': // B (play/stop button)
69 | return HID_PLAYSTOP;
70 | break;
71 | case '1': // Action button
72 | return HID_ACTION1;
73 | break;
74 | case '2': // C
75 | return HID_ACTION2;
76 | break;
77 | case '3': // D
78 | return HID_ACTION3;
79 | break;
80 | case '?':
81 | return HID_SEARCH;
82 | break;
83 | case 'y':
84 | return HID_PROMPT_Y;
85 | break;
86 | case 'n':
87 | return HID_PROMPT_N;
88 | break;
89 | case 'z': // zzzz
90 | return HID_SLEEP;
91 | break;
92 | default: // simultaneous buttons push ?
93 | return HID_NONE;
94 | break;
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/helpers/HID/Serial/HID_Serial.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../HID_Common.hpp"
4 |
5 | bool SerialReady();
6 | void initSerial();
7 | void beforeSerialRead();
8 | void afterSerialRead();
9 | HIDControls readSerial();
10 |
11 |
--------------------------------------------------------------------------------
/src/helpers/HID/Touch/HID_Touch.cpp:
--------------------------------------------------------------------------------
1 | #include "HID_Touch.hpp"
2 |
3 | #if defined HAS_TOUCH
4 |
5 | #include
6 | #include "../../../UI/UI_Utils.hpp"
7 |
8 | UI_Utils::TouchButtonAction_t UIBtns[8] = {
9 | { nullptr, "play", 1, HID_PLAYSTOP, 16, 276, 30, 24, &UI_Utils::shapeTriangleRightCb },
10 | { nullptr, "up", 1, HID_UP, 47, 276, 30, 24, &UI_Utils::shapeTriangleUpCb },
11 | { nullptr, "down", 1, HID_DOWN, 79, 276, 30, 24, &UI_Utils::shapeTriangleDownCb },
12 | { nullptr, "left", 1, HID_LEFT, 111, 276, 30, 24, &UI_Utils::shapeTrianglePrevCb },
13 | { nullptr, "right", 1, HID_RIGHT, 143, 276, 30, 24, &UI_Utils::shapeTriangleNextCb },
14 | { nullptr, "!", 1, HID_ACTION1, 175, 276, 30, 24, &UI_Utils::shapeLoopToggleCb },
15 | { nullptr, "+", 1, HID_ACTION3, 202, 276, 22, 22, &UI_Utils::shapePlusCb },
16 | { nullptr, "-", 1, HID_ACTION2, 227, 276, 22, 22, &UI_Utils::shapeMinusCb },
17 | };
18 |
19 | static bool touch_begun = false;
20 |
21 | bool TouchReady()
22 | {
23 | return touch_begun;
24 | }
25 |
26 | void initTouch()
27 | {
28 | if( touch_begun ) {
29 | return;
30 | }
31 | if (SIDView::display->touch()) {
32 | //SIDView::display->setRotation(0);
33 | log_i("Touch interface detected");
34 |
35 | {
36 | auto cfg = SIDView::display->touch()->config();
37 | cfg.offset_rotation = 0;
38 | SIDView::display->touch()->config(cfg);
39 | }
40 |
41 |
42 | /*
43 | SIDView::display->drawString("touch the arrow marker.", 0, SIDView::display->height()>>1);
44 | SIDView::display->calibrateTouch(nullptr, 0xFFFFFFU, 0x000000U, 30);
45 | std::int32_t x=-1, y=-1, number = 0;
46 | while (SIDView::display->getTouch(&x, &y, number)) // getTouch関数でタッチ中の座標を取得できます。
47 | {
48 | SIDView::display->fillCircle(x, y, 5, (std::uint32_t)(number * 0x333333u));
49 | SIDView::display->display();
50 | ++number;
51 | }
52 | SIDView::display->clear();
53 | */
54 | }
55 | touch_begun = true;
56 | }
57 |
58 |
59 | void beforeTouchRead()
60 | {
61 | // don't spam I2C
62 | }
63 |
64 | void afterTouchRead()
65 | {
66 | // Turn I2C on
67 | }
68 |
69 |
70 | static unsigned long touchMinDelay = 30; // min delay between queryes
71 | static unsigned long touchLastQuery = 0;
72 |
73 | std::int32_t lastx, lasty, lastnumber = 0;
74 |
75 |
76 | //#define BUTTON_WIDTH 60
77 | //#define BUTTON_HWIDTH BUTTON_WIDTH/2 // 30
78 | //#define BUTTON_HEIGHT 28
79 | //#define rgb888to565 lgfx::convert_rgb888_to_rgb565
80 |
81 | static std::int32_t lasttouchx=-1, lasttouchy=-1;
82 |
83 | HIDControls readTouch()
84 | {
85 |
86 | unsigned long now = millis();
87 | if( now - touchLastQuery > touchMinDelay ) {
88 | touchLastQuery = now;
89 | } else {
90 | return HID_NONE;
91 | }
92 |
93 | //std::int32_t x=-1, y=-1;
94 | uint8_t number = 0;
95 | lgfx::touch_point_t tp;
96 |
97 | number = SIDView::display->getTouch(&tp, 1);
98 | bool pressed = number > 0; //SIDView::display->getTouch(&x, &y, number);
99 |
100 | if(!pressed) return HID_NONE;
101 |
102 | unsigned long lasttouch = pressed ? millis() : 0;
103 | unsigned long waitmax = 100; // ms
104 | int released_button = -1;
105 | HIDControls return_action = HID_NONE;
106 |
107 | while (pressed || lasttouch+waitmax > millis() ) {
108 | //SIDView::display->fillCircle( x, y, 4, TFT_ORANGE );
109 | tp.y-= UI_Utils::touchSpriteOffset; // translate to sprite position
110 |
111 | if( tp.x!=-1) lasttouchx = tp.x;
112 | if( tp.y!= -(UI_Utils::touchSpriteOffset+1)) lasttouchy = tp.y;
113 |
114 | for( int i=0;i<8;i++ ) {
115 | UI_Utils::tbWrapper.handlePressed( UIBtns[i].button, pressed, tp.x, tp.y );
116 | }
117 | for( int i=0;i<8;i++ ) {
118 | UI_Utils::tbWrapper.handleJustPressed( UIBtns[i].button, (char*)UIBtns[i].label );
119 | }
120 | for( int i=0;i<8;i++ ) {
121 | if( UI_Utils::tbWrapper.justReleased( UIBtns[i].button, pressed, (char*)UIBtns[i].label ) ) {
122 | released_button = i;
123 | }
124 | }
125 | if( released_button > -1 ) {
126 | return_action = UIBtns[released_button].action;
127 | break;
128 | }
129 |
130 | //pressed = SIDView::display->getTouch(&x, &y, number);
131 | number = SIDView::display->getTouch(&tp, 1);
132 | pressed = number > 0;
133 | if( pressed ) {
134 | lasttouch = millis();
135 | }
136 | vTaskDelay(1);
137 | }
138 |
139 | if( return_action == HID_NONE ) {
140 | log_d("Touch coords are outside any know touch zone (%d events, x=%d, y=%d, lastx=%d, lasty=%d)", number, tp.x, tp.y, lasttouchx, lasttouchy);
141 | UI_Utils::releaseTouchButtons();
142 | } else {
143 | log_d("Firing action %d (%s)", return_action, UIBtns[released_button].label );
144 | }
145 | UI_Utils::drawTouchButtons();
146 |
147 | return return_action;
148 |
149 | /*
150 |
151 | log_w("got %d touch signals, last coords = [%d,%d]", number, x, y );
152 |
153 |
154 | //Wire.requestFrom(0x10, 1); // scan buttons from XPadShield
155 | int resp = HID_NONE; // touchKeyboard.getLastKeyPressed()
156 |
157 | switch(resp) {
158 | case 0x01: // down
159 | return HID_UP;
160 | break;
161 | case 0x02: // up
162 | return HID_DOWN;
163 | break;
164 | case 0x04: // right
165 | return HID_RIGHT;
166 | break;
167 | case 0x08: // left
168 | return HID_LEFT;
169 | break;
170 | break;
171 | case 0x10: // B (play/stop button)
172 | return HID_PLAYSTOP;
173 | break;
174 | case 0x20: // Action button
175 | return HID_ACTION1;
176 | break;
177 | case 0x40: // C
178 | return HID_ACTION2;
179 | break;
180 | case 0x80: // D
181 | return HID_ACTION3;
182 | break;
183 | default: // simultaneous buttons push ?
184 | return HID_NONE;
185 | break;
186 | }*/
187 | }
188 |
189 | #endif
190 |
--------------------------------------------------------------------------------
/src/helpers/HID/Touch/HID_Touch.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../HID_Common.hpp"
4 |
5 | #if defined HAS_TOUCH
6 |
7 | bool TouchReady();
8 | void initTouch();
9 | void beforeTouchRead();
10 | void afterTouchRead();
11 | HIDControls readTouch();
12 |
13 | #endif
14 |
--------------------------------------------------------------------------------
/src/helpers/HID/USB/HID_USB.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../HID_Common.hpp"
4 |
5 | #if defined HID_USB
6 |
7 | #include "HID_USB_KbdParser.hpp"
8 |
9 | enum keyToEvents
10 | {
11 | onNone,
12 | onKeyDown,
13 | onKeyUp,
14 | onControlKeysChanged,
15 | onKeyPressed,
16 | onKeyReleased
17 | };
18 |
19 |
20 | struct keyEvent
21 | {
22 | uint8_t mod = 0;
23 | uint8_t key = 0;
24 | keyToEvents evt = onNone;
25 | char keyStr = 0; // 0 = non printable
26 | bool processed = true;
27 | };
28 |
29 |
30 | typedef void (*eventEmitter)(uint8_t mod, uint8_t key, keyToEvents evt );
31 |
32 |
33 | class SidKeyboardParser : public KeyboardReportParser
34 | {
35 | public:
36 | void setEventHandler( eventEmitter cb ) { sendEvent = cb; };
37 | //void PrintKey(uint8_t mod, uint8_t key);
38 | char lastkey[2] = {0,0};
39 |
40 | protected:
41 | void OnControlKeysChanged(uint8_t before, uint8_t after);
42 | void OnKeyDown (uint8_t mod, uint8_t key);
43 | void OnKeyUp (uint8_t mod, uint8_t key);
44 | eventEmitter sendEvent = nullptr;
45 | };
46 |
47 | void HIDBeforeRead();
48 | void HIDAfterRead();
49 | void HIDUSBInit();
50 | bool USBReady();
51 | HIDControls readUSBHIDKeyboarD();
52 | // last control key slot
53 | HIDControlKey* getUSBLastPressedKey();
54 |
55 | #endif
56 |
--------------------------------------------------------------------------------
/src/helpers/HID/USB/HID_USB_KbdParser.cpp:
--------------------------------------------------------------------------------
1 | #include "HID_USB_KbdParser.hpp"
2 |
3 | #if defined HID_USB
4 |
5 | const uint8_t KeyboardReportParser::numKeys[10] PROGMEM = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'};
6 | const uint8_t KeyboardReportParser::symKeysUp[12] PROGMEM = {'_', '+', '{', '}', '|', '~', ':', '"', '~', '<', '>', '?'};
7 | const uint8_t KeyboardReportParser::symKeysLo[12] PROGMEM = {'-', '=', '[', ']', '\\', ' ', ';', '\'', '`', ',', '.', '/'};
8 | const uint8_t KeyboardReportParser::padKeys[5] PROGMEM = {'/', '*', '-', '+', '\r'};
9 |
10 | void KeyboardReportParser::Parse(uint8_t len, uint8_t *buf)
11 | {
12 | if (buf[2] == 1)
13 | return;
14 | // provide event for changed control key state
15 | if (prevState.bInfo[0x00] != buf[0x00]) {
16 | OnControlKeysChanged(prevState.bInfo[0x00], buf[0x00]);
17 | }
18 |
19 | for (uint8_t i = 2; i < 8; i++) {
20 | bool down = false;
21 | bool up = false;
22 |
23 | for (uint8_t j = 2; j < 8; j++) {
24 | if (buf[i] == prevState.bInfo[j] && buf[i] != 1)
25 | down = true;
26 | if (buf[j] == prevState.bInfo[i] && prevState.bInfo[i] != 1)
27 | up = true;
28 | }
29 | if (!down) {
30 | HandleLockingKeys(buf[i]);
31 | OnKeyDown(*buf, buf[i]);
32 | }
33 | if (!up)
34 | OnKeyUp(prevState.bInfo[0], prevState.bInfo[i]);
35 | }
36 | for (uint8_t i = 0; i < 8; i++)
37 | prevState.bInfo[i] = buf[i];
38 | }
39 |
40 |
41 | uint8_t KeyboardReportParser::OemToAscii(uint8_t mod, uint8_t key)
42 | {
43 | uint8_t shift = (mod & 0x22);
44 | // [a-z]
45 | if (VALUE_WITHIN(key, 0x04, 0x1d)) {
46 | // Upper case letters
47 | if ((bmCapsLock == 0 && shift) ||
48 | (bmCapsLock == 1 && shift == 0))
49 | return (key - 4 + 'A');
50 |
51 | // Lower case letters
52 | else
53 | return (key - 4 + 'a');
54 | }// Numbers
55 | else if (VALUE_WITHIN(key, 0x1e, 0x27)) {
56 | if (shift)
57 | return ((uint8_t)pgm_read_byte(&getNumKeys()[key - 0x1e]));
58 | else
59 | return ((key == UHS_HID_BOOT_KEY_ZERO) ? '0' : key - 0x1e + '1');
60 | }// Keypad Numbers
61 | else if(VALUE_WITHIN(key, 0x59, 0x61)) {
62 | if(bmNumLock == 1)
63 | return (key - 0x59 + '1');
64 | } else if(VALUE_WITHIN(key, 0x2d, 0x38))
65 | return ((shift) ? (uint8_t)pgm_read_byte(&getSymKeysUp()[key - 0x2d]) : (uint8_t)pgm_read_byte(&getSymKeysLo()[key - 0x2d]));
66 | else if(VALUE_WITHIN(key, 0x54, 0x58))
67 | return (uint8_t)pgm_read_byte(&getPadKeys()[key - 0x54]);
68 | else {
69 | switch(key) {
70 | case UHS_HID_BOOT_KEY_SPACE: return (0x20);
71 | case UHS_HID_BOOT_KEY_ENTER: return ('\r'); // Carriage return (0x0D)
72 | case UHS_HID_BOOT_KEY_ZERO2: return ((bmNumLock == 1) ? '0': 0);
73 | case UHS_HID_BOOT_KEY_PERIOD: return ((bmNumLock == 1) ? '.': 0);
74 | }
75 | }
76 | return ( 0);
77 | }
78 |
79 | #endif
80 |
--------------------------------------------------------------------------------
/src/helpers/HID/USB/HID_USB_KbdParser.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../HID_Common.hpp"
4 |
5 | #if defined HID_USB
6 |
7 | #include "HID_USB_Keys.h"
8 |
9 | // reversed from https://github.com/felis/USB_Host_Shield_2.0
10 | // /!\ this is limited to only one device (keyboard)
11 |
12 | #define UHS_HID_BOOT_KEY_ZERO 0x27
13 | #define UHS_HID_BOOT_KEY_ENTER 0x28
14 | #define UHS_HID_BOOT_KEY_SPACE 0x2c
15 | #define UHS_HID_BOOT_KEY_CAPS_LOCK 0x39
16 | #define UHS_HID_BOOT_KEY_SCROLL_LOCK 0x47
17 | #define UHS_HID_BOOT_KEY_NUM_LOCK 0x53
18 | #define UHS_HID_BOOT_KEY_ZERO2 0x62
19 | #define UHS_HID_BOOT_KEY_PERIOD 0x63
20 |
21 | #define VALUE_BETWEEN(v,l,h) (((v)>(l)) && ((v)<(h)))
22 | #define VALUE_WITHIN(v,l,h) (((v)>=(l)) && ((v)<=(h)))
23 |
24 | struct MODIFIERKEYS
25 | {
26 | uint8_t bmLeftCtrl : 1;
27 | uint8_t bmLeftShift : 1;
28 | uint8_t bmLeftAlt : 1;
29 | uint8_t bmLeftGUI : 1;
30 | uint8_t bmRightCtrl : 1;
31 | uint8_t bmRightShift : 1;
32 | uint8_t bmRightAlt : 1;
33 | uint8_t bmRightGUI : 1;
34 | };
35 |
36 | struct KBDINFO
37 | {
38 | struct
39 | {
40 | uint8_t bmLeftCtrl : 1;
41 | uint8_t bmLeftShift : 1;
42 | uint8_t bmLeftAlt : 1;
43 | uint8_t bmLeftGUI : 1;
44 | uint8_t bmRightCtrl : 1;
45 | uint8_t bmRightShift : 1;
46 | uint8_t bmRightAlt : 1;
47 | uint8_t bmRightGUI : 1;
48 | };
49 | uint8_t bReserved;
50 | uint8_t Keys[6];
51 | };
52 |
53 |
54 | struct KBDLEDS
55 | {
56 | uint8_t bmNumLock : 1;
57 | uint8_t bmCapsLock : 1;
58 | uint8_t bmScrollLock : 1;
59 | uint8_t bmCompose : 1;
60 | uint8_t bmKana : 1;
61 | uint8_t bmReserved : 3;
62 | };
63 |
64 |
65 | class KeyboardReportParser
66 | {
67 | static const uint8_t numKeys[10];
68 | static const uint8_t symKeysUp[12];
69 | static const uint8_t symKeysLo[12];
70 | static const uint8_t padKeys[5];
71 |
72 | protected:
73 |
74 | union
75 | {
76 | KBDINFO kbdInfo;
77 | uint8_t bInfo[sizeof (KBDINFO)];
78 | } prevState;
79 |
80 | union
81 | {
82 | KBDLEDS kbdLeds;
83 | uint8_t bLeds;
84 | } kbdLockingKeys;
85 |
86 | public:
87 |
88 | KeyboardReportParser()
89 | {
90 | //bLeds = 0;
91 | bmCapsLock = false;
92 | bmNumLock = false;
93 | bmScrollLock = false;
94 | };
95 |
96 | bool bmCapsLock;
97 | bool bmNumLock;
98 | bool bmScrollLock;
99 |
100 | uint8_t OemToAscii(uint8_t mod, uint8_t key);
101 | void Parse(uint8_t len, uint8_t *buf);
102 |
103 |
104 | protected:
105 |
106 | virtual uint8_t HandleLockingKeys(uint8_t key)
107 | {
108 | switch(key) {
109 | case UHS_HID_BOOT_KEY_NUM_LOCK:
110 | bmNumLock = !bmNumLock;
111 | break;
112 | case UHS_HID_BOOT_KEY_CAPS_LOCK:
113 | bmCapsLock = !bmCapsLock;
114 | break;
115 | case UHS_HID_BOOT_KEY_SCROLL_LOCK:
116 | bmScrollLock = !bmScrollLock;
117 | break;
118 | }
119 | return 0;
120 | };
121 |
122 | virtual void OnControlKeysChanged(uint8_t before __attribute__((unused)), uint8_t after __attribute__((unused))) { };
123 | virtual void OnKeyDown(uint8_t mod __attribute__((unused)), uint8_t key __attribute__((unused))) { };
124 | virtual void OnKeyUp(uint8_t mod __attribute__((unused)), uint8_t key __attribute__((unused))) { };
125 | virtual const uint8_t *getNumKeys() { return numKeys; };
126 | virtual const uint8_t *getSymKeysUp() { return symKeysUp; };
127 | virtual const uint8_t *getSymKeysLo() { return symKeysLo; };
128 | virtual const uint8_t *getPadKeys() { return padKeys; };
129 |
130 | };
131 |
132 | #endif
133 |
--------------------------------------------------------------------------------
/src/helpers/HID/Xpad/HID_XPad.cpp:
--------------------------------------------------------------------------------
1 | #include "HID_XPad.hpp"
2 |
3 | #if defined HID_XPAD
4 |
5 | static bool wire_begun = false;
6 |
7 | bool XPadReady()
8 | {
9 | return wire_begun;
10 | }
11 |
12 | void initXPad()
13 | {
14 | if( wire_begun ) {
15 | return;
16 | }
17 | Wire.begin( SDA, SCL ); // connect XPadShield
18 | wire_begun = true;
19 | readXpad(); // clear xpad input, sometimes returns garbage after init
20 | }
21 |
22 |
23 | void beforeXpadRead()
24 | {
25 | // don't spam I2C
26 | }
27 |
28 | void afterXpadRead()
29 | {
30 | // Turn I2C on
31 | }
32 |
33 |
34 | static unsigned long xPadMinDelay = 30; // min delay between queryes
35 | static unsigned long xPadLastQuery = 0;
36 |
37 |
38 | struct xpad_button_map_t
39 | {
40 | struct bits_t {
41 | bool up: 1;
42 | bool down: 1;
43 | bool right: 1;
44 | bool left: 1;
45 | bool a: 1;
46 | bool b: 1;
47 | bool c: 1;
48 | bool d: 1;
49 | };
50 | union {
51 | bits_t bits;
52 | uint8_t flags;
53 | };
54 | };
55 |
56 |
57 | Button BtnUp;
58 | Button BtnDown;
59 | Button BtnLeft;
60 | Button BtnRight;
61 | Button BtnPlay;
62 | Button BtnAction1;
63 | Button BtnAction2;
64 | Button BtnAction3;
65 |
66 | Button *Btns[8] = {
67 | &BtnUp,
68 | &BtnDown,
69 | &BtnLeft,
70 | &BtnRight,
71 | &BtnPlay,
72 | &BtnAction1,
73 | &BtnAction2,
74 | &BtnAction3
75 | };
76 |
77 |
78 |
79 | HIDControls readXpad()
80 | {
81 | unsigned long now = millis();
82 | if( now - xPadLastQuery > xPadMinDelay ) {
83 | xPadLastQuery = now;
84 | } else {
85 | return HID_NONE;
86 | }
87 |
88 | Wire.requestFrom(0x10, 1); // scan buttons from XPadShield
89 | int resp = Wire.read();
90 | switch(resp) {
91 | case 0x01: // up
92 | BtnUp.setState(1);
93 | return HID_UP;
94 | break;
95 | case 0x02: // down
96 | BtnDown.setState(1);
97 | return HID_DOWN;
98 | break;
99 | case 0x04: // right
100 | BtnRight.setState(1);
101 | return HID_RIGHT;
102 | break;
103 | case 0x08: // left
104 | BtnRight.setState(1);
105 | return HID_LEFT;
106 | break;
107 | break;
108 | case 0x10: // B (play/stop button)
109 | BtnPlay.setState(1);
110 | return HID_PLAYSTOP;
111 | break;
112 | case 0x20: // Action button (toggle loop options)
113 | BtnAction1.setState(1);
114 | return HID_ACTION1;
115 | break;
116 | case 0x40: // C (minus '-' decrease/previous)
117 | BtnAction2.setState(1);
118 | return HID_ACTION2;
119 | break;
120 | case 0x80: // D (plus '+' increase/next)
121 | BtnAction3.setState(1);
122 | return HID_ACTION3;
123 | break;
124 | default: // simultaneous buttons push ?
125 | return HID_NONE;
126 | break;
127 | }
128 | }
129 |
130 | #endif
131 |
--------------------------------------------------------------------------------
/src/helpers/HID/Xpad/HID_XPad.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../HID_Common.hpp"
4 |
5 | #if defined HID_XPAD
6 |
7 | #include
8 |
9 | #if defined (CONFIG_IDF_TARGET_ESP32)
10 |
11 | #define XPAD_SDA SDA
12 | #define XPAD_SCL SCL
13 |
14 | #elif defined (CONFIG_IDF_TARGET_ESP32S3) //|| defined (CONFIG_IDF_TARGET_ESP32S2)
15 |
16 | #define XPAD_SDA 9
17 | #define XPAD_SCL 10
18 |
19 | #else
20 | #error "Unsupported architecture, feel free to unlock and contribute!"
21 | #endif
22 |
23 | bool XPadReady();
24 | void initXPad();
25 | HIDControls readXpad();
26 | void beforeXpadRead();
27 | void afterXpadRead();
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/src/helpers/NVS/prefs.cpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #include "prefs.hpp"
33 |
34 | Preferences prefs;
35 |
36 | loopmode NVSPrefs::getLoopMode()
37 | {
38 | prefs.begin("SIDExplorer");
39 | uint8_t playerloopmode = (loopmode)prefs.getUChar("loopmode", (uint8_t)SID_LOOP_OFF );
40 | prefs.end();
41 | switch( playerloopmode ) { // validate
42 | case SID_LOOP_ON: log_d("Thawed loopmode from NVS: SID_LOOP_ON"); break;
43 | case SID_LOOP_RANDOM: log_d("Thawed loopmode from NVS: SID_LOOP_RANDOM"); break;
44 | case SID_LOOP_OFF: log_d("Thawed loopmode from NVS: SID_LOOP_OFF"); break;
45 | default: playerloopmode = SID_LOOP_OFF; break;
46 | }
47 | return (loopmode)playerloopmode;
48 | }
49 |
50 |
51 | void NVSPrefs::setLoopMode( loopmode mode )
52 | {
53 | prefs.begin("SIDExplorer");
54 | prefs.putUChar( "loopmode", (uint8_t)mode );
55 | prefs.end();
56 | switch( mode ) {
57 | case SID_LOOP_ON: log_d("Saved loopmode to NVS: SID_LOOP_ON"); break;
58 | case SID_LOOP_RANDOM: log_d("Saved loopmode to NVS: SID_LOOP_RANDOM"); break;
59 | case SID_LOOP_OFF: log_d("Saved loopmode to NVS: SID_LOOP_OFF"); break;
60 | }
61 | }
62 |
63 |
64 | uint8_t NVSPrefs::getNetMode()
65 | {
66 | prefs.begin("SIDExplorer");
67 | uint8_t mode = (uint8_t)prefs.getUChar("netmode", 0 );
68 | mode = mode%2; // avoid returning poisonous value
69 | log_v("Thawed mode from NVS: %d", mode );
70 | prefs.end();
71 | return mode;
72 | }
73 |
74 |
75 | void NVSPrefs::setNetMode( uint8_t mode )
76 | {
77 | prefs.begin("SIDExplorer");
78 | prefs.putUChar( "netmode", mode%2 );
79 | prefs.end();
80 | log_v("Saved netmode to NVS: %d", mode );
81 | }
82 |
83 | uint8_t NVSPrefs::getVolume()
84 | {
85 | prefs.begin("SIDExplorer");
86 | uint8_t volume = (loopmode)prefs.getUChar("volume", 10 );
87 | volume = volume%16; // avoid returning poisonous value
88 | log_v("Thawed volume from NVS: %d", volume );
89 | prefs.end();
90 | return volume;
91 | }
92 |
93 | void NVSPrefs::setVolume( uint8_t volume )
94 | {
95 | prefs.begin("SIDExplorer");
96 | prefs.putUChar( "volume", volume );
97 | prefs.end();
98 | log_v("Saved volume to NVS: %d", volume );
99 | }
100 |
101 |
102 | void NVSPrefs::setLastPath( const char* path )
103 | {
104 | prefs.begin("SIDExplorer");
105 | prefs.putString("path", path);
106 | prefs.end();
107 | }
108 |
109 | void NVSPrefs::getLastPath( char* path )
110 | {
111 | prefs.begin("SIDExplorer");
112 | size_t pathlen = prefs.getString("path", path, 255);
113 | if( pathlen <= 0 || path[0] != '/' ) {
114 | log_d("Defaulting to %s", SID_FOLDER );
115 | snprintf( path, 255, "%s", SID_FOLDER );
116 | }
117 | prefs.end();
118 | }
119 |
120 |
--------------------------------------------------------------------------------
/src/helpers/NVS/prefs.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #pragma once
33 |
34 | #include "../../config.h"
35 | #include
36 |
37 | class NVSPrefs
38 | {
39 | public:
40 |
41 | loopmode getLoopMode();
42 | uint8_t getNetMode();
43 | uint8_t getVolume();
44 | void getLastPath( char* path );
45 |
46 | void setLoopMode( loopmode mode );
47 | void setNetMode( uint8_t mode );
48 | void setVolume( uint8_t volume );
49 | void setLastPath( const char* path );
50 | };
51 |
--------------------------------------------------------------------------------
/src/helpers/Path_Utils.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "../config.h"
4 |
5 | #if !defined SID_DOWNLOAD_ARCHIVES
6 |
7 | #include
8 |
9 |
10 | namespace SIDView
11 | {
12 |
13 |
14 | __attribute__((unused))
15 | static char *_memrchr(const char *m, int c, size_t n)
16 | {
17 | const char *s = m;
18 | c = (char)c;
19 | while (n--) if (s[n]==c) return (char *)(s+n);
20 | return 0;
21 | }
22 |
23 |
24 | __attribute__((unused))
25 | static char *dirname(char *path)
26 | {
27 | static const char dot[] = ".";
28 | char *last_slash;
29 | /* Find last '/'. */
30 | last_slash = path != NULL ? strrchr (path, '/') : NULL;
31 | if (last_slash != NULL && last_slash != path && last_slash[1] == '\0') {
32 | /* Determine whether all remaining characters are slashes. */
33 | char *runp;
34 | for (runp = last_slash; runp != path; --runp)
35 | if (runp[-1] != '/')
36 | break;
37 | /* The '/' is the last character, we have to look further. */
38 | if (runp != path)
39 | last_slash = (char*)_memrchr(path, '/', runp - path);
40 | }
41 | if (last_slash != NULL) {
42 | /* Determine whether all remaining characters are slashes. */
43 | char *runp;
44 | for (runp = last_slash; runp != path; --runp)
45 | if (runp[-1] != '/')
46 | break;
47 | /* Terminate the path. */
48 | if (runp == path) {
49 | /* The last slash is the first character in the string. We have to
50 | return "/". As a special case we have to return "//" if there
51 | are exactly two slashes at the beginning of the string. See
52 | XBD 4.10 Path Name Resolution for more information. */
53 | if (last_slash == path + 1)
54 | ++last_slash;
55 | else
56 | last_slash = path + 1;
57 | } else
58 | last_slash = runp;
59 | last_slash[0] = '\0';
60 | } else
61 | /* This assignment is ill-designed but the XPG specs require to
62 | return a string containing "." in any case no directory part is
63 | found and so a static and constant string is required. */
64 | path = (char *) dot;
65 | return path;
66 | }
67 | #ifndef strdupa // defined in sdk 2.0
68 | #define strdupa(a) strcpy((char*)alloca(strlen(a) + 1), a)
69 | #endif
70 | // create traversing directories from a path
71 | __attribute__((unused))
72 | static int mkpath(fs::FS *fs, char *dir)
73 | {
74 | if (!dir) return 1;
75 | if (strlen(dir) == 1 && dir[0] == '/') return 0;
76 | mkpath(fs, dirname(strdupa(dir)));
77 | return fs->mkdir( dir );
78 | }
79 |
80 |
81 | // create traversing directories from a file name
82 | __attribute__((unused))
83 | static void mkdirp( fs::FS *fs, const char* tempFile )
84 | {
85 | if( fs->exists( tempFile ) ) {
86 | log_v("Destination file already exists, no need to create subfolders");
87 | return; // no need to create folder if the file is there
88 | }
89 |
90 | char tmp_path[256] = {0};
91 | snprintf( tmp_path, 256, "%s", tempFile );
92 |
93 | for( size_t i=0;iexists( dir_name ) ) {
103 | log_v("Creating %s folder for path %s", dir_name, tmp_path);
104 | mkpath( fs, dir_name );
105 | } else {
106 | log_v("Folder %s already exists for path %s", dir_name, tmp_path);
107 | }
108 | //delete tmp_path;
109 | }
110 |
111 | }; // end namespace SIDView
112 |
113 | #endif
114 |
--------------------------------------------------------------------------------
/src/helpers/SDUpdater/PartitionManager.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "./PartitionManager.hpp"
3 |
4 | #if defined SD_UPDATABLE
5 |
6 | #include "../../UI/UI_Utils.hpp"
7 |
8 |
9 | namespace PartitionManager
10 | {
11 |
12 | using namespace UI_Utils;
13 | using SIDView::display;
14 |
15 | /*
16 | static esp_image_metadata_t getSketchMeta( const esp_partition_t* running ) {
17 | esp_image_metadata_t data;
18 | if ( !running ) return data;
19 | const esp_partition_pos_t running_pos = {
20 | .offset = running->address,
21 | .size = running->size,
22 | };
23 | data.start_addr = running_pos.offset;
24 | esp_image_verify( ESP_IMAGE_VERIFY, &running_pos, &data );
25 | return data;
26 | }
27 | */
28 |
29 | bool comparePartition(const esp_partition_t* src1, const esp_partition_t* src2, size_t length)
30 | {
31 | size_t lengthLeft = length;
32 | const size_t bufSize = SPI_FLASH_SEC_SIZE;
33 | std::unique_ptr buf1(new uint8_t[bufSize]);
34 | std::unique_ptr buf2(new uint8_t[bufSize]);
35 | uint32_t offset = 0;
36 | size_t i;
37 | while( lengthLeft > 0) {
38 | size_t readBytes = (lengthLeft < bufSize) ? lengthLeft : bufSize;
39 | if (!ESP.flashRead(src1->address + offset, reinterpret_cast(buf1.get()), (readBytes + 3) & ~3)
40 | || !ESP.flashRead(src2->address + offset, reinterpret_cast(buf2.get()), (readBytes + 3) & ~3)) {
41 | return false;
42 | }
43 | for (i = 0; i < readBytes; ++i) if (buf1[i] != buf2[i]) return false;
44 | lengthLeft -= readBytes;
45 | offset += readBytes;
46 | }
47 | return true;
48 | }
49 |
50 |
51 | bool copyPartition(File* fs, const esp_partition_t* dst, const esp_partition_t* src, size_t length)
52 | {
53 | display->fillRect( 0, display->height()-10, display->width(), 10, 0);
54 | size_t lengthLeft = length;
55 | const size_t bufSize = SPI_FLASH_SEC_SIZE;
56 | std::unique_ptr buf(new uint8_t[bufSize]);
57 | uint32_t offset = 0;
58 | uint32_t progress = 0, progressOld = 0;
59 | while( lengthLeft > 0) {
60 | size_t readBytes = (lengthLeft < bufSize) ? lengthLeft : bufSize;
61 | if (!ESP.flashRead(src->address + offset, reinterpret_cast(buf.get()), (readBytes + 3) & ~3)
62 | || !ESP.flashEraseSector((dst->address + offset) / bufSize)
63 | || !ESP.flashWrite(dst->address + offset, reinterpret_cast(buf.get()), (readBytes + 3) & ~3)) {
64 | return false;
65 | }
66 | if (fs) fs->write(buf.get(), (readBytes + 3) & ~3);
67 | lengthLeft -= readBytes;
68 | offset += readBytes;
69 | progress = display->width() * offset / length;
70 | if (progressOld != progress) {
71 | progressOld = progress;
72 | //!! display->progressBar( 110, 112, 100, 20, progress);
73 | display->fillRect( 0, display->height()-10, progress, 10, TFT_GREEN);
74 | }
75 | }
76 | return true;
77 | }
78 |
79 |
80 | void copyPartition( const char* menubinfilename )
81 | {
82 | const esp_partition_t *running = esp_ota_get_running_partition();
83 | const esp_partition_t *nextupdate = esp_ota_get_next_update_partition(NULL);
84 | size_t sksize = ESP.getSketchSize();
85 | bool flgSD = false;//M5_FS.begin( TFCARD_CS_PIN, SPI, 40000000 );
86 | File dst;
87 | if (flgSD) {
88 | dst = (SID_FS.open(menubinfilename, FILE_WRITE ));
89 | display->drawString("Overwriting " MENU_BIN, 16, 38, &Font8x8C64);
90 | }
91 | if (copyPartition( flgSD ? &dst : NULL, nextupdate, running, sksize)) {
92 | display->drawString("Done", 16, 52, &Font8x8C64);
93 | }
94 | if (flgSD) dst.close();
95 | }
96 |
97 |
98 | void checkMenuStickyPartition( const char* menubinfilename )
99 | {
100 | if( menubinfilename == nullptr ) menubinfilename = MENU_BIN;
101 | const esp_partition_t *running = esp_ota_get_running_partition();
102 | const esp_partition_t *nextupdate = esp_ota_get_next_update_partition(NULL);
103 | display->setTextDatum(MC_DATUM);
104 | display->setCursor(0,0);
105 | if (!nextupdate) {
106 | // display->setTextFont(4);
107 | display->print("! WARNING !\r\nNo OTA partition.\r\nCan't use SD-Updater.");
108 | delay(3000);
109 | } else if (running && running->label[3] == '0' && nextupdate->label[3] == '1') {
110 | display->drawString("TobozoLauncher on app0", 16, 10, &Font8x8C64);
111 | size_t sksize = ESP.getSketchSize();
112 | if (!comparePartition(running, nextupdate, sksize)) {
113 | bool flgSD = SID_FS.begin(/* TFCARD_CS_PIN, SPI, 40000000 */);
114 | display->drawString("Synchronizing 'app1' partition", 16, 24, &Font8x8C64);
115 | File dst;
116 | if (flgSD) {
117 | dst = (SID_FS.open(menubinfilename, FILE_WRITE ));
118 | display->drawString("Overwriting " MENU_BIN, 16, 38, &Font8x8C64);
119 | }
120 | if (copyPartition( flgSD ? &dst : NULL, nextupdate, running, sksize)) {
121 | display->drawString("Done", 16, 52, &Font8x8C64);
122 | }
123 | if (flgSD) dst.close();
124 | }
125 | SDUpdater::updateNVS();
126 | display->drawString("Hot-loading 'app1' partition", 16, 66, &Font8x8C64);
127 | if (Update.canRollBack()) {
128 | Update.rollBack();
129 | ESP.restart();
130 | } else {
131 | display->print("! WARNING !\r\nUpdate.rollBack() failed.");
132 | log_e("Failed to rollback after copy");
133 | }
134 | }
135 | display->setTextDatum(TL_DATUM);
136 | }
137 |
138 | };
139 |
140 | #endif // defined SD_UPDATABLE
141 |
--------------------------------------------------------------------------------
/src/helpers/SDUpdater/PartitionManager.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 |
33 | #pragma once
34 |
35 | #include "../../config.h"
36 |
37 | namespace PartitionManager
38 | {
39 | // borrowed from https://github.com/lovyan03/M5Stack_LovyanLauncher
40 | //bool comparePartition(const esp_partition_t* src1, const esp_partition_t* src2, size_t length);
41 | //bool copyPartition(File* fs, const esp_partition_t* dst, const esp_partition_t* src, size_t length);
42 | //void copyPartition( const char* menubinfilename=MENU_BIN );
43 | void checkMenuStickyPartition( const char* menubinfilename=nullptr );
44 | };
45 |
--------------------------------------------------------------------------------
/src/helpers/SDUpdater/SDUpdaterHooks.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "./SDUpdaterHooks.hpp"
3 |
4 | #if defined SD_UPDATABLE
5 |
6 | #include "../../UI/UI_Utils.hpp"
7 | #include "PartitionManager.hpp"
8 |
9 | namespace SDUpdaterNS
10 | {
11 |
12 | using namespace PartitionManager;
13 | using SIDView::display;
14 |
15 | // SD Updater customizations
16 | int myAssertStartUpdateFromButton( char* labelLoad, char* labelSkip, char* labelSave, unsigned long waitdelay )
17 | {
18 | static unsigned long last_poll = 0;
19 | static bool i2c_connected = false;
20 | if( millis() - last_poll < 50 ) return -1;
21 | last_poll = millis();
22 | if( !i2c_connected ) {
23 | log_w("Starting I2C");
24 | i2c_connected = true;
25 | Wire.begin( SDA, SCL ); // connect XPadShield
26 | freezeTextStyle();
27 | display->setFont( &Font8x8C64 );
28 | drawSDUSplashPage(BTN_HINT_MSG);
29 | display->setFont( &Font8x8C64 );
30 | drawSDUPushButton( labelLoad, 0, userBtnStyle->Load.BorderColor, userBtnStyle->Load.FillColor, userBtnStyle->Load.TextColor, userBtnStyle->Load.ShadowColor );
31 | display->setFont( &Font8x8C64 );
32 | drawSDUPushButton( labelSkip, 1, userBtnStyle->Skip.BorderColor, userBtnStyle->Skip.FillColor, userBtnStyle->Skip.TextColor, userBtnStyle->Load.ShadowColor );
33 | }
34 | auto msec = millis();
35 | do {
36 | Wire.requestFrom(0x10, 1); // scan buttons from XPadShield
37 | int resp = Wire.read();
38 | if( resp == 0x01 ) return 1;
39 | if( resp == 0x04 ) return 0;
40 | delay(50);
41 | } while (millis() - msec < waitdelay);
42 | return -1;
43 | }
44 |
45 | void setupButtonsStyle()
46 | {
47 | static BtnStyles myBtnStyle;
48 | // overwrite default properties if needed
49 | //myBtnStyle.Load = { TFT_ORANGE, display->color565( 0xaa, 0x00, 0x00), display->color565( 0xdd, 0xdd, 0xdd) };
50 | //myBtnStyle.Skip = { display->color565( 0x11, 0x11, 0x11), display->color565( 0x33, 0x88, 0x33), display->color565( 0xee, 0xee, 0xee) };
51 | myBtnStyle.height = 28;
52 | myBtnStyle.width = 60;
53 | myBtnStyle.hwidth = 30;
54 | myBtnStyle.FontSize = 0; // buttons font size
55 | myBtnStyle.MsgFontSize = 0; // welcome message font size
56 | //myBtnStyle.MsgFontFolor[0] = TFT_WHITE;
57 | //myBtnStyle.MsgFontFolor[1] = TFT_BLACK; // foreground, background
58 | userBtnStyle = &myBtnStyle;
59 |
60 | // display buttons vertically on portrait mode
61 | /*
62 | SplashTitleStyle =
63 | {
64 | .textColor = C64_MAROON_565, // C64_LIGHTBLUE_565,
65 | .bgColor = C64_MAROON_DARKER_565,
66 | .fontSize = 0,
67 | .textDatum = MC_DATUM,
68 | .colorStart = C64_LIGHTBLUE_565, // gradient color start
69 | .colorEnd = C64_DARKBLUE_565, // gradient color end
70 | };
71 | */
72 | SplashTitleStyle.fontSize = 0;
73 |
74 | SplashAppNameStyle =
75 | {
76 | .textColor = C64_LIGHTBLUE_565,
77 | .bgColor = C64_DARKBLUE_565,
78 | .fontSize = 0,
79 | .textDatum = BC_DATUM,
80 | .colorStart = C64_DARKBLUE_565, // gradient color start
81 | .colorEnd = 0, // gradient color end
82 | };
83 |
84 | SplashAuthorNameStyle =
85 | {
86 | .textColor = C64_LIGHTBLUE_565,
87 | .bgColor = C64_DARKBLUE_565,
88 | .fontSize = 0,
89 | .textDatum = BC_DATUM,
90 | .colorStart = C64_DARKBLUE_565, // gradient color start
91 | .colorEnd = 0, // gradient color end
92 | };
93 |
94 | SplashAppPathStyle =
95 | {
96 | .textColor = TFT_DARKGREY,
97 | .bgColor = C64_DARKBLUE_565,
98 | .fontSize = 0,
99 | .textDatum = BC_DATUM,
100 | .colorStart = C64_DARKBLUE_565, // gradient color start
101 | .colorEnd = 0, // gradient color end
102 | };
103 |
104 |
105 | BUTTON_WIDTH = 36;
106 | BUTTON_HWIDTH = BUTTON_WIDTH/2; // button half width
107 | BUTTON_HEIGHT = 32;
108 |
109 | SDUButtonsXOffset[0] = 34;
110 | SDUButtonsXOffset[1] = 34;
111 | SDUButtonsXOffset[2] = 34;
112 |
113 | SDUButtonsYOffset[0] = 0;
114 | SDUButtonsYOffset[1] = 36;
115 | SDUButtonsYOffset[2] = 72;
116 |
117 | display->setFont( &Font8x8C64 );
118 |
119 | }
120 |
121 | void runSDUpdaterMenu()
122 | {
123 | setupButtonsStyle(); // set styles first (default it 320x240 landscape)
124 | SDUCfg.setWaitForActionCb( myAssertStartUpdateFromButton );// use my own buttons combination at boot
125 | checkMenuStickyPartition(); // copy self to SD Card as "/SIDPlayer.bin", also move to OTA1 partition
126 | checkSDUpdater( SID_FS, MENU_BIN, 1000 ); // on button push => load the "/menu.bin" firmware
127 | M5.sd_begin();
128 | delay(300);
129 | }
130 |
131 | };
132 |
133 |
134 |
135 | #endif // defined SD_UPDATABLE
136 |
--------------------------------------------------------------------------------
/src/helpers/SDUpdater/SDUpdaterHooks.hpp:
--------------------------------------------------------------------------------
1 | /*\
2 |
3 | ESP32-SIDView
4 | https://github.com/tobozo/ESP32-SIDView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2020 tobozo
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 | -----------------------------------------------------------------------------
29 |
30 | \*/
31 |
32 | #pragma once
33 |
34 | #include "../../config.h"
35 |
36 | namespace SDUpdaterNS
37 | {
38 | // SD Updater customizations
39 | //int myAssertStartUpdateFromButton( char* labelLoad, char* labelSkip, char* labelSave, unsigned long waitdelay );
40 | //void setupButtonsStyle();
41 | void runSDUpdaterMenu();
42 | };
43 |
--------------------------------------------------------------------------------
/src/helpers/WiFiManager/WiFiManagerHooks.cpp:
--------------------------------------------------------------------------------
1 | #include "WiFiManagerHooks.hpp"
2 |
3 | #include // https://github.com/tzapu/WiFiManager
4 | #include // https://github.com/tobozo/WiFiManagerTz
5 |
6 |
7 | // Note: WiFiManagerNS namespace belongs to library
8 | namespace WiFiManagerNS
9 | {
10 |
11 | WiFiManager *wifiManager = nullptr;
12 |
13 | // Optional callback function, fired when NTP gets updated.
14 | // Used to print the updated time or adjust an external RTC module.
15 | void on_time_available(struct timeval *t)
16 | {
17 | Serial.print("[NTP] Adjusted datetime: ");
18 | struct tm timeInfo;
19 | getLocalTime(&timeInfo, 1000);
20 | Serial.println(&timeInfo, "%A, %B %d %Y %H:%M:%S zone %Z %z ");
21 | net::wifiOff();
22 | // RTC.adjust( &timeInfo );
23 | net::timeSynced = true; // tell deepsid the ESP32 is up to datetime
24 | }
25 |
26 | void setup()
27 | {
28 | if( !wifiManager ) wifiManager = new WiFiManager();
29 | // optionally attach external RTC update callback
30 | NTP::onTimeAvailable( &on_time_available );
31 | // attach NTP/TZ/Clock-setup page to the WiFi Manager
32 | WiFiManagerNS::init( wifiManager );
33 |
34 | if( !wifiManager ) {
35 | log_e("Unable to launch WiFiManager, aborting");
36 | return;
37 | }
38 |
39 | // /!\ make sure "custom" is listed there as it's required to pull the "Setup Clock" button
40 | std::vector menu = {"wifi", "info", "custom", "param", "sep", "restart", "exit"};
41 | wifiManager->setMenu(menu);
42 |
43 | wifiManager->setConnectRetries(10); // necessary with sluggish routers and/or hidden AP
44 | wifiManager->setCleanConnect(true); // ESP32 wants this
45 | wifiManager->setConfigPortalBlocking(false); // /!\ false=use "wifiManager->process();" in the loop()
46 | wifiManager->setConfigPortalTimeout(120); // will wait 2mn before closing portal
47 | wifiManager->setSaveConfigCallback([](){ configSaved = true;}); // restart on credentials save, ESP32 doesn't like to switch between AP/STA
48 |
49 | if( wifiManager->autoConnect( WIFIMANAGER_AP_SSID, WIFIMANAGER_AP_PASS ) ) {
50 | Serial.print("Connected to Access Point, visit http://");
51 | Serial.print(WiFi.localIP());
52 | Serial.println(" to setup the clock or change WiFi settings");
53 | wifiManager->startConfigPortal();
54 | } else {
55 | Serial.println("Configportal is running, no WiFi has been set yet");
56 | }
57 |
58 | if(WiFi.status() == WL_CONNECTED){
59 | configTime();
60 | }
61 | }
62 |
63 | void loop()
64 | {
65 | if( wifiManager ) wifiManager->process();
66 | }
67 |
68 | };
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/helpers/WiFiManager/WiFiManagerHooks.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../../config.h"
4 |
5 | namespace WiFiManagerNS
6 | {
7 | static bool configSaved = false;
8 | // Optional callback function, fired when NTP gets updated.
9 | // Used to print the updated time or adjust an external RTC module.
10 | void on_time_available(struct timeval *t);
11 | void setup();
12 | void loop();
13 | }
14 |
--------------------------------------------------------------------------------
/src/helpers/types.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 |
5 | namespace SIDView
6 | {
7 |
8 | // throw some superglobals
9 | class SIDExplorer;
10 | class ScrollableItem;
11 |
12 | extern SIDTunesPlayer *sidPlayer; // SID6581 tunes player
13 | extern LGFX *display;
14 | extern xSemaphoreHandle mux;
15 | extern uint32_t ramSize; // populated at boot for statistics
16 | extern SIDExplorer* Explorer;
17 |
18 | // CacheManager types
19 | enum SongCacheType_t
20 | {
21 | CACHE_DOTFILES,
22 | CACHE_DEEPSID
23 | };
24 |
25 | // folder items
26 | enum folderItemType_t
27 | {
28 | F_PARENT_FOLDER, // parent folder
29 | F_PLAYLIST, // SID file list for current folder
30 | F_DEEPSID_FOLDER, // "folder" arg to deepsid API
31 | F_SUBFOLDER, // subfolder with cached SID file list
32 | F_SUBFOLDER_NOCACHE, // subfolder with no SID file list
33 | F_SID_FILE, // single SID file
34 | F_UNSUPPORTED_FILE, // other file types unsupported by this player
35 | F_SYMLINK, // symbolic link to a SID file, playlist or folder
36 | F_TOOL_CB, // virtual file representing a program/callback
37 | };
38 |
39 | // display list items
40 | struct folderTypeItem_t
41 | {
42 | String name; // label
43 | String path; // full path
44 | folderItemType_t type;
45 | bool operator==(const folderTypeItem_t &item)
46 | {
47 | return item.type == type && item.name == name && item.path == path;
48 | }
49 | };
50 |
51 |
52 | // some callbacks CacheManager can use to nofity SIDExplorer UI
53 | typedef bool (*activityTickerCb)( const char* title, size_t totalitems ); // callback for i/o activity during folder enumeration
54 | typedef void (*folderElementPrintCb)( const char* fullpath, folderItemType_t type ); // adding a folder element to an enumerated list
55 | typedef void (*activityProgressCb)( size_t progress, size_t total, size_t words_count, size_t files_count, size_t folders_count ); // progress cb
56 |
57 |
58 | struct timeout_runner_t
59 | {
60 | typedef bool (*while_t)();
61 | bool whileMs( while_t whileCb, uint32_t timeout_ms )
62 | {
63 | uint32_t now = millis();
64 | uint32_t expired = now + timeout_ms;
65 | while( whileCb() ) {
66 | if( expired < millis() ) return false;
67 | vTaskDelay(1);
68 | }
69 | return true;
70 | }
71 | };
72 |
73 |
74 |
75 | #if defined ENABLE_HVSC_SEARCH
76 | struct wordpath_t;
77 | struct sidpath_t;
78 | struct shard_t;
79 | typedef bool (*offsetInserter)( sidpath_t* sp, int rank );
80 | typedef void (*keywordItemPrintCb)( sidpath_t* item, size_t itemnum ); // search result
81 | typedef bool (*searchResultInsertCb)( sidpath_t* sp, int rank );
82 | #endif
83 |
84 |
85 | };
86 |
87 |
88 | namespace UI_Utils
89 | {
90 | enum UI_mode_t
91 | {
92 | none = 0,
93 | paged_listing,
94 | animated_views
95 | };
96 |
97 | struct LoadingScreen_t
98 | {
99 | public:
100 | const int imgwidth = 88; // insertdisk_jpg width
101 | const int imgheight = 26; // insertdisk_jpg height
102 | int imgposx; // insertdisk_jpg position X
103 | int imgposy; // insertdisk_jpg position Y
104 | int titleposx; // text title position X
105 | int titleposy; // text title position Y
106 | int msgposx; // text message position X
107 | int msgposy; // text message position Y
108 | void init( int width, int height );
109 | void drawDisk();
110 | void drawModem();
111 | void clearDisk();
112 | void blinkDisk();
113 | void drawTitle( const char* title );
114 | void drawMsg( const char* msg );
115 | void drawStrings( const char* title, const char* msg );
116 | private:
117 | void initSD();
118 | void setStyles();
119 | bool _inited = false;
120 | bool _toggle = false; // disk blink
121 | };
122 |
123 | extern LoadingScreen_t loadingScreen;
124 |
125 |
126 | struct SongHeader_t
127 | {
128 | int32_t lastprogress = 0;
129 | int32_t lastCacheItemNum = -1;
130 | uint8_t lastvolume = 0;
131 | int16_t lastsubsong = -1;
132 | uint8_t deltaMM = 0;
133 | uint8_t lastMM = 0xff;
134 | uint8_t deltaSS = 0;
135 | uint8_t lastSS = 0xff;
136 | bool song_name_needs_scrolling = false;
137 | char filenumStr[32] = {0};
138 | char songNameStr[256] = {0};
139 | unsigned long currentprogress = 0;
140 | loopmode playerloopmode = SID_LOOP_OFF;
141 | loopmode lastplayerloopmode = SID_LOOP_ON;
142 | void loop();
143 | void setSong();
144 | void drawSong();
145 | void drawProgress( uint8_t lenMM, uint8_t lenSS );
146 | void clearProgress();
147 | };
148 |
149 | extern SongHeader_t songHeader;
150 |
151 |
152 | struct vumeter_builtin_led_t
153 | {
154 | int pin {-1};
155 | int freq_hz {5000};
156 | int channel {1};
157 | int resolution {8};
158 | uint8_t on_value {0x00};
159 | uint8_t off_value {0xff};
160 | void init();
161 | void deinit();
162 | void setFreq( int _freq_hz );
163 | void set( float value, int _freq_hz );
164 | void off();
165 | };
166 |
167 | extern vumeter_builtin_led_t led_meter;
168 |
169 | };
170 |
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | #include "./main.hpp"
2 |
3 | void setup()
4 | {
5 | M5.begin();
6 | static SIDExplorer *Explorer = new SIDExplorer();
7 | }
8 |
9 |
10 | void loop()
11 | {
12 | vTaskDelete( NULL );
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/src/main.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "./UI/SIDExplorer.hpp"
4 |
5 | void setup();
6 | void loop();
7 |
8 |
--------------------------------------------------------------------------------