├── .gitignore ├── Examples └── MonoSeed09 │ ├── Makefile │ ├── MonoSeed09.cpp │ ├── PotentiometerLayout.png │ └── README.md ├── Hardware ├── BreakoutBoard │ └── PCB │ │ ├── BOM.txt │ │ └── BreakoutBoard │ │ ├── BreakoutBoard-NPTH.drl │ │ ├── BreakoutBoard-PTH.drl │ │ ├── BreakoutBoard.kicad_pcb │ │ ├── BreakoutBoard.kicad_pro │ │ └── BreakoutBoard.kicad_sch ├── ExternalCodec │ ├── Drivers │ │ ├── ExternalCodec.cpp │ │ └── ExternalCodec.h │ ├── PCB │ │ ├── BOM.txt │ │ ├── Codec.jpg │ │ └── ExternalCodec │ │ │ ├── ExternalCodec-NPTH.drl │ │ │ ├── ExternalCodec-PTH.drl │ │ │ ├── ExternalCodec.kicad_pcb │ │ │ ├── ExternalCodec.kicad_pro │ │ │ ├── ExternalCodec.kicad_sch │ │ │ └── ExternalCodec.zip │ ├── README.md │ └── Tests │ │ ├── DriverTest │ │ ├── DriverTest.cpp │ │ └── Makefile │ │ └── HardwareTest │ │ ├── Makefile │ │ └── StandaloneTest.cpp ├── Midi │ ├── PCB │ │ ├── BOM.txt │ │ └── Midi │ │ │ ├── Midi-NPTH.drl │ │ │ ├── Midi-PTH.drl │ │ │ ├── Midi.kicad_pcb │ │ │ ├── Midi.kicad_pro │ │ │ └── Midi.kicad_sch │ └── Test │ │ └── MidiInTest │ │ ├── Makefile │ │ ├── MidiInTest.cpp │ │ └── README.md └── PotentiometerArray │ ├── Drivers │ ├── PotentiometerArray.cpp │ └── PotentiometerArray.h │ ├── PCB │ ├── BOM.txt │ └── PotentiometerArray │ │ ├── PotentiometerArray.kicad_pcb │ │ ├── PotentiometerArray.kicad_pro │ │ └── PotentiometerArray.kicad_sch │ └── Tests │ ├── MultipleValueTest │ ├── Makefile │ └── MultipleValueTest.cpp │ └── SingleValueTest │ ├── Makefile │ └── SingleValueTest.cpp ├── Library └── UiFramework │ ├── Display.cpp │ ├── Display.h │ ├── Presenters │ ├── ListPage.cpp │ ├── ListPage.h │ ├── NavigationPageItem.cpp │ ├── NavigationPageItem.h │ ├── NumericSettingsPageItem.cpp │ ├── NumericSettingsPageItem.h │ ├── Option.h │ ├── OptionsSettingsPageItem.cpp │ ├── OptionsSettingsPageItem.h │ ├── Page.h │ ├── PageItem.h │ ├── SettingsPageItem.cpp │ └── SettingsPageItem.h │ ├── README.md │ ├── Tests │ ├── ManualTests │ │ ├── Makefile │ │ └── UiFramework.test.cpp │ └── UnitTests │ │ ├── Main.test.cpp │ │ ├── Makefile │ │ ├── MockUiParameterProvider.h │ │ ├── MockView.h │ │ └── catch.hpp │ ├── Utilities │ ├── UiParameter.cpp │ ├── UiParameter.h │ └── UiParameterProvider.h │ └── View │ ├── ListPageView.cpp │ ├── ListPageView.h │ └── View.h └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ##### Windows 2 | # Windows thumbnail cache files 3 | Thumbs.db 4 | Thumbs.db:encryptable 5 | ehthumbs.db 6 | ehthumbs_vista.db 7 | 8 | # Dump file 9 | *.stackdump 10 | 11 | # Folder config file 12 | [Dd]esktop.ini 13 | 14 | # Recycle Bin used on file shares 15 | $RECYCLE.BIN/ 16 | 17 | # Windows Installer files 18 | *.cab 19 | *.msi 20 | *.msix 21 | *.msm 22 | *.msp 23 | 24 | # Windows shortcuts 25 | *.lnk 26 | 27 | ##### Linux 28 | *~ 29 | 30 | # temporary files which can be created if a process still has a handle open of a deleted file 31 | .fuse_hidden* 32 | 33 | # KDE directory preferences 34 | .directory 35 | 36 | # Linux trash folder which might appear on any partition or disk 37 | .Trash-* 38 | 39 | # .nfs files are created when an open file is removed but is still being accessed 40 | .nfs* 41 | 42 | ##### MacOS 43 | # General 44 | .DS_Store 45 | .AppleDouble 46 | .LSOverride 47 | 48 | # Thumbnails 49 | ._* 50 | 51 | # Files that might appear in the root of a volume 52 | .DocumentRevisions-V100 53 | .fseventsd 54 | .Spotlight-V100 55 | .TemporaryItems 56 | .Trashes 57 | .VolumeIcon.icns 58 | .com.apple.timemachine.donotpresent 59 | 60 | # Directories potentially created on remote AFP share 61 | .AppleDB 62 | .AppleDesktop 63 | Network Trash Folder 64 | Temporary Items 65 | .apdisk 66 | 67 | ##### Android 68 | # Built application files 69 | *.apk 70 | *.ap_ 71 | *.aab 72 | 73 | # Files for the ART/Dalvik VM 74 | *.dex 75 | 76 | # Java class files 77 | *.class 78 | 79 | # Generated files 80 | bin/ 81 | gen/ 82 | out/ 83 | # Uncomment the following line in case you need and you don't have the release build type files in your app 84 | # release/ 85 | 86 | # Gradle files 87 | .gradle/ 88 | build/ 89 | 90 | # Local configuration file (sdk path, etc) 91 | local.properties 92 | 93 | # Proguard folder generated by Eclipse 94 | proguard/ 95 | 96 | # Log Files 97 | *.log 98 | 99 | # Android Studio Navigation editor temp files 100 | .navigation/ 101 | 102 | # Android Studio captures folder 103 | captures/ 104 | 105 | # IntelliJ 106 | *.iml 107 | .idea/workspace.xml 108 | .idea/tasks.xml 109 | .idea/gradle.xml 110 | .idea/assetWizardSettings.xml 111 | .idea/dictionaries 112 | .idea/libraries 113 | # Android Studio 3 in .gitignore file. 114 | .idea/caches 115 | .idea/modules.xml 116 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 117 | .idea/navEditor.xml 118 | 119 | # Keystore files 120 | # Uncomment the following lines if you do not want to check your keystore files in. 121 | #*.jks 122 | #*.keystore 123 | 124 | # External native build folder generated in Android Studio 2.2 and later 125 | .externalNativeBuild 126 | 127 | # Google Services (e.g. APIs or Firebase) 128 | # google-services.json 129 | 130 | # Freeline 131 | freeline.py 132 | freeline/ 133 | freeline_project_description.json 134 | 135 | # fastlane 136 | fastlane/report.xml 137 | fastlane/Preview.html 138 | fastlane/screenshots 139 | fastlane/test_output 140 | fastlane/readme.md 141 | 142 | # Version control 143 | vcs.xml 144 | 145 | # lint 146 | lint/intermediates/ 147 | lint/generated/ 148 | lint/outputs/ 149 | lint/tmp/ 150 | # lint/reports/ 151 | 152 | ##### Backup 153 | *.bak 154 | *.gho 155 | *.ori 156 | *.orig 157 | *.tmp 158 | 159 | ##### GPG 160 | secring.* 161 | 162 | ##### Dropbox 163 | # Dropbox settings and caches 164 | .dropbox 165 | .dropbox.attr 166 | .dropbox.cache 167 | 168 | ##### SynopsysVCS 169 | # Waveform formats 170 | *.vcd 171 | *.vpd 172 | *.evcd 173 | *.fsdb 174 | 175 | # Default name of the simulation executable. A different name can be 176 | # specified with this switch (the associated daidir database name is 177 | # also taken from here): -o / 178 | simv 179 | 180 | # Generated for Verilog and VHDL top configs 181 | simv.daidir/ 182 | simv.db.dir/ 183 | 184 | # Infrastructure necessary to co-simulate SystemC models with 185 | # Verilog/VHDL models. An alternate directory may be specified with this 186 | # switch: -Mdir= 187 | csrc/ 188 | 189 | # Log file - the following switch allows to specify the file that will be 190 | # used to write all messages from simulation: -l 191 | *.log 192 | 193 | # Coverage results (generated with urg) and database location. The 194 | # following switch can also be used: urg -dir .vdb 195 | simv.vdb/ 196 | urgReport/ 197 | 198 | # DVE and UCLI related files. 199 | DVEfiles/ 200 | ucli.key 201 | 202 | # When the design is elaborated for DirectC, the following file is created 203 | # with declarations for C/C++ functions. 204 | vc_hdrs.h 205 | 206 | ##### SVN 207 | .svn/ 208 | 209 | ##### Mercurial 210 | .hg/ 211 | .hgignore 212 | .hgsigs 213 | .hgsub 214 | .hgsubstate 215 | .hgtags 216 | 217 | ##### Bazaar 218 | .bzr/ 219 | .bzrignore 220 | 221 | ##### CVS 222 | /CVS/* 223 | **/CVS/* 224 | .cvsignore 225 | */.cvsignore 226 | 227 | ##### TortoiseGit 228 | # Project-level settings 229 | /.tgitconfig 230 | 231 | ##### PuTTY 232 | # Private key 233 | *.ppk 234 | 235 | ##### Vim 236 | # Swap 237 | [._]*.s[a-v][a-z] 238 | !*.svg # comment out if you don't need vector files 239 | [._]*.sw[a-p] 240 | [._]s[a-rt-v][a-z] 241 | [._]ss[a-gi-z] 242 | [._]sw[a-p] 243 | 244 | # Session 245 | Session.vim 246 | Sessionx.vim 247 | 248 | # Temporary 249 | .netrwhist 250 | *~ 251 | # Auto-generated tag files 252 | tags 253 | # Persistent undo 254 | [._]*.un~ 255 | 256 | ##### Emacs 257 | # -*- mode: gitignore; -*- 258 | *~ 259 | \#*\# 260 | /.emacs.desktop 261 | /.emacs.desktop.lock 262 | *.elc 263 | auto-save-list 264 | tramp 265 | .\#* 266 | 267 | # Org-mode 268 | .org-id-locations 269 | *_archive 270 | 271 | # flymake-mode 272 | *_flymake.* 273 | 274 | # eshell files 275 | /eshell/history 276 | /eshell/lastdir 277 | 278 | # elpa packages 279 | /elpa/ 280 | 281 | # reftex files 282 | *.rel 283 | 284 | # AUCTeX auto folder 285 | /auto/ 286 | 287 | # cask packages 288 | .cask/ 289 | dist/ 290 | 291 | # Flycheck 292 | flycheck_*.el 293 | 294 | # server auth directory 295 | /server/ 296 | 297 | # projectiles files 298 | .projectile 299 | 300 | # directory configuration 301 | .dir-locals.el 302 | 303 | # network security 304 | /network-security.data 305 | 306 | ##### SublimeText 307 | # Cache files for Sublime Text 308 | *.tmlanguage.cache 309 | *.tmPreferences.cache 310 | *.stTheme.cache 311 | 312 | # Workspace files are user-specific 313 | *.sublime-workspace 314 | 315 | # Project files should be checked into the repository, unless a significant 316 | # proportion of contributors will probably not be using Sublime Text 317 | # *.sublime-project 318 | 319 | # SFTP configuration file 320 | sftp-config.json 321 | sftp-config-alt*.json 322 | 323 | # Package control specific files 324 | Package Control.last-run 325 | Package Control.ca-list 326 | Package Control.ca-bundle 327 | Package Control.system-ca-bundle 328 | Package Control.cache/ 329 | Package Control.ca-certs/ 330 | Package Control.merged-ca-bundle 331 | Package Control.user-ca-bundle 332 | oscrypto-ca-bundle.crt 333 | bh_unicode_properties.cache 334 | 335 | # Sublime-github package stores a github token in this file 336 | # https://packagecontrol.io/packages/sublime-github 337 | GitHub.sublime-settings 338 | 339 | ##### Notepad++ 340 | # Notepad++ backups # 341 | *.bak 342 | 343 | ##### TextMate 344 | *.tmproj 345 | *.tmproject 346 | tmtags 347 | 348 | ##### VisualStudioCode 349 | .vscode 350 | .vscode/* 351 | !.vscode/settings.json 352 | !.vscode/tasks.json 353 | !.vscode/launch.json 354 | !.vscode/extensions.json 355 | *.code-workspace 356 | 357 | # Local History for Visual Studio Code 358 | .history/ 359 | 360 | ##### NetBeans 361 | **/nbproject/private/ 362 | **/nbproject/Makefile-*.mk 363 | **/nbproject/Package-*.bash 364 | build/ 365 | nbbuild/ 366 | dist/ 367 | nbdist/ 368 | .nb-gradle/ 369 | 370 | ##### JetBrains 371 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 372 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 373 | 374 | # User-specific stuff 375 | .idea/**/workspace.xml 376 | .idea/**/tasks.xml 377 | .idea/**/usage.statistics.xml 378 | .idea/**/dictionaries 379 | .idea/**/shelf 380 | 381 | # Generated files 382 | .idea/**/contentModel.xml 383 | 384 | # Sensitive or high-churn files 385 | .idea/**/dataSources/ 386 | .idea/**/dataSources.ids 387 | .idea/**/dataSources.local.xml 388 | .idea/**/sqlDataSources.xml 389 | .idea/**/dynamic.xml 390 | .idea/**/uiDesigner.xml 391 | .idea/**/dbnavigator.xml 392 | 393 | # Gradle 394 | .idea/**/gradle.xml 395 | .idea/**/libraries 396 | 397 | # Gradle and Maven with auto-import 398 | # When using Gradle or Maven with auto-import, you should exclude module files, 399 | # since they will be recreated, and may cause churn. Uncomment if using 400 | # auto-import. 401 | # .idea/artifacts 402 | # .idea/compiler.xml 403 | # .idea/jarRepositories.xml 404 | # .idea/modules.xml 405 | # .idea/*.iml 406 | # .idea/modules 407 | # *.iml 408 | # *.ipr 409 | 410 | # CMake 411 | cmake-build-*/ 412 | 413 | # Mongo Explorer plugin 414 | .idea/**/mongoSettings.xml 415 | 416 | # File-based project format 417 | *.iws 418 | 419 | # IntelliJ 420 | out/ 421 | 422 | # mpeltonen/sbt-idea plugin 423 | .idea_modules/ 424 | 425 | # JIRA plugin 426 | atlassian-ide-plugin.xml 427 | 428 | # Cursive Clojure plugin 429 | .idea/replstate.xml 430 | 431 | # Crashlytics plugin (for Android Studio and IntelliJ) 432 | com_crashlytics_export_strings.xml 433 | crashlytics.properties 434 | crashlytics-build.properties 435 | fabric.properties 436 | 437 | # Editor-based Rest Client 438 | .idea/httpRequests 439 | 440 | # Android studio 3.1+ serialized cache file 441 | .idea/caches/build_file_checksums.ser 442 | 443 | ##### Eclipse 444 | .metadata 445 | bin/ 446 | tmp/ 447 | *.tmp 448 | *.bak 449 | *.swp 450 | *~.nib 451 | local.properties 452 | .settings/ 453 | .loadpath 454 | .recommenders 455 | 456 | # External tool builders 457 | .externalToolBuilders/ 458 | 459 | # Locally stored "Eclipse launch configurations" 460 | *.launch 461 | 462 | # PyDev specific (Python IDE for Eclipse) 463 | *.pydevproject 464 | 465 | # CDT-specific (C/C++ Development Tooling) 466 | .cproject 467 | 468 | # CDT- autotools 469 | .autotools 470 | 471 | # Java annotation processor (APT) 472 | .factorypath 473 | 474 | # PDT-specific (PHP Development Tools) 475 | .buildpath 476 | 477 | # sbteclipse plugin 478 | .target 479 | 480 | # Tern plugin 481 | .tern-project 482 | 483 | # TeXlipse plugin 484 | .texlipse 485 | 486 | # STS (Spring Tool Suite) 487 | .springBeans 488 | 489 | # Code Recommenders 490 | .recommenders/ 491 | 492 | # Annotation Processing 493 | .apt_generated/ 494 | .apt_generated_test/ 495 | 496 | # Scala IDE specific (Scala & Java development for Eclipse) 497 | .cache-main 498 | .scala_dependencies 499 | .worksheet 500 | 501 | # Uncomment this line if you wish to ignore the project description file. 502 | # Typically, this file would be tracked if it contains build/dependency configurations: 503 | #.project 504 | 505 | ##### Qt 506 | # C++ objects and libs 507 | *.slo 508 | *.lo 509 | *.o 510 | *.a 511 | *.la 512 | *.lai 513 | *.so 514 | *.so.* 515 | *.dll 516 | *.dylib 517 | 518 | # Qt-es 519 | object_script.*.Release 520 | object_script.*.Debug 521 | *_plugin_import.cpp 522 | /.qmake.cache 523 | /.qmake.stash 524 | *.pro.user 525 | *.pro.user.* 526 | *.qbs.user 527 | *.qbs.user.* 528 | *.moc 529 | moc_*.cpp 530 | moc_*.h 531 | qrc_*.cpp 532 | ui_*.h 533 | *.qmlc 534 | *.jsc 535 | *build-* 536 | *.qm 537 | *.prl 538 | 539 | # Qt unit tests 540 | target_wrapper.* 541 | 542 | # QtCreator 543 | *.autosave 544 | 545 | # QtCreator Qml 546 | *.qmlproject.user 547 | *.qmlproject.user.* 548 | 549 | # QtCreator CMake 550 | CMakeLists.txt.user* 551 | 552 | # QtCreator 4.8< compilation database 553 | compile_commands.json 554 | 555 | # QtCreator local machine specific files for imported projects 556 | *creator.user* 557 | 558 | ##### VisualStudio 559 | ##### VisualStudio 560 | ## Ignore Visual Studio temporary files, build results, and 561 | ## files generated by popular Visual Studio add-ons. 562 | ## 563 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 564 | 565 | # User-specific files 566 | *.rsuser 567 | *.suo 568 | *.user 569 | *.userosscache 570 | *.sln.docstates 571 | 572 | # User-specific files (MonoDevelop/Xamarin Studio) 573 | *.userprefs 574 | 575 | # Mono auto generated files 576 | mono_crash.* 577 | 578 | # Build results 579 | [Dd]ebug/ 580 | [Dd]ebugPublic/ 581 | [Rr]elease/ 582 | [Rr]eleases/ 583 | x64/ 584 | x86/ 585 | [Ww][Ii][Nn]32/ 586 | [Aa][Rr][Mm]/ 587 | [Aa][Rr][Mm]64/ 588 | bld/ 589 | [Bb]in/ 590 | [Oo]bj/ 591 | [Ll]og/ 592 | [Ll]ogs/ 593 | 594 | # Visual Studio 2015/2017 cache/options directory 595 | .vs/ 596 | # Uncomment if you have tasks that create the project's static files in wwwroot 597 | #wwwroot/ 598 | 599 | # Visual Studio 2017 auto generated files 600 | Generated\ Files/ 601 | 602 | # MSTest test Results 603 | [Tt]est[Rr]esult*/ 604 | [Bb]uild[Ll]og.* 605 | 606 | # NUnit 607 | *.VisualState.xml 608 | TestResult.xml 609 | nunit-*.xml 610 | 611 | # Build Results of an ATL Project 612 | [Dd]ebugPS/ 613 | [Rr]eleasePS/ 614 | dlldata.c 615 | 616 | # Benchmark Results 617 | BenchmarkDotNet.Artifacts/ 618 | 619 | # .NET Core 620 | project.lock.json 621 | project.fragment.lock.json 622 | artifacts/ 623 | 624 | # ASP.NET Scaffolding 625 | ScaffoldingReadMe.txt 626 | 627 | # StyleCop 628 | StyleCopReport.xml 629 | 630 | # Files built by Visual Studio 631 | *_i.c 632 | *_p.c 633 | *_h.h 634 | *.ilk 635 | *.meta 636 | *.obj 637 | *.iobj 638 | *.pch 639 | *.pdb 640 | *.ipdb 641 | *.pgc 642 | *.pgd 643 | *.rsp 644 | *.sbr 645 | *.tlb 646 | *.tli 647 | *.tlh 648 | *.tmp 649 | *.tmp_proj 650 | *_wpftmp.csproj 651 | *.log 652 | *.vspscc 653 | *.vssscc 654 | .builds 655 | *.pidb 656 | *.svclog 657 | *.scc 658 | 659 | # Chutzpah Test files 660 | _Chutzpah* 661 | 662 | # Visual C++ cache files 663 | ipch/ 664 | *.aps 665 | *.ncb 666 | *.opendb 667 | *.opensdf 668 | *.sdf 669 | *.cachefile 670 | *.VC.db 671 | *.VC.VC.opendb 672 | 673 | # Visual Studio profiler 674 | *.psess 675 | *.vsp 676 | *.vspx 677 | *.sap 678 | 679 | # Visual Studio Trace Files 680 | *.e2e 681 | 682 | # TFS 2012 Local Workspace 683 | $tf/ 684 | 685 | # Guidance Automation Toolkit 686 | *.gpState 687 | 688 | # ReSharper is a .NET coding add-in 689 | _ReSharper*/ 690 | *.[Rr]e[Ss]harper 691 | *.DotSettings.user 692 | 693 | # TeamCity is a build add-in 694 | _TeamCity* 695 | 696 | # DotCover is a Code Coverage Tool 697 | *.dotCover 698 | 699 | # AxoCover is a Code Coverage Tool 700 | .axoCover/* 701 | !.axoCover/settings.json 702 | 703 | # Coverlet is a free, cross platform Code Coverage Tool 704 | coverage*[.json, .xml, .info] 705 | 706 | # Visual Studio code coverage results 707 | *.coverage 708 | *.coveragexml 709 | 710 | # NCrunch 711 | _NCrunch_* 712 | .*crunch*.local.xml 713 | nCrunchTemp_* 714 | 715 | # MightyMoose 716 | *.mm.* 717 | AutoTest.Net/ 718 | 719 | # Web workbench (sass) 720 | .sass-cache/ 721 | 722 | # Installshield output folder 723 | [Ee]xpress/ 724 | 725 | # DocProject is a documentation generator add-in 726 | DocProject/buildhelp/ 727 | DocProject/Help/*.HxT 728 | DocProject/Help/*.HxC 729 | DocProject/Help/*.hhc 730 | DocProject/Help/*.hhk 731 | DocProject/Help/*.hhp 732 | DocProject/Help/Html2 733 | DocProject/Help/html 734 | 735 | # Click-Once directory 736 | publish/ 737 | 738 | # Publish Web Output 739 | *.[Pp]ublish.xml 740 | *.azurePubxml 741 | # Note: Comment the next line if you want to checkin your web deploy settings, 742 | # but database connection strings (with potential passwords) will be unencrypted 743 | *.pubxml 744 | *.publishproj 745 | 746 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 747 | # checkin your Azure Web App publish settings, but sensitive information contained 748 | # in these scripts will be unencrypted 749 | PublishScripts/ 750 | 751 | # NuGet Packages 752 | *.nupkg 753 | # NuGet Symbol Packages 754 | *.snupkg 755 | # The packages folder can be ignored because of Package Restore 756 | **/[Pp]ackages/* 757 | # except build/, which is used as an MSBuild target. 758 | !**/[Pp]ackages/build/ 759 | # Uncomment if necessary however generally it will be regenerated when needed 760 | #!**/[Pp]ackages/repositories.config 761 | # NuGet v3's project.json files produces more ignorable files 762 | *.nuget.props 763 | *.nuget.targets 764 | 765 | # Microsoft Azure Build Output 766 | csx/ 767 | *.build.csdef 768 | 769 | # Microsoft Azure Emulator 770 | ecf/ 771 | rcf/ 772 | 773 | # Windows Store app package directories and files 774 | AppPackages/ 775 | BundleArtifacts/ 776 | Package.StoreAssociation.xml 777 | _pkginfo.txt 778 | *.appx 779 | *.appxbundle 780 | *.appxupload 781 | 782 | # Visual Studio cache files 783 | # files ending in .cache can be ignored 784 | *.[Cc]ache 785 | # but keep track of directories ending in .cache 786 | !?*.[Cc]ache/ 787 | 788 | # Others 789 | ClientBin/ 790 | ~$* 791 | *~ 792 | *.dbmdl 793 | *.dbproj.schemaview 794 | *.jfm 795 | *.pfx 796 | *.publishsettings 797 | orleans.codegen.cs 798 | 799 | # Including strong name files can present a security risk 800 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 801 | #*.snk 802 | 803 | # Since there are multiple workflows, uncomment next line to ignore bower_components 804 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 805 | #bower_components/ 806 | 807 | # RIA/Silverlight projects 808 | Generated_Code/ 809 | 810 | # Backup & report files from converting an old project file 811 | # to a newer Visual Studio version. Backup files are not needed, 812 | # because we have git ;-) 813 | _UpgradeReport_Files/ 814 | Backup*/ 815 | UpgradeLog*.XML 816 | UpgradeLog*.htm 817 | ServiceFabricBackup/ 818 | *.rptproj.bak 819 | 820 | # SQL Server files 821 | *.mdf 822 | *.ldf 823 | *.ndf 824 | 825 | # Business Intelligence projects 826 | *.rdl.data 827 | *.bim.layout 828 | *.bim_*.settings 829 | *.rptproj.rsuser 830 | *- [Bb]ackup.rdl 831 | *- [Bb]ackup ([0-9]).rdl 832 | *- [Bb]ackup ([0-9][0-9]).rdl 833 | 834 | # Microsoft Fakes 835 | FakesAssemblies/ 836 | 837 | # GhostDoc plugin setting file 838 | *.GhostDoc.xml 839 | 840 | # Node.js Tools for Visual Studio 841 | .ntvs_analysis.dat 842 | node_modules/ 843 | 844 | # Visual Studio 6 build log 845 | *.plg 846 | 847 | # Visual Studio 6 workspace options file 848 | *.opt 849 | 850 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 851 | *.vbw 852 | 853 | # Visual Studio LightSwitch build output 854 | **/*.HTMLClient/GeneratedArtifacts 855 | **/*.DesktopClient/GeneratedArtifacts 856 | **/*.DesktopClient/ModelManifest.xml 857 | **/*.Server/GeneratedArtifacts 858 | **/*.Server/ModelManifest.xml 859 | _Pvt_Extensions 860 | 861 | # Paket dependency manager 862 | .paket/paket.exe 863 | paket-files/ 864 | 865 | # FAKE - F# Make 866 | .fake/ 867 | 868 | # CodeRush personal settings 869 | .cr/personal 870 | 871 | # Python Tools for Visual Studio (PTVS) 872 | __pycache__/ 873 | *.pyc 874 | 875 | # Cake - Uncomment if you are using it 876 | # tools/** 877 | # !tools/packages.config 878 | 879 | # Tabs Studio 880 | *.tss 881 | 882 | # Telerik's JustMock configuration file 883 | *.jmconfig 884 | 885 | # BizTalk build output 886 | *.btp.cs 887 | *.btm.cs 888 | *.odx.cs 889 | *.xsd.cs 890 | 891 | # OpenCover UI analysis results 892 | OpenCover/ 893 | 894 | # Azure Stream Analytics local run output 895 | ASALocalRun/ 896 | 897 | # MSBuild Binary and Structured Log 898 | *.binlog 899 | 900 | # NVidia Nsight GPU debugger configuration file 901 | *.nvuser 902 | 903 | # MFractors (Xamarin productivity tool) working folder 904 | .mfractor/ 905 | 906 | # Local History for Visual Studio 907 | .localhistory/ 908 | 909 | # BeatPulse healthcheck temp database 910 | healthchecksdb 911 | 912 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 913 | MigrationBackup/ 914 | 915 | # Ionide (cross platform F# VS Code tools) working folder 916 | .ionide/ 917 | 918 | # Fody - auto-generated XML schema 919 | FodyWeavers.xsd 920 | 921 | ##### Gradle 922 | .gradle 923 | **/build/ 924 | !src/**/build/ 925 | 926 | # Ignore Gradle GUI config 927 | gradle-app.setting 928 | 929 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 930 | !gradle-wrapper.jar 931 | 932 | # Cache of project 933 | .gradletasknamecache 934 | 935 | # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 936 | # gradle/wrapper/gradle-wrapper.properties 937 | 938 | ##### CMake 939 | CMakeLists.txt.user 940 | CMakeCache.txt 941 | CMakeFiles 942 | CMakeScripts 943 | Testing 944 | cmake_install.cmake 945 | install_manifest.txt 946 | compile_commands.json 947 | CTestTestfile.cmake 948 | _deps 949 | 950 | ##### C++ 951 | # Prerequisites 952 | *.d 953 | 954 | # Compiled Object files 955 | *.slo 956 | *.lo 957 | *.o 958 | *.obj 959 | 960 | # Precompiled Headers 961 | *.gch 962 | *.pch 963 | 964 | # Compiled Dynamic libraries 965 | *.so 966 | *.dylib 967 | *.dll 968 | 969 | # Fortran module files 970 | *.mod 971 | *.smod 972 | 973 | # Compiled Static libraries 974 | *.lai 975 | *.la 976 | *.a 977 | *.lib 978 | 979 | # Executables 980 | *.exe 981 | *.out 982 | *.app 983 | 984 | # C/C++ binary extension file 985 | *.bin 986 | 987 | ##### C 988 | # Prerequisites 989 | *.d 990 | 991 | # Object files 992 | *.o 993 | *.ko 994 | *.obj 995 | *.elf 996 | 997 | # Linker output 998 | *.ilk 999 | *.map 1000 | *.exp 1001 | 1002 | # Precompiled Headers 1003 | *.gch 1004 | *.pch 1005 | 1006 | # Libraries 1007 | *.lib 1008 | *.a 1009 | *.la 1010 | *.lo 1011 | 1012 | # Shared objects (inc. Windows DLLs) 1013 | *.dll 1014 | *.so 1015 | *.so.* 1016 | *.dylib 1017 | 1018 | # Executables 1019 | *.exe 1020 | *.out 1021 | *.app 1022 | *.i*86 1023 | *.x86_64 1024 | *.hex 1025 | 1026 | # Debug files 1027 | *.dSYM/ 1028 | *.su 1029 | *.idb 1030 | *.pdb 1031 | 1032 | # Kernel Module Compile Results 1033 | *.mod* 1034 | *.cmd 1035 | .tmp_versions/ 1036 | modules.order 1037 | Module.symvers 1038 | Mkfile.old 1039 | dkms.conf 1040 | 1041 | # Raspberry Pi Pico Object file 1042 | *.uf2 1043 | # Raspberry Pi Pico disassembler file 1044 | *.dis 1045 | 1046 | # KiCad files 1047 | fp-info-cache 1048 | **/*-backups/*.zip 1049 | *.kicad_prl 1050 | *.kicad_sch-bak 1051 | *.gbr 1052 | *.gbrjob 1053 | *.declarations 1054 | *.drl -------------------------------------------------------------------------------- /Examples/MonoSeed09/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = MonoSeed09 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | MonoSeed09.cpp \ 7 | ../../Hardware/PotentiometerArray/Drivers/PotentiometerArray.cpp 8 | 9 | # Core location, and generic Makefile. 10 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 11 | include $(SYSTEM_FILES_DIR)/Makefile 12 | -------------------------------------------------------------------------------- /Examples/MonoSeed09/MonoSeed09.cpp: -------------------------------------------------------------------------------- 1 | #include "daisysp.h" 2 | #include "daisy_seed.h" 3 | #include "../../Hardware/PotentiometerArray/Drivers/PotentiometerArray.h" 4 | 5 | #define MIN_PULSE_WIDTH 0.05f 6 | #define MIDI_CHANNEL 0 7 | 8 | using namespace daisysp; 9 | using namespace daisy; 10 | using namespace developmentKit::hardware::potentiometerArray::drivers; 11 | 12 | static DaisySeed hardware; 13 | PotentiometerArray potentiometerArray; 14 | MidiUartHandler midi; 15 | Oscillator lfo, mainOsc, subOsc; 16 | Adsr adsr; 17 | Svf svf; 18 | bool gate; 19 | float maxCutoffFrequency; 20 | float midiNoteFreq; 21 | 22 | Parameter 23 | masterVolumeParam, 24 | lfoShapeParam, 25 | lfoRateParam, 26 | mainOscShapeParam, 27 | mainOscLfoModParam, 28 | mainOscPulseWidthParam, 29 | mainOscPulseWidthLfoModParam, 30 | subOscLevelParam, 31 | svfCutOffFrequencyParam, 32 | svfResonanceParam, 33 | svfAdsrModParam, 34 | svfLfoModParam, 35 | attackParam, 36 | decayParam, 37 | sustainParam, 38 | releaseParam; 39 | 40 | void SetLfoShape(float lfoShapeValue) 41 | { 42 | if (lfoShapeValue >= 0 && lfoShapeValue < 1.0f) 43 | { 44 | lfo.SetWaveform(Oscillator::WAVE_SIN); 45 | } 46 | else if (lfoShapeValue >= 1.0f && lfoShapeValue < 2.0f) 47 | { 48 | lfo.SetWaveform(Oscillator::WAVE_TRI); 49 | } 50 | else if (lfoShapeValue >= 2.0f && lfoShapeValue < 3.0f) 51 | { 52 | lfo.SetWaveform(Oscillator::WAVE_SAW); 53 | } 54 | else if (lfoShapeValue >= 3.0f && lfoShapeValue < 4.0f) 55 | { 56 | lfo.SetWaveform(Oscillator::WAVE_SQUARE); 57 | } 58 | } 59 | 60 | void SetMainOscShape(float mainOscShapeValue) 61 | { 62 | if (mainOscShapeValue >= 0 && mainOscShapeValue < 1.0f) 63 | { 64 | mainOsc.SetWaveform(Oscillator::WAVE_TRI); 65 | } 66 | else if (mainOscShapeValue >= 1.0f && mainOscShapeValue < 2.0f) 67 | { 68 | mainOsc.SetWaveform(Oscillator::WAVE_SAW); 69 | } 70 | else 71 | { 72 | mainOsc.SetWaveform(Oscillator::WAVE_SQUARE); 73 | } 74 | } 75 | 76 | static void AudioCallback(AudioHandle::InterleavingInputBuffer in, 77 | AudioHandle::InterleavingOutputBuffer out, 78 | size_t size) 79 | { 80 | potentiometerArray.Process(); 81 | float masterVolume = masterVolumeParam.Process(); 82 | float lfoRate = lfoRateParam.Process(); 83 | float lfoShapeValue = lfoShapeParam.Process(); 84 | float mainOscShapeValue = mainOscShapeParam.Process(); 85 | float mainOscLfoMod = mainOscLfoModParam.Process(); 86 | float mainOscPulseWidth = mainOscPulseWidthParam.Process(); 87 | float mainOscPulseWidthLfoMod = mainOscPulseWidthLfoModParam.Process(); 88 | float subOscLevel = subOscLevelParam.Process(); 89 | float svfCutOffFrequency = svfCutOffFrequencyParam.Process(); 90 | float svfResonance = svfResonanceParam.Process(); 91 | float svfAdsrMod = svfAdsrModParam.Process(); 92 | float svfLfoMod = svfLfoModParam.Process(); 93 | float attackTime = attackParam.Process(); 94 | float decayTime = decayParam.Process(); 95 | float sustainLevel = sustainParam.Process(); 96 | float releaseTime = releaseParam.Process(); 97 | lfo.SetFreq(lfoRate); 98 | SetMainOscShape(mainOscShapeValue); 99 | SetLfoShape(lfoShapeValue); 100 | svf.SetRes(svfResonance); 101 | adsr.SetTime(ADSR_SEG_ATTACK, attackTime); 102 | adsr.SetTime(ADSR_SEG_DECAY, decayTime); 103 | adsr.SetSustainLevel(sustainLevel); 104 | adsr.SetTime(ADSR_SEG_RELEASE, releaseTime); 105 | float adsrOut, lfoOut, mainOscOut, subOscOut, filterOut; 106 | const float adsrFactor = 10; 107 | 108 | for (size_t i = 0; i < size; i += 2) 109 | { 110 | // Calculate amplitude and frequency of main oscillator and process 111 | adsrOut = adsr.Process(gate); 112 | lfo.SetAmp(mainOscLfoMod); 113 | lfoOut = lfo.Process(); 114 | mainOsc.SetAmp(adsrOut / adsrFactor * masterVolume); 115 | mainOsc.SetFreq(midiNoteFreq + lfoOut); 116 | mainOscOut = mainOsc.Process(); 117 | 118 | // Calculate amplitude and frequency of sub-oscillator and process 119 | subOsc.SetAmp(adsrOut / adsrFactor * subOscLevel * masterVolume); 120 | subOsc.SetFreq((midiNoteFreq / 2) + lfoOut); 121 | subOscOut = subOsc.Process(); 122 | 123 | // Calculate pulse-width of main oscillator and process 124 | lfo.SetAmp(mainOscPulseWidthLfoMod); 125 | lfoOut = lfo.Process(); 126 | float finalPulseWidth = mainOscPulseWidth + lfoOut; 127 | finalPulseWidth = finalPulseWidth > MIN_PULSE_WIDTH ? finalPulseWidth : MIN_PULSE_WIDTH; 128 | mainOsc.SetPw(finalPulseWidth); 129 | 130 | // Calculate frequency of filter and process 131 | lfo.SetAmp(svfLfoMod); 132 | lfoOut = lfo.Process(); 133 | svf.SetFreq(svfCutOffFrequency + (maxCutoffFrequency / 2 * adsrOut * svfAdsrMod) + (maxCutoffFrequency / 2 * lfoOut)); 134 | svf.Process(mainOscOut + subOscOut); 135 | filterOut = svf.Low(); 136 | 137 | // Send output of filter to output 138 | out[i] = filterOut; 139 | out[i + 1] = filterOut; 140 | } 141 | } 142 | 143 | void InitLfo(float sampleRate) 144 | { 145 | lfo.Init(sampleRate); 146 | lfo.SetWaveform(Oscillator::WAVE_SIN); 147 | lfo.SetFreq(1000.0f); 148 | lfo.SetAmp(10.0f); 149 | } 150 | 151 | void InitOscillator(float sampleRate) 152 | { 153 | mainOsc.Init(sampleRate); 154 | mainOsc.SetWaveform(Oscillator::WAVE_SAW); 155 | mainOsc.SetAmp(0.1f); 156 | mainOsc.SetPw(0.5f); 157 | } 158 | 159 | void InitSubOsc(float sampleRate) 160 | { 161 | subOsc.Init(sampleRate); 162 | subOsc.SetWaveform(Oscillator::WAVE_SQUARE); 163 | subOsc.SetAmp(0.1f); 164 | } 165 | 166 | void InitAdsr(float sampleRate) 167 | { 168 | adsr.Init(sampleRate); 169 | adsr.SetTime(ADSR_SEG_ATTACK, .01); 170 | adsr.SetTime(ADSR_SEG_DECAY, .1); 171 | adsr.SetTime(ADSR_SEG_RELEASE, .1); 172 | adsr.SetSustainLevel(.1); 173 | } 174 | 175 | void InitSvf(float sampleRate) 176 | { 177 | maxCutoffFrequency = sampleRate / 3; 178 | svf.Init(sampleRate); 179 | svf.SetFreq(maxCutoffFrequency); 180 | svf.SetRes(0); 181 | } 182 | 183 | void InitMidi() 184 | { 185 | MidiUartHandler::Config midi_config; 186 | midi.Init(midi_config); 187 | } 188 | 189 | void InitPotentiometerArray() 190 | { 191 | potentiometerArray.seed = &hardware; 192 | potentiometerArray.Init(); 193 | } 194 | 195 | void InitParameters(float sampleRate) 196 | { 197 | masterVolumeParam.Init(potentiometerArray.analogControl[0], 0, 1.0f, Parameter::LINEAR); 198 | lfoRateParam.Init(potentiometerArray.analogControl[1], 0.25f, 20.0f, Parameter::LOGARITHMIC); 199 | lfoShapeParam.Init(potentiometerArray.analogControl[2], 0, 4.0f, Parameter::LINEAR); 200 | mainOscShapeParam.Init(potentiometerArray.analogControl[3], 0, 3.0f, Parameter::LINEAR); 201 | mainOscLfoModParam.Init(potentiometerArray.analogControl[4], 0, 100.0f, Parameter::LINEAR); 202 | mainOscPulseWidthParam.Init(potentiometerArray.analogControl[5], MIN_PULSE_WIDTH, 0.51f, Parameter::LINEAR); 203 | mainOscPulseWidthLfoModParam.Init(potentiometerArray.analogControl[6], 0, 0.5f, Parameter::LINEAR); 204 | subOscLevelParam.Init(potentiometerArray.analogControl[7], 0, 1.0f, Parameter::LINEAR); 205 | svfCutOffFrequencyParam.Init(potentiometerArray.analogControl[8], 0, sampleRate / 3, Parameter::LINEAR); 206 | svfResonanceParam.Init(potentiometerArray.analogControl[9], 0, 1.0f, Parameter::LINEAR); 207 | svfAdsrModParam.Init(potentiometerArray.analogControl[10], 0, 1.0f, Parameter::LINEAR); 208 | svfLfoModParam.Init(potentiometerArray.analogControl[11], 0, 1.0f, Parameter::LINEAR); 209 | attackParam.Init(potentiometerArray.analogControl[12], 0.001f, 1.0f, Parameter::LINEAR); 210 | decayParam.Init(potentiometerArray.analogControl[13], 0.025f, 1.0f, Parameter::LINEAR); 211 | sustainParam.Init(potentiometerArray.analogControl[14], 0., 1.0f, Parameter::LINEAR); 212 | releaseParam.Init(potentiometerArray.analogControl[15], 0, 1.0f, Parameter::LINEAR); 213 | } 214 | 215 | void HandleMidiMessage(MidiEvent m) 216 | { 217 | if (m.channel == MIDI_CHANNEL) 218 | { 219 | switch (m.type) 220 | { 221 | case NoteOn: 222 | { 223 | NoteOnEvent p = m.AsNoteOn(); 224 | 225 | if (m.data[1] != 0) 226 | { 227 | p = m.AsNoteOn(); 228 | gate = true; 229 | midiNoteFreq = mtof(p.note); 230 | } 231 | 232 | break; 233 | } 234 | case NoteOff: 235 | { 236 | gate = false; 237 | break; 238 | } 239 | default: 240 | break; 241 | } 242 | } 243 | } 244 | 245 | int main(void) 246 | { 247 | hardware.Configure(); 248 | hardware.Init(); 249 | float sampleRate = hardware.AudioSampleRate(); 250 | InitLfo(sampleRate); 251 | InitOscillator(sampleRate); 252 | InitSubOsc(sampleRate); 253 | InitAdsr(sampleRate); 254 | InitSvf(sampleRate); 255 | InitMidi(); 256 | InitPotentiometerArray(); 257 | InitParameters(sampleRate); 258 | hardware.adc.Start(); 259 | hardware.StartAudio(AudioCallback); 260 | midi.StartReceive(); 261 | 262 | while (1) 263 | { 264 | midi.Listen(); 265 | 266 | while (midi.HasEvents()) 267 | { 268 | HandleMidiMessage(midi.PopEvent()); 269 | } 270 | } 271 | } 272 | -------------------------------------------------------------------------------- /Examples/MonoSeed09/PotentiometerLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lucidcoding/daisy-seed-development-kit/369ae2a3639447924ab6b4c4718428b19160b1be/Examples/MonoSeed09/PotentiometerLayout.png -------------------------------------------------------------------------------- /Examples/MonoSeed09/README.md: -------------------------------------------------------------------------------- 1 | # MonoSeed-09 Virtual Analogue Monosynth 2 | 3 | ## Author 4 | 5 | Paul Davies 6 | 7 | ## Description 8 | 9 | My first experiment using the Daisy Seed Development Kit. This is a virtual analogue monosynth with one knob per function. It started off as an emulation of a Roland SH-09 but seems to have diverged from that somewhere along the way. 10 | 11 | ## Environment Setup 12 | 13 | Ensure you have LIBDAISY_DIR and DAISYSP_DIR environment variables set and pointing to the relevant libraries. If you are using Windows, ensure they use the forward slash. If you are on Linux, ensure the capitalisation is correct. You'll make your life a lot easier if you don't have spaces in the path: 14 | 15 | ``` 16 | LIBDAISY_DIR=/path/to/libdaisy 17 | DAISYSP_DIR=/path/to/daisysp 18 | ``` 19 | 20 | ## Getting up and running 21 | 22 | In order to build the hardware, load each of the projects in to Kicad, generate Gerber files and upload to a PCB manufacturer such as https://jlcpcb.com/. I can go into more detail about this at a later point. 23 | 24 | The to get started, load the MonoSeed09 project on to the Daisy Seed by pressing both buttons to put it into program mode, entering the relevant folder, then enetering the commands to upload the code onto the Seed: 25 | 26 | ``` 27 | cd Examples/MonoSeed09 28 | make clean; make; make program-dfu; 29 | ``` 30 | 31 | Ensure the Daisy Seed is correctly seated in the breakout board. Then connect the potentiometer array to port 1 with a JST XH2.54 8 wire cable, and connect the MIDI adapter with a JST XH2.54 4 wire cable. Finally connect your MIDI sequencer to the MIDI in DIN connector and plug your headphones into the audio out jack socket. Set the MIDI transmit channel to 1 - this is what it defaults to. 32 | 33 | ## Usage 34 | 35 | One you have not signals playing to the MIDI in port, modify the sound using the knobs. The knobs have the following functions: 36 | 37 | ![potentiometer layout](./PotentiometerLayout.png) 38 | 39 | ## Demo 40 | 41 | Here it is in action: 42 | 43 | [![MonoSeed-09 demo](https://img.youtube.com/vi/sGi7Sy4ES4g/0.jpg)](https://youtu.be/sGi7Sy4ES4g) 44 | 45 | ## Disclaimer 46 | 47 | Although I am a professional programmer, I am purely a hobbyist when it comes to hardware or embedded programming. There may well be some mistakes here and I accept no responsibility for damage to you Daisy Seed, external equipment or anything else. You use this code and harware at your own risk. 48 | -------------------------------------------------------------------------------- /Hardware/BreakoutBoard/PCB/BOM.txt: -------------------------------------------------------------------------------- 1 | A1 - 1 x Daisy Seed 2 | A1, J1, J2 - 4 x 20 pin female socket 3 | J3, J4 - 2 x Lumberg 1502 01 3.5mm TRS jack sockets 4 | J5, J6 - 2 x JST XH2.54 4 pin male connector 5 | J7, J9 - 2 x JST XH2.54 6 pin male connector 6 | J8, J11, J12, J13 - 4 x JST XH2.54 8 pin male connector 7 | J10 - 1 x DCJ200-10 barrel jack socket 8 | -------------------------------------------------------------------------------- /Hardware/BreakoutBoard/PCB/BreakoutBoard/BreakoutBoard-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Wed Sep 27 15:21:02 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-09-27T15:21:02+01:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 10 | T1C0.0472 11 | % 12 | G90 13 | G05 14 | T1 15 | X2.7016Y-3.0 16 | X2.7016Y-3.6 17 | T0 18 | M30 19 | -------------------------------------------------------------------------------- /Hardware/BreakoutBoard/PCB/BreakoutBoard/BreakoutBoard-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Wed Sep 27 15:21:02 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-09-27T15:21:02+01:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.0315 11 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 12 | T2C0.0394 13 | % 14 | G90 15 | G05 16 | T2 17 | X3.3Y-2.8 18 | X3.3Y-3.5 19 | X3.3Y-3.6017 20 | X3.3Y-4.2017 21 | X3.3Y-4.3 22 | X3.3Y-4.999 23 | X3.4Y-2.8 24 | X3.4Y-3.5 25 | X3.4Y-3.6017 26 | X3.4Y-4.2017 27 | X3.4Y-4.3 28 | X3.4Y-4.999 29 | X3.5Y-2.8 30 | X3.5Y-3.5 31 | X3.5Y-3.6017 32 | X3.5Y-4.2017 33 | X3.5Y-4.3 34 | X3.5Y-4.999 35 | X3.6Y-2.8 36 | X3.6Y-3.5 37 | X3.6Y-3.6017 38 | X3.6Y-4.2017 39 | X3.6Y-4.3 40 | X3.6Y-4.999 41 | X3.7Y-3.5 42 | X3.7Y-3.6017 43 | X3.7Y-4.2017 44 | X3.7Y-4.3 45 | X3.7Y-4.999 46 | X3.8Y-3.5 47 | X3.8Y-3.6017 48 | X3.8Y-4.2017 49 | X3.8Y-4.3 50 | X3.8Y-4.999 51 | X3.9Y-2.801 52 | X3.9Y-3.5 53 | X3.9Y-3.6017 54 | X3.9Y-4.2017 55 | X3.9Y-4.3 56 | X3.9Y-4.999 57 | X4.0Y-2.801 58 | X4.0Y-3.5 59 | X4.0Y-3.6017 60 | X4.0Y-4.2017 61 | X4.0Y-4.3 62 | X4.0Y-4.999 63 | X4.1Y-2.801 64 | X4.1Y-3.5 65 | X4.1Y-3.6017 66 | X4.1Y-4.2017 67 | X4.1Y-4.3 68 | X4.2Y-2.801 69 | X4.2Y-3.5 70 | X4.2Y-3.6017 71 | X4.2Y-4.2017 72 | X4.2Y-4.3 73 | X4.3Y-3.5 74 | X4.3Y-3.6017 75 | X4.3Y-4.2017 76 | X4.3Y-4.3 77 | X4.3Y-5.0 78 | X4.4Y-3.5 79 | X4.4Y-3.6017 80 | X4.4Y-4.2017 81 | X4.4Y-4.3 82 | X4.4Y-5.0 83 | X4.5Y-2.8 84 | X4.5Y-3.5 85 | X4.5Y-3.6017 86 | X4.5Y-4.2017 87 | X4.5Y-4.3 88 | X4.5Y-5.0 89 | X4.6Y-2.8 90 | X4.6Y-3.5 91 | X4.6Y-3.6017 92 | X4.6Y-4.2017 93 | X4.6Y-4.3 94 | X4.6Y-5.0 95 | X4.7Y-2.8 96 | X4.7Y-3.5 97 | X4.7Y-3.6017 98 | X4.7Y-4.2017 99 | X4.7Y-4.3 100 | X4.7Y-5.0 101 | X4.8Y-2.8 102 | X4.8Y-3.5 103 | X4.8Y-3.6017 104 | X4.8Y-4.2017 105 | X4.8Y-4.3 106 | X4.8Y-5.0 107 | X4.9Y-2.8 108 | X4.9Y-3.5 109 | X4.9Y-3.6017 110 | X4.9Y-4.2017 111 | X4.9Y-4.3 112 | X4.9Y-5.0 113 | X5.0Y-2.8 114 | X5.0Y-3.5 115 | X5.0Y-3.6017 116 | X5.0Y-4.2017 117 | X5.0Y-4.3 118 | X5.0Y-5.0 119 | X5.1Y-3.5 120 | X5.1Y-3.6017 121 | X5.1Y-4.2017 122 | X5.1Y-4.3 123 | X5.2Y-3.5 124 | X5.2Y-3.6017 125 | X5.2Y-4.2017 126 | X5.2Y-4.3 127 | X5.3Y-2.8 128 | X5.3Y-5.0 129 | X5.4Y-2.8 130 | X5.4Y-5.0 131 | X5.5Y-2.8 132 | X5.5Y-5.0 133 | X5.6Y-2.8 134 | X5.6Y-5.0 135 | X5.7Y-2.8 136 | X5.7Y-5.0 137 | X5.8Y-2.8 138 | X5.8Y-5.0 139 | X5.9Y-2.8 140 | X5.9Y-5.0 141 | X6.0Y-2.8 142 | X6.0Y-3.7 143 | X6.0Y-3.8 144 | X6.0Y-3.9 145 | X6.0Y-4.0 146 | X6.0Y-4.1 147 | X6.0Y-4.2 148 | X6.0Y-5.0 149 | T1 150 | G00X2.8433Y-2.9075 151 | M15 152 | G01X2.8157Y-2.9075 153 | M16 154 | G05 155 | G00X2.8433Y-3.0925 156 | M15 157 | G01X2.8157Y-3.0925 158 | M16 159 | G05 160 | G00X2.8433Y-3.5075 161 | M15 162 | G01X2.8157Y-3.5075 163 | M16 164 | G05 165 | G00X2.8433Y-3.6925 166 | M15 167 | G01X2.8157Y-3.6925 168 | M16 169 | G05 170 | G00X2.8925Y-2.9862 171 | M15 172 | G01X2.8925Y-3.0138 173 | M16 174 | G05 175 | G00X2.8925Y-3.5862 176 | M15 177 | G01X2.8925Y-3.6138 178 | M16 179 | G05 180 | T2 181 | G00X2.702Y-4.3311 182 | M15 183 | G01X2.702Y-4.4177 184 | M16 185 | G05 186 | G00X2.8791Y-4.5634 187 | M15 188 | G01X2.7925Y-4.5634 189 | M16 190 | G05 191 | G00X2.95Y-4.3232 192 | M15 193 | G01X2.95Y-4.4256 194 | M16 195 | G05 196 | T0 197 | M30 198 | -------------------------------------------------------------------------------- /Hardware/BreakoutBoard/PCB/BreakoutBoard/BreakoutBoard.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.09999999999999999, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.15, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.762, 37 | "height": 1.524, 38 | "width": 1.524 39 | }, 40 | "silk_line_width": 0.15, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "version": 2 55 | }, 56 | "rule_severities": { 57 | "annular_width": "error", 58 | "clearance": "error", 59 | "copper_edge_clearance": "error", 60 | "courtyards_overlap": "ignore", 61 | "diff_pair_gap_out_of_range": "error", 62 | "diff_pair_uncoupled_length_too_long": "error", 63 | "drill_out_of_range": "error", 64 | "duplicate_footprints": "warning", 65 | "extra_footprint": "warning", 66 | "footprint_type_mismatch": "error", 67 | "hole_clearance": "error", 68 | "hole_near_hole": "error", 69 | "invalid_outline": "error", 70 | "item_on_disabled_layer": "error", 71 | "items_not_allowed": "error", 72 | "length_out_of_range": "error", 73 | "malformed_courtyard": "error", 74 | "microvia_drill_out_of_range": "error", 75 | "missing_courtyard": "ignore", 76 | "missing_footprint": "warning", 77 | "net_conflict": "warning", 78 | "npth_inside_courtyard": "ignore", 79 | "padstack": "error", 80 | "pth_inside_courtyard": "ignore", 81 | "shorting_items": "error", 82 | "silk_over_copper": "warning", 83 | "silk_overlap": "warning", 84 | "skew_out_of_range": "error", 85 | "through_hole_pad_without_hole": "error", 86 | "too_many_vias": "error", 87 | "track_dangling": "warning", 88 | "track_width": "error", 89 | "tracks_crossing": "error", 90 | "unconnected_items": "error", 91 | "unresolved_variable": "error", 92 | "via_dangling": "warning", 93 | "zone_has_empty_net": "error", 94 | "zones_intersect": "error" 95 | }, 96 | "rules": { 97 | "allow_blind_buried_vias": false, 98 | "allow_microvias": false, 99 | "max_error": 0.005, 100 | "min_clearance": 0.0, 101 | "min_copper_edge_clearance": 0.0, 102 | "min_hole_clearance": 0.25, 103 | "min_hole_to_hole": 0.25, 104 | "min_microvia_diameter": 0.19999999999999998, 105 | "min_microvia_drill": 0.09999999999999999, 106 | "min_silk_clearance": 0.0, 107 | "min_through_hole_diameter": 0.3, 108 | "min_track_width": 0.19999999999999998, 109 | "min_via_annular_width": 0.049999999999999996, 110 | "min_via_diameter": 0.39999999999999997, 111 | "solder_mask_clearance": 0.0, 112 | "solder_mask_min_width": 0.0, 113 | "use_height_for_length_calcs": true 114 | }, 115 | "track_widths": [], 116 | "via_dimensions": [], 117 | "zones_allow_external_fillets": false, 118 | "zones_use_no_outline": true 119 | }, 120 | "layer_presets": [] 121 | }, 122 | "boards": [], 123 | "cvpcb": { 124 | "equivalence_files": [] 125 | }, 126 | "erc": { 127 | "erc_exclusions": [], 128 | "meta": { 129 | "version": 0 130 | }, 131 | "pin_map": [ 132 | [ 133 | 0, 134 | 0, 135 | 0, 136 | 0, 137 | 0, 138 | 0, 139 | 1, 140 | 0, 141 | 0, 142 | 0, 143 | 0, 144 | 2 145 | ], 146 | [ 147 | 0, 148 | 2, 149 | 0, 150 | 1, 151 | 0, 152 | 0, 153 | 1, 154 | 0, 155 | 2, 156 | 2, 157 | 2, 158 | 2 159 | ], 160 | [ 161 | 0, 162 | 0, 163 | 0, 164 | 0, 165 | 0, 166 | 0, 167 | 1, 168 | 0, 169 | 1, 170 | 0, 171 | 1, 172 | 2 173 | ], 174 | [ 175 | 0, 176 | 1, 177 | 0, 178 | 0, 179 | 0, 180 | 0, 181 | 1, 182 | 1, 183 | 2, 184 | 1, 185 | 1, 186 | 2 187 | ], 188 | [ 189 | 0, 190 | 0, 191 | 0, 192 | 0, 193 | 0, 194 | 0, 195 | 1, 196 | 0, 197 | 0, 198 | 0, 199 | 0, 200 | 2 201 | ], 202 | [ 203 | 0, 204 | 0, 205 | 0, 206 | 0, 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 0, 212 | 0, 213 | 0, 214 | 2 215 | ], 216 | [ 217 | 1, 218 | 1, 219 | 1, 220 | 1, 221 | 1, 222 | 0, 223 | 1, 224 | 1, 225 | 1, 226 | 1, 227 | 1, 228 | 2 229 | ], 230 | [ 231 | 0, 232 | 0, 233 | 0, 234 | 1, 235 | 0, 236 | 0, 237 | 1, 238 | 0, 239 | 0, 240 | 0, 241 | 0, 242 | 2 243 | ], 244 | [ 245 | 0, 246 | 2, 247 | 1, 248 | 2, 249 | 0, 250 | 0, 251 | 1, 252 | 0, 253 | 2, 254 | 2, 255 | 2, 256 | 2 257 | ], 258 | [ 259 | 0, 260 | 2, 261 | 0, 262 | 1, 263 | 0, 264 | 0, 265 | 1, 266 | 0, 267 | 2, 268 | 0, 269 | 0, 270 | 2 271 | ], 272 | [ 273 | 0, 274 | 2, 275 | 1, 276 | 1, 277 | 0, 278 | 0, 279 | 1, 280 | 0, 281 | 2, 282 | 0, 283 | 0, 284 | 2 285 | ], 286 | [ 287 | 2, 288 | 2, 289 | 2, 290 | 2, 291 | 2, 292 | 2, 293 | 2, 294 | 2, 295 | 2, 296 | 2, 297 | 2, 298 | 2 299 | ] 300 | ], 301 | "rule_severities": { 302 | "bus_definition_conflict": "error", 303 | "bus_entry_needed": "error", 304 | "bus_label_syntax": "error", 305 | "bus_to_bus_conflict": "error", 306 | "bus_to_net_conflict": "error", 307 | "different_unit_footprint": "error", 308 | "different_unit_net": "error", 309 | "duplicate_reference": "error", 310 | "duplicate_sheet_names": "error", 311 | "extra_units": "error", 312 | "global_label_dangling": "warning", 313 | "hier_label_mismatch": "error", 314 | "label_dangling": "error", 315 | "lib_symbol_issues": "warning", 316 | "multiple_net_names": "warning", 317 | "net_not_bus_member": "warning", 318 | "no_connect_connected": "warning", 319 | "no_connect_dangling": "warning", 320 | "pin_not_connected": "error", 321 | "pin_not_driven": "error", 322 | "pin_to_pin": "warning", 323 | "power_pin_not_driven": "error", 324 | "similar_labels": "warning", 325 | "unannotated": "error", 326 | "unit_value_mismatch": "error", 327 | "unresolved_variable": "error", 328 | "wire_dangling": "error" 329 | } 330 | }, 331 | "libraries": { 332 | "pinned_footprint_libs": [], 333 | "pinned_symbol_libs": [] 334 | }, 335 | "meta": { 336 | "filename": "BreakoutBoard.kicad_pro", 337 | "version": 1 338 | }, 339 | "net_settings": { 340 | "classes": [ 341 | { 342 | "bus_width": 12.0, 343 | "clearance": 0.2, 344 | "diff_pair_gap": 0.25, 345 | "diff_pair_via_gap": 0.25, 346 | "diff_pair_width": 0.2, 347 | "line_style": 0, 348 | "microvia_diameter": 0.3, 349 | "microvia_drill": 0.1, 350 | "name": "Default", 351 | "pcb_color": "rgba(0, 0, 0, 0.000)", 352 | "schematic_color": "rgba(0, 0, 0, 0.000)", 353 | "track_width": 0.25, 354 | "via_diameter": 0.8, 355 | "via_drill": 0.4, 356 | "wire_width": 6.0 357 | } 358 | ], 359 | "meta": { 360 | "version": 2 361 | }, 362 | "net_colors": null 363 | }, 364 | "pcbnew": { 365 | "last_paths": { 366 | "gencad": "", 367 | "idf": "", 368 | "netlist": "", 369 | "specctra_dsn": "", 370 | "step": "", 371 | "vrml": "" 372 | }, 373 | "page_layout_descr_file": "" 374 | }, 375 | "schematic": { 376 | "annotate_start_num": 0, 377 | "drawing": { 378 | "default_line_thickness": 6.0, 379 | "default_text_size": 50.0, 380 | "field_names": [], 381 | "intersheets_ref_own_page": false, 382 | "intersheets_ref_prefix": "", 383 | "intersheets_ref_short": false, 384 | "intersheets_ref_show": false, 385 | "intersheets_ref_suffix": "", 386 | "junction_size_choice": 3, 387 | "label_size_ratio": 0.375, 388 | "pin_symbol_size": 25.0, 389 | "text_offset_ratio": 0.15 390 | }, 391 | "legacy_lib_dir": "", 392 | "legacy_lib_list": [], 393 | "meta": { 394 | "version": 1 395 | }, 396 | "net_format_name": "", 397 | "ngspice": { 398 | "fix_include_paths": true, 399 | "fix_passive_vals": false, 400 | "meta": { 401 | "version": 0 402 | }, 403 | "model_mode": 0, 404 | "workbook_filename": "" 405 | }, 406 | "page_layout_descr_file": "", 407 | "plot_directory": "", 408 | "spice_adjust_passive_values": false, 409 | "spice_external_command": "spice \"%I\"", 410 | "subpart_first_id": 65, 411 | "subpart_id_separator": 0 412 | }, 413 | "sheets": [ 414 | [ 415 | "6b944684-5ff0-4ca1-ae70-4406141c7851", 416 | "" 417 | ] 418 | ], 419 | "text_variables": {} 420 | } 421 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Drivers/ExternalCodec.cpp: -------------------------------------------------------------------------------- 1 | #include "ExternalCodec.h" 2 | #include "daisysp.h" 3 | #include "daisy_seed.h" 4 | #include "dev/codec_ak4556.h" 5 | #include "dev/codec_wm8731.h" 6 | 7 | namespace developmentKit::hardware::externalCodec::drivers 8 | { 9 | using namespace daisysp; 10 | using namespace daisy; 11 | 12 | void ExternalCodec::Init(DaisySeed *seed) 13 | { 14 | // Handle Seed Audio as-is and then 15 | SaiHandle::Config sai_config[2]; 16 | 17 | // Internal Codec 18 | if (seed->CheckBoardVersion() == DaisySeed::BoardVersion::DAISY_SEED_1_1) 19 | { 20 | sai_config[0].pin_config.sa = {DSY_GPIOE, 6}; 21 | sai_config[0].pin_config.sb = {DSY_GPIOE, 3}; 22 | sai_config[0].a_dir = SaiHandle::Config::Direction::RECEIVE; 23 | sai_config[0].b_dir = SaiHandle::Config::Direction::TRANSMIT; 24 | } 25 | else 26 | { 27 | sai_config[0].pin_config.sa = {DSY_GPIOE, 6}; 28 | sai_config[0].pin_config.sb = {DSY_GPIOE, 3}; 29 | sai_config[0].a_dir = SaiHandle::Config::Direction::TRANSMIT; 30 | sai_config[0].b_dir = SaiHandle::Config::Direction::RECEIVE; 31 | } 32 | sai_config[0].periph = SaiHandle::Config::Peripheral::SAI_1; 33 | sai_config[0].sr = SaiHandle::Config::SampleRate::SAI_48KHZ; 34 | sai_config[0].bit_depth = SaiHandle::Config::BitDepth::SAI_24BIT; 35 | sai_config[0].a_sync = SaiHandle::Config::Sync::MASTER; 36 | sai_config[0].b_sync = SaiHandle::Config::Sync::SLAVE; 37 | sai_config[0].pin_config.fs = {DSY_GPIOE, 4}; 38 | sai_config[0].pin_config.mclk = {DSY_GPIOE, 2}; 39 | sai_config[0].pin_config.sck = {DSY_GPIOE, 5}; 40 | 41 | // External Codec 42 | // Set up like Seed rev 5: 43 | // https://github.com/electro-smith/libDaisy/blob/master/src/daisy_seed.cpp#L269 44 | sai_config[1].periph = SaiHandle::Config::Peripheral::SAI_2; 45 | sai_config[1].sr = SaiHandle::Config::SampleRate::SAI_48KHZ; 46 | sai_config[1].bit_depth = SaiHandle::Config::BitDepth::SAI_24BIT; 47 | sai_config[1].a_sync = SaiHandle::Config::Sync::SLAVE; 48 | sai_config[1].b_sync = SaiHandle::Config::Sync::MASTER; 49 | sai_config[1].a_dir = SaiHandle::Config::Direction::RECEIVE; 50 | sai_config[1].b_dir = SaiHandle::Config::Direction::TRANSMIT; 51 | sai_config[1].pin_config.fs = seed->GetPin(27); 52 | sai_config[1].pin_config.mclk = seed->GetPin(24); 53 | sai_config[1].pin_config.sck = seed->GetPin(28); 54 | sai_config[1].pin_config.sb = seed->GetPin(25); 55 | sai_config[1].pin_config.sa = seed->GetPin(26); 56 | I2CHandle::Config i2c_config; 57 | i2c_config.mode = I2CHandle::Config::Mode::I2C_MASTER; 58 | i2c_config.periph = I2CHandle::Config::Peripheral::I2C_1; 59 | i2c_config.speed = I2CHandle::Config::Speed::I2C_400KHZ; 60 | i2c_config.pin_config.scl = seed->GetPin(11); 61 | i2c_config.pin_config.sda = seed->GetPin(12); 62 | I2CHandle i2c_handle; 63 | i2c_handle.Init(i2c_config); 64 | Wm8731::Config codec_cfg; 65 | codec_cfg.Defaults(); 66 | Wm8731 codec; 67 | codec.Init(codec_cfg, i2c_handle); 68 | 69 | SaiHandle sai_handle[2]; 70 | sai_handle[0].Init(sai_config[0]); 71 | sai_handle[1].Init(sai_config[1]); 72 | 73 | // Reset Pin for AK4556 74 | // Built-in AK4556 was reset during Seed Init 75 | //dsy_gpio_pin codec_reset_pin = seed->GetPin(29); 76 | //Ak4556::Init(codec_reset_pin); 77 | 78 | // Reinit Audio for _both_ codecs... 79 | AudioHandle::Config cfg; 80 | cfg.blocksize = 48; 81 | cfg.samplerate = SaiHandle::Config::SampleRate::SAI_48KHZ; 82 | // cfg.postgain = 0.5f; 83 | cfg.postgain = 1.f; 84 | seed->audio_handle.Init(cfg, sai_handle[0], sai_handle[1]); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Drivers/ExternalCodec.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef EXTERNAL_CODEC_H 3 | #define EXTERNAL_CODEC_H 4 | 5 | #include "daisysp.h" 6 | #include "daisy_seed.h" 7 | 8 | namespace developmentKit::hardware::externalCodec::drivers 9 | { 10 | using namespace daisysp; 11 | using namespace daisy; 12 | 13 | class ExternalCodec 14 | { 15 | public: 16 | void Init(DaisySeed *seed); 17 | private: 18 | }; 19 | } 20 | 21 | #endif -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/BOM.txt: -------------------------------------------------------------------------------- 1 | WM8731SEDS 2 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/Codec.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lucidcoding/daisy-seed-development-kit/369ae2a3639447924ab6b4c4718428b19160b1be/Hardware/ExternalCodec/PCB/Codec.jpg -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/ExternalCodec/ExternalCodec-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Sun Nov 12 16:25:04 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-11-12T16:25:04+00:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 10 | T1C0.0300 11 | % 12 | G90 13 | G05 14 | T1 15 | X6.9728Y-4.05 16 | X6.9744Y-3.55 17 | X7.1697Y-3.8531 18 | X7.1697Y-4.2469 19 | X7.1713Y-3.3531 20 | X7.1713Y-3.7469 21 | X7.2681Y-3.8531 22 | X7.2681Y-4.2469 23 | X7.2697Y-3.3531 24 | X7.2697Y-3.7469 25 | T0 26 | M30 27 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/ExternalCodec/ExternalCodec-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Sun Nov 12 16:25:04 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-11-12T16:25:04+00:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.0315 11 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 12 | T2C0.0354 13 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 14 | T3C0.0394 15 | % 16 | G90 17 | G05 18 | T1 19 | X5.3516Y-2.7 20 | X5.3516Y-3.15 21 | X5.3516Y-3.9 22 | X5.3516Y-4.2 23 | X5.4Y-2.85 24 | X5.4Y-3.0 25 | X5.4016Y-3.75 26 | X5.4016Y-4.05 27 | X5.4984Y-2.85 28 | X5.4984Y-3.0 29 | X5.5Y-3.75 30 | X5.5Y-4.05 31 | X5.5484Y-2.7 32 | X5.5484Y-3.15 33 | X5.5484Y-3.9 34 | X5.5484Y-4.2 35 | X6.0Y-2.75 36 | X6.0Y-2.9 37 | X6.0Y-3.3508 38 | X6.0Y-3.5008 39 | X6.0Y-3.6508 40 | X6.0Y-3.8 41 | X6.1016Y-3.0508 42 | X6.1016Y-3.2008 43 | X6.1016Y-3.95 44 | X6.1016Y-4.1 45 | X6.2984Y-3.0508 46 | X6.2984Y-3.2008 47 | X6.2984Y-3.95 48 | X6.2984Y-4.1 49 | X6.4Y-2.75 50 | X6.4Y-2.9 51 | X6.4Y-3.3508 52 | X6.4Y-3.5008 53 | X6.4Y-3.6508 54 | X6.4Y-3.8 55 | T3 56 | X4.5Y-3.4 57 | X4.5Y-3.5 58 | X4.5Y-3.6 59 | X4.5Y-3.7 60 | X4.5Y-3.8 61 | X4.5Y-3.9 62 | X4.5Y-4.0 63 | X4.5Y-4.1 64 | X4.501Y-2.8 65 | X4.501Y-2.9 66 | X4.501Y-3.0 67 | X4.501Y-3.1 68 | X5.1Y-2.8 69 | X5.1Y-2.9 70 | X5.1Y-3.0 71 | X5.1Y-3.1 72 | X5.1Y-3.2 73 | X5.1Y-3.3 74 | X5.1Y-3.4 75 | X5.1Y-3.5 76 | X5.1Y-3.6 77 | X5.1Y-3.7 78 | X5.1Y-3.8 79 | X5.1Y-3.9 80 | X5.1Y-4.0 81 | X5.1Y-4.1 82 | X5.799Y-2.8 83 | X5.799Y-2.9 84 | X5.799Y-3.0 85 | X5.799Y-3.1 86 | X5.799Y-3.2 87 | X5.799Y-3.3 88 | X5.799Y-3.4 89 | X5.799Y-3.5 90 | X5.799Y-3.6 91 | X5.799Y-3.7 92 | X5.799Y-3.8 93 | X5.799Y-3.9 94 | X5.799Y-4.0 95 | X5.799Y-4.1 96 | X6.9976Y-2.65 97 | X6.9976Y-2.75 98 | X6.9976Y-2.85 99 | X6.9976Y-2.95 100 | X6.9976Y-3.05 101 | X6.9976Y-3.15 102 | T2 103 | G00X6.9886Y-3.8531 104 | M15 105 | G01X6.9571Y-3.8531 106 | M16 107 | G05 108 | G00X6.9886Y-3.9516 109 | M15 110 | G01X6.9571Y-3.9516 111 | M16 112 | G05 113 | G00X6.9886Y-4.1484 114 | M15 115 | G01X6.9571Y-4.1484 116 | M16 117 | G05 118 | G00X6.9886Y-4.2469 119 | M15 120 | G01X6.9571Y-4.2469 121 | M16 122 | G05 123 | G00X6.9902Y-3.3531 124 | M15 125 | G01X6.9587Y-3.3531 126 | M16 127 | G05 128 | G00X6.9902Y-3.4516 129 | M15 130 | G01X6.9587Y-3.4516 131 | M16 132 | G05 133 | G00X6.9902Y-3.6484 134 | M15 135 | G01X6.9587Y-3.6484 136 | M16 137 | G05 138 | G00X6.9902Y-3.7469 139 | M15 140 | G01X6.9587Y-3.7469 141 | M16 142 | G05 143 | G00X7.1697Y-4.0343 144 | M15 145 | G01X7.1697Y-4.0657 146 | M16 147 | G05 148 | G00X7.1713Y-3.5343 149 | M15 150 | G01X7.1713Y-3.5657 151 | M16 152 | G05 153 | T0 154 | M30 155 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/ExternalCodec/ExternalCodec.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.1, 6 | "copper_line_width": 0.2, 7 | "copper_text_size_h": 1.5, 8 | "copper_text_size_v": 1.5, 9 | "copper_text_thickness": 0.3, 10 | "other_line_width": 0.15, 11 | "silk_line_width": 0.15, 12 | "silk_text_size_h": 1.0, 13 | "silk_text_size_v": 1.0, 14 | "silk_text_thickness": 0.15 15 | }, 16 | "diff_pair_dimensions": [], 17 | "drc_exclusions": [], 18 | "rules": { 19 | "min_copper_edge_clearance": 0.0, 20 | "solder_mask_clearance": 0.0, 21 | "solder_mask_min_width": 0.0 22 | }, 23 | "track_widths": [], 24 | "via_dimensions": [] 25 | }, 26 | "layer_presets": [] 27 | }, 28 | "boards": [], 29 | "cvpcb": { 30 | "equivalence_files": [] 31 | }, 32 | "erc": { 33 | "erc_exclusions": [], 34 | "meta": { 35 | "version": 0 36 | }, 37 | "pin_map": [ 38 | [ 39 | 0, 40 | 0, 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 1, 46 | 0, 47 | 0, 48 | 0, 49 | 0, 50 | 2 51 | ], 52 | [ 53 | 0, 54 | 2, 55 | 0, 56 | 1, 57 | 0, 58 | 0, 59 | 1, 60 | 0, 61 | 2, 62 | 2, 63 | 2, 64 | 2 65 | ], 66 | [ 67 | 0, 68 | 0, 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 1, 74 | 0, 75 | 1, 76 | 0, 77 | 1, 78 | 2 79 | ], 80 | [ 81 | 0, 82 | 1, 83 | 0, 84 | 0, 85 | 0, 86 | 0, 87 | 1, 88 | 1, 89 | 2, 90 | 1, 91 | 1, 92 | 2 93 | ], 94 | [ 95 | 0, 96 | 0, 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 1, 102 | 0, 103 | 0, 104 | 0, 105 | 0, 106 | 2 107 | ], 108 | [ 109 | 0, 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 2 121 | ], 122 | [ 123 | 1, 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 0, 129 | 1, 130 | 1, 131 | 1, 132 | 1, 133 | 1, 134 | 2 135 | ], 136 | [ 137 | 0, 138 | 0, 139 | 0, 140 | 1, 141 | 0, 142 | 0, 143 | 1, 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 2 149 | ], 150 | [ 151 | 0, 152 | 2, 153 | 1, 154 | 2, 155 | 0, 156 | 0, 157 | 1, 158 | 0, 159 | 2, 160 | 2, 161 | 2, 162 | 2 163 | ], 164 | [ 165 | 0, 166 | 2, 167 | 0, 168 | 1, 169 | 0, 170 | 0, 171 | 1, 172 | 0, 173 | 2, 174 | 0, 175 | 0, 176 | 2 177 | ], 178 | [ 179 | 0, 180 | 2, 181 | 1, 182 | 1, 183 | 0, 184 | 0, 185 | 1, 186 | 0, 187 | 2, 188 | 0, 189 | 0, 190 | 2 191 | ], 192 | [ 193 | 2, 194 | 2, 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2 205 | ] 206 | ], 207 | "rule_severities": { 208 | "bus_definition_conflict": "error", 209 | "bus_entry_needed": "error", 210 | "bus_label_syntax": "error", 211 | "bus_to_bus_conflict": "error", 212 | "bus_to_net_conflict": "error", 213 | "different_unit_footprint": "error", 214 | "different_unit_net": "error", 215 | "duplicate_reference": "error", 216 | "duplicate_sheet_names": "error", 217 | "extra_units": "error", 218 | "global_label_dangling": "warning", 219 | "hier_label_mismatch": "error", 220 | "label_dangling": "error", 221 | "lib_symbol_issues": "warning", 222 | "multiple_net_names": "warning", 223 | "net_not_bus_member": "warning", 224 | "no_connect_connected": "warning", 225 | "no_connect_dangling": "warning", 226 | "pin_not_connected": "error", 227 | "pin_not_driven": "error", 228 | "pin_to_pin": "warning", 229 | "power_pin_not_driven": "error", 230 | "similar_labels": "warning", 231 | "unannotated": "error", 232 | "unit_value_mismatch": "error", 233 | "unresolved_variable": "error", 234 | "wire_dangling": "error" 235 | } 236 | }, 237 | "libraries": { 238 | "pinned_footprint_libs": [], 239 | "pinned_symbol_libs": [] 240 | }, 241 | "meta": { 242 | "filename": "ExternalCodec.kicad_pro", 243 | "version": 1 244 | }, 245 | "net_settings": { 246 | "classes": [ 247 | { 248 | "bus_width": 12.0, 249 | "clearance": 0.2, 250 | "diff_pair_gap": 0.25, 251 | "diff_pair_via_gap": 0.25, 252 | "diff_pair_width": 0.2, 253 | "line_style": 0, 254 | "microvia_diameter": 0.3, 255 | "microvia_drill": 0.1, 256 | "name": "Default", 257 | "pcb_color": "rgba(0, 0, 0, 0.000)", 258 | "schematic_color": "rgba(0, 0, 0, 0.000)", 259 | "track_width": 0.25, 260 | "via_diameter": 0.8, 261 | "via_drill": 0.4, 262 | "wire_width": 6.0 263 | } 264 | ], 265 | "meta": { 266 | "version": 2 267 | }, 268 | "net_colors": null 269 | }, 270 | "pcbnew": { 271 | "last_paths": { 272 | "gencad": "", 273 | "idf": "", 274 | "netlist": "", 275 | "specctra_dsn": "", 276 | "step": "", 277 | "vrml": "" 278 | }, 279 | "page_layout_descr_file": "" 280 | }, 281 | "schematic": { 282 | "annotate_start_num": 0, 283 | "drawing": { 284 | "default_line_thickness": 6.0, 285 | "default_text_size": 50.0, 286 | "field_names": [], 287 | "intersheets_ref_own_page": false, 288 | "intersheets_ref_prefix": "", 289 | "intersheets_ref_short": false, 290 | "intersheets_ref_show": false, 291 | "intersheets_ref_suffix": "", 292 | "junction_size_choice": 3, 293 | "label_size_ratio": 0.375, 294 | "pin_symbol_size": 25.0, 295 | "text_offset_ratio": 0.15 296 | }, 297 | "legacy_lib_dir": "", 298 | "legacy_lib_list": [], 299 | "meta": { 300 | "version": 1 301 | }, 302 | "net_format_name": "", 303 | "ngspice": { 304 | "fix_include_paths": true, 305 | "fix_passive_vals": false, 306 | "meta": { 307 | "version": 0 308 | }, 309 | "model_mode": 0, 310 | "workbook_filename": "" 311 | }, 312 | "page_layout_descr_file": "", 313 | "plot_directory": "", 314 | "spice_adjust_passive_values": false, 315 | "spice_external_command": "spice \"%I\"", 316 | "subpart_first_id": 65, 317 | "subpart_id_separator": 0 318 | }, 319 | "sheets": [ 320 | [ 321 | "e63e39d7-6ac0-4ffd-8aa3-1841a4541b55", 322 | "" 323 | ] 324 | ], 325 | "text_variables": {} 326 | } 327 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/PCB/ExternalCodec/ExternalCodec.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lucidcoding/daisy-seed-development-kit/369ae2a3639447924ab6b4c4718428b19160b1be/Hardware/ExternalCodec/PCB/ExternalCodec/ExternalCodec.zip -------------------------------------------------------------------------------- /Hardware/ExternalCodec/README.md: -------------------------------------------------------------------------------- 1 | ## Fabricating the PCBs 2 | 3 | - Open PCB editor 4 | - Select File > Fabrication Outputs... > Gerbers (.gbr)... 5 | - Select requied layers 6 | - Click 'Plot' 7 | - Click 'Generate Drill Files'... 8 | - Click 'Generate Drill File' 9 | - Click 'Close' 10 | - Click 'Close' 11 | - Open project folder 12 | - Select all .gbr and .drl files 13 | - Add all to a zip file 14 | - Check with Gerber Viewer 15 | - Upload to fabricator's website -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Tests/DriverTest/DriverTest.cpp: -------------------------------------------------------------------------------- 1 | #include "daisy_seed.h" 2 | #include "daisysp.h" 3 | #include "../../Drivers/ExternalCodec.h" 4 | 5 | using namespace daisy; 6 | using namespace daisysp; 7 | using namespace developmentKit::hardware::externalCodec::drivers; 8 | 9 | DaisySeed hardware; 10 | ExternalCodec externalCodec; 11 | 12 | void AudioCallback(AudioHandle::InputBuffer in, AudioHandle::OutputBuffer out, size_t size) 13 | { 14 | for (size_t i = 0; i < size; i++) 15 | { 16 | out[0][i] = in[2][i]; 17 | out[1][i] = in[3][i]; 18 | out[2][i] = in[0][i]; 19 | out[3][i] = in[1][i]; 20 | } 21 | } 22 | 23 | int main(void) 24 | { 25 | hardware.Init(); 26 | externalCodec.Init(&hardware); 27 | hardware.SetAudioSampleRate(SaiHandle::Config::SampleRate::SAI_48KHZ); 28 | hardware.StartAudio(AudioCallback); 29 | while (1) 30 | { 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Tests/DriverTest/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = DriverTest 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | DriverTest.cpp \ 7 | ../../Drivers/ExternalCodec.cpp 8 | 9 | # Core location, and generic Makefile. 10 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 11 | include $(SYSTEM_FILES_DIR)/Makefile 12 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Tests/HardwareTest/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = StandaloneTest 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | StandaloneTest.cpp 7 | 8 | # Core location, and generic Makefile. 9 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 10 | include $(SYSTEM_FILES_DIR)/Makefile 11 | -------------------------------------------------------------------------------- /Hardware/ExternalCodec/Tests/HardwareTest/StandaloneTest.cpp: -------------------------------------------------------------------------------- 1 | #include "daisysp.h" 2 | #include "daisy_seed.h" 3 | 4 | using namespace daisysp; 5 | using namespace daisy; 6 | 7 | static DaisySeed hardware; 8 | static Oscillator mainOsc; 9 | Adsr adsr; 10 | bool gate; 11 | 12 | void ConfigureAudio() 13 | { 14 | SaiHandle::Config sai_config; 15 | sai_config.periph = SaiHandle::Config::Peripheral::SAI_2; 16 | sai_config.sr = SaiHandle::Config::SampleRate::SAI_48KHZ; 17 | sai_config.bit_depth = SaiHandle::Config::BitDepth::SAI_24BIT; 18 | sai_config.a_sync = SaiHandle::Config::Sync::SLAVE; 19 | sai_config.b_sync = SaiHandle::Config::Sync::MASTER; 20 | sai_config.pin_config.fs = hardware.GetPin(27); 21 | sai_config.pin_config.mclk = hardware.GetPin(24); 22 | sai_config.pin_config.sck = hardware.GetPin(28); 23 | sai_config.a_dir = SaiHandle::Config::Direction::RECEIVE; 24 | sai_config.pin_config.sa = hardware.GetPin(26); 25 | sai_config.b_dir = SaiHandle::Config::Direction::TRANSMIT; 26 | sai_config.pin_config.sb = hardware.GetPin(25); 27 | I2CHandle::Config i2c_config; 28 | I2CHandle i2c_handle; 29 | Wm8731::Config codec_cfg; 30 | Wm8731 codec; 31 | i2c_config.mode = I2CHandle::Config::Mode::I2C_MASTER; 32 | i2c_config.periph = I2CHandle::Config::Peripheral::I2C_1; 33 | i2c_config.speed = I2CHandle::Config::Speed::I2C_400KHZ; 34 | i2c_config.pin_config.scl = hardware.GetPin(11); //{DSY_GPIOB, 8}; 35 | i2c_config.pin_config.sda = hardware.GetPin(12); //{DSY_GPIOB, 9}; 36 | i2c_handle.Init(i2c_config); 37 | codec_cfg.Defaults(); 38 | codec.Init(codec_cfg, i2c_handle); 39 | 40 | // Then Initialize 41 | SaiHandle sai_2_handle; 42 | sai_2_handle.Init(sai_config); 43 | 44 | // Audio 45 | AudioHandle::Config audio_config; 46 | audio_config.blocksize = 48; 47 | audio_config.samplerate = SaiHandle::Config::SampleRate::SAI_48KHZ; 48 | audio_config.postgain = .5f; 49 | hardware.audio_handle.Init(audio_config, sai_2_handle); 50 | } 51 | 52 | static void AudioCallback(AudioHandle::InterleavingInputBuffer in, 53 | AudioHandle::InterleavingOutputBuffer out, 54 | size_t size) 55 | { 56 | float oscillatorOut, adsrOut; 57 | 58 | for (size_t i = 0; i < size; i += 2) 59 | { 60 | adsrOut = adsr.Process(gate); 61 | mainOsc.SetAmp(adsrOut / 2); 62 | oscillatorOut = mainOsc.Process(); 63 | out[i] = oscillatorOut; 64 | out[i + 1] = oscillatorOut; 65 | } 66 | } 67 | 68 | void InitOscillator(float sampleRate) 69 | { 70 | mainOsc.Init(sampleRate); 71 | mainOsc.SetWaveform(Oscillator::WAVE_POLYBLEP_TRI); 72 | mainOsc.SetAmp(1); 73 | } 74 | 75 | void InitAdsr(float sampleRate) 76 | { 77 | adsr.Init(sampleRate); 78 | adsr.SetTime(ADSR_SEG_ATTACK, .01); 79 | adsr.SetTime(ADSR_SEG_DECAY, .1); 80 | adsr.SetTime(ADSR_SEG_RELEASE, .1); 81 | adsr.SetSustainLevel(.1); 82 | } 83 | 84 | int main(void) 85 | { 86 | hardware.Configure(); 87 | hardware.Init(); 88 | ConfigureAudio(); 89 | hardware.SetAudioBlockSize(4); 90 | float sampleRate = hardware.AudioSampleRate(); 91 | InitOscillator(sampleRate); 92 | InitAdsr(sampleRate); 93 | hardware.StartAudio(AudioCallback); 94 | 95 | while (1) 96 | { 97 | System::Delay(1000); 98 | gate = !gate; 99 | } 100 | } -------------------------------------------------------------------------------- /Hardware/Midi/PCB/BOM.txt: -------------------------------------------------------------------------------- 1 | J1 - 1 x JST XH2.54 4 pin male connector 2 | J2, J2 - 2 x DIN 5 pin female connector 3 | R1 - 1 x Resistor 220Ω 0.25W 4 | R2 - 1 x Resistor 270Ω 0.25W 5 | R3 - 1 x Resistor 33Ω 0.25W 6 | R4 - 1 x Resistor 10Ω 0.25W 7 | C1 - 1 x Capacitor 100nF 8 | U1 - 1 x IC H11L1 9 | -------------------------------------------------------------------------------- /Hardware/Midi/PCB/Midi/Midi-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Wed Sep 27 15:27:46 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-09-27T15:27:46+01:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,NonPlated,1,2,NPTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill 10 | T1C0.0550 11 | % 12 | G90 13 | G05 14 | T1 15 | X5.1031Y-2.1745 16 | X5.4969Y-2.1745 17 | X5.9531Y-2.1745 18 | X6.3469Y-2.1745 19 | T0 20 | M30 21 | -------------------------------------------------------------------------------- /Hardware/Midi/PCB/Midi/Midi-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ; DRILL file {KiCad (6.0.1)} date Wed Sep 27 15:27:46 2023 3 | ; FORMAT={-:-/ absolute / inch / decimal} 4 | ; #@! TF.CreationDate,2023-09-27T15:27:46+01:00 5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.1) 6 | ; #@! TF.FileFunction,Plated,1,2,PTH 7 | FMAT,2 8 | INCH 9 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 10 | T1C0.0315 11 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 12 | T2C0.0394 13 | ; #@! TA.AperFunction,Plated,PTH,ComponentDrill 14 | T3C0.0550 15 | % 16 | G90 17 | G05 18 | T1 19 | X5.1996Y-3.0496 20 | X5.1996Y-3.1496 21 | X5.1996Y-3.2496 22 | X5.2996Y-3.3996 23 | X5.398Y-3.3996 24 | X5.4996Y-3.0496 25 | X5.4996Y-3.1496 26 | X5.4996Y-3.2496 27 | X5.6496Y-2.9996 28 | X5.6496Y-3.3996 29 | X5.7996Y-2.9996 30 | X5.7996Y-3.3996 31 | X5.9496Y-2.9996 32 | X5.9496Y-3.3996 33 | X6.0992Y-2.9996 34 | X6.0992Y-3.3996 35 | X6.2492Y-2.9996 36 | X6.2492Y-3.3996 37 | T2 38 | X4.4Y-2.5 39 | X4.5Y-2.5 40 | X4.6Y-2.5 41 | X4.7Y-2.5 42 | T3 43 | X5.0048Y-2.568 44 | X5.1033Y-2.6665 45 | X5.3Y-2.5681 46 | X5.4967Y-2.6665 47 | X5.5952Y-2.568 48 | X5.8548Y-2.568 49 | X5.9533Y-2.6665 50 | X6.15Y-2.5681 51 | X6.3467Y-2.6665 52 | X6.4452Y-2.568 53 | T0 54 | M30 55 | -------------------------------------------------------------------------------- /Hardware/Midi/PCB/Midi/Midi.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.09999999999999999, 6 | "copper_line_width": 0.19999999999999998, 7 | "copper_text_italic": false, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "copper_text_upright": false, 12 | "courtyard_line_width": 0.049999999999999996, 13 | "dimension_precision": 4, 14 | "dimension_units": 3, 15 | "dimensions": { 16 | "arrow_length": 1270000, 17 | "extension_offset": 500000, 18 | "keep_text_aligned": true, 19 | "suppress_zeroes": false, 20 | "text_position": 0, 21 | "units_format": 1 22 | }, 23 | "fab_line_width": 0.09999999999999999, 24 | "fab_text_italic": false, 25 | "fab_text_size_h": 1.0, 26 | "fab_text_size_v": 1.0, 27 | "fab_text_thickness": 0.15, 28 | "fab_text_upright": false, 29 | "other_line_width": 0.15, 30 | "other_text_italic": false, 31 | "other_text_size_h": 1.0, 32 | "other_text_size_v": 1.0, 33 | "other_text_thickness": 0.15, 34 | "other_text_upright": false, 35 | "pads": { 36 | "drill": 0.8, 37 | "height": 1.6, 38 | "width": 1.6 39 | }, 40 | "silk_line_width": 0.15, 41 | "silk_text_italic": false, 42 | "silk_text_size_h": 1.0, 43 | "silk_text_size_v": 1.0, 44 | "silk_text_thickness": 0.15, 45 | "silk_text_upright": false, 46 | "zones": { 47 | "45_degree_only": false, 48 | "min_clearance": 0.508 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "version": 2 55 | }, 56 | "rule_severities": { 57 | "annular_width": "error", 58 | "clearance": "error", 59 | "copper_edge_clearance": "error", 60 | "courtyards_overlap": "error", 61 | "diff_pair_gap_out_of_range": "error", 62 | "diff_pair_uncoupled_length_too_long": "error", 63 | "drill_out_of_range": "error", 64 | "duplicate_footprints": "warning", 65 | "extra_footprint": "warning", 66 | "footprint_type_mismatch": "error", 67 | "hole_clearance": "error", 68 | "hole_near_hole": "error", 69 | "invalid_outline": "error", 70 | "item_on_disabled_layer": "error", 71 | "items_not_allowed": "error", 72 | "length_out_of_range": "error", 73 | "malformed_courtyard": "error", 74 | "microvia_drill_out_of_range": "error", 75 | "missing_courtyard": "ignore", 76 | "missing_footprint": "warning", 77 | "net_conflict": "warning", 78 | "npth_inside_courtyard": "ignore", 79 | "padstack": "error", 80 | "pth_inside_courtyard": "ignore", 81 | "shorting_items": "error", 82 | "silk_over_copper": "warning", 83 | "silk_overlap": "warning", 84 | "skew_out_of_range": "error", 85 | "through_hole_pad_without_hole": "error", 86 | "too_many_vias": "error", 87 | "track_dangling": "warning", 88 | "track_width": "error", 89 | "tracks_crossing": "error", 90 | "unconnected_items": "error", 91 | "unresolved_variable": "error", 92 | "via_dangling": "warning", 93 | "zone_has_empty_net": "error", 94 | "zones_intersect": "error" 95 | }, 96 | "rules": { 97 | "allow_blind_buried_vias": false, 98 | "allow_microvias": false, 99 | "max_error": 0.005, 100 | "min_clearance": 0.0, 101 | "min_copper_edge_clearance": 0.0, 102 | "min_hole_clearance": 0.25, 103 | "min_hole_to_hole": 0.25, 104 | "min_microvia_diameter": 0.19999999999999998, 105 | "min_microvia_drill": 0.09999999999999999, 106 | "min_silk_clearance": 0.0, 107 | "min_through_hole_diameter": 0.3, 108 | "min_track_width": 0.19999999999999998, 109 | "min_via_annular_width": 0.049999999999999996, 110 | "min_via_diameter": 0.39999999999999997, 111 | "solder_mask_clearance": 0.0, 112 | "solder_mask_min_width": 0.0, 113 | "use_height_for_length_calcs": true 114 | }, 115 | "track_widths": [], 116 | "via_dimensions": [], 117 | "zones_allow_external_fillets": false, 118 | "zones_use_no_outline": true 119 | }, 120 | "layer_presets": [] 121 | }, 122 | "boards": [], 123 | "cvpcb": { 124 | "equivalence_files": [] 125 | }, 126 | "erc": { 127 | "erc_exclusions": [], 128 | "meta": { 129 | "version": 0 130 | }, 131 | "pin_map": [ 132 | [ 133 | 0, 134 | 0, 135 | 0, 136 | 0, 137 | 0, 138 | 0, 139 | 1, 140 | 0, 141 | 0, 142 | 0, 143 | 0, 144 | 2 145 | ], 146 | [ 147 | 0, 148 | 2, 149 | 0, 150 | 1, 151 | 0, 152 | 0, 153 | 1, 154 | 0, 155 | 2, 156 | 2, 157 | 2, 158 | 2 159 | ], 160 | [ 161 | 0, 162 | 0, 163 | 0, 164 | 0, 165 | 0, 166 | 0, 167 | 1, 168 | 0, 169 | 1, 170 | 0, 171 | 1, 172 | 2 173 | ], 174 | [ 175 | 0, 176 | 1, 177 | 0, 178 | 0, 179 | 0, 180 | 0, 181 | 1, 182 | 1, 183 | 2, 184 | 1, 185 | 1, 186 | 2 187 | ], 188 | [ 189 | 0, 190 | 0, 191 | 0, 192 | 0, 193 | 0, 194 | 0, 195 | 1, 196 | 0, 197 | 0, 198 | 0, 199 | 0, 200 | 2 201 | ], 202 | [ 203 | 0, 204 | 0, 205 | 0, 206 | 0, 207 | 0, 208 | 0, 209 | 0, 210 | 0, 211 | 0, 212 | 0, 213 | 0, 214 | 2 215 | ], 216 | [ 217 | 1, 218 | 1, 219 | 1, 220 | 1, 221 | 1, 222 | 0, 223 | 1, 224 | 1, 225 | 1, 226 | 1, 227 | 1, 228 | 2 229 | ], 230 | [ 231 | 0, 232 | 0, 233 | 0, 234 | 1, 235 | 0, 236 | 0, 237 | 1, 238 | 0, 239 | 0, 240 | 0, 241 | 0, 242 | 2 243 | ], 244 | [ 245 | 0, 246 | 2, 247 | 1, 248 | 2, 249 | 0, 250 | 0, 251 | 1, 252 | 0, 253 | 2, 254 | 2, 255 | 2, 256 | 2 257 | ], 258 | [ 259 | 0, 260 | 2, 261 | 0, 262 | 1, 263 | 0, 264 | 0, 265 | 1, 266 | 0, 267 | 2, 268 | 0, 269 | 0, 270 | 2 271 | ], 272 | [ 273 | 0, 274 | 2, 275 | 1, 276 | 1, 277 | 0, 278 | 0, 279 | 1, 280 | 0, 281 | 2, 282 | 0, 283 | 0, 284 | 2 285 | ], 286 | [ 287 | 2, 288 | 2, 289 | 2, 290 | 2, 291 | 2, 292 | 2, 293 | 2, 294 | 2, 295 | 2, 296 | 2, 297 | 2, 298 | 2 299 | ] 300 | ], 301 | "rule_severities": { 302 | "bus_definition_conflict": "error", 303 | "bus_entry_needed": "error", 304 | "bus_label_syntax": "error", 305 | "bus_to_bus_conflict": "error", 306 | "bus_to_net_conflict": "error", 307 | "different_unit_footprint": "error", 308 | "different_unit_net": "error", 309 | "duplicate_reference": "error", 310 | "duplicate_sheet_names": "error", 311 | "extra_units": "error", 312 | "global_label_dangling": "warning", 313 | "hier_label_mismatch": "error", 314 | "label_dangling": "error", 315 | "lib_symbol_issues": "warning", 316 | "multiple_net_names": "warning", 317 | "net_not_bus_member": "warning", 318 | "no_connect_connected": "warning", 319 | "no_connect_dangling": "warning", 320 | "pin_not_connected": "error", 321 | "pin_not_driven": "error", 322 | "pin_to_pin": "warning", 323 | "power_pin_not_driven": "error", 324 | "similar_labels": "warning", 325 | "unannotated": "error", 326 | "unit_value_mismatch": "error", 327 | "unresolved_variable": "error", 328 | "wire_dangling": "error" 329 | } 330 | }, 331 | "libraries": { 332 | "pinned_footprint_libs": [], 333 | "pinned_symbol_libs": [] 334 | }, 335 | "meta": { 336 | "filename": "Midi.kicad_pro", 337 | "version": 1 338 | }, 339 | "net_settings": { 340 | "classes": [ 341 | { 342 | "bus_width": 12.0, 343 | "clearance": 0.2, 344 | "diff_pair_gap": 0.25, 345 | "diff_pair_via_gap": 0.25, 346 | "diff_pair_width": 0.2, 347 | "line_style": 0, 348 | "microvia_diameter": 0.3, 349 | "microvia_drill": 0.1, 350 | "name": "Default", 351 | "pcb_color": "rgba(0, 0, 0, 0.000)", 352 | "schematic_color": "rgba(0, 0, 0, 0.000)", 353 | "track_width": 0.25, 354 | "via_diameter": 0.8, 355 | "via_drill": 0.4, 356 | "wire_width": 6.0 357 | } 358 | ], 359 | "meta": { 360 | "version": 2 361 | }, 362 | "net_colors": null 363 | }, 364 | "pcbnew": { 365 | "last_paths": { 366 | "gencad": "", 367 | "idf": "", 368 | "netlist": "", 369 | "specctra_dsn": "", 370 | "step": "", 371 | "vrml": "" 372 | }, 373 | "page_layout_descr_file": "" 374 | }, 375 | "schematic": { 376 | "annotate_start_num": 0, 377 | "drawing": { 378 | "default_line_thickness": 6.0, 379 | "default_text_size": 50.0, 380 | "field_names": [], 381 | "intersheets_ref_own_page": false, 382 | "intersheets_ref_prefix": "", 383 | "intersheets_ref_short": false, 384 | "intersheets_ref_show": false, 385 | "intersheets_ref_suffix": "", 386 | "junction_size_choice": 3, 387 | "label_size_ratio": 0.375, 388 | "pin_symbol_size": 25.0, 389 | "text_offset_ratio": 0.15 390 | }, 391 | "legacy_lib_dir": "", 392 | "legacy_lib_list": [], 393 | "meta": { 394 | "version": 1 395 | }, 396 | "net_format_name": "", 397 | "ngspice": { 398 | "fix_include_paths": true, 399 | "fix_passive_vals": false, 400 | "meta": { 401 | "version": 0 402 | }, 403 | "model_mode": 0, 404 | "workbook_filename": "" 405 | }, 406 | "page_layout_descr_file": "", 407 | "plot_directory": "", 408 | "spice_adjust_passive_values": false, 409 | "spice_external_command": "spice \"%I\"", 410 | "subpart_first_id": 65, 411 | "subpart_id_separator": 0 412 | }, 413 | "sheets": [ 414 | [ 415 | "f7fb952f-bcd4-4b30-a2fd-1b1d9ad205ba", 416 | "" 417 | ] 418 | ], 419 | "text_variables": {} 420 | } 421 | -------------------------------------------------------------------------------- /Hardware/Midi/PCB/Midi/Midi.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch (version 20211123) (generator eeschema) 2 | 3 | (uuid f7fb952f-bcd4-4b30-a2fd-1b1d9ad205ba) 4 | 5 | (paper "A4") 6 | 7 | (title_block 8 | (title "Daisy Seed Development Kit Midi Adapter") 9 | (date "2023-11-05") 10 | (rev "1.0.1") 11 | ) 12 | 13 | (lib_symbols 14 | (symbol "Connector:Conn_01x04_Male" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) 15 | (property "Reference" "J" (id 0) (at 0 5.08 0) 16 | (effects (font (size 1.27 1.27))) 17 | ) 18 | (property "Value" "Conn_01x04_Male" (id 1) (at 0 -7.62 0) 19 | (effects (font (size 1.27 1.27))) 20 | ) 21 | (property "Footprint" "" (id 2) (at 0 0 0) 22 | (effects (font (size 1.27 1.27)) hide) 23 | ) 24 | (property "Datasheet" "~" (id 3) (at 0 0 0) 25 | (effects (font (size 1.27 1.27)) hide) 26 | ) 27 | (property "ki_keywords" "connector" (id 4) (at 0 0 0) 28 | (effects (font (size 1.27 1.27)) hide) 29 | ) 30 | (property "ki_description" "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) 31 | (effects (font (size 1.27 1.27)) hide) 32 | ) 33 | (property "ki_fp_filters" "Connector*:*_1x??_*" (id 6) (at 0 0 0) 34 | (effects (font (size 1.27 1.27)) hide) 35 | ) 36 | (symbol "Conn_01x04_Male_1_1" 37 | (polyline 38 | (pts 39 | (xy 1.27 -5.08) 40 | (xy 0.8636 -5.08) 41 | ) 42 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 43 | (fill (type none)) 44 | ) 45 | (polyline 46 | (pts 47 | (xy 1.27 -2.54) 48 | (xy 0.8636 -2.54) 49 | ) 50 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 51 | (fill (type none)) 52 | ) 53 | (polyline 54 | (pts 55 | (xy 1.27 0) 56 | (xy 0.8636 0) 57 | ) 58 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 59 | (fill (type none)) 60 | ) 61 | (polyline 62 | (pts 63 | (xy 1.27 2.54) 64 | (xy 0.8636 2.54) 65 | ) 66 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 67 | (fill (type none)) 68 | ) 69 | (rectangle (start 0.8636 -4.953) (end 0 -5.207) 70 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 71 | (fill (type outline)) 72 | ) 73 | (rectangle (start 0.8636 -2.413) (end 0 -2.667) 74 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 75 | (fill (type outline)) 76 | ) 77 | (rectangle (start 0.8636 0.127) (end 0 -0.127) 78 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 79 | (fill (type outline)) 80 | ) 81 | (rectangle (start 0.8636 2.667) (end 0 2.413) 82 | (stroke (width 0.1524) (type default) (color 0 0 0 0)) 83 | (fill (type outline)) 84 | ) 85 | (pin passive line (at 5.08 2.54 180) (length 3.81) 86 | (name "Pin_1" (effects (font (size 1.27 1.27)))) 87 | (number "1" (effects (font (size 1.27 1.27)))) 88 | ) 89 | (pin passive line (at 5.08 0 180) (length 3.81) 90 | (name "Pin_2" (effects (font (size 1.27 1.27)))) 91 | (number "2" (effects (font (size 1.27 1.27)))) 92 | ) 93 | (pin passive line (at 5.08 -2.54 180) (length 3.81) 94 | (name "Pin_3" (effects (font (size 1.27 1.27)))) 95 | (number "3" (effects (font (size 1.27 1.27)))) 96 | ) 97 | (pin passive line (at 5.08 -5.08 180) (length 3.81) 98 | (name "Pin_4" (effects (font (size 1.27 1.27)))) 99 | (number "4" (effects (font (size 1.27 1.27)))) 100 | ) 101 | ) 102 | ) 103 | (symbol "Connector:DIN-5_180degree" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) 104 | (property "Reference" "J" (id 0) (at 3.175 5.715 0) 105 | (effects (font (size 1.27 1.27))) 106 | ) 107 | (property "Value" "DIN-5_180degree" (id 1) (at 0 -6.35 0) 108 | (effects (font (size 1.27 1.27))) 109 | ) 110 | (property "Footprint" "" (id 2) (at 0 0 0) 111 | (effects (font (size 1.27 1.27)) hide) 112 | ) 113 | (property "Datasheet" "http://www.mouser.com/ds/2/18/40_c091_abd_e-75918.pdf" (id 3) (at 0 0 0) 114 | (effects (font (size 1.27 1.27)) hide) 115 | ) 116 | (property "ki_keywords" "circular DIN connector stereo audio" (id 4) (at 0 0 0) 117 | (effects (font (size 1.27 1.27)) hide) 118 | ) 119 | (property "ki_description" "5-pin DIN connector (5-pin DIN-5 stereo)" (id 5) (at 0 0 0) 120 | (effects (font (size 1.27 1.27)) hide) 121 | ) 122 | (property "ki_fp_filters" "DIN*" (id 6) (at 0 0 0) 123 | (effects (font (size 1.27 1.27)) hide) 124 | ) 125 | (symbol "DIN-5_180degree_0_1" 126 | (arc (start -5.08 0) (mid -3.8597 -3.3379) (end -0.762 -5.08) 127 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 128 | (fill (type none)) 129 | ) 130 | (circle (center -3.048 0) (radius 0.508) 131 | (stroke (width 0) (type default) (color 0 0 0 0)) 132 | (fill (type none)) 133 | ) 134 | (circle (center -2.286 2.286) (radius 0.508) 135 | (stroke (width 0) (type default) (color 0 0 0 0)) 136 | (fill (type none)) 137 | ) 138 | (polyline 139 | (pts 140 | (xy -5.08 0) 141 | (xy -3.556 0) 142 | ) 143 | (stroke (width 0) (type default) (color 0 0 0 0)) 144 | (fill (type none)) 145 | ) 146 | (polyline 147 | (pts 148 | (xy 0 5.08) 149 | (xy 0 3.81) 150 | ) 151 | (stroke (width 0) (type default) (color 0 0 0 0)) 152 | (fill (type none)) 153 | ) 154 | (polyline 155 | (pts 156 | (xy 5.08 0) 157 | (xy 3.556 0) 158 | ) 159 | (stroke (width 0) (type default) (color 0 0 0 0)) 160 | (fill (type none)) 161 | ) 162 | (polyline 163 | (pts 164 | (xy -5.08 2.54) 165 | (xy -4.318 2.54) 166 | (xy -2.794 2.286) 167 | ) 168 | (stroke (width 0) (type default) (color 0 0 0 0)) 169 | (fill (type none)) 170 | ) 171 | (polyline 172 | (pts 173 | (xy 5.08 2.54) 174 | (xy 4.318 2.54) 175 | (xy 2.794 2.286) 176 | ) 177 | (stroke (width 0) (type default) (color 0 0 0 0)) 178 | (fill (type none)) 179 | ) 180 | (polyline 181 | (pts 182 | (xy -0.762 -4.953) 183 | (xy -0.762 -4.191) 184 | (xy 0.762 -4.191) 185 | (xy 0.762 -4.953) 186 | ) 187 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 188 | (fill (type none)) 189 | ) 190 | (circle (center 0 3.302) (radius 0.508) 191 | (stroke (width 0) (type default) (color 0 0 0 0)) 192 | (fill (type none)) 193 | ) 194 | (arc (start 0.762 -5.08) (mid 3.8673 -3.3444) (end 5.08 0) 195 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 196 | (fill (type none)) 197 | ) 198 | (circle (center 2.286 2.286) (radius 0.508) 199 | (stroke (width 0) (type default) (color 0 0 0 0)) 200 | (fill (type none)) 201 | ) 202 | (circle (center 3.048 0) (radius 0.508) 203 | (stroke (width 0) (type default) (color 0 0 0 0)) 204 | (fill (type none)) 205 | ) 206 | (arc (start 5.08 0) (mid 0 5.08) (end -5.08 0) 207 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 208 | (fill (type none)) 209 | ) 210 | ) 211 | (symbol "DIN-5_180degree_1_1" 212 | (pin passive line (at -7.62 0 0) (length 2.54) 213 | (name "~" (effects (font (size 1.27 1.27)))) 214 | (number "1" (effects (font (size 1.27 1.27)))) 215 | ) 216 | (pin passive line (at 0 7.62 270) (length 2.54) 217 | (name "~" (effects (font (size 1.27 1.27)))) 218 | (number "2" (effects (font (size 1.27 1.27)))) 219 | ) 220 | (pin passive line (at 7.62 0 180) (length 2.54) 221 | (name "~" (effects (font (size 1.27 1.27)))) 222 | (number "3" (effects (font (size 1.27 1.27)))) 223 | ) 224 | (pin passive line (at -7.62 2.54 0) (length 2.54) 225 | (name "~" (effects (font (size 1.27 1.27)))) 226 | (number "4" (effects (font (size 1.27 1.27)))) 227 | ) 228 | (pin passive line (at 7.62 2.54 180) (length 2.54) 229 | (name "~" (effects (font (size 1.27 1.27)))) 230 | (number "5" (effects (font (size 1.27 1.27)))) 231 | ) 232 | ) 233 | ) 234 | (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes) 235 | (property "Reference" "C" (id 0) (at 0.635 2.54 0) 236 | (effects (font (size 1.27 1.27)) (justify left)) 237 | ) 238 | (property "Value" "C" (id 1) (at 0.635 -2.54 0) 239 | (effects (font (size 1.27 1.27)) (justify left)) 240 | ) 241 | (property "Footprint" "" (id 2) (at 0.9652 -3.81 0) 242 | (effects (font (size 1.27 1.27)) hide) 243 | ) 244 | (property "Datasheet" "~" (id 3) (at 0 0 0) 245 | (effects (font (size 1.27 1.27)) hide) 246 | ) 247 | (property "ki_keywords" "cap capacitor" (id 4) (at 0 0 0) 248 | (effects (font (size 1.27 1.27)) hide) 249 | ) 250 | (property "ki_description" "Unpolarized capacitor" (id 5) (at 0 0 0) 251 | (effects (font (size 1.27 1.27)) hide) 252 | ) 253 | (property "ki_fp_filters" "C_*" (id 6) (at 0 0 0) 254 | (effects (font (size 1.27 1.27)) hide) 255 | ) 256 | (symbol "C_0_1" 257 | (polyline 258 | (pts 259 | (xy -2.032 -0.762) 260 | (xy 2.032 -0.762) 261 | ) 262 | (stroke (width 0.508) (type default) (color 0 0 0 0)) 263 | (fill (type none)) 264 | ) 265 | (polyline 266 | (pts 267 | (xy -2.032 0.762) 268 | (xy 2.032 0.762) 269 | ) 270 | (stroke (width 0.508) (type default) (color 0 0 0 0)) 271 | (fill (type none)) 272 | ) 273 | ) 274 | (symbol "C_1_1" 275 | (pin passive line (at 0 3.81 270) (length 2.794) 276 | (name "~" (effects (font (size 1.27 1.27)))) 277 | (number "1" (effects (font (size 1.27 1.27)))) 278 | ) 279 | (pin passive line (at 0 -3.81 90) (length 2.794) 280 | (name "~" (effects (font (size 1.27 1.27)))) 281 | (number "2" (effects (font (size 1.27 1.27)))) 282 | ) 283 | ) 284 | ) 285 | (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) 286 | (property "Reference" "R" (id 0) (at 2.032 0 90) 287 | (effects (font (size 1.27 1.27))) 288 | ) 289 | (property "Value" "R" (id 1) (at 0 0 90) 290 | (effects (font (size 1.27 1.27))) 291 | ) 292 | (property "Footprint" "" (id 2) (at -1.778 0 90) 293 | (effects (font (size 1.27 1.27)) hide) 294 | ) 295 | (property "Datasheet" "~" (id 3) (at 0 0 0) 296 | (effects (font (size 1.27 1.27)) hide) 297 | ) 298 | (property "ki_keywords" "R res resistor" (id 4) (at 0 0 0) 299 | (effects (font (size 1.27 1.27)) hide) 300 | ) 301 | (property "ki_description" "Resistor" (id 5) (at 0 0 0) 302 | (effects (font (size 1.27 1.27)) hide) 303 | ) 304 | (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) 305 | (effects (font (size 1.27 1.27)) hide) 306 | ) 307 | (symbol "R_0_1" 308 | (rectangle (start -1.016 -2.54) (end 1.016 2.54) 309 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 310 | (fill (type none)) 311 | ) 312 | ) 313 | (symbol "R_1_1" 314 | (pin passive line (at 0 3.81 270) (length 1.27) 315 | (name "~" (effects (font (size 1.27 1.27)))) 316 | (number "1" (effects (font (size 1.27 1.27)))) 317 | ) 318 | (pin passive line (at 0 -3.81 90) (length 1.27) 319 | (name "~" (effects (font (size 1.27 1.27)))) 320 | (number "2" (effects (font (size 1.27 1.27)))) 321 | ) 322 | ) 323 | ) 324 | (symbol "Diode:1N4148" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) 325 | (property "Reference" "D" (id 0) (at 0 2.54 0) 326 | (effects (font (size 1.27 1.27))) 327 | ) 328 | (property "Value" "1N4148" (id 1) (at 0 -2.54 0) 329 | (effects (font (size 1.27 1.27))) 330 | ) 331 | (property "Footprint" "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" (id 2) (at 0 -4.445 0) 332 | (effects (font (size 1.27 1.27)) hide) 333 | ) 334 | (property "Datasheet" "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" (id 3) (at 0 0 0) 335 | (effects (font (size 1.27 1.27)) hide) 336 | ) 337 | (property "ki_keywords" "diode" (id 4) (at 0 0 0) 338 | (effects (font (size 1.27 1.27)) hide) 339 | ) 340 | (property "ki_description" "100V 0.15A standard switching diode, DO-35" (id 5) (at 0 0 0) 341 | (effects (font (size 1.27 1.27)) hide) 342 | ) 343 | (property "ki_fp_filters" "D*DO?35*" (id 6) (at 0 0 0) 344 | (effects (font (size 1.27 1.27)) hide) 345 | ) 346 | (symbol "1N4148_0_1" 347 | (polyline 348 | (pts 349 | (xy -1.27 1.27) 350 | (xy -1.27 -1.27) 351 | ) 352 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 353 | (fill (type none)) 354 | ) 355 | (polyline 356 | (pts 357 | (xy 1.27 0) 358 | (xy -1.27 0) 359 | ) 360 | (stroke (width 0) (type default) (color 0 0 0 0)) 361 | (fill (type none)) 362 | ) 363 | (polyline 364 | (pts 365 | (xy 1.27 1.27) 366 | (xy 1.27 -1.27) 367 | (xy -1.27 0) 368 | (xy 1.27 1.27) 369 | ) 370 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 371 | (fill (type none)) 372 | ) 373 | ) 374 | (symbol "1N4148_1_1" 375 | (pin passive line (at -3.81 0 0) (length 2.54) 376 | (name "K" (effects (font (size 1.27 1.27)))) 377 | (number "1" (effects (font (size 1.27 1.27)))) 378 | ) 379 | (pin passive line (at 3.81 0 180) (length 2.54) 380 | (name "A" (effects (font (size 1.27 1.27)))) 381 | (number "2" (effects (font (size 1.27 1.27)))) 382 | ) 383 | ) 384 | ) 385 | (symbol "Isolator:H11L1" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) 386 | (property "Reference" "U" (id 0) (at 1.27 8.89 0) 387 | (effects (font (size 1.27 1.27)) (justify left)) 388 | ) 389 | (property "Value" "H11L1" (id 1) (at 1.27 6.35 0) 390 | (effects (font (size 1.27 1.27)) (justify left)) 391 | ) 392 | (property "Footprint" "" (id 2) (at -2.286 0 0) 393 | (effects (font (size 1.27 1.27)) hide) 394 | ) 395 | (property "Datasheet" "https://www.onsemi.com/pub/Collateral/H11L3M-D.PDF" (id 3) (at -2.286 0 0) 396 | (effects (font (size 1.27 1.27)) hide) 397 | ) 398 | (property "ki_keywords" "High Speed Schmitt Optocoupler" (id 4) (at 0 0 0) 399 | (effects (font (size 1.27 1.27)) hide) 400 | ) 401 | (property "ki_description" "Schmitt Trigger Output Optocoupler, High Speed, DIP-6, 1.6mA turn on threshold" (id 5) (at 0 0 0) 402 | (effects (font (size 1.27 1.27)) hide) 403 | ) 404 | (property "ki_fp_filters" "DIP*W7.62mm* DIP*W10.16mm* SMDIP*W9.53mm*" (id 6) (at 0 0 0) 405 | (effects (font (size 1.27 1.27)) hide) 406 | ) 407 | (symbol "H11L1_0_1" 408 | (rectangle (start -5.08 5.08) (end 5.08 -5.08) 409 | (stroke (width 0.254) (type default) (color 0 0 0 0)) 410 | (fill (type background)) 411 | ) 412 | (polyline 413 | (pts 414 | (xy -4.445 -0.635) 415 | (xy -3.175 -0.635) 416 | ) 417 | (stroke (width 0) (type default) (color 0 0 0 0)) 418 | (fill (type none)) 419 | ) 420 | (polyline 421 | (pts 422 | (xy 0 2.54) 423 | (xy 0 5.08) 424 | ) 425 | (stroke (width 0) (type default) (color 0 0 0 0)) 426 | (fill (type none)) 427 | ) 428 | (polyline 429 | (pts 430 | (xy 0 -2.54) 431 | (xy 0 -5.08) 432 | (xy 0 -3.81) 433 | ) 434 | (stroke (width 0) (type default) (color 0 0 0 0)) 435 | (fill (type none)) 436 | ) 437 | (polyline 438 | (pts 439 | (xy -5.08 -2.54) 440 | (xy -3.81 -2.54) 441 | (xy -3.81 2.54) 442 | (xy -5.08 2.54) 443 | ) 444 | (stroke (width 0) (type default) (color 0 0 0 0)) 445 | (fill (type none)) 446 | ) 447 | (polyline 448 | (pts 449 | (xy -3.81 -0.635) 450 | (xy -4.445 0.635) 451 | (xy -3.175 0.635) 452 | (xy -3.81 -0.635) 453 | ) 454 | (stroke (width 0) (type default) (color 0 0 0 0)) 455 | (fill (type none)) 456 | ) 457 | (polyline 458 | (pts 459 | (xy 1.27 -2.54) 460 | (xy -1.27 -2.54) 461 | (xy -1.27 2.54) 462 | (xy 1.27 2.54) 463 | ) 464 | (stroke (width 0) (type default) (color 0 0 0 0)) 465 | (fill (type none)) 466 | ) 467 | (polyline 468 | (pts 469 | (xy -2.794 -0.508) 470 | (xy -1.524 -0.508) 471 | (xy -1.905 -0.635) 472 | (xy -1.905 -0.381) 473 | (xy -1.524 -0.508) 474 | ) 475 | (stroke (width 0) (type default) (color 0 0 0 0)) 476 | (fill (type none)) 477 | ) 478 | (polyline 479 | (pts 480 | (xy -2.794 0.508) 481 | (xy -1.524 0.508) 482 | (xy -1.905 0.381) 483 | (xy -1.905 0.635) 484 | (xy -1.524 0.508) 485 | ) 486 | (stroke (width 0) (type default) (color 0 0 0 0)) 487 | (fill (type none)) 488 | ) 489 | (arc (start 1.27 -2.54) (mid 3.81 0) (end 1.27 2.54) 490 | (stroke (width 0) (type default) (color 0 0 0 0)) 491 | (fill (type none)) 492 | ) 493 | ) 494 | (symbol "H11L1_1_1" 495 | (pin passive line (at -7.62 2.54 0) (length 2.54) 496 | (name "~" (effects (font (size 1.27 1.27)))) 497 | (number "1" (effects (font (size 1.27 1.27)))) 498 | ) 499 | (pin passive line (at -7.62 -2.54 0) (length 2.54) 500 | (name "~" (effects (font (size 1.27 1.27)))) 501 | (number "2" (effects (font (size 1.27 1.27)))) 502 | ) 503 | (pin no_connect line (at -5.08 0 0) (length 2.54) hide 504 | (name "~" (effects (font (size 1.27 1.27)))) 505 | (number "3" (effects (font (size 1.27 1.27)))) 506 | ) 507 | (pin output inverted (at 7.62 0 180) (length 3.81) 508 | (name "~" (effects (font (size 1.27 1.27)))) 509 | (number "4" (effects (font (size 1.27 1.27)))) 510 | ) 511 | (pin power_in line (at 0 -7.62 90) (length 2.54) 512 | (name "~" (effects (font (size 1.27 1.27)))) 513 | (number "5" (effects (font (size 1.27 1.27)))) 514 | ) 515 | (pin power_in line (at 0 7.62 270) (length 2.54) 516 | (name "~" (effects (font (size 1.27 1.27)))) 517 | (number "6" (effects (font (size 1.27 1.27)))) 518 | ) 519 | ) 520 | ) 521 | (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) 522 | (property "Reference" "#PWR" (id 0) (at 0 -6.35 0) 523 | (effects (font (size 1.27 1.27)) hide) 524 | ) 525 | (property "Value" "GND" (id 1) (at 0 -3.81 0) 526 | (effects (font (size 1.27 1.27))) 527 | ) 528 | (property "Footprint" "" (id 2) (at 0 0 0) 529 | (effects (font (size 1.27 1.27)) hide) 530 | ) 531 | (property "Datasheet" "" (id 3) (at 0 0 0) 532 | (effects (font (size 1.27 1.27)) hide) 533 | ) 534 | (property "ki_keywords" "power-flag" (id 4) (at 0 0 0) 535 | (effects (font (size 1.27 1.27)) hide) 536 | ) 537 | (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0) 538 | (effects (font (size 1.27 1.27)) hide) 539 | ) 540 | (symbol "GND_0_1" 541 | (polyline 542 | (pts 543 | (xy 0 0) 544 | (xy 0 -1.27) 545 | (xy 1.27 -1.27) 546 | (xy 0 -2.54) 547 | (xy -1.27 -1.27) 548 | (xy 0 -1.27) 549 | ) 550 | (stroke (width 0) (type default) (color 0 0 0 0)) 551 | (fill (type none)) 552 | ) 553 | ) 554 | (symbol "GND_1_1" 555 | (pin power_in line (at 0 0 270) (length 0) hide 556 | (name "GND" (effects (font (size 1.27 1.27)))) 557 | (number "1" (effects (font (size 1.27 1.27)))) 558 | ) 559 | ) 560 | ) 561 | ) 562 | 563 | (junction (at 119.38 82.55) (diameter 0) (color 0 0 0 0) 564 | (uuid 0612093c-0a02-49de-9fd4-5baab0098320) 565 | ) 566 | (junction (at 158.75 86.36) (diameter 0) (color 0 0 0 0) 567 | (uuid 11be7e2b-3e5a-4cb8-9a54-daaa8e8a8ce9) 568 | ) 569 | (junction (at 158.75 76.2) (diameter 0) (color 0 0 0 0) 570 | (uuid a1a0bb7f-044b-4bfd-904c-2837e709c1e5) 571 | ) 572 | (junction (at 119.38 90.17) (diameter 0) (color 0 0 0 0) 573 | (uuid e5c5dcba-3cf9-4f94-94f6-db8a6fba81c2) 574 | ) 575 | (junction (at 140.97 76.2) (diameter 0) (color 0 0 0 0) 576 | (uuid e8450d8d-cadb-4b7c-b740-8cb882d93576) 577 | ) 578 | 579 | (wire (pts (xy 140.97 76.2) (xy 158.75 76.2)) 580 | (stroke (width 0) (type default) (color 0 0 0 0)) 581 | (uuid 07ab347f-7d54-4bcd-96c4-9779817acd4f) 582 | ) 583 | (wire (pts (xy 133.35 90.17) (xy 119.38 90.17)) 584 | (stroke (width 0) (type default) (color 0 0 0 0)) 585 | (uuid 3a86aa36-42a9-4708-9388-191555b8930b) 586 | ) 587 | (wire (pts (xy 140.97 93.98) (xy 140.97 99.06)) 588 | (stroke (width 0) (type default) (color 0 0 0 0)) 589 | (uuid 3c65857a-cd94-4bda-aed7-27a2de6a0cfe) 590 | ) 591 | (wire (pts (xy 158.75 76.2) (xy 166.37 76.2)) 592 | (stroke (width 0) (type default) (color 0 0 0 0)) 593 | (uuid 4916a88e-fb76-4dff-a66d-d3179caf0db5) 594 | ) 595 | (wire (pts (xy 158.75 85.09) (xy 158.75 86.36)) 596 | (stroke (width 0) (type default) (color 0 0 0 0)) 597 | (uuid 4ada1248-076f-425a-b9c0-923a33046e12) 598 | ) 599 | (wire (pts (xy 124.46 130.81) (xy 120.65 130.81)) 600 | (stroke (width 0) (type default) (color 0 0 0 0)) 601 | (uuid 4db45ad4-b031-4bf1-919e-9f49ab971d97) 602 | ) 603 | (wire (pts (xy 119.38 78.74) (xy 119.38 82.55)) 604 | (stroke (width 0) (type default) (color 0 0 0 0)) 605 | (uuid 53a5d7ca-5eb4-4229-bff6-03025b2e1825) 606 | ) 607 | (wire (pts (xy 132.08 130.81) (xy 135.89 130.81)) 608 | (stroke (width 0) (type default) (color 0 0 0 0)) 609 | (uuid 5f0d9e5d-227b-4380-b89c-22bc39929b82) 610 | ) 611 | (wire (pts (xy 158.75 77.47) (xy 158.75 76.2)) 612 | (stroke (width 0) (type default) (color 0 0 0 0)) 613 | (uuid 6202bf99-521d-4ecf-9a2b-07af72df692c) 614 | ) 615 | (wire (pts (xy 148.59 86.36) (xy 158.75 86.36)) 616 | (stroke (width 0) (type default) (color 0 0 0 0)) 617 | (uuid 6ae204cf-afb0-4791-9d87-1cfd25883f7b) 618 | ) 619 | (wire (pts (xy 119.38 93.98) (xy 119.38 90.17)) 620 | (stroke (width 0) (type default) (color 0 0 0 0)) 621 | (uuid 892772c7-4405-4e28-8783-dd55815af31a) 622 | ) 623 | (wire (pts (xy 133.35 88.9) (xy 133.35 90.17)) 624 | (stroke (width 0) (type default) (color 0 0 0 0)) 625 | (uuid 8938562a-31ec-4385-ae1e-1fb582ff6563) 626 | ) 627 | (wire (pts (xy 158.75 86.36) (xy 166.37 86.36)) 628 | (stroke (width 0) (type default) (color 0 0 0 0)) 629 | (uuid 8ba31da7-9195-4839-b5bd-1c19e4a99261) 630 | ) 631 | (wire (pts (xy 63.5 53.34) (xy 63.5 62.23)) 632 | (stroke (width 0) (type default) (color 0 0 0 0)) 633 | (uuid 997235da-2027-4465-af30-ee949d107f71) 634 | ) 635 | (wire (pts (xy 132.08 115.57) (xy 135.89 115.57)) 636 | (stroke (width 0) (type default) (color 0 0 0 0)) 637 | (uuid 9bb3baba-7048-435a-9a3c-0ee21441fd9e) 638 | ) 639 | (wire (pts (xy 180.34 76.2) (xy 173.99 76.2)) 640 | (stroke (width 0) (type default) (color 0 0 0 0)) 641 | (uuid a462eea4-6717-40ad-94c0-bf5c78e55b6f) 642 | ) 643 | (wire (pts (xy 133.35 83.82) (xy 133.35 82.55)) 644 | (stroke (width 0) (type default) (color 0 0 0 0)) 645 | (uuid c818cf54-f22f-4a71-b0fa-f218217319ea) 646 | ) 647 | (wire (pts (xy 140.97 76.2) (xy 140.97 78.74)) 648 | (stroke (width 0) (type default) (color 0 0 0 0)) 649 | (uuid cff96414-ebe6-4d30-9620-9e1f89b4283d) 650 | ) 651 | (wire (pts (xy 140.97 69.85) (xy 140.97 76.2)) 652 | (stroke (width 0) (type default) (color 0 0 0 0)) 653 | (uuid d54a0a91-6459-4079-a93d-d2c6abde871a) 654 | ) 655 | (wire (pts (xy 120.65 115.57) (xy 124.46 115.57)) 656 | (stroke (width 0) (type default) (color 0 0 0 0)) 657 | (uuid d7026a80-b3cf-4363-92f5-b3b893e3e69a) 658 | ) 659 | (wire (pts (xy 99.06 93.98) (xy 119.38 93.98)) 660 | (stroke (width 0) (type default) (color 0 0 0 0)) 661 | (uuid f05e2d20-98bd-4971-b175-532834dcbfdf) 662 | ) 663 | (wire (pts (xy 99.06 78.74) (xy 105.41 78.74)) 664 | (stroke (width 0) (type default) (color 0 0 0 0)) 665 | (uuid fa0b28c6-23f8-40ad-aa5f-f477c50b23c1) 666 | ) 667 | (wire (pts (xy 113.03 78.74) (xy 119.38 78.74)) 668 | (stroke (width 0) (type default) (color 0 0 0 0)) 669 | (uuid fc9b3a92-91d8-4dc6-896d-26023ff41752) 670 | ) 671 | (wire (pts (xy 133.35 82.55) (xy 119.38 82.55)) 672 | (stroke (width 0) (type default) (color 0 0 0 0)) 673 | (uuid fd986f7f-7354-4595-aa15-7da60ed9746e) 674 | ) 675 | 676 | (global_label "USART1_TX" (shape input) (at 135.89 130.81 0) (fields_autoplaced) 677 | (effects (font (size 1.27 1.27)) (justify left)) 678 | (uuid 1bc090fc-c505-4d80-9268-599c095eb060) 679 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 148.5236 130.8894 0) 680 | (effects (font (size 1.27 1.27)) (justify left) hide) 681 | ) 682 | ) 683 | (global_label "USART1_RX" (shape input) (at 166.37 86.36 0) (fields_autoplaced) 684 | (effects (font (size 1.27 1.27)) (justify left)) 685 | (uuid 3d5707f9-32ce-453b-b17b-20bcd4becb4f) 686 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 179.306 86.2806 0) 687 | (effects (font (size 1.27 1.27)) (justify left) hide) 688 | ) 689 | ) 690 | (global_label "3V3_D" (shape input) (at 66.04 53.34 270) (fields_autoplaced) 691 | (effects (font (size 1.27 1.27)) (justify right)) 692 | (uuid 43ac517d-a381-4b20-b5e2-db37c92b1013) 693 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 66.1194 61.4983 90) 694 | (effects (font (size 1.27 1.27)) (justify right) hide) 695 | ) 696 | ) 697 | (global_label "3V3_D" (shape input) (at 135.89 115.57 0) (fields_autoplaced) 698 | (effects (font (size 1.27 1.27)) (justify left)) 699 | (uuid 5756dfb3-25af-4db6-90f9-652b14e9658b) 700 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 144.0483 115.4906 0) 701 | (effects (font (size 1.27 1.27)) (justify left) hide) 702 | ) 703 | ) 704 | (global_label "3V3_D" (shape input) (at 140.97 69.85 90) (fields_autoplaced) 705 | (effects (font (size 1.27 1.27)) (justify left)) 706 | (uuid 95e259f9-21be-4cd4-9cc0-72de55b77b14) 707 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 141.0494 61.6917 90) 708 | (effects (font (size 1.27 1.27)) (justify left) hide) 709 | ) 710 | ) 711 | (global_label "USART1_RX" (shape input) (at 71.12 53.34 270) (fields_autoplaced) 712 | (effects (font (size 1.27 1.27)) (justify right)) 713 | (uuid bb87ae06-7437-41ea-91fd-71fa7fea1cac) 714 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 71.0406 66.276 90) 715 | (effects (font (size 1.27 1.27)) (justify right) hide) 716 | ) 717 | ) 718 | (global_label "USART1_TX" (shape input) (at 68.58 53.34 270) (fields_autoplaced) 719 | (effects (font (size 1.27 1.27)) (justify right)) 720 | (uuid d1b4910c-0fed-4ddc-880e-5be472997318) 721 | (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 68.5006 65.9736 90) 722 | (effects (font (size 1.27 1.27)) (justify right) hide) 723 | ) 724 | ) 725 | 726 | (symbol (lib_id "Device:C") (at 170.18 76.2 90) (unit 1) 727 | (in_bom yes) (on_board yes) (fields_autoplaced) 728 | (uuid 062e0a59-c19a-4dc0-91f5-dc635ece2111) 729 | (property "Reference" "C1" (id 0) (at 170.18 68.58 90)) 730 | (property "Value" "100nF" (id 1) (at 170.18 71.12 90)) 731 | (property "Footprint" "Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm" (id 2) (at 173.99 75.2348 0) 732 | (effects (font (size 1.27 1.27)) hide) 733 | ) 734 | (property "Datasheet" "~" (id 3) (at 170.18 76.2 0) 735 | (effects (font (size 1.27 1.27)) hide) 736 | ) 737 | (pin "1" (uuid 7e06dcda-03b3-440d-bcb6-6c1462df67f6)) 738 | (pin "2" (uuid ec358314-c9a5-44e6-96ac-e577e343bfc0)) 739 | ) 740 | 741 | (symbol (lib_id "Connector:Conn_01x04_Male") (at 68.58 48.26 270) (unit 1) 742 | (in_bom yes) (on_board yes) (fields_autoplaced) 743 | (uuid 170cf31c-3b60-40c1-903c-aa459a97e28d) 744 | (property "Reference" "J1" (id 0) (at 67.31 43.18 90)) 745 | (property "Value" "Conn_01x04_Male" (id 1) (at 67.31 45.72 90)) 746 | (property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" (id 2) (at 68.58 48.26 0) 747 | (effects (font (size 1.27 1.27)) hide) 748 | ) 749 | (property "Datasheet" "~" (id 3) (at 68.58 48.26 0) 750 | (effects (font (size 1.27 1.27)) hide) 751 | ) 752 | (pin "1" (uuid 9c1cf3e5-b93c-4238-9e8a-77b81f652a1b)) 753 | (pin "2" (uuid 29200840-fbdd-42fa-a1c2-cd4af1f73743)) 754 | (pin "3" (uuid f41b160c-c265-4a5f-ad01-a8c8e621c7a4)) 755 | (pin "4" (uuid 83fb85ae-23cb-4f79-8300-0d57d28a8ebe)) 756 | ) 757 | 758 | (symbol (lib_id "Connector:DIN-5_180degree") (at 96.52 86.36 270) (unit 1) 759 | (in_bom yes) (on_board yes) (fields_autoplaced) 760 | (uuid 2adbad2b-46af-4caa-a651-e9f024a9fb8b) 761 | (property "Reference" "J2" (id 0) (at 90.17 85.09 90) 762 | (effects (font (size 1.27 1.27)) (justify right)) 763 | ) 764 | (property "Value" "DIN-5_180degree" (id 1) (at 90.17 87.63 90) 765 | (effects (font (size 1.27 1.27)) (justify right)) 766 | ) 767 | (property "Footprint" "Eurocad.pretty:MIDI_DIN5" (id 2) (at 96.52 86.36 0) 768 | (effects (font (size 1.27 1.27)) hide) 769 | ) 770 | (property "Datasheet" "http://www.mouser.com/ds/2/18/40_c091_abd_e-75918.pdf" (id 3) (at 96.52 86.36 0) 771 | (effects (font (size 1.27 1.27)) hide) 772 | ) 773 | (pin "1" (uuid 4497622e-6a35-4d56-b145-e61873b6a125)) 774 | (pin "2" (uuid 5f3f0408-a3b0-4f22-91e2-9a024ab006ab)) 775 | (pin "3" (uuid fc98aaf7-0aba-4c7e-a96d-56e31c31a588)) 776 | (pin "4" (uuid 372eb80c-116e-4b19-abae-92abb6d35e81)) 777 | (pin "5" (uuid e4da03fa-98df-4f6e-905c-6338b6b66b7e)) 778 | ) 779 | 780 | (symbol (lib_id "Connector:DIN-5_180degree") (at 118.11 123.19 270) (unit 1) 781 | (in_bom yes) (on_board yes) (fields_autoplaced) 782 | (uuid 3d733b25-5cee-4d59-9cb7-1953bb39af72) 783 | (property "Reference" "J3" (id 0) (at 111.76 121.92 90) 784 | (effects (font (size 1.27 1.27)) (justify right)) 785 | ) 786 | (property "Value" "DIN-5_180degree" (id 1) (at 111.76 124.46 90) 787 | (effects (font (size 1.27 1.27)) (justify right)) 788 | ) 789 | (property "Footprint" "Eurocad.pretty:MIDI_DIN5" (id 2) (at 118.11 123.19 0) 790 | (effects (font (size 1.27 1.27)) hide) 791 | ) 792 | (property "Datasheet" "http://www.mouser.com/ds/2/18/40_c091_abd_e-75918.pdf" (id 3) (at 118.11 123.19 0) 793 | (effects (font (size 1.27 1.27)) hide) 794 | ) 795 | (pin "1" (uuid eeb00682-903b-41d4-84db-dcacf513014c)) 796 | (pin "2" (uuid 95c6b157-c871-406b-9357-d6d62a988028)) 797 | (pin "3" (uuid 4f99b75b-c058-4e96-8e47-252616931857)) 798 | (pin "4" (uuid b63b87ac-de64-4b22-b699-358288a52753)) 799 | (pin "5" (uuid 6e0fdf37-e5f3-4fab-95c3-69336685068e)) 800 | ) 801 | 802 | (symbol (lib_id "Device:R") (at 158.75 81.28 0) (unit 1) 803 | (in_bom yes) (on_board yes) (fields_autoplaced) 804 | (uuid 4277933d-0f9a-4ef1-9ccc-747689ef9fff) 805 | (property "Reference" "R2" (id 0) (at 161.29 80.0099 0) 806 | (effects (font (size 1.27 1.27)) (justify left)) 807 | ) 808 | (property "Value" "270R" (id 1) (at 161.29 82.5499 0) 809 | (effects (font (size 1.27 1.27)) (justify left)) 810 | ) 811 | (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 156.972 81.28 90) 812 | (effects (font (size 1.27 1.27)) hide) 813 | ) 814 | (property "Datasheet" "~" (id 3) (at 158.75 81.28 0) 815 | (effects (font (size 1.27 1.27)) hide) 816 | ) 817 | (pin "1" (uuid 76c25498-4baa-4cc7-8d56-dd27c91c3135)) 818 | (pin "2" (uuid d965cff8-b99f-460d-93a7-200ff1e95eea)) 819 | ) 820 | 821 | (symbol (lib_id "power:GND") (at 180.34 76.2 90) (unit 1) 822 | (in_bom yes) (on_board yes) 823 | (uuid 50373455-4641-4045-b675-4656342b87f1) 824 | (property "Reference" "#PWR0102" (id 0) (at 186.69 76.2 0) 825 | (effects (font (size 1.27 1.27)) hide) 826 | ) 827 | (property "Value" "GND" (id 1) (at 184.15 76.2 0)) 828 | (property "Footprint" "" (id 2) (at 180.34 76.2 0) 829 | (effects (font (size 1.27 1.27)) hide) 830 | ) 831 | (property "Datasheet" "" (id 3) (at 180.34 76.2 0) 832 | (effects (font (size 1.27 1.27)) hide) 833 | ) 834 | (pin "1" (uuid 7e5d7cec-8cee-45a5-8130-44bcf0b0f426)) 835 | ) 836 | 837 | (symbol (lib_id "Device:R") (at 128.27 115.57 270) (unit 1) 838 | (in_bom yes) (on_board yes) (fields_autoplaced) 839 | (uuid a7373fd8-d500-4ed1-8142-da14395749ab) 840 | (property "Reference" "R4" (id 0) (at 128.27 109.22 90)) 841 | (property "Value" "33R" (id 1) (at 128.27 111.76 90)) 842 | (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 128.27 113.792 90) 843 | (effects (font (size 1.27 1.27)) hide) 844 | ) 845 | (property "Datasheet" "~" (id 3) (at 128.27 115.57 0) 846 | (effects (font (size 1.27 1.27)) hide) 847 | ) 848 | (pin "1" (uuid 453d4861-6f23-4806-90a7-7fbf2de453c5)) 849 | (pin "2" (uuid 6f0674ca-16dd-4cc0-93cb-54fe2bb482b8)) 850 | ) 851 | 852 | (symbol (lib_id "Isolator:H11L1") (at 140.97 86.36 0) (unit 1) 853 | (in_bom yes) (on_board yes) (fields_autoplaced) 854 | (uuid a9a3949f-3b88-4ee9-9d63-323ea39385cc) 855 | (property "Reference" "U1" (id 0) (at 151.13 81.915 0)) 856 | (property "Value" "H11L1" (id 1) (at 151.13 84.455 0)) 857 | (property "Footprint" "Package_DIP:DIP-6_W7.62mm_Socket" (id 2) (at 138.684 86.36 0) 858 | (effects (font (size 1.27 1.27)) hide) 859 | ) 860 | (property "Datasheet" "https://www.onsemi.com/pub/Collateral/H11L3M-D.PDF" (id 3) (at 138.684 86.36 0) 861 | (effects (font (size 1.27 1.27)) hide) 862 | ) 863 | (pin "1" (uuid 48c7aff1-6fad-47b7-aad6-c496eaafd957)) 864 | (pin "2" (uuid f4b4a581-f2d6-42d8-8a87-6accac9df908)) 865 | (pin "3" (uuid b0dee2b8-3226-4af5-b309-35c0b2b03a8f)) 866 | (pin "4" (uuid defc52f3-a79d-4fee-9483-8e542a7ce323)) 867 | (pin "5" (uuid bc896bca-8dc0-400e-b412-247e96b1da54)) 868 | (pin "6" (uuid 915e872b-3957-4474-aed7-a063ecf72d07)) 869 | ) 870 | 871 | (symbol (lib_id "Diode:1N4148") (at 119.38 86.36 270) (unit 1) 872 | (in_bom yes) (on_board yes) (fields_autoplaced) 873 | (uuid cab262f1-651e-4159-9fe5-9cf601884cf1) 874 | (property "Reference" "D1" (id 0) (at 121.92 85.0899 90) 875 | (effects (font (size 1.27 1.27)) (justify left)) 876 | ) 877 | (property "Value" "1N4148" (id 1) (at 121.92 87.6299 90) 878 | (effects (font (size 1.27 1.27)) (justify left)) 879 | ) 880 | (property "Footprint" "Diode_THT:D_DO-35_SOD27_P10.16mm_Horizontal" (id 2) (at 114.935 86.36 0) 881 | (effects (font (size 1.27 1.27)) hide) 882 | ) 883 | (property "Datasheet" "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" (id 3) (at 119.38 86.36 0) 884 | (effects (font (size 1.27 1.27)) hide) 885 | ) 886 | (pin "1" (uuid 0f92cc3e-089a-48c2-ad88-acb1be5aeade)) 887 | (pin "2" (uuid a1a45997-8f92-499d-b158-7cb68439c53d)) 888 | ) 889 | 890 | (symbol (lib_id "power:GND") (at 140.97 99.06 0) (unit 1) 891 | (in_bom yes) (on_board yes) 892 | (uuid d94d4834-daa7-4cac-9ea9-a50d50b4bc29) 893 | (property "Reference" "#PWR0101" (id 0) (at 140.97 105.41 0) 894 | (effects (font (size 1.27 1.27)) hide) 895 | ) 896 | (property "Value" "GND" (id 1) (at 140.97 102.87 0)) 897 | (property "Footprint" "" (id 2) (at 140.97 99.06 0) 898 | (effects (font (size 1.27 1.27)) hide) 899 | ) 900 | (property "Datasheet" "" (id 3) (at 140.97 99.06 0) 901 | (effects (font (size 1.27 1.27)) hide) 902 | ) 903 | (pin "1" (uuid 23affca0-7f24-4136-a3df-58aa38a22062)) 904 | ) 905 | 906 | (symbol (lib_id "Device:R") (at 109.22 78.74 270) (unit 1) 907 | (in_bom yes) (on_board yes) (fields_autoplaced) 908 | (uuid e206aa41-4b6f-474b-8b1a-d5d67a696a05) 909 | (property "Reference" "R1" (id 0) (at 109.22 72.39 90)) 910 | (property "Value" "220R" (id 1) (at 109.22 74.93 90)) 911 | (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 109.22 76.962 90) 912 | (effects (font (size 1.27 1.27)) hide) 913 | ) 914 | (property "Datasheet" "~" (id 3) (at 109.22 78.74 0) 915 | (effects (font (size 1.27 1.27)) hide) 916 | ) 917 | (pin "1" (uuid cbd6b0fd-e527-4b78-a900-d4b5a90d6cf3)) 918 | (pin "2" (uuid d47260f7-ab28-4d2c-8eeb-5f9c2ba21edb)) 919 | ) 920 | 921 | (symbol (lib_id "power:GND") (at 63.5 62.23 0) (mirror y) (unit 1) 922 | (in_bom yes) (on_board yes) 923 | (uuid f22b095a-e97c-4ca0-8ce1-25c4e5ac7717) 924 | (property "Reference" "#PWR0103" (id 0) (at 63.5 68.58 0) 925 | (effects (font (size 1.27 1.27)) hide) 926 | ) 927 | (property "Value" "GND" (id 1) (at 63.5 66.04 0)) 928 | (property "Footprint" "" (id 2) (at 63.5 62.23 0) 929 | (effects (font (size 1.27 1.27)) hide) 930 | ) 931 | (property "Datasheet" "" (id 3) (at 63.5 62.23 0) 932 | (effects (font (size 1.27 1.27)) hide) 933 | ) 934 | (pin "1" (uuid 2504cc0d-ee65-4a5d-a054-124ead3526ee)) 935 | ) 936 | 937 | (symbol (lib_id "Device:R") (at 128.27 130.81 270) (unit 1) 938 | (in_bom yes) (on_board yes) (fields_autoplaced) 939 | (uuid fcbcdd15-05fb-4dc7-b9bf-cc93ce8068a4) 940 | (property "Reference" "R3" (id 0) (at 128.27 124.46 90)) 941 | (property "Value" "10R" (id 1) (at 128.27 127 90)) 942 | (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 128.27 129.032 90) 943 | (effects (font (size 1.27 1.27)) hide) 944 | ) 945 | (property "Datasheet" "~" (id 3) (at 128.27 130.81 0) 946 | (effects (font (size 1.27 1.27)) hide) 947 | ) 948 | (pin "1" (uuid d0f289dc-4143-4354-9d8e-494d5a8e06df)) 949 | (pin "2" (uuid b18cbc94-0994-42c3-942d-5fd0083a1008)) 950 | ) 951 | 952 | (sheet_instances 953 | (path "/" (page "1")) 954 | ) 955 | 956 | (symbol_instances 957 | (path "/d94d4834-daa7-4cac-9ea9-a50d50b4bc29" 958 | (reference "#PWR0101") (unit 1) (value "GND") (footprint "") 959 | ) 960 | (path "/50373455-4641-4045-b675-4656342b87f1" 961 | (reference "#PWR0102") (unit 1) (value "GND") (footprint "") 962 | ) 963 | (path "/f22b095a-e97c-4ca0-8ce1-25c4e5ac7717" 964 | (reference "#PWR0103") (unit 1) (value "GND") (footprint "") 965 | ) 966 | (path "/062e0a59-c19a-4dc0-91f5-dc635ece2111" 967 | (reference "C1") (unit 1) (value "100nF") (footprint "Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mm") 968 | ) 969 | (path "/cab262f1-651e-4159-9fe5-9cf601884cf1" 970 | (reference "D1") (unit 1) (value "1N4148") (footprint "Diode_THT:D_DO-35_SOD27_P10.16mm_Horizontal") 971 | ) 972 | (path "/170cf31c-3b60-40c1-903c-aa459a97e28d" 973 | (reference "J1") (unit 1) (value "Conn_01x04_Male") (footprint "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical") 974 | ) 975 | (path "/2adbad2b-46af-4caa-a651-e9f024a9fb8b" 976 | (reference "J2") (unit 1) (value "DIN-5_180degree") (footprint "Eurocad.pretty:MIDI_DIN5") 977 | ) 978 | (path "/3d733b25-5cee-4d59-9cb7-1953bb39af72" 979 | (reference "J3") (unit 1) (value "DIN-5_180degree") (footprint "Eurocad.pretty:MIDI_DIN5") 980 | ) 981 | (path "/e206aa41-4b6f-474b-8b1a-d5d67a696a05" 982 | (reference "R1") (unit 1) (value "220R") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") 983 | ) 984 | (path "/4277933d-0f9a-4ef1-9ccc-747689ef9fff" 985 | (reference "R2") (unit 1) (value "270R") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") 986 | ) 987 | (path "/fcbcdd15-05fb-4dc7-b9bf-cc93ce8068a4" 988 | (reference "R3") (unit 1) (value "10R") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") 989 | ) 990 | (path "/a7373fd8-d500-4ed1-8142-da14395749ab" 991 | (reference "R4") (unit 1) (value "33R") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") 992 | ) 993 | (path "/a9a3949f-3b88-4ee9-9d63-323ea39385cc" 994 | (reference "U1") (unit 1) (value "H11L1") (footprint "Package_DIP:DIP-6_W7.62mm_Socket") 995 | ) 996 | ) 997 | ) 998 | -------------------------------------------------------------------------------- /Hardware/Midi/Test/MidiInTest/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = MidiInTest 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | MidiInTest.cpp 7 | 8 | # Core location, and generic Makefile. 9 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 10 | include $(SYSTEM_FILES_DIR)/Makefile 11 | -------------------------------------------------------------------------------- /Hardware/Midi/Test/MidiInTest/MidiInTest.cpp: -------------------------------------------------------------------------------- 1 | #include "daisysp.h" 2 | #include "daisy_seed.h" 3 | 4 | using namespace daisysp; 5 | using namespace daisy; 6 | 7 | static DaisySeed hardware; 8 | MidiUartHandler midi; 9 | Oscillator mainOsc; 10 | Adsr adsr; 11 | bool gate; 12 | int midiChannel; 13 | 14 | static void AudioCallback(AudioHandle::InterleavingInputBuffer in, 15 | AudioHandle::InterleavingOutputBuffer out, 16 | size_t size) 17 | { 18 | float oscillatorOut, adsrOut; 19 | 20 | for (size_t i = 0; i < size; i += 2) 21 | { 22 | adsrOut = adsr.Process(gate); 23 | mainOsc.SetAmp(adsrOut / 10); 24 | oscillatorOut = mainOsc.Process(); 25 | out[i] = oscillatorOut; 26 | out[i + 1] = oscillatorOut; 27 | } 28 | } 29 | 30 | void InitOscillator(float sampleRate) 31 | { 32 | mainOsc.Init(sampleRate); 33 | mainOsc.SetWaveform(Oscillator::WAVE_POLYBLEP_TRI); 34 | mainOsc.SetAmp(0.1); 35 | } 36 | 37 | void InitAdsr(float sampleRate) 38 | { 39 | adsr.Init(sampleRate); 40 | adsr.SetTime(ADSR_SEG_ATTACK, .01); 41 | adsr.SetTime(ADSR_SEG_DECAY, .1); 42 | adsr.SetTime(ADSR_SEG_RELEASE, .1); 43 | adsr.SetSustainLevel(.1); 44 | } 45 | 46 | void InitMidi() 47 | { 48 | MidiUartHandler::Config midiConfig; 49 | midi.Init(midiConfig); 50 | midiChannel = 0; 51 | } 52 | 53 | void HandleMidiMessage(MidiEvent m) 54 | { 55 | if (m.channel == midiChannel) 56 | { 57 | switch (m.type) 58 | { 59 | case NoteOn: 60 | { 61 | NoteOnEvent p = m.AsNoteOn(); 62 | 63 | if (m.data[1] != 0) 64 | { 65 | p = m.AsNoteOn(); 66 | gate = true; 67 | mainOsc.SetFreq(mtof(p.note)); 68 | } 69 | 70 | break; 71 | } 72 | case NoteOff: 73 | { 74 | gate = false; 75 | break; 76 | } 77 | default: 78 | break; 79 | } 80 | } 81 | } 82 | 83 | int main(void) 84 | { 85 | hardware.Configure(); 86 | hardware.Init(); 87 | float sampleRate = hardware.AudioSampleRate(); 88 | InitOscillator(sampleRate); 89 | InitAdsr(sampleRate); 90 | InitMidi(); 91 | hardware.StartAudio(AudioCallback); 92 | midi.StartReceive(); 93 | 94 | while (1) 95 | { 96 | midi.Listen(); 97 | 98 | while (midi.HasEvents()) 99 | { 100 | HandleMidiMessage(midi.PopEvent()); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Hardware/Midi/Test/MidiInTest/README.md: -------------------------------------------------------------------------------- 1 | # MidiInTest 2 | 3 | This tests and demonstrates the MIDI receive functionality. 4 | 5 | ## Hardware Setup 6 | 7 | Connect the MIDI port of the Breakout Board to the 3.3V MIDI Adapter, connect a sequencer transmitting MIDI messages to the MIDI IN socket of the MIDI adapter to the MIDI OUT socket of the sequencer. Ensure the sequencer is transmitting on channel 1. For now, it only works with monophonic sequences. 8 | 9 | ## Build & Run 10 | 11 | In the terminal, navigate to this folder and type: `make clean; make; make program-dfu;`; As soon as the code is loaded onto the Daisy Seed and the Seed has booted, you should here the notes being played. 12 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Drivers/PotentiometerArray.cpp: -------------------------------------------------------------------------------- 1 | #include "PotentiometerArray.h" 2 | #include "daisysp.h" 3 | #include "daisy_seed.h" 4 | 5 | namespace developmentKit::hardware::potentiometerArray::drivers 6 | { 7 | using namespace daisysp; 8 | using namespace daisy; 9 | 10 | void PotentiometerArray::Init() 11 | { 12 | adcConfig[0].InitMux(seed->GetPin(MUX1_COM_PIN), 8, seed->GetPin(MUX_S0_PIN), seed->GetPin(MUX_S1_PIN), seed->GetPin(MUX_S2_PIN)); 13 | adcConfig[1].InitMux(seed->GetPin(MUX2_COM_PIN), 8, seed->GetPin(MUX_S0_PIN), seed->GetPin(MUX_S1_PIN), seed->GetPin(MUX_S2_PIN)); 14 | seed->adc.Init(adcConfig, 2); 15 | 16 | for (int i = 0; i < POTENTIOMETER_COUNT; i++) 17 | { 18 | analogControl[i].Init(&rawReading[i], this->seed->AudioCallbackRate()); 19 | } 20 | } 21 | 22 | void PotentiometerArray::Process() 23 | { 24 | for (int muxIx = 0; muxIx < 2; muxIx++) 25 | { 26 | for (int muxPotIx = 0; muxPotIx < 8; muxPotIx++) 27 | { 28 | int globalPotIx = inputToIndexMapping[muxIx][muxPotIx]; 29 | rawReading[globalPotIx] = seed->adc.GetMux(muxIx, muxPotIx); 30 | analogControl[globalPotIx].Process(); 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Drivers/PotentiometerArray.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef POTENTIOMETER_ARRAY 3 | #define POTENTIOMETER_ARRAY 4 | 5 | #define POTENTIOMETER_COUNT 16 6 | #define MUX1_COM_PIN 18 7 | #define MUX2_COM_PIN 17 8 | #define MUX_S0_PIN 19 9 | #define MUX_S1_PIN 20 10 | #define MUX_S2_PIN 21 11 | 12 | #include "daisysp.h" 13 | #include "daisy_seed.h" 14 | 15 | namespace developmentKit::hardware::potentiometerArray::drivers 16 | { 17 | using namespace daisysp; 18 | using namespace daisy; 19 | 20 | class PotentiometerArray 21 | { 22 | public: 23 | void Init(); 24 | void Process(); 25 | void Poll(); 26 | DaisySeed *seed; 27 | AnalogControl analogControl[POTENTIOMETER_COUNT]; 28 | 29 | private: 30 | const uint8_t inputToIndexMapping[2][8] = {{1, 2, 3, 0, 4, 7, 5, 6}, {10, 9, 8, 11, 12, 15, 13, 14}}; 31 | uint16_t rawReading[POTENTIOMETER_COUNT]; 32 | AdcChannelConfig adcConfig[2]; 33 | }; 34 | } 35 | 36 | #endif -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/PCB/BOM.txt: -------------------------------------------------------------------------------- 1 | IC1, IC2 - 2 x CD4051 DIP analogue multiplexers 2 | IC1, IC2 - 2 x 14 pin DIP sockets 3 | R1 - R16 - 16 x Bourns PTV09A-4025U-B104 potentiometer 4 | J1 - 1 x JST PH2.54 8 male connector 5 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/PCB/PotentiometerArray/PotentiometerArray.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "design_settings": { 4 | "defaults": { 5 | "board_outline_line_width": 0.1, 6 | "copper_line_width": 0.2, 7 | "copper_text_size_h": 1.5, 8 | "copper_text_size_v": 1.5, 9 | "copper_text_thickness": 0.3, 10 | "other_line_width": 0.15, 11 | "silk_line_width": 0.15, 12 | "silk_text_size_h": 1.0, 13 | "silk_text_size_v": 1.0, 14 | "silk_text_thickness": 0.15 15 | }, 16 | "diff_pair_dimensions": [], 17 | "drc_exclusions": [], 18 | "rules": { 19 | "min_copper_edge_clearance": 0.0, 20 | "solder_mask_clearance": 0.0, 21 | "solder_mask_min_width": 0.0 22 | }, 23 | "track_widths": [], 24 | "via_dimensions": [] 25 | }, 26 | "layer_presets": [] 27 | }, 28 | "boards": [], 29 | "cvpcb": { 30 | "equivalence_files": [] 31 | }, 32 | "erc": { 33 | "erc_exclusions": [], 34 | "meta": { 35 | "version": 0 36 | }, 37 | "pin_map": [ 38 | [ 39 | 0, 40 | 0, 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 1, 46 | 0, 47 | 0, 48 | 0, 49 | 0, 50 | 2 51 | ], 52 | [ 53 | 0, 54 | 2, 55 | 0, 56 | 1, 57 | 0, 58 | 0, 59 | 1, 60 | 0, 61 | 2, 62 | 2, 63 | 2, 64 | 2 65 | ], 66 | [ 67 | 0, 68 | 0, 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 1, 74 | 0, 75 | 1, 76 | 0, 77 | 1, 78 | 2 79 | ], 80 | [ 81 | 0, 82 | 1, 83 | 0, 84 | 0, 85 | 0, 86 | 0, 87 | 1, 88 | 1, 89 | 2, 90 | 1, 91 | 1, 92 | 2 93 | ], 94 | [ 95 | 0, 96 | 0, 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 1, 102 | 0, 103 | 0, 104 | 0, 105 | 0, 106 | 2 107 | ], 108 | [ 109 | 0, 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 2 121 | ], 122 | [ 123 | 1, 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 0, 129 | 1, 130 | 1, 131 | 1, 132 | 1, 133 | 1, 134 | 2 135 | ], 136 | [ 137 | 0, 138 | 0, 139 | 0, 140 | 1, 141 | 0, 142 | 0, 143 | 1, 144 | 0, 145 | 0, 146 | 0, 147 | 0, 148 | 2 149 | ], 150 | [ 151 | 0, 152 | 2, 153 | 1, 154 | 2, 155 | 0, 156 | 0, 157 | 1, 158 | 0, 159 | 2, 160 | 2, 161 | 2, 162 | 2 163 | ], 164 | [ 165 | 0, 166 | 2, 167 | 0, 168 | 1, 169 | 0, 170 | 0, 171 | 1, 172 | 0, 173 | 2, 174 | 0, 175 | 0, 176 | 2 177 | ], 178 | [ 179 | 0, 180 | 2, 181 | 1, 182 | 1, 183 | 0, 184 | 0, 185 | 1, 186 | 0, 187 | 2, 188 | 0, 189 | 0, 190 | 2 191 | ], 192 | [ 193 | 2, 194 | 2, 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2 205 | ] 206 | ], 207 | "rule_severities": { 208 | "bus_definition_conflict": "error", 209 | "bus_entry_needed": "error", 210 | "bus_label_syntax": "error", 211 | "bus_to_bus_conflict": "error", 212 | "bus_to_net_conflict": "error", 213 | "different_unit_footprint": "error", 214 | "different_unit_net": "error", 215 | "duplicate_reference": "error", 216 | "duplicate_sheet_names": "error", 217 | "extra_units": "error", 218 | "global_label_dangling": "warning", 219 | "hier_label_mismatch": "error", 220 | "label_dangling": "error", 221 | "lib_symbol_issues": "warning", 222 | "multiple_net_names": "warning", 223 | "net_not_bus_member": "warning", 224 | "no_connect_connected": "warning", 225 | "no_connect_dangling": "warning", 226 | "pin_not_connected": "error", 227 | "pin_not_driven": "error", 228 | "pin_to_pin": "warning", 229 | "power_pin_not_driven": "error", 230 | "similar_labels": "warning", 231 | "unannotated": "error", 232 | "unit_value_mismatch": "error", 233 | "unresolved_variable": "error", 234 | "wire_dangling": "error" 235 | } 236 | }, 237 | "libraries": { 238 | "pinned_footprint_libs": [], 239 | "pinned_symbol_libs": [] 240 | }, 241 | "meta": { 242 | "filename": "PotentiometerArray.kicad_pro", 243 | "version": 1 244 | }, 245 | "net_settings": { 246 | "classes": [ 247 | { 248 | "bus_width": 12.0, 249 | "clearance": 0.2, 250 | "diff_pair_gap": 0.25, 251 | "diff_pair_via_gap": 0.25, 252 | "diff_pair_width": 0.2, 253 | "line_style": 0, 254 | "microvia_diameter": 0.3, 255 | "microvia_drill": 0.1, 256 | "name": "Default", 257 | "pcb_color": "rgba(0, 0, 0, 0.000)", 258 | "schematic_color": "rgba(0, 0, 0, 0.000)", 259 | "track_width": 0.25, 260 | "via_diameter": 0.8, 261 | "via_drill": 0.4, 262 | "wire_width": 6.0 263 | } 264 | ], 265 | "meta": { 266 | "version": 2 267 | }, 268 | "net_colors": null 269 | }, 270 | "pcbnew": { 271 | "last_paths": { 272 | "gencad": "", 273 | "idf": "", 274 | "netlist": "", 275 | "specctra_dsn": "", 276 | "step": "", 277 | "vrml": "" 278 | }, 279 | "page_layout_descr_file": "" 280 | }, 281 | "schematic": { 282 | "annotate_start_num": 0, 283 | "drawing": { 284 | "default_line_thickness": 6.0, 285 | "default_text_size": 50.0, 286 | "field_names": [], 287 | "intersheets_ref_own_page": false, 288 | "intersheets_ref_prefix": "", 289 | "intersheets_ref_short": false, 290 | "intersheets_ref_show": false, 291 | "intersheets_ref_suffix": "", 292 | "junction_size_choice": 3, 293 | "label_size_ratio": 0.375, 294 | "pin_symbol_size": 25.0, 295 | "text_offset_ratio": 0.15 296 | }, 297 | "legacy_lib_dir": "", 298 | "legacy_lib_list": [], 299 | "meta": { 300 | "version": 1 301 | }, 302 | "net_format_name": "", 303 | "ngspice": { 304 | "fix_include_paths": true, 305 | "fix_passive_vals": false, 306 | "meta": { 307 | "version": 0 308 | }, 309 | "model_mode": 0, 310 | "workbook_filename": "" 311 | }, 312 | "page_layout_descr_file": "", 313 | "plot_directory": "", 314 | "spice_adjust_passive_values": false, 315 | "spice_external_command": "spice \"%I\"", 316 | "subpart_first_id": 65, 317 | "subpart_id_separator": 0 318 | }, 319 | "sheets": [ 320 | [ 321 | "fffbe5d9-ab4f-4620-8b07-dfed6958ef21", 322 | "" 323 | ] 324 | ], 325 | "text_variables": {} 326 | } 327 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Tests/MultipleValueTest/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = MultipleValueTest 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | MultipleValueTest.cpp \ 7 | ../../Drivers/PotentiometerArray.cpp 8 | 9 | # Core location, and generic Makefile. 10 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 11 | include $(SYSTEM_FILES_DIR)/Makefile 12 | 13 | LDFLAGS += -u _printf_float 14 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Tests/MultipleValueTest/MultipleValueTest.cpp: -------------------------------------------------------------------------------- 1 | #include "daisysp.h" 2 | #include "daisy_seed.h" 3 | #include "../../Drivers/PotentiometerArray.h" 4 | 5 | using namespace daisysp; 6 | using namespace daisy; 7 | using namespace developmentKit::hardware::potentiometerArray::drivers; 8 | 9 | static DaisySeed hardware; 10 | PotentiometerArray potentiometerArray; 11 | Parameter param0, param1, param2, param3; 12 | float param0Value, param1Value, param2Value, param3Value; 13 | 14 | static void AudioCallback(AudioHandle::InterleavingInputBuffer in, 15 | AudioHandle::InterleavingOutputBuffer out, 16 | size_t size) 17 | { 18 | potentiometerArray.Process(); 19 | param0Value = param0.Process(); 20 | param1Value = param1.Process(); 21 | param2Value = param2.Process(); 22 | param3Value = param3.Process(); 23 | } 24 | 25 | void InitPotentiometerArray() 26 | { 27 | potentiometerArray.seed = &hardware; 28 | potentiometerArray.Init(); 29 | } 30 | 31 | void InitParameters(float sampleRate) 32 | { 33 | param0.Init(potentiometerArray.analogControl[0], 0, 1.0f, Parameter::LINEAR); 34 | param1.Init(potentiometerArray.analogControl[1], 0, 1.0f, Parameter::LINEAR); 35 | param2.Init(potentiometerArray.analogControl[2], 0, 1.0f, Parameter::LINEAR); 36 | param3.Init(potentiometerArray.analogControl[3], 0, 1.0f, Parameter::LINEAR); 37 | } 38 | 39 | int main(void) 40 | { 41 | hardware.Configure(); 42 | hardware.Init(); 43 | hardware.StartLog(false); 44 | float sampleRate = hardware.AudioSampleRate(); 45 | InitPotentiometerArray(); 46 | InitParameters(sampleRate); 47 | hardware.adc.Start(); 48 | hardware.StartAudio(AudioCallback); 49 | 50 | while (1) 51 | { 52 | hardware.Print("p1:%3.5f ", param0Value); 53 | hardware.Print("p2:%3.5f ", param1Value); 54 | hardware.Print("p3:%3.5f ", param2Value); 55 | hardware.Print("p4:%3.5f ", param3Value); 56 | hardware.PrintLine(""); 57 | System::Delay(1000); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Tests/SingleValueTest/Makefile: -------------------------------------------------------------------------------- 1 | # Project Name 2 | TARGET = SingleValueTest 3 | 4 | # Sources 5 | CPP_SOURCES = \ 6 | SingleValueTest.cpp 7 | 8 | # Core location, and generic Makefile. 9 | SYSTEM_FILES_DIR = $(LIBDAISY_DIR)/core 10 | include $(SYSTEM_FILES_DIR)/Makefile 11 | -------------------------------------------------------------------------------- /Hardware/PotentiometerArray/Tests/SingleValueTest/SingleValueTest.cpp: -------------------------------------------------------------------------------- 1 | #include "daisysp.h" 2 | #include "daisy_seed.h" 3 | 4 | using namespace daisysp; 5 | using namespace daisy; 6 | 7 | static DaisySeed hardware; 8 | 9 | AnalogControl knob; 10 | Parameter param; 11 | 12 | static void AudioCallback(AudioHandle::InterleavingInputBuffer in, 13 | AudioHandle::InterleavingOutputBuffer out, 14 | size_t size) 15 | { 16 | } 17 | 18 | int main(void) 19 | { 20 | hardware.Configure(); 21 | hardware.Init(); 22 | hardware.StartLog(false); 23 | 24 | dsy_gpio s0; 25 | s0.pin = hardware.GetPin(19); 26 | s0.mode = DSY_GPIO_MODE_OUTPUT_PP; 27 | s0.pull = DSY_GPIO_NOPULL; 28 | dsy_gpio_init(&s0); 29 | dsy_gpio_write(&s0, true); 30 | 31 | dsy_gpio s1; 32 | s1.pin = hardware.GetPin(20); 33 | s1.mode = DSY_GPIO_MODE_OUTPUT_PP; 34 | s1.pull = DSY_GPIO_NOPULL; 35 | dsy_gpio_init(&s1); 36 | dsy_gpio_write(&s1, true); 37 | 38 | dsy_gpio s2; 39 | s2.pin = hardware.GetPin(21); 40 | s2.mode = DSY_GPIO_MODE_OUTPUT_PP; 41 | s2.pull = DSY_GPIO_NOPULL; 42 | dsy_gpio_init(&s2); 43 | dsy_gpio_write(&s2, true); 44 | 45 | AdcChannelConfig adcConfig; 46 | adcConfig.InitSingle(hardware.GetPin(18)); 47 | hardware.adc.Init(&adcConfig, 1); 48 | hardware.adc.Start(); 49 | 50 | while (1) 51 | { 52 | int val = hardware.adc.Get(0); 53 | hardware.PrintLine("Value: %d", val); 54 | System::Delay(1000); 55 | } 56 | } -------------------------------------------------------------------------------- /Library/UiFramework/Display.cpp: -------------------------------------------------------------------------------- 1 | #include "Display.h" 2 | #include "./Presenters/NavigationPageItem.h" 3 | #include "./Presenters/NumericSettingsPageItem.h" 4 | #include "./Presenters/OptionsSettingsPageItem.h" 5 | #include "./Presenters/Option.h" 6 | #include "./Presenters/ListPage.h" 7 | 8 | namespace developmentKit::library::uiFramework 9 | { 10 | using namespace developmentKit::library::uiFramework::presenters; 11 | 12 | void Display::Increment() 13 | { 14 | currentPage->Increment(); 15 | } 16 | 17 | void Display::Decrement() 18 | { 19 | currentPage->Decrement(); 20 | } 21 | 22 | void Display::Select() 23 | { 24 | currentPage->Select(); 25 | } 26 | 27 | Page *Display::GetCurrentPage() 28 | { 29 | return currentPage; 30 | } 31 | 32 | void Display::SetCurrentPage(Page *newCurrentPage) 33 | { 34 | currentPage = newCurrentPage; 35 | } 36 | 37 | void Display::SetHomePage(Page *newHomePage) 38 | { 39 | homePage = newHomePage; 40 | } 41 | 42 | void Display::Paint() 43 | { 44 | currentPage->Paint(); 45 | } 46 | } -------------------------------------------------------------------------------- /Library/UiFramework/Display.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef DISPLAY_H 3 | #define DISPLAY_H 4 | 5 | #include "./Presenters/Page.h" 6 | #include 7 | #include 8 | 9 | namespace developmentKit::library::uiFramework 10 | { 11 | using namespace developmentKit::library::uiFramework::presenters; 12 | 13 | class Display 14 | { 15 | public: 16 | Display() {} 17 | ~Display () {} 18 | void Increment(); 19 | void Decrement(); 20 | void Select(); 21 | void SetPage(Page *newPage); 22 | Page *GetCurrentPage(); 23 | void SetCurrentPage(Page *newCurrentPage); 24 | void SetHomePage(Page *newHomePage); 25 | void Paint(); 26 | 27 | private: 28 | Page *homePage; 29 | Page *currentPage; 30 | }; 31 | } 32 | 33 | #endif -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/ListPage.cpp: -------------------------------------------------------------------------------- 1 | #include "ListPage.h" 2 | #include "PageItem.h" 3 | #include "Page.h" 4 | #include "../View/View.h" 5 | 6 | namespace developmentKit::library::uiFramework::presenters 7 | { 8 | ListPage::ListPage(View *prmView) 9 | { 10 | currentIndex = 0; 11 | itemSelected = false; 12 | view = prmView; 13 | } 14 | 15 | void ListPage::Increment() 16 | { 17 | if (itemSelected) 18 | { 19 | items[currentIndex]->Increment(); 20 | } 21 | else 22 | { 23 | if (currentIndex < items.size() - 1) 24 | { 25 | currentIndex++; 26 | } 27 | } 28 | } 29 | 30 | void ListPage::Decrement() 31 | { 32 | if (itemSelected) 33 | { 34 | items[currentIndex]->Decrement(); 35 | } 36 | else 37 | { 38 | if (currentIndex > 0) 39 | { 40 | currentIndex--; 41 | } 42 | } 43 | } 44 | 45 | void ListPage::Select() 46 | { 47 | items[currentIndex]->Select(); 48 | } 49 | 50 | PageItem *ListPage::GetItem(unsigned int index) 51 | { 52 | return items[index]; 53 | } 54 | 55 | void ListPage::AddItem(PageItem *pageItem) 56 | { 57 | items.push_back(pageItem); 58 | } 59 | 60 | unsigned int ListPage::ItemsCount() 61 | { 62 | return items.size(); 63 | } 64 | 65 | unsigned int ListPage::GetCurrentIndex() 66 | { 67 | return currentIndex; 68 | } 69 | 70 | bool ListPage::GetItemSelected() 71 | { 72 | return itemSelected; 73 | } 74 | 75 | void ListPage::ToggleItemSelected() 76 | { 77 | itemSelected = !itemSelected; 78 | } 79 | 80 | void ListPage::Paint() 81 | { 82 | view->Paint(); 83 | } 84 | } -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/ListPage.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef LIST_PAGE_H 3 | #define LIST_PAGE_H 4 | 5 | #include 6 | #include 7 | #include "PageItem.h" 8 | #include "Page.h" 9 | #include "../View/View.h" 10 | 11 | using namespace std; 12 | 13 | namespace developmentKit::library::uiFramework::presenters 14 | { 15 | using namespace developmentKit::library::uiFramework::view; 16 | 17 | class ListPage : public Page 18 | { 19 | public: 20 | ListPage(View *prmView); 21 | ~ListPage() {} 22 | virtual void Increment(); 23 | virtual void Decrement(); 24 | virtual void Select(); 25 | PageItem *GetItem(unsigned int index); 26 | void AddItem(PageItem *pageItem); 27 | unsigned int ItemsCount(); 28 | unsigned int GetCurrentIndex(); 29 | bool GetItemSelected(); 30 | void ToggleItemSelected(); 31 | void Paint(); 32 | 33 | private: 34 | vector items; 35 | unsigned int currentIndex; 36 | bool itemSelected; 37 | View *view; 38 | }; 39 | } 40 | 41 | #endif -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/NavigationPageItem.cpp: -------------------------------------------------------------------------------- 1 | #include "../Display.h" 2 | #include "NavigationPageItem.h" 3 | #include 4 | 5 | namespace developmentKit::library::uiFramework::presenters 6 | { 7 | using namespace std; 8 | using namespace developmentKit::library::uiFramework; 9 | 10 | NavigationPageItem::NavigationPageItem(string prmTitle, Page *prmNext, Display *prmRoot) 11 | { 12 | title = prmTitle; 13 | next = prmNext; 14 | root = prmRoot; 15 | } 16 | 17 | void NavigationPageItem::Increment() 18 | { 19 | } 20 | 21 | void NavigationPageItem::Decrement() 22 | { 23 | } 24 | 25 | string NavigationPageItem::GetTitle() 26 | { 27 | return title; 28 | } 29 | 30 | void NavigationPageItem::Select() 31 | { 32 | root->SetCurrentPage(next); 33 | } 34 | 35 | PageItem::PageItemType NavigationPageItem::GetType() 36 | { 37 | return PageItemType::NAVIGATION_PAGE_ITEM; 38 | } 39 | } -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/NavigationPageItem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef NAVIGATION_PAGE_ITEM_H 3 | #define NAVIGATION_PAGE_ITEM_H 4 | 5 | #include 6 | #include 7 | #include "Page.h" 8 | #include "PageItem.h" 9 | 10 | using namespace std; 11 | 12 | namespace developmentKit::library::uiFramework 13 | { 14 | class Display; 15 | } 16 | 17 | namespace developmentKit::library::uiFramework::presenters 18 | { 19 | class NavigationPageItem : public PageItem 20 | { 21 | public: 22 | NavigationPageItem(string prmTitle, Page *prmNext, Display *prmRoot); 23 | ~NavigationPageItem() {} 24 | void Increment(); 25 | void Decrement(); 26 | void Select(); 27 | string GetTitle(); 28 | PageItemType GetType(); 29 | 30 | private: 31 | Page *next; 32 | Display *root; 33 | string title; 34 | }; 35 | } 36 | 37 | #endif -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/NumericSettingsPageItem.cpp: -------------------------------------------------------------------------------- 1 | #include "NumericSettingsPageItem.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | namespace developmentKit::library::uiFramework::presenters 7 | { 8 | NumericSettingsPageItem::NumericSettingsPageItem(string prmTitle, ListPage *prmParent, int prmMin, int prmMax, int prmDefault) 9 | { 10 | title = prmTitle; 11 | parent = prmParent; 12 | value = prmDefault; 13 | min = prmMin; 14 | max = prmMax; 15 | } 16 | 17 | void NumericSettingsPageItem::Increment() 18 | { 19 | if (value < max) 20 | { 21 | value++; 22 | } 23 | } 24 | 25 | void NumericSettingsPageItem::Decrement() 26 | { 27 | if (value > min) 28 | { 29 | value--; 30 | } 31 | } 32 | 33 | string NumericSettingsPageItem::GetValueAsString() 34 | { 35 | char buffer[6]; 36 | sprintf(buffer, "%d", value); 37 | return buffer; 38 | } 39 | 40 | string NumericSettingsPageItem::GetTitle() 41 | { 42 | return title; 43 | } 44 | 45 | PageItem::PageItemType NumericSettingsPageItem::GetType() 46 | { 47 | return PageItemType::NUMERIC_SETTINGS_PAGE_ITEM; 48 | } 49 | 50 | int NumericSettingsPageItem::GetValue() 51 | { 52 | return value; 53 | } 54 | 55 | int NumericSettingsPageItem::GetMin() 56 | { 57 | return min; 58 | } 59 | 60 | int NumericSettingsPageItem::GetMax() 61 | { 62 | return max; 63 | } 64 | } -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/NumericSettingsPageItem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef NUMERIC_SETTINGS_PAGE_ITEM_H 3 | #define NUMERIC_SETTINGS_PAGE_ITEM_H 4 | 5 | #include 6 | #include 7 | #include "SettingsPageItem.h" 8 | #include "../Utilities/UiParameterProvider.h" 9 | 10 | namespace developmentKit::library::uiFramework::presenters 11 | { 12 | using namespace std; 13 | using namespace developmentKit::library::uiFramework::utilities; 14 | 15 | class NumericSettingsPageItem : public SettingsPageItem, public UiParameterProvider 16 | { 17 | public: 18 | NumericSettingsPageItem(string prmTitle, ListPage *prmParent, int prmMin, int prmMax, int prmDefault); 19 | ~NumericSettingsPageItem() {} 20 | void Increment(); 21 | void Decrement(); 22 | string GetValueAsString(); 23 | string GetTitle(); 24 | PageItemType GetType(); 25 | int GetValue(); 26 | int GetMin(); 27 | int GetMax(); 28 | 29 | private: 30 | string title; 31 | int value; 32 | int min; 33 | int max; 34 | }; 35 | } 36 | 37 | #endif -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/Option.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef OPTION_H 3 | #define OPTION_H 4 | 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | namespace developmentKit::library::uiFramework::presenters 11 | { 12 | class Option 13 | { 14 | public: 15 | Option() {} 16 | ~Option() {} 17 | string title; 18 | unsigned int value; 19 | }; 20 | } 21 | 22 | #endif -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/OptionsSettingsPageItem.cpp: -------------------------------------------------------------------------------- 1 | #include "OptionsSettingsPageItem.h" 2 | #include "Option.h" 3 | #include 4 | 5 | using namespace std; 6 | 7 | namespace developmentKit::library::uiFramework::presenters 8 | { 9 | OptionsSettingsPageItem::OptionsSettingsPageItem(string prmTitle, ListPage *prmParent) 10 | { 11 | title = prmTitle; 12 | currentIndex = 0; 13 | parent = prmParent; 14 | } 15 | 16 | void OptionsSettingsPageItem::Increment() 17 | { 18 | if (currentIndex < options.size() - 1) 19 | { 20 | currentIndex++; 21 | } 22 | } 23 | 24 | void OptionsSettingsPageItem::Decrement() 25 | { 26 | if (currentIndex > 0) 27 | { 28 | currentIndex--; 29 | } 30 | } 31 | 32 | string OptionsSettingsPageItem::GetValueAsString() 33 | { 34 | return options[currentIndex].title; 35 | } 36 | 37 | void OptionsSettingsPageItem::AddOption(string title, int value) 38 | { 39 | Option option; 40 | option.title = title; 41 | option.value = value; 42 | options.push_back(option); 43 | } 44 | 45 | string OptionsSettingsPageItem::GetTitle() 46 | { 47 | return title; 48 | } 49 | 50 | PageItem::PageItemType OptionsSettingsPageItem::GetType() 51 | { 52 | return PageItemType::OPTIONS_SETTINGS_PAGE_ITEM; 53 | } 54 | 55 | unsigned int OptionsSettingsPageItem::GetValue() 56 | { 57 | return options[currentIndex].value; 58 | } 59 | } -------------------------------------------------------------------------------- /Library/UiFramework/Presenters/OptionsSettingsPageItem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifndef OPTIONS_SETTINGS_PAGE_ITEM_H 3 | #define OPTIONS_SETTINGS_PAGE_ITEM_H 4 | 5 | //#include "ListPage.h" 6 | #include "SettingsPageItem.h" 7 | #include "Option.h" 8 | #include 9 | #include 10 | 11 | using namespace std; 12 | 13 | namespace developmentKit::library::uiFramework::presenters 14 | { 15 | class OptionsSettingsPageItem : public SettingsPageItem 16 | { 17 | public: 18 | OptionsSettingsPageItem(string prmTitle, ListPage *prmParent); 19 | ~OptionsSettingsPageItem() {} 20 | void Increment(); 21 | void Decrement(); 22 | string GetValueAsString(); 23 | void AddOption(string title, int value); 24 | string GetTitle(); 25 | PageItemType GetType(); 26 | unsigned int GetValue(); 27 | 28 | private: 29 | string title; 30 | vector