├── .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 | --------------------------------------------------------------------------------