Browse Source

Initial import: kempston mod pinout

Daniele Lacamera 4 months ago
commit
94866bb676
100 changed files with 9964 additions and 0 deletions
  1. 22 0
      .gitignore
  2. 298 0
      CMakeDoxyfile.in
  3. 717 0
      CMakeDoxygenDefaults.cmake
  4. 28 0
      CMakeLists.txt
  5. 1848 0
      Makefile
  6. 55 0
      cmake_install.cmake
  7. 4 0
      pico-sdk/.github/pull_request_template.md
  8. 49 0
      pico-sdk/.github/workflows/cmake.yml
  9. 5 0
      pico-sdk/.gitignore
  10. 3 0
      pico-sdk/.gitmodules
  11. 16 0
      pico-sdk/CMakeFiles/CMakeDirectoryInformation.cmake
  12. 1 0
      pico-sdk/CMakeFiles/progress.marks
  13. 57 0
      pico-sdk/CMakeLists.txt
  14. 25 0
      pico-sdk/CONTRIBUTING.md
  15. 21 0
      pico-sdk/LICENSE.TXT
  16. 140 0
      pico-sdk/Makefile
  17. 158 0
      pico-sdk/README.md
  18. 4 0
      pico-sdk/cmake/Platform/PICO.cmake
  19. 29 0
      pico-sdk/cmake/pico_pre_load_platform.cmake
  20. 43 0
      pico-sdk/cmake/pico_pre_load_toolchain.cmake
  21. 28 0
      pico-sdk/cmake/pico_utils.cmake
  22. 0 0
      pico-sdk/cmake/preload/platforms/host.cmake
  23. 7 0
      pico-sdk/cmake/preload/platforms/pico/pico.cmake
  24. 1 0
      pico-sdk/cmake/preload/platforms/rp2040.cmake
  25. 31 0
      pico-sdk/cmake/preload/toolchains/find_compiler.cmake
  26. 53 0
      pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake
  27. 52 0
      pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake
  28. 67 0
      pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake
  29. 47 0
      pico-sdk/cmake_install.cmake
  30. 16 0
      pico-sdk/docs/CMakeFiles/CMakeDirectoryInformation.cmake
  31. 1 0
      pico-sdk/docs/CMakeFiles/progress.marks
  32. 59 0
      pico-sdk/docs/CMakeLists.txt
  33. 63 0
      pico-sdk/docs/Doxyfile.in
  34. 246 0
      pico-sdk/docs/DoxygenLayout.xml
  35. 140 0
      pico-sdk/docs/Makefile
  36. 39 0
      pico-sdk/docs/cmake_install.cmake
  37. 21 0
      pico-sdk/docs/examples.md
  38. 5 0
      pico-sdk/docs/footer.html
  39. 64 0
      pico-sdk/docs/header.html
  40. 90 0
      pico-sdk/docs/index.h
  41. 29 0
      pico-sdk/docs/logo-mobile.svg
  42. 213 0
      pico-sdk/docs/logo.svg
  43. 105 0
      pico-sdk/docs/main.css
  44. 17 0
      pico-sdk/docs/main.js
  45. 28 0
      pico-sdk/docs/mainpage.md
  46. 447 0
      pico-sdk/docs/normalise.css
  47. BIN
      pico-sdk/docs/pico.jpg
  48. BIN
      pico-sdk/docs/rp2040.png
  49. 1 0
      pico-sdk/docs/search.svg
  50. 703 0
      pico-sdk/docs/styles.css
  51. 31 0
      pico-sdk/docs/weblinks_page.md
  52. 73 0
      pico-sdk/external/pico_sdk_import.cmake
  53. 25 0
      pico-sdk/lib/tinyusb/.gitattributes
  54. 74 0
      pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/bug_report.yml
  55. 4 0
      pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/config.yml
  56. 14 0
      pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/feature_request.md
  57. 5 0
      pico-sdk/lib/tinyusb/.github/pull_request_template.md
  58. 159 0
      pico-sdk/lib/tinyusb/.github/workflows/build.yml
  59. 48 0
      pico-sdk/lib/tinyusb/.github/workflows/build_esp.yml
  60. 64 0
      pico-sdk/lib/tinyusb/.github/workflows/build_msp430.yml
  61. 65 0
      pico-sdk/lib/tinyusb/.github/workflows/build_renesas.yml
  62. 65 0
      pico-sdk/lib/tinyusb/.github/workflows/build_riscv.yml
  63. 58 0
      pico-sdk/lib/tinyusb/.github/workflows/trigger.yml
  64. 28 0
      pico-sdk/lib/tinyusb/.gitignore
  65. 129 0
      pico-sdk/lib/tinyusb/.gitmodules
  66. 18 0
      pico-sdk/lib/tinyusb/.readthedocs.yaml
  67. 88 0
      pico-sdk/lib/tinyusb/CODE_OF_CONDUCT.rst
  68. 192 0
      pico-sdk/lib/tinyusb/CONTRIBUTORS.rst
  69. 21 0
      pico-sdk/lib/tinyusb/LICENSE
  70. 141 0
      pico-sdk/lib/tinyusb/README.rst
  71. 18 0
      pico-sdk/lib/tinyusb/docs/assets/logo.svg
  72. 0 0
      pico-sdk/lib/tinyusb/docs/assets/stack.svg
  73. 42 0
      pico-sdk/lib/tinyusb/docs/conf.py
  74. 1 0
      pico-sdk/lib/tinyusb/docs/contributing/code_of_conduct.rst
  75. 23 0
      pico-sdk/lib/tinyusb/docs/contributing/index.rst
  76. 241 0
      pico-sdk/lib/tinyusb/docs/contributing/porting.rst
  77. 59 0
      pico-sdk/lib/tinyusb/docs/contributing/structure.rst
  78. 25 0
      pico-sdk/lib/tinyusb/docs/index.rst
  79. 621 0
      pico-sdk/lib/tinyusb/docs/info/changelog.rst
  80. 1 0
      pico-sdk/lib/tinyusb/docs/info/contributors.rst
  81. 13 0
      pico-sdk/lib/tinyusb/docs/info/index.rst
  82. 17 0
      pico-sdk/lib/tinyusb/docs/info/uses.rst
  83. 42 0
      pico-sdk/lib/tinyusb/docs/reference/concurrency.rst
  84. 198 0
      pico-sdk/lib/tinyusb/docs/reference/getting_started.rst
  85. 59 0
      pico-sdk/lib/tinyusb/docs/reference/index.rst
  86. 344 0
      pico-sdk/lib/tinyusb/docs/reference/supported.rst
  87. 4 0
      pico-sdk/lib/tinyusb/docs/requirements.txt
  88. 14 0
      pico-sdk/lib/tinyusb/examples/device/99-tinyusb.rules
  89. 1 0
      pico-sdk/lib/tinyusb/examples/device/CMakeFiles/cmake.check_cache
  90. 28 0
      pico-sdk/lib/tinyusb/examples/device/CMakeLists.txt
  91. 0 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMD11
  92. 0 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAME5X
  93. 0 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMG
  94. 28 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/CMakeLists.txt
  95. 12 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/Makefile
  96. 458 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/main.c
  97. 34 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/plot_audio_samples.py
  98. 118 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h
  99. 165 0
      pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c
  100. 0 0
      pico-sdk/lib/tinyusb/examples/device/audio_test/.skip.MCU_SAMD11

+ 22 - 0
.gitignore

@@ -0,0 +1,22 @@
+tags
+build
+CMakeFiles
+core
+elf2uf2
+*.o
+*.bin
+*.hex
+*.elf
+*.uf2
+*.dis
+*.map
+*.pem
+*.der
+*.csr
+
+src/cert.c
+
+
+CMakeCache.txt
+elf2uf2/boot_uf2_headers/CMakeFiles
+generated

+ 298 - 0
CMakeDoxyfile.in

@@ -0,0 +1,298 @@
+#
+# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
+#
+
+DOXYFILE_ENCODING      = @DOXYGEN_DOXYFILE_ENCODING@
+PROJECT_NAME           = @DOXYGEN_PROJECT_NAME@
+PROJECT_NUMBER         = @DOXYGEN_PROJECT_NUMBER@
+PROJECT_BRIEF          = @DOXYGEN_PROJECT_BRIEF@
+PROJECT_LOGO           = @DOXYGEN_PROJECT_LOGO@
+OUTPUT_DIRECTORY       = @DOXYGEN_OUTPUT_DIRECTORY@
+CREATE_SUBDIRS         = @DOXYGEN_CREATE_SUBDIRS@
+CREATE_SUBDIRS_LEVEL   = @DOXYGEN_CREATE_SUBDIRS_LEVEL@
+ALLOW_UNICODE_NAMES    = @DOXYGEN_ALLOW_UNICODE_NAMES@
+OUTPUT_LANGUAGE        = @DOXYGEN_OUTPUT_LANGUAGE@
+BRIEF_MEMBER_DESC      = @DOXYGEN_BRIEF_MEMBER_DESC@
+REPEAT_BRIEF           = @DOXYGEN_REPEAT_BRIEF@
+ABBREVIATE_BRIEF       = @DOXYGEN_ABBREVIATE_BRIEF@
+ALWAYS_DETAILED_SEC    = @DOXYGEN_ALWAYS_DETAILED_SEC@
+INLINE_INHERITED_MEMB  = @DOXYGEN_INLINE_INHERITED_MEMB@
+FULL_PATH_NAMES        = @DOXYGEN_FULL_PATH_NAMES@
+STRIP_FROM_PATH        = @DOXYGEN_STRIP_FROM_PATH@
+STRIP_FROM_INC_PATH    = @DOXYGEN_STRIP_FROM_INC_PATH@
+SHORT_NAMES            = @DOXYGEN_SHORT_NAMES@
+JAVADOC_AUTOBRIEF      = @DOXYGEN_JAVADOC_AUTOBRIEF@
+JAVADOC_BANNER         = @DOXYGEN_JAVADOC_BANNER@
+QT_AUTOBRIEF           = @DOXYGEN_QT_AUTOBRIEF@
+MULTILINE_CPP_IS_BRIEF = @DOXYGEN_MULTILINE_CPP_IS_BRIEF@
+PYTHON_DOCSTRING       = @DOXYGEN_PYTHON_DOCSTRING@
+INHERIT_DOCS           = @DOXYGEN_INHERIT_DOCS@
+SEPARATE_MEMBER_PAGES  = @DOXYGEN_SEPARATE_MEMBER_PAGES@
+TAB_SIZE               = @DOXYGEN_TAB_SIZE@
+ALIASES                = @DOXYGEN_ALIASES@
+OPTIMIZE_OUTPUT_FOR_C  = @DOXYGEN_OPTIMIZE_OUTPUT_FOR_C@
+OPTIMIZE_OUTPUT_JAVA   = @DOXYGEN_OPTIMIZE_OUTPUT_JAVA@
+OPTIMIZE_FOR_FORTRAN   = @DOXYGEN_OPTIMIZE_FOR_FORTRAN@
+OPTIMIZE_OUTPUT_VHDL   = @DOXYGEN_OPTIMIZE_OUTPUT_VHDL@
+OPTIMIZE_OUTPUT_SLICE  = @DOXYGEN_OPTIMIZE_OUTPUT_SLICE@
+EXTENSION_MAPPING      = @DOXYGEN_EXTENSION_MAPPING@
+MARKDOWN_SUPPORT       = @DOXYGEN_MARKDOWN_SUPPORT@
+TOC_INCLUDE_HEADINGS   = @DOXYGEN_TOC_INCLUDE_HEADINGS@
+MARKDOWN_ID_STYLE      = @DOXYGEN_MARKDOWN_ID_STYLE@
+AUTOLINK_SUPPORT       = @DOXYGEN_AUTOLINK_SUPPORT@
+BUILTIN_STL_SUPPORT    = @DOXYGEN_BUILTIN_STL_SUPPORT@
+CPP_CLI_SUPPORT        = @DOXYGEN_CPP_CLI_SUPPORT@
+SIP_SUPPORT            = @DOXYGEN_SIP_SUPPORT@
+IDL_PROPERTY_SUPPORT   = @DOXYGEN_IDL_PROPERTY_SUPPORT@
+DISTRIBUTE_GROUP_DOC   = @DOXYGEN_DISTRIBUTE_GROUP_DOC@
+GROUP_NESTED_COMPOUNDS = @DOXYGEN_GROUP_NESTED_COMPOUNDS@
+SUBGROUPING            = @DOXYGEN_SUBGROUPING@
+INLINE_GROUPED_CLASSES = @DOXYGEN_INLINE_GROUPED_CLASSES@
+INLINE_SIMPLE_STRUCTS  = @DOXYGEN_INLINE_SIMPLE_STRUCTS@
+TYPEDEF_HIDES_STRUCT   = @DOXYGEN_TYPEDEF_HIDES_STRUCT@
+LOOKUP_CACHE_SIZE      = @DOXYGEN_LOOKUP_CACHE_SIZE@
+NUM_PROC_THREADS       = @DOXYGEN_NUM_PROC_THREADS@
+TIMESTAMP              = @DOXYGEN_TIMESTAMP@
+EXTRACT_ALL            = @DOXYGEN_EXTRACT_ALL@
+EXTRACT_PRIVATE        = @DOXYGEN_EXTRACT_PRIVATE@
+EXTRACT_PRIV_VIRTUAL   = @DOXYGEN_EXTRACT_PRIV_VIRTUAL@
+EXTRACT_PACKAGE        = @DOXYGEN_EXTRACT_PACKAGE@
+EXTRACT_STATIC         = @DOXYGEN_EXTRACT_STATIC@
+EXTRACT_LOCAL_CLASSES  = @DOXYGEN_EXTRACT_LOCAL_CLASSES@
+EXTRACT_LOCAL_METHODS  = @DOXYGEN_EXTRACT_LOCAL_METHODS@
+EXTRACT_ANON_NSPACES   = @DOXYGEN_EXTRACT_ANON_NSPACES@
+RESOLVE_UNNAMED_PARAMS = @DOXYGEN_RESOLVE_UNNAMED_PARAMS@
+HIDE_UNDOC_MEMBERS     = @DOXYGEN_HIDE_UNDOC_MEMBERS@
+HIDE_UNDOC_CLASSES     = @DOXYGEN_HIDE_UNDOC_CLASSES@
+HIDE_FRIEND_COMPOUNDS  = @DOXYGEN_HIDE_FRIEND_COMPOUNDS@
+HIDE_IN_BODY_DOCS      = @DOXYGEN_HIDE_IN_BODY_DOCS@
+INTERNAL_DOCS          = @DOXYGEN_INTERNAL_DOCS@
+CASE_SENSE_NAMES       = @DOXYGEN_CASE_SENSE_NAMES@
+HIDE_SCOPE_NAMES       = @DOXYGEN_HIDE_SCOPE_NAMES@
+HIDE_COMPOUND_REFERENCE= @DOXYGEN_HIDE_COMPOUND_REFERENCE@
+SHOW_HEADERFILE        = @DOXYGEN_SHOW_HEADERFILE@
+SHOW_INCLUDE_FILES     = @DOXYGEN_SHOW_INCLUDE_FILES@
+SHOW_GROUPED_MEMB_INC  = @DOXYGEN_SHOW_GROUPED_MEMB_INC@
+FORCE_LOCAL_INCLUDES   = @DOXYGEN_FORCE_LOCAL_INCLUDES@
+INLINE_INFO            = @DOXYGEN_INLINE_INFO@
+SORT_MEMBER_DOCS       = @DOXYGEN_SORT_MEMBER_DOCS@
+SORT_BRIEF_DOCS        = @DOXYGEN_SORT_BRIEF_DOCS@
+SORT_MEMBERS_CTORS_1ST = @DOXYGEN_SORT_MEMBERS_CTORS_1ST@
+SORT_GROUP_NAMES       = @DOXYGEN_SORT_GROUP_NAMES@
+SORT_BY_SCOPE_NAME     = @DOXYGEN_SORT_BY_SCOPE_NAME@
+STRICT_PROTO_MATCHING  = @DOXYGEN_STRICT_PROTO_MATCHING@
+GENERATE_TODOLIST      = @DOXYGEN_GENERATE_TODOLIST@
+GENERATE_TESTLIST      = @DOXYGEN_GENERATE_TESTLIST@
+GENERATE_BUGLIST       = @DOXYGEN_GENERATE_BUGLIST@
+GENERATE_DEPRECATEDLIST= @DOXYGEN_GENERATE_DEPRECATEDLIST@
+ENABLED_SECTIONS       = @DOXYGEN_ENABLED_SECTIONS@
+MAX_INITIALIZER_LINES  = @DOXYGEN_MAX_INITIALIZER_LINES@
+SHOW_USED_FILES        = @DOXYGEN_SHOW_USED_FILES@
+SHOW_FILES             = @DOXYGEN_SHOW_FILES@
+SHOW_NAMESPACES        = @DOXYGEN_SHOW_NAMESPACES@
+FILE_VERSION_FILTER    = @DOXYGEN_FILE_VERSION_FILTER@
+LAYOUT_FILE            = @DOXYGEN_LAYOUT_FILE@
+CITE_BIB_FILES         = @DOXYGEN_CITE_BIB_FILES@
+QUIET                  = @DOXYGEN_QUIET@
+WARNINGS               = @DOXYGEN_WARNINGS@
+WARN_IF_UNDOCUMENTED   = @DOXYGEN_WARN_IF_UNDOCUMENTED@
+WARN_IF_DOC_ERROR      = @DOXYGEN_WARN_IF_DOC_ERROR@
+WARN_IF_INCOMPLETE_DOC = @DOXYGEN_WARN_IF_INCOMPLETE_DOC@
+WARN_NO_PARAMDOC       = @DOXYGEN_WARN_NO_PARAMDOC@
+WARN_IF_UNDOC_ENUM_VAL = @DOXYGEN_WARN_IF_UNDOC_ENUM_VAL@
+WARN_AS_ERROR          = @DOXYGEN_WARN_AS_ERROR@
+WARN_FORMAT            = @DOXYGEN_WARN_FORMAT@
+WARN_LINE_FORMAT       = @DOXYGEN_WARN_LINE_FORMAT@
+WARN_LOGFILE           = @DOXYGEN_WARN_LOGFILE@
+INPUT                  = @DOXYGEN_INPUT@
+INPUT_ENCODING         = @DOXYGEN_INPUT_ENCODING@
+INPUT_FILE_ENCODING    = @DOXYGEN_INPUT_FILE_ENCODING@
+FILE_PATTERNS          = @DOXYGEN_FILE_PATTERNS@
+RECURSIVE              = @DOXYGEN_RECURSIVE@
+EXCLUDE                = @DOXYGEN_EXCLUDE@
+EXCLUDE_SYMLINKS       = @DOXYGEN_EXCLUDE_SYMLINKS@
+EXCLUDE_PATTERNS       = @DOXYGEN_EXCLUDE_PATTERNS@
+EXCLUDE_SYMBOLS        = @DOXYGEN_EXCLUDE_SYMBOLS@
+EXAMPLE_PATH           = @DOXYGEN_EXAMPLE_PATH@
+EXAMPLE_PATTERNS       = @DOXYGEN_EXAMPLE_PATTERNS@
+EXAMPLE_RECURSIVE      = @DOXYGEN_EXAMPLE_RECURSIVE@
+IMAGE_PATH             = @DOXYGEN_IMAGE_PATH@
+INPUT_FILTER           = @DOXYGEN_INPUT_FILTER@
+FILTER_PATTERNS        = @DOXYGEN_FILTER_PATTERNS@
+FILTER_SOURCE_FILES    = @DOXYGEN_FILTER_SOURCE_FILES@
+FILTER_SOURCE_PATTERNS = @DOXYGEN_FILTER_SOURCE_PATTERNS@
+USE_MDFILE_AS_MAINPAGE = @DOXYGEN_USE_MDFILE_AS_MAINPAGE@
+FORTRAN_COMMENT_AFTER  = @DOXYGEN_FORTRAN_COMMENT_AFTER@
+SOURCE_BROWSER         = @DOXYGEN_SOURCE_BROWSER@
+INLINE_SOURCES         = @DOXYGEN_INLINE_SOURCES@
+STRIP_CODE_COMMENTS    = @DOXYGEN_STRIP_CODE_COMMENTS@
+REFERENCED_BY_RELATION = @DOXYGEN_REFERENCED_BY_RELATION@
+REFERENCES_RELATION    = @DOXYGEN_REFERENCES_RELATION@
+REFERENCES_LINK_SOURCE = @DOXYGEN_REFERENCES_LINK_SOURCE@
+SOURCE_TOOLTIPS        = @DOXYGEN_SOURCE_TOOLTIPS@
+USE_HTAGS              = @DOXYGEN_USE_HTAGS@
+VERBATIM_HEADERS       = @DOXYGEN_VERBATIM_HEADERS@
+CLANG_ASSISTED_PARSING = @DOXYGEN_CLANG_ASSISTED_PARSING@
+CLANG_ADD_INC_PATHS    = @DOXYGEN_CLANG_ADD_INC_PATHS@
+CLANG_OPTIONS          = @DOXYGEN_CLANG_OPTIONS@
+CLANG_DATABASE_PATH    = @DOXYGEN_CLANG_DATABASE_PATH@
+ALPHABETICAL_INDEX     = @DOXYGEN_ALPHABETICAL_INDEX@
+IGNORE_PREFIX          = @DOXYGEN_IGNORE_PREFIX@
+GENERATE_HTML          = @DOXYGEN_GENERATE_HTML@
+HTML_OUTPUT            = @DOXYGEN_HTML_OUTPUT@
+HTML_FILE_EXTENSION    = @DOXYGEN_HTML_FILE_EXTENSION@
+HTML_HEADER            = @DOXYGEN_HTML_HEADER@
+HTML_FOOTER            = @DOXYGEN_HTML_FOOTER@
+HTML_STYLESHEET        = @DOXYGEN_HTML_STYLESHEET@
+HTML_EXTRA_STYLESHEET  = @DOXYGEN_HTML_EXTRA_STYLESHEET@
+HTML_EXTRA_FILES       = @DOXYGEN_HTML_EXTRA_FILES@
+HTML_COLORSTYLE        = @DOXYGEN_HTML_COLORSTYLE@
+HTML_COLORSTYLE_HUE    = @DOXYGEN_HTML_COLORSTYLE_HUE@
+HTML_COLORSTYLE_SAT    = @DOXYGEN_HTML_COLORSTYLE_SAT@
+HTML_COLORSTYLE_GAMMA  = @DOXYGEN_HTML_COLORSTYLE_GAMMA@
+HTML_DYNAMIC_MENUS     = @DOXYGEN_HTML_DYNAMIC_MENUS@
+HTML_DYNAMIC_SECTIONS  = @DOXYGEN_HTML_DYNAMIC_SECTIONS@
+HTML_CODE_FOLDING      = @DOXYGEN_HTML_CODE_FOLDING@
+HTML_INDEX_NUM_ENTRIES = @DOXYGEN_HTML_INDEX_NUM_ENTRIES@
+GENERATE_DOCSET        = @DOXYGEN_GENERATE_DOCSET@
+DOCSET_FEEDNAME        = @DOXYGEN_DOCSET_FEEDNAME@
+DOCSET_FEEDURL         = @DOXYGEN_DOCSET_FEEDURL@
+DOCSET_BUNDLE_ID       = @DOXYGEN_DOCSET_BUNDLE_ID@
+DOCSET_PUBLISHER_ID    = @DOXYGEN_DOCSET_PUBLISHER_ID@
+DOCSET_PUBLISHER_NAME  = @DOXYGEN_DOCSET_PUBLISHER_NAME@
+GENERATE_HTMLHELP      = @DOXYGEN_GENERATE_HTMLHELP@
+CHM_FILE               = @DOXYGEN_CHM_FILE@
+HHC_LOCATION           = @DOXYGEN_HHC_LOCATION@
+GENERATE_CHI           = @DOXYGEN_GENERATE_CHI@
+CHM_INDEX_ENCODING     = @DOXYGEN_CHM_INDEX_ENCODING@
+BINARY_TOC             = @DOXYGEN_BINARY_TOC@
+TOC_EXPAND             = @DOXYGEN_TOC_EXPAND@
+SITEMAP_URL            = @DOXYGEN_SITEMAP_URL@
+GENERATE_QHP           = @DOXYGEN_GENERATE_QHP@
+QCH_FILE               = @DOXYGEN_QCH_FILE@
+QHP_NAMESPACE          = @DOXYGEN_QHP_NAMESPACE@
+QHP_VIRTUAL_FOLDER     = @DOXYGEN_QHP_VIRTUAL_FOLDER@
+QHP_CUST_FILTER_NAME   = @DOXYGEN_QHP_CUST_FILTER_NAME@
+QHP_CUST_FILTER_ATTRS  = @DOXYGEN_QHP_CUST_FILTER_ATTRS@
+QHP_SECT_FILTER_ATTRS  = @DOXYGEN_QHP_SECT_FILTER_ATTRS@
+QHG_LOCATION           = @DOXYGEN_QHG_LOCATION@
+GENERATE_ECLIPSEHELP   = @DOXYGEN_GENERATE_ECLIPSEHELP@
+ECLIPSE_DOC_ID         = @DOXYGEN_ECLIPSE_DOC_ID@
+DISABLE_INDEX          = @DOXYGEN_DISABLE_INDEX@
+GENERATE_TREEVIEW      = @DOXYGEN_GENERATE_TREEVIEW@
+FULL_SIDEBAR           = @DOXYGEN_FULL_SIDEBAR@
+ENUM_VALUES_PER_LINE   = @DOXYGEN_ENUM_VALUES_PER_LINE@
+TREEVIEW_WIDTH         = @DOXYGEN_TREEVIEW_WIDTH@
+EXT_LINKS_IN_WINDOW    = @DOXYGEN_EXT_LINKS_IN_WINDOW@
+OBFUSCATE_EMAILS       = @DOXYGEN_OBFUSCATE_EMAILS@
+HTML_FORMULA_FORMAT    = @DOXYGEN_HTML_FORMULA_FORMAT@
+FORMULA_FONTSIZE       = @DOXYGEN_FORMULA_FONTSIZE@
+FORMULA_MACROFILE      = @DOXYGEN_FORMULA_MACROFILE@
+USE_MATHJAX            = @DOXYGEN_USE_MATHJAX@
+MATHJAX_VERSION        = @DOXYGEN_MATHJAX_VERSION@
+MATHJAX_FORMAT         = @DOXYGEN_MATHJAX_FORMAT@
+MATHJAX_RELPATH        = @DOXYGEN_MATHJAX_RELPATH@
+MATHJAX_EXTENSIONS     = @DOXYGEN_MATHJAX_EXTENSIONS@
+MATHJAX_CODEFILE       = @DOXYGEN_MATHJAX_CODEFILE@
+SEARCHENGINE           = @DOXYGEN_SEARCHENGINE@
+SERVER_BASED_SEARCH    = @DOXYGEN_SERVER_BASED_SEARCH@
+EXTERNAL_SEARCH        = @DOXYGEN_EXTERNAL_SEARCH@
+SEARCHENGINE_URL       = @DOXYGEN_SEARCHENGINE_URL@
+SEARCHDATA_FILE        = @DOXYGEN_SEARCHDATA_FILE@
+EXTERNAL_SEARCH_ID     = @DOXYGEN_EXTERNAL_SEARCH_ID@
+EXTRA_SEARCH_MAPPINGS  = @DOXYGEN_EXTRA_SEARCH_MAPPINGS@
+GENERATE_LATEX         = @DOXYGEN_GENERATE_LATEX@
+LATEX_OUTPUT           = @DOXYGEN_LATEX_OUTPUT@
+LATEX_CMD_NAME         = @DOXYGEN_LATEX_CMD_NAME@
+MAKEINDEX_CMD_NAME     = @DOXYGEN_MAKEINDEX_CMD_NAME@
+LATEX_MAKEINDEX_CMD    = @DOXYGEN_LATEX_MAKEINDEX_CMD@
+COMPACT_LATEX          = @DOXYGEN_COMPACT_LATEX@
+PAPER_TYPE             = @DOXYGEN_PAPER_TYPE@
+EXTRA_PACKAGES         = @DOXYGEN_EXTRA_PACKAGES@
+LATEX_HEADER           = @DOXYGEN_LATEX_HEADER@
+LATEX_FOOTER           = @DOXYGEN_LATEX_FOOTER@
+LATEX_EXTRA_STYLESHEET = @DOXYGEN_LATEX_EXTRA_STYLESHEET@
+LATEX_EXTRA_FILES      = @DOXYGEN_LATEX_EXTRA_FILES@
+PDF_HYPERLINKS         = @DOXYGEN_PDF_HYPERLINKS@
+USE_PDFLATEX           = @DOXYGEN_USE_PDFLATEX@
+LATEX_BATCHMODE        = @DOXYGEN_LATEX_BATCHMODE@
+LATEX_HIDE_INDICES     = @DOXYGEN_LATEX_HIDE_INDICES@
+LATEX_BIB_STYLE        = @DOXYGEN_LATEX_BIB_STYLE@
+LATEX_EMOJI_DIRECTORY  = @DOXYGEN_LATEX_EMOJI_DIRECTORY@
+GENERATE_RTF           = @DOXYGEN_GENERATE_RTF@
+RTF_OUTPUT             = @DOXYGEN_RTF_OUTPUT@
+COMPACT_RTF            = @DOXYGEN_COMPACT_RTF@
+RTF_HYPERLINKS         = @DOXYGEN_RTF_HYPERLINKS@
+RTF_STYLESHEET_FILE    = @DOXYGEN_RTF_STYLESHEET_FILE@
+RTF_EXTENSIONS_FILE    = @DOXYGEN_RTF_EXTENSIONS_FILE@
+GENERATE_MAN           = @DOXYGEN_GENERATE_MAN@
+MAN_OUTPUT             = @DOXYGEN_MAN_OUTPUT@
+MAN_EXTENSION          = @DOXYGEN_MAN_EXTENSION@
+MAN_SUBDIR             = @DOXYGEN_MAN_SUBDIR@
+MAN_LINKS              = @DOXYGEN_MAN_LINKS@
+GENERATE_XML           = @DOXYGEN_GENERATE_XML@
+XML_OUTPUT             = @DOXYGEN_XML_OUTPUT@
+XML_PROGRAMLISTING     = @DOXYGEN_XML_PROGRAMLISTING@
+XML_NS_MEMB_FILE_SCOPE = @DOXYGEN_XML_NS_MEMB_FILE_SCOPE@
+GENERATE_DOCBOOK       = @DOXYGEN_GENERATE_DOCBOOK@
+DOCBOOK_OUTPUT         = @DOXYGEN_DOCBOOK_OUTPUT@
+GENERATE_AUTOGEN_DEF   = @DOXYGEN_GENERATE_AUTOGEN_DEF@
+GENERATE_SQLITE3       = @DOXYGEN_GENERATE_SQLITE3@
+SQLITE3_OUTPUT         = @DOXYGEN_SQLITE3_OUTPUT@
+SQLITE3_RECREATE_DB    = @DOXYGEN_SQLITE3_RECREATE_DB@
+GENERATE_PERLMOD       = @DOXYGEN_GENERATE_PERLMOD@
+PERLMOD_LATEX          = @DOXYGEN_PERLMOD_LATEX@
+PERLMOD_PRETTY         = @DOXYGEN_PERLMOD_PRETTY@
+PERLMOD_MAKEVAR_PREFIX = @DOXYGEN_PERLMOD_MAKEVAR_PREFIX@
+ENABLE_PREPROCESSING   = @DOXYGEN_ENABLE_PREPROCESSING@
+MACRO_EXPANSION        = @DOXYGEN_MACRO_EXPANSION@
+EXPAND_ONLY_PREDEF     = @DOXYGEN_EXPAND_ONLY_PREDEF@
+SEARCH_INCLUDES        = @DOXYGEN_SEARCH_INCLUDES@
+INCLUDE_PATH           = @DOXYGEN_INCLUDE_PATH@
+INCLUDE_FILE_PATTERNS  = @DOXYGEN_INCLUDE_FILE_PATTERNS@
+PREDEFINED             = @DOXYGEN_PREDEFINED@
+EXPAND_AS_DEFINED      = @DOXYGEN_EXPAND_AS_DEFINED@
+SKIP_FUNCTION_MACROS   = @DOXYGEN_SKIP_FUNCTION_MACROS@
+TAGFILES               = @DOXYGEN_TAGFILES@
+GENERATE_TAGFILE       = @DOXYGEN_GENERATE_TAGFILE@
+ALLEXTERNALS           = @DOXYGEN_ALLEXTERNALS@
+EXTERNAL_GROUPS        = @DOXYGEN_EXTERNAL_GROUPS@
+EXTERNAL_PAGES         = @DOXYGEN_EXTERNAL_PAGES@
+HIDE_UNDOC_RELATIONS   = @DOXYGEN_HIDE_UNDOC_RELATIONS@
+HAVE_DOT               = @DOXYGEN_HAVE_DOT@
+DOT_NUM_THREADS        = @DOXYGEN_DOT_NUM_THREADS@
+DOT_COMMON_ATTR        = @DOXYGEN_DOT_COMMON_ATTR@
+DOT_EDGE_ATTR          = @DOXYGEN_DOT_EDGE_ATTR@
+DOT_NODE_ATTR          = @DOXYGEN_DOT_NODE_ATTR@
+DOT_FONTPATH           = @DOXYGEN_DOT_FONTPATH@
+CLASS_GRAPH            = @DOXYGEN_CLASS_GRAPH@
+COLLABORATION_GRAPH    = @DOXYGEN_COLLABORATION_GRAPH@
+GROUP_GRAPHS           = @DOXYGEN_GROUP_GRAPHS@
+UML_LOOK               = @DOXYGEN_UML_LOOK@
+UML_LIMIT_NUM_FIELDS   = @DOXYGEN_UML_LIMIT_NUM_FIELDS@
+DOT_UML_DETAILS        = @DOXYGEN_DOT_UML_DETAILS@
+DOT_WRAP_THRESHOLD     = @DOXYGEN_DOT_WRAP_THRESHOLD@
+TEMPLATE_RELATIONS     = @DOXYGEN_TEMPLATE_RELATIONS@
+INCLUDE_GRAPH          = @DOXYGEN_INCLUDE_GRAPH@
+INCLUDED_BY_GRAPH      = @DOXYGEN_INCLUDED_BY_GRAPH@
+CALL_GRAPH             = @DOXYGEN_CALL_GRAPH@
+CALLER_GRAPH           = @DOXYGEN_CALLER_GRAPH@
+GRAPHICAL_HIERARCHY    = @DOXYGEN_GRAPHICAL_HIERARCHY@
+DIRECTORY_GRAPH        = @DOXYGEN_DIRECTORY_GRAPH@
+DIR_GRAPH_MAX_DEPTH    = @DOXYGEN_DIR_GRAPH_MAX_DEPTH@
+DOT_IMAGE_FORMAT       = @DOXYGEN_DOT_IMAGE_FORMAT@
+INTERACTIVE_SVG        = @DOXYGEN_INTERACTIVE_SVG@
+DOT_PATH               = @DOXYGEN_DOT_PATH@
+DOTFILE_DIRS           = @DOXYGEN_DOTFILE_DIRS@
+DIA_PATH               = @DOXYGEN_DIA_PATH@
+DIAFILE_DIRS           = @DOXYGEN_DIAFILE_DIRS@
+PLANTUML_JAR_PATH      = @DOXYGEN_PLANTUML_JAR_PATH@
+PLANTUML_CFG_FILE      = @DOXYGEN_PLANTUML_CFG_FILE@
+PLANTUML_INCLUDE_PATH  = @DOXYGEN_PLANTUML_INCLUDE_PATH@
+DOT_GRAPH_MAX_NODES    = @DOXYGEN_DOT_GRAPH_MAX_NODES@
+MAX_DOT_GRAPH_DEPTH    = @DOXYGEN_MAX_DOT_GRAPH_DEPTH@
+DOT_MULTI_TARGETS      = @DOXYGEN_DOT_MULTI_TARGETS@
+GENERATE_LEGEND        = @DOXYGEN_GENERATE_LEGEND@
+DOT_CLEANUP            = @DOXYGEN_DOT_CLEANUP@
+MSCGEN_TOOL            = @DOXYGEN_MSCGEN_TOOL@
+MSCFILE_DIRS           = @DOXYGEN_MSCFILE_DIRS@

+ 717 - 0
CMakeDoxygenDefaults.cmake

@@ -0,0 +1,717 @@
+#
+# DO NOT EDIT! THIS FILE WAS GENERATED BY CMAKE!
+#
+
+if(NOT DEFINED DOXYGEN_DOXYFILE_ENCODING)
+    set(DOXYGEN_DOXYFILE_ENCODING UTF-8)
+endif()
+if(NOT DEFINED DOXYGEN_PROJECT_NAME)
+    set(DOXYGEN_PROJECT_NAME "My Project")
+endif()
+if(NOT DEFINED DOXYGEN_CREATE_SUBDIRS)
+    set(DOXYGEN_CREATE_SUBDIRS NO)
+endif()
+if(NOT DEFINED DOXYGEN_CREATE_SUBDIRS_LEVEL)
+    set(DOXYGEN_CREATE_SUBDIRS_LEVEL 8)
+endif()
+if(NOT DEFINED DOXYGEN_ALLOW_UNICODE_NAMES)
+    set(DOXYGEN_ALLOW_UNICODE_NAMES NO)
+endif()
+if(NOT DEFINED DOXYGEN_OUTPUT_LANGUAGE)
+    set(DOXYGEN_OUTPUT_LANGUAGE English)
+endif()
+if(NOT DEFINED DOXYGEN_BRIEF_MEMBER_DESC)
+    set(DOXYGEN_BRIEF_MEMBER_DESC YES)
+endif()
+if(NOT DEFINED DOXYGEN_REPEAT_BRIEF)
+    set(DOXYGEN_REPEAT_BRIEF YES)
+endif()
+if(NOT DEFINED DOXYGEN_ABBREVIATE_BRIEF)
+    set(DOXYGEN_ABBREVIATE_BRIEF "The $name class" 
+                         "The $name widget" 
+                         "The $name file" 
+                         is 
+                         provides 
+                         specifies 
+                         contains 
+                         represents 
+                         a 
+                         an 
+                         the)
+endif()
+if(NOT DEFINED DOXYGEN_ALWAYS_DETAILED_SEC)
+    set(DOXYGEN_ALWAYS_DETAILED_SEC NO)
+endif()
+if(NOT DEFINED DOXYGEN_INLINE_INHERITED_MEMB)
+    set(DOXYGEN_INLINE_INHERITED_MEMB NO)
+endif()
+if(NOT DEFINED DOXYGEN_FULL_PATH_NAMES)
+    set(DOXYGEN_FULL_PATH_NAMES YES)
+endif()
+if(NOT DEFINED DOXYGEN_SHORT_NAMES)
+    set(DOXYGEN_SHORT_NAMES NO)
+endif()
+if(NOT DEFINED DOXYGEN_JAVADOC_AUTOBRIEF)
+    set(DOXYGEN_JAVADOC_AUTOBRIEF NO)
+endif()
+if(NOT DEFINED DOXYGEN_JAVADOC_BANNER)
+    set(DOXYGEN_JAVADOC_BANNER NO)
+endif()
+if(NOT DEFINED DOXYGEN_QT_AUTOBRIEF)
+    set(DOXYGEN_QT_AUTOBRIEF NO)
+endif()
+if(NOT DEFINED DOXYGEN_MULTILINE_CPP_IS_BRIEF)
+    set(DOXYGEN_MULTILINE_CPP_IS_BRIEF NO)
+endif()
+if(NOT DEFINED DOXYGEN_PYTHON_DOCSTRING)
+    set(DOXYGEN_PYTHON_DOCSTRING YES)
+endif()
+if(NOT DEFINED DOXYGEN_INHERIT_DOCS)
+    set(DOXYGEN_INHERIT_DOCS YES)
+endif()
+if(NOT DEFINED DOXYGEN_SEPARATE_MEMBER_PAGES)
+    set(DOXYGEN_SEPARATE_MEMBER_PAGES NO)
+endif()
+if(NOT DEFINED DOXYGEN_TAB_SIZE)
+    set(DOXYGEN_TAB_SIZE 4)
+endif()
+if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_FOR_C)
+    set(DOXYGEN_OPTIMIZE_OUTPUT_FOR_C NO)
+endif()
+if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_JAVA)
+    set(DOXYGEN_OPTIMIZE_OUTPUT_JAVA NO)
+endif()
+if(NOT DEFINED DOXYGEN_OPTIMIZE_FOR_FORTRAN)
+    set(DOXYGEN_OPTIMIZE_FOR_FORTRAN NO)
+endif()
+if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_VHDL)
+    set(DOXYGEN_OPTIMIZE_OUTPUT_VHDL NO)
+endif()
+if(NOT DEFINED DOXYGEN_OPTIMIZE_OUTPUT_SLICE)
+    set(DOXYGEN_OPTIMIZE_OUTPUT_SLICE NO)
+endif()
+if(NOT DEFINED DOXYGEN_MARKDOWN_SUPPORT)
+    set(DOXYGEN_MARKDOWN_SUPPORT YES)
+endif()
+if(NOT DEFINED DOXYGEN_TOC_INCLUDE_HEADINGS)
+    set(DOXYGEN_TOC_INCLUDE_HEADINGS 5)
+endif()
+if(NOT DEFINED DOXYGEN_MARKDOWN_ID_STYLE)
+    set(DOXYGEN_MARKDOWN_ID_STYLE DOXYGEN)
+endif()
+if(NOT DEFINED DOXYGEN_AUTOLINK_SUPPORT)
+    set(DOXYGEN_AUTOLINK_SUPPORT YES)
+endif()
+if(NOT DEFINED DOXYGEN_BUILTIN_STL_SUPPORT)
+    set(DOXYGEN_BUILTIN_STL_SUPPORT NO)
+endif()
+if(NOT DEFINED DOXYGEN_CPP_CLI_SUPPORT)
+    set(DOXYGEN_CPP_CLI_SUPPORT NO)
+endif()
+if(NOT DEFINED DOXYGEN_SIP_SUPPORT)
+    set(DOXYGEN_SIP_SUPPORT NO)
+endif()
+if(NOT DEFINED DOXYGEN_IDL_PROPERTY_SUPPORT)
+    set(DOXYGEN_IDL_PROPERTY_SUPPORT YES)
+endif()
+if(NOT DEFINED DOXYGEN_DISTRIBUTE_GROUP_DOC)
+    set(DOXYGEN_DISTRIBUTE_GROUP_DOC NO)
+endif()
+if(NOT DEFINED DOXYGEN_GROUP_NESTED_COMPOUNDS)
+    set(DOXYGEN_GROUP_NESTED_COMPOUNDS NO)
+endif()
+if(NOT DEFINED DOXYGEN_SUBGROUPING)
+    set(DOXYGEN_SUBGROUPING YES)
+endif()
+if(NOT DEFINED DOXYGEN_INLINE_GROUPED_CLASSES)
+    set(DOXYGEN_INLINE_GROUPED_CLASSES NO)
+endif()
+if(NOT DEFINED DOXYGEN_INLINE_SIMPLE_STRUCTS)
+    set(DOXYGEN_INLINE_SIMPLE_STRUCTS NO)
+endif()
+if(NOT DEFINED DOXYGEN_TYPEDEF_HIDES_STRUCT)
+    set(DOXYGEN_TYPEDEF_HIDES_STRUCT NO)
+endif()
+if(NOT DEFINED DOXYGEN_LOOKUP_CACHE_SIZE)
+    set(DOXYGEN_LOOKUP_CACHE_SIZE 0)
+endif()
+if(NOT DEFINED DOXYGEN_NUM_PROC_THREADS)
+    set(DOXYGEN_NUM_PROC_THREADS 1)
+endif()
+if(NOT DEFINED DOXYGEN_TIMESTAMP)
+    set(DOXYGEN_TIMESTAMP NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_ALL)
+    set(DOXYGEN_EXTRACT_ALL NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_PRIVATE)
+    set(DOXYGEN_EXTRACT_PRIVATE NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_PRIV_VIRTUAL)
+    set(DOXYGEN_EXTRACT_PRIV_VIRTUAL NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_PACKAGE)
+    set(DOXYGEN_EXTRACT_PACKAGE NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_STATIC)
+    set(DOXYGEN_EXTRACT_STATIC NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_LOCAL_CLASSES)
+    set(DOXYGEN_EXTRACT_LOCAL_CLASSES YES)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_LOCAL_METHODS)
+    set(DOXYGEN_EXTRACT_LOCAL_METHODS NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTRACT_ANON_NSPACES)
+    set(DOXYGEN_EXTRACT_ANON_NSPACES NO)
+endif()
+if(NOT DEFINED DOXYGEN_RESOLVE_UNNAMED_PARAMS)
+    set(DOXYGEN_RESOLVE_UNNAMED_PARAMS YES)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_UNDOC_MEMBERS)
+    set(DOXYGEN_HIDE_UNDOC_MEMBERS NO)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_UNDOC_CLASSES)
+    set(DOXYGEN_HIDE_UNDOC_CLASSES NO)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_FRIEND_COMPOUNDS)
+    set(DOXYGEN_HIDE_FRIEND_COMPOUNDS NO)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_IN_BODY_DOCS)
+    set(DOXYGEN_HIDE_IN_BODY_DOCS NO)
+endif()
+if(NOT DEFINED DOXYGEN_INTERNAL_DOCS)
+    set(DOXYGEN_INTERNAL_DOCS NO)
+endif()
+if(NOT DEFINED DOXYGEN_CASE_SENSE_NAMES)
+    set(DOXYGEN_CASE_SENSE_NAMES SYSTEM)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_SCOPE_NAMES)
+    set(DOXYGEN_HIDE_SCOPE_NAMES NO)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_COMPOUND_REFERENCE)
+    set(DOXYGEN_HIDE_COMPOUND_REFERENCE NO)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_HEADERFILE)
+    set(DOXYGEN_SHOW_HEADERFILE YES)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_INCLUDE_FILES)
+    set(DOXYGEN_SHOW_INCLUDE_FILES YES)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_GROUPED_MEMB_INC)
+    set(DOXYGEN_SHOW_GROUPED_MEMB_INC NO)
+endif()
+if(NOT DEFINED DOXYGEN_FORCE_LOCAL_INCLUDES)
+    set(DOXYGEN_FORCE_LOCAL_INCLUDES NO)
+endif()
+if(NOT DEFINED DOXYGEN_INLINE_INFO)
+    set(DOXYGEN_INLINE_INFO YES)
+endif()
+if(NOT DEFINED DOXYGEN_SORT_MEMBER_DOCS)
+    set(DOXYGEN_SORT_MEMBER_DOCS YES)
+endif()
+if(NOT DEFINED DOXYGEN_SORT_BRIEF_DOCS)
+    set(DOXYGEN_SORT_BRIEF_DOCS NO)
+endif()
+if(NOT DEFINED DOXYGEN_SORT_MEMBERS_CTORS_1ST)
+    set(DOXYGEN_SORT_MEMBERS_CTORS_1ST NO)
+endif()
+if(NOT DEFINED DOXYGEN_SORT_GROUP_NAMES)
+    set(DOXYGEN_SORT_GROUP_NAMES NO)
+endif()
+if(NOT DEFINED DOXYGEN_SORT_BY_SCOPE_NAME)
+    set(DOXYGEN_SORT_BY_SCOPE_NAME NO)
+endif()
+if(NOT DEFINED DOXYGEN_STRICT_PROTO_MATCHING)
+    set(DOXYGEN_STRICT_PROTO_MATCHING NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_TODOLIST)
+    set(DOXYGEN_GENERATE_TODOLIST YES)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_TESTLIST)
+    set(DOXYGEN_GENERATE_TESTLIST YES)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_BUGLIST)
+    set(DOXYGEN_GENERATE_BUGLIST YES)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_DEPRECATEDLIST)
+    set(DOXYGEN_GENERATE_DEPRECATEDLIST YES)
+endif()
+if(NOT DEFINED DOXYGEN_MAX_INITIALIZER_LINES)
+    set(DOXYGEN_MAX_INITIALIZER_LINES 30)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_USED_FILES)
+    set(DOXYGEN_SHOW_USED_FILES YES)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_FILES)
+    set(DOXYGEN_SHOW_FILES YES)
+endif()
+if(NOT DEFINED DOXYGEN_SHOW_NAMESPACES)
+    set(DOXYGEN_SHOW_NAMESPACES YES)
+endif()
+if(NOT DEFINED DOXYGEN_QUIET)
+    set(DOXYGEN_QUIET NO)
+endif()
+if(NOT DEFINED DOXYGEN_WARNINGS)
+    set(DOXYGEN_WARNINGS YES)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_IF_UNDOCUMENTED)
+    set(DOXYGEN_WARN_IF_UNDOCUMENTED YES)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_IF_DOC_ERROR)
+    set(DOXYGEN_WARN_IF_DOC_ERROR YES)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_IF_INCOMPLETE_DOC)
+    set(DOXYGEN_WARN_IF_INCOMPLETE_DOC YES)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_NO_PARAMDOC)
+    set(DOXYGEN_WARN_NO_PARAMDOC NO)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_IF_UNDOC_ENUM_VAL)
+    set(DOXYGEN_WARN_IF_UNDOC_ENUM_VAL NO)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_AS_ERROR)
+    set(DOXYGEN_WARN_AS_ERROR NO)
+endif()
+if(NOT DEFINED DOXYGEN_WARN_FORMAT)
+    set(DOXYGEN_WARN_FORMAT "$file:$line: $text")
+endif()
+if(NOT DEFINED DOXYGEN_WARN_LINE_FORMAT)
+    set(DOXYGEN_WARN_LINE_FORMAT "at line $line of file $file")
+endif()
+if(NOT DEFINED DOXYGEN_INPUT_ENCODING)
+    set(DOXYGEN_INPUT_ENCODING UTF-8)
+endif()
+if(NOT DEFINED DOXYGEN_FILE_PATTERNS)
+    set(DOXYGEN_FILE_PATTERNS *.c 
+                         *.cc 
+                         *.cxx 
+                         *.cxxm 
+                         *.cpp 
+                         *.cppm 
+                         *.c++ 
+                         *.c++m 
+                         *.java 
+                         *.ii 
+                         *.ixx 
+                         *.ipp 
+                         *.i++ 
+                         *.inl 
+                         *.idl 
+                         *.ddl 
+                         *.odl 
+                         *.h 
+                         *.hh 
+                         *.hxx 
+                         *.hpp 
+                         *.h++ 
+                         *.ixx 
+                         *.l 
+                         *.cs 
+                         *.d 
+                         *.php 
+                         *.php4 
+                         *.php5 
+                         *.phtml 
+                         *.inc 
+                         *.m 
+                         *.markdown 
+                         *.md 
+                         *.mm 
+                         *.dox 
+                         *.py 
+                         *.pyw 
+                         *.f90 
+                         *.f95 
+                         *.f03 
+                         *.f08 
+                         *.f18 
+                         *.f 
+                         *.for 
+                         *.vhd 
+                         *.vhdl 
+                         *.ucf 
+                         *.qsf 
+                         *.ice)
+endif()
+if(NOT DEFINED DOXYGEN_RECURSIVE)
+    set(DOXYGEN_RECURSIVE NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXCLUDE_SYMLINKS)
+    set(DOXYGEN_EXCLUDE_SYMLINKS NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXAMPLE_PATTERNS)
+    set(DOXYGEN_EXAMPLE_PATTERNS *)
+endif()
+if(NOT DEFINED DOXYGEN_EXAMPLE_RECURSIVE)
+    set(DOXYGEN_EXAMPLE_RECURSIVE NO)
+endif()
+if(NOT DEFINED DOXYGEN_FILTER_SOURCE_FILES)
+    set(DOXYGEN_FILTER_SOURCE_FILES NO)
+endif()
+if(NOT DEFINED DOXYGEN_FORTRAN_COMMENT_AFTER)
+    set(DOXYGEN_FORTRAN_COMMENT_AFTER 72)
+endif()
+if(NOT DEFINED DOXYGEN_SOURCE_BROWSER)
+    set(DOXYGEN_SOURCE_BROWSER NO)
+endif()
+if(NOT DEFINED DOXYGEN_INLINE_SOURCES)
+    set(DOXYGEN_INLINE_SOURCES NO)
+endif()
+if(NOT DEFINED DOXYGEN_STRIP_CODE_COMMENTS)
+    set(DOXYGEN_STRIP_CODE_COMMENTS YES)
+endif()
+if(NOT DEFINED DOXYGEN_REFERENCED_BY_RELATION)
+    set(DOXYGEN_REFERENCED_BY_RELATION NO)
+endif()
+if(NOT DEFINED DOXYGEN_REFERENCES_RELATION)
+    set(DOXYGEN_REFERENCES_RELATION NO)
+endif()
+if(NOT DEFINED DOXYGEN_REFERENCES_LINK_SOURCE)
+    set(DOXYGEN_REFERENCES_LINK_SOURCE YES)
+endif()
+if(NOT DEFINED DOXYGEN_SOURCE_TOOLTIPS)
+    set(DOXYGEN_SOURCE_TOOLTIPS YES)
+endif()
+if(NOT DEFINED DOXYGEN_USE_HTAGS)
+    set(DOXYGEN_USE_HTAGS NO)
+endif()
+if(NOT DEFINED DOXYGEN_VERBATIM_HEADERS)
+    set(DOXYGEN_VERBATIM_HEADERS YES)
+endif()
+if(NOT DEFINED DOXYGEN_CLANG_ASSISTED_PARSING)
+    set(DOXYGEN_CLANG_ASSISTED_PARSING NO)
+endif()
+if(NOT DEFINED DOXYGEN_CLANG_ADD_INC_PATHS)
+    set(DOXYGEN_CLANG_ADD_INC_PATHS YES)
+endif()
+if(NOT DEFINED DOXYGEN_ALPHABETICAL_INDEX)
+    set(DOXYGEN_ALPHABETICAL_INDEX YES)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_HTML)
+    set(DOXYGEN_GENERATE_HTML YES)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_OUTPUT)
+    set(DOXYGEN_HTML_OUTPUT html)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_FILE_EXTENSION)
+    set(DOXYGEN_HTML_FILE_EXTENSION .html)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE)
+    set(DOXYGEN_HTML_COLORSTYLE AUTO_LIGHT)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_HUE)
+    set(DOXYGEN_HTML_COLORSTYLE_HUE 220)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_SAT)
+    set(DOXYGEN_HTML_COLORSTYLE_SAT 100)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_COLORSTYLE_GAMMA)
+    set(DOXYGEN_HTML_COLORSTYLE_GAMMA 80)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_DYNAMIC_MENUS)
+    set(DOXYGEN_HTML_DYNAMIC_MENUS YES)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_DYNAMIC_SECTIONS)
+    set(DOXYGEN_HTML_DYNAMIC_SECTIONS NO)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_CODE_FOLDING)
+    set(DOXYGEN_HTML_CODE_FOLDING YES)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_INDEX_NUM_ENTRIES)
+    set(DOXYGEN_HTML_INDEX_NUM_ENTRIES 100)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_DOCSET)
+    set(DOXYGEN_GENERATE_DOCSET NO)
+endif()
+if(NOT DEFINED DOXYGEN_DOCSET_FEEDNAME)
+    set(DOXYGEN_DOCSET_FEEDNAME "Doxygen generated docs")
+endif()
+if(NOT DEFINED DOXYGEN_DOCSET_BUNDLE_ID)
+    set(DOXYGEN_DOCSET_BUNDLE_ID org.doxygen.Project)
+endif()
+if(NOT DEFINED DOXYGEN_DOCSET_PUBLISHER_ID)
+    set(DOXYGEN_DOCSET_PUBLISHER_ID org.doxygen.Publisher)
+endif()
+if(NOT DEFINED DOXYGEN_DOCSET_PUBLISHER_NAME)
+    set(DOXYGEN_DOCSET_PUBLISHER_NAME Publisher)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_HTMLHELP)
+    set(DOXYGEN_GENERATE_HTMLHELP NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_CHI)
+    set(DOXYGEN_GENERATE_CHI NO)
+endif()
+if(NOT DEFINED DOXYGEN_BINARY_TOC)
+    set(DOXYGEN_BINARY_TOC NO)
+endif()
+if(NOT DEFINED DOXYGEN_TOC_EXPAND)
+    set(DOXYGEN_TOC_EXPAND NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_QHP)
+    set(DOXYGEN_GENERATE_QHP NO)
+endif()
+if(NOT DEFINED DOXYGEN_QHP_NAMESPACE)
+    set(DOXYGEN_QHP_NAMESPACE org.doxygen.Project)
+endif()
+if(NOT DEFINED DOXYGEN_QHP_VIRTUAL_FOLDER)
+    set(DOXYGEN_QHP_VIRTUAL_FOLDER doc)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_ECLIPSEHELP)
+    set(DOXYGEN_GENERATE_ECLIPSEHELP NO)
+endif()
+if(NOT DEFINED DOXYGEN_ECLIPSE_DOC_ID)
+    set(DOXYGEN_ECLIPSE_DOC_ID org.doxygen.Project)
+endif()
+if(NOT DEFINED DOXYGEN_DISABLE_INDEX)
+    set(DOXYGEN_DISABLE_INDEX NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_TREEVIEW)
+    set(DOXYGEN_GENERATE_TREEVIEW NO)
+endif()
+if(NOT DEFINED DOXYGEN_FULL_SIDEBAR)
+    set(DOXYGEN_FULL_SIDEBAR NO)
+endif()
+if(NOT DEFINED DOXYGEN_ENUM_VALUES_PER_LINE)
+    set(DOXYGEN_ENUM_VALUES_PER_LINE 4)
+endif()
+if(NOT DEFINED DOXYGEN_TREEVIEW_WIDTH)
+    set(DOXYGEN_TREEVIEW_WIDTH 250)
+endif()
+if(NOT DEFINED DOXYGEN_EXT_LINKS_IN_WINDOW)
+    set(DOXYGEN_EXT_LINKS_IN_WINDOW NO)
+endif()
+if(NOT DEFINED DOXYGEN_OBFUSCATE_EMAILS)
+    set(DOXYGEN_OBFUSCATE_EMAILS YES)
+endif()
+if(NOT DEFINED DOXYGEN_HTML_FORMULA_FORMAT)
+    set(DOXYGEN_HTML_FORMULA_FORMAT png)
+endif()
+if(NOT DEFINED DOXYGEN_FORMULA_FONTSIZE)
+    set(DOXYGEN_FORMULA_FONTSIZE 10)
+endif()
+if(NOT DEFINED DOXYGEN_USE_MATHJAX)
+    set(DOXYGEN_USE_MATHJAX NO)
+endif()
+if(NOT DEFINED DOXYGEN_MATHJAX_VERSION)
+    set(DOXYGEN_MATHJAX_VERSION MathJax_2)
+endif()
+if(NOT DEFINED DOXYGEN_MATHJAX_FORMAT)
+    set(DOXYGEN_MATHJAX_FORMAT HTML-CSS)
+endif()
+if(NOT DEFINED DOXYGEN_SEARCHENGINE)
+    set(DOXYGEN_SEARCHENGINE YES)
+endif()
+if(NOT DEFINED DOXYGEN_SERVER_BASED_SEARCH)
+    set(DOXYGEN_SERVER_BASED_SEARCH NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTERNAL_SEARCH)
+    set(DOXYGEN_EXTERNAL_SEARCH NO)
+endif()
+if(NOT DEFINED DOXYGEN_SEARCHDATA_FILE)
+    set(DOXYGEN_SEARCHDATA_FILE searchdata.xml)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_LATEX)
+    set(DOXYGEN_GENERATE_LATEX YES)
+endif()
+if(NOT DEFINED DOXYGEN_LATEX_OUTPUT)
+    set(DOXYGEN_LATEX_OUTPUT latex)
+endif()
+if(NOT DEFINED DOXYGEN_MAKEINDEX_CMD_NAME)
+    set(DOXYGEN_MAKEINDEX_CMD_NAME makeindex)
+endif()
+if(NOT DEFINED DOXYGEN_LATEX_MAKEINDEX_CMD)
+    set(DOXYGEN_LATEX_MAKEINDEX_CMD makeindex)
+endif()
+if(NOT DEFINED DOXYGEN_COMPACT_LATEX)
+    set(DOXYGEN_COMPACT_LATEX NO)
+endif()
+if(NOT DEFINED DOXYGEN_PAPER_TYPE)
+    set(DOXYGEN_PAPER_TYPE a4)
+endif()
+if(NOT DEFINED DOXYGEN_PDF_HYPERLINKS)
+    set(DOXYGEN_PDF_HYPERLINKS YES)
+endif()
+if(NOT DEFINED DOXYGEN_USE_PDFLATEX)
+    set(DOXYGEN_USE_PDFLATEX YES)
+endif()
+if(NOT DEFINED DOXYGEN_LATEX_BATCHMODE)
+    set(DOXYGEN_LATEX_BATCHMODE NO)
+endif()
+if(NOT DEFINED DOXYGEN_LATEX_HIDE_INDICES)
+    set(DOXYGEN_LATEX_HIDE_INDICES NO)
+endif()
+if(NOT DEFINED DOXYGEN_LATEX_BIB_STYLE)
+    set(DOXYGEN_LATEX_BIB_STYLE plain)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_RTF)
+    set(DOXYGEN_GENERATE_RTF NO)
+endif()
+if(NOT DEFINED DOXYGEN_RTF_OUTPUT)
+    set(DOXYGEN_RTF_OUTPUT rtf)
+endif()
+if(NOT DEFINED DOXYGEN_COMPACT_RTF)
+    set(DOXYGEN_COMPACT_RTF NO)
+endif()
+if(NOT DEFINED DOXYGEN_RTF_HYPERLINKS)
+    set(DOXYGEN_RTF_HYPERLINKS NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_MAN)
+    set(DOXYGEN_GENERATE_MAN NO)
+endif()
+if(NOT DEFINED DOXYGEN_MAN_OUTPUT)
+    set(DOXYGEN_MAN_OUTPUT man)
+endif()
+if(NOT DEFINED DOXYGEN_MAN_EXTENSION)
+    set(DOXYGEN_MAN_EXTENSION .3)
+endif()
+if(NOT DEFINED DOXYGEN_MAN_LINKS)
+    set(DOXYGEN_MAN_LINKS NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_XML)
+    set(DOXYGEN_GENERATE_XML NO)
+endif()
+if(NOT DEFINED DOXYGEN_XML_OUTPUT)
+    set(DOXYGEN_XML_OUTPUT xml)
+endif()
+if(NOT DEFINED DOXYGEN_XML_PROGRAMLISTING)
+    set(DOXYGEN_XML_PROGRAMLISTING YES)
+endif()
+if(NOT DEFINED DOXYGEN_XML_NS_MEMB_FILE_SCOPE)
+    set(DOXYGEN_XML_NS_MEMB_FILE_SCOPE NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_DOCBOOK)
+    set(DOXYGEN_GENERATE_DOCBOOK NO)
+endif()
+if(NOT DEFINED DOXYGEN_DOCBOOK_OUTPUT)
+    set(DOXYGEN_DOCBOOK_OUTPUT docbook)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_AUTOGEN_DEF)
+    set(DOXYGEN_GENERATE_AUTOGEN_DEF NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_SQLITE3)
+    set(DOXYGEN_GENERATE_SQLITE3 NO)
+endif()
+if(NOT DEFINED DOXYGEN_SQLITE3_OUTPUT)
+    set(DOXYGEN_SQLITE3_OUTPUT sqlite3)
+endif()
+if(NOT DEFINED DOXYGEN_SQLITE3_RECREATE_DB)
+    set(DOXYGEN_SQLITE3_RECREATE_DB YES)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_PERLMOD)
+    set(DOXYGEN_GENERATE_PERLMOD NO)
+endif()
+if(NOT DEFINED DOXYGEN_PERLMOD_LATEX)
+    set(DOXYGEN_PERLMOD_LATEX NO)
+endif()
+if(NOT DEFINED DOXYGEN_PERLMOD_PRETTY)
+    set(DOXYGEN_PERLMOD_PRETTY YES)
+endif()
+if(NOT DEFINED DOXYGEN_ENABLE_PREPROCESSING)
+    set(DOXYGEN_ENABLE_PREPROCESSING YES)
+endif()
+if(NOT DEFINED DOXYGEN_MACRO_EXPANSION)
+    set(DOXYGEN_MACRO_EXPANSION NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXPAND_ONLY_PREDEF)
+    set(DOXYGEN_EXPAND_ONLY_PREDEF NO)
+endif()
+if(NOT DEFINED DOXYGEN_SEARCH_INCLUDES)
+    set(DOXYGEN_SEARCH_INCLUDES YES)
+endif()
+if(NOT DEFINED DOXYGEN_SKIP_FUNCTION_MACROS)
+    set(DOXYGEN_SKIP_FUNCTION_MACROS YES)
+endif()
+if(NOT DEFINED DOXYGEN_ALLEXTERNALS)
+    set(DOXYGEN_ALLEXTERNALS NO)
+endif()
+if(NOT DEFINED DOXYGEN_EXTERNAL_GROUPS)
+    set(DOXYGEN_EXTERNAL_GROUPS YES)
+endif()
+if(NOT DEFINED DOXYGEN_EXTERNAL_PAGES)
+    set(DOXYGEN_EXTERNAL_PAGES YES)
+endif()
+if(NOT DEFINED DOXYGEN_HIDE_UNDOC_RELATIONS)
+    set(DOXYGEN_HIDE_UNDOC_RELATIONS YES)
+endif()
+if(NOT DEFINED DOXYGEN_HAVE_DOT)
+    set(DOXYGEN_HAVE_DOT YES)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_NUM_THREADS)
+    set(DOXYGEN_DOT_NUM_THREADS 0)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_COMMON_ATTR)
+    set(DOXYGEN_DOT_COMMON_ATTR "fontname=Helvetica,fontsize=10")
+endif()
+if(NOT DEFINED DOXYGEN_DOT_EDGE_ATTR)
+    set(DOXYGEN_DOT_EDGE_ATTR "labelfontname=Helvetica,labelfontsize=10")
+endif()
+if(NOT DEFINED DOXYGEN_DOT_NODE_ATTR)
+    set(DOXYGEN_DOT_NODE_ATTR "shape=box,height=0.2,width=0.4")
+endif()
+if(NOT DEFINED DOXYGEN_CLASS_GRAPH)
+    set(DOXYGEN_CLASS_GRAPH YES)
+endif()
+if(NOT DEFINED DOXYGEN_COLLABORATION_GRAPH)
+    set(DOXYGEN_COLLABORATION_GRAPH YES)
+endif()
+if(NOT DEFINED DOXYGEN_GROUP_GRAPHS)
+    set(DOXYGEN_GROUP_GRAPHS YES)
+endif()
+if(NOT DEFINED DOXYGEN_UML_LOOK)
+    set(DOXYGEN_UML_LOOK NO)
+endif()
+if(NOT DEFINED DOXYGEN_UML_LIMIT_NUM_FIELDS)
+    set(DOXYGEN_UML_LIMIT_NUM_FIELDS 10)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_UML_DETAILS)
+    set(DOXYGEN_DOT_UML_DETAILS NO)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_WRAP_THRESHOLD)
+    set(DOXYGEN_DOT_WRAP_THRESHOLD 17)
+endif()
+if(NOT DEFINED DOXYGEN_TEMPLATE_RELATIONS)
+    set(DOXYGEN_TEMPLATE_RELATIONS NO)
+endif()
+if(NOT DEFINED DOXYGEN_INCLUDE_GRAPH)
+    set(DOXYGEN_INCLUDE_GRAPH YES)
+endif()
+if(NOT DEFINED DOXYGEN_INCLUDED_BY_GRAPH)
+    set(DOXYGEN_INCLUDED_BY_GRAPH YES)
+endif()
+if(NOT DEFINED DOXYGEN_CALL_GRAPH)
+    set(DOXYGEN_CALL_GRAPH NO)
+endif()
+if(NOT DEFINED DOXYGEN_CALLER_GRAPH)
+    set(DOXYGEN_CALLER_GRAPH NO)
+endif()
+if(NOT DEFINED DOXYGEN_GRAPHICAL_HIERARCHY)
+    set(DOXYGEN_GRAPHICAL_HIERARCHY YES)
+endif()
+if(NOT DEFINED DOXYGEN_DIRECTORY_GRAPH)
+    set(DOXYGEN_DIRECTORY_GRAPH YES)
+endif()
+if(NOT DEFINED DOXYGEN_DIR_GRAPH_MAX_DEPTH)
+    set(DOXYGEN_DIR_GRAPH_MAX_DEPTH 1)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_IMAGE_FORMAT)
+    set(DOXYGEN_DOT_IMAGE_FORMAT png)
+endif()
+if(NOT DEFINED DOXYGEN_INTERACTIVE_SVG)
+    set(DOXYGEN_INTERACTIVE_SVG NO)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_GRAPH_MAX_NODES)
+    set(DOXYGEN_DOT_GRAPH_MAX_NODES 50)
+endif()
+if(NOT DEFINED DOXYGEN_MAX_DOT_GRAPH_DEPTH)
+    set(DOXYGEN_MAX_DOT_GRAPH_DEPTH 0)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_MULTI_TARGETS)
+    set(DOXYGEN_DOT_MULTI_TARGETS NO)
+endif()
+if(NOT DEFINED DOXYGEN_GENERATE_LEGEND)
+    set(DOXYGEN_GENERATE_LEGEND YES)
+endif()
+if(NOT DEFINED DOXYGEN_DOT_CLEANUP)
+    set(DOXYGEN_DOT_CLEANUP YES)
+endif()

+ 28 - 0
CMakeLists.txt

@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/pico-sdk/lib/tinyusb/hw/bsp/family_support.cmake)
+
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
+
+project(${PROJECT})
+
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
+
+add_executable(${PROJECT})
+
+# Example source
+target_sources(${PROJECT} PUBLIC
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+        )
+
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+        ${CMAKE_CURRENT_SOURCE_DIR}/src
+        )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT})

+ 1848 - 0
Makefile

@@ -0,0 +1,1848 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/dan/src/kempston-mod
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/dan/src/kempston-mod
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..."
+	/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
+	/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	$(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles /home/dan/src/kempston-mod//CMakeFiles/progress.marks
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
+	$(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+#=============================================================================
+# Target rules for targets named kempston-mod
+
+# Build rule for target.
+kempston-mod: cmake_check_build_system
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 kempston-mod
+.PHONY : kempston-mod
+
+# fast build rule for target.
+kempston-mod/fast:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/build
+.PHONY : kempston-mod/fast
+
+#=============================================================================
+# Target rules for targets named ELF2UF2Build
+
+# Build rule for target.
+ELF2UF2Build: cmake_check_build_system
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ELF2UF2Build
+.PHONY : ELF2UF2Build
+
+# fast build rule for target.
+ELF2UF2Build/fast:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/ELF2UF2Build.dir/build.make CMakeFiles/ELF2UF2Build.dir/build
+.PHONY : ELF2UF2Build/fast
+
+#=============================================================================
+# Target rules for targets named bs2_default
+
+# Build rule for target.
+bs2_default: cmake_check_build_system
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 bs2_default
+.PHONY : bs2_default
+
+# fast build rule for target.
+bs2_default/fast:
+	$(MAKE) $(MAKESILENT) -f pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build.make pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/build
+.PHONY : bs2_default/fast
+
+#=============================================================================
+# Target rules for targets named bs2_default_bin
+
+# Build rule for target.
+bs2_default_bin: cmake_check_build_system
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 bs2_default_bin
+.PHONY : bs2_default_bin
+
+# fast build rule for target.
+bs2_default_bin/fast:
+	$(MAKE) $(MAKESILENT) -f pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default_bin.dir/build.make pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default_bin.dir/build
+.PHONY : bs2_default_bin/fast
+
+#=============================================================================
+# Target rules for targets named bs2_default_padded_checksummed_asm
+
+# Build rule for target.
+bs2_default_padded_checksummed_asm: cmake_check_build_system
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 bs2_default_padded_checksummed_asm
+.PHONY : bs2_default_padded_checksummed_asm
+
+# fast build rule for target.
+bs2_default_padded_checksummed_asm/fast:
+	$(MAKE) $(MAKESILENT) -f pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/build.make pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default_padded_checksummed_asm.dir/build
+.PHONY : bs2_default_padded_checksummed_asm/fast
+
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.obj: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.obj
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.obj
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.obj
+
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.i: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.i
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.i
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.i
+
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.s: pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.s
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.s
+.PHONY : pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.c.s
+
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.obj: pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.i: pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.s: pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.obj: pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.i: pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.s: pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.obj: pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.i: pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.s: pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.obj: pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.i: pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.s: pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.obj: pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.i: pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.s: pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.obj: pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.i: pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.s: pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.obj: pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.i: pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.s: pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.obj: pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.i: pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.s: pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.obj: pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.i: pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.s: pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.obj: pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.i: pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.s: pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.obj: pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.i: pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.s: pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.s
+
+pico-sdk/lib/tinyusb/src/class/video/video_device.obj: pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj
+
+pico-sdk/lib/tinyusb/src/class/video/video_device.i: pico-sdk/lib/tinyusb/src/class/video/video_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/class/video/video_device.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/video/video_device.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.c.i
+
+pico-sdk/lib/tinyusb/src/class/video/video_device.s: pico-sdk/lib/tinyusb/src/class/video/video_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/class/video/video_device.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/class/video/video_device.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/class/video/video_device.c.s
+
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.obj: pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
+
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.i: pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.i
+
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.s: pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.s
+
+pico-sdk/lib/tinyusb/src/device/usbd.obj: pico-sdk/lib/tinyusb/src/device/usbd.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/device/usbd.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.c.obj
+
+pico-sdk/lib/tinyusb/src/device/usbd.i: pico-sdk/lib/tinyusb/src/device/usbd.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/device/usbd.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.c.i
+
+pico-sdk/lib/tinyusb/src/device/usbd.s: pico-sdk/lib/tinyusb/src/device/usbd.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/device/usbd.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd.c.s
+
+pico-sdk/lib/tinyusb/src/device/usbd_control.obj: pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj
+
+pico-sdk/lib/tinyusb/src/device/usbd_control.i: pico-sdk/lib/tinyusb/src/device/usbd_control.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/device/usbd_control.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd_control.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.c.i
+
+pico-sdk/lib/tinyusb/src/device/usbd_control.s: pico-sdk/lib/tinyusb/src/device/usbd_control.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/device/usbd_control.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/device/usbd_control.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/device/usbd_control.c.s
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.obj: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.i: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.i
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.s: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.s
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.obj: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.i: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.i
+
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.s: pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.s
+
+pico-sdk/lib/tinyusb/src/tusb.obj: pico-sdk/lib/tinyusb/src/tusb.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.obj
+
+# target to build an object file
+pico-sdk/lib/tinyusb/src/tusb.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/tusb.c.obj
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.c.obj
+
+pico-sdk/lib/tinyusb/src/tusb.i: pico-sdk/lib/tinyusb/src/tusb.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.i
+
+# target to preprocess a source file
+pico-sdk/lib/tinyusb/src/tusb.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/tusb.c.i
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.c.i
+
+pico-sdk/lib/tinyusb/src/tusb.s: pico-sdk/lib/tinyusb/src/tusb.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.s
+
+# target to generate assembly for a file
+pico-sdk/lib/tinyusb/src/tusb.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/lib/tinyusb/src/tusb.c.s
+.PHONY : pico-sdk/lib/tinyusb/src/tusb.c.s
+
+pico-sdk/src/common/pico_sync/critical_section.obj: pico-sdk/src/common/pico_sync/critical_section.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_sync/critical_section.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/critical_section.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.c.obj
+
+pico-sdk/src/common/pico_sync/critical_section.i: pico-sdk/src/common/pico_sync/critical_section.c.i
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_sync/critical_section.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/critical_section.c.i
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.c.i
+
+pico-sdk/src/common/pico_sync/critical_section.s: pico-sdk/src/common/pico_sync/critical_section.c.s
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_sync/critical_section.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/critical_section.c.s
+.PHONY : pico-sdk/src/common/pico_sync/critical_section.c.s
+
+pico-sdk/src/common/pico_sync/lock_core.obj: pico-sdk/src/common/pico_sync/lock_core.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_sync/lock_core.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/lock_core.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.c.obj
+
+pico-sdk/src/common/pico_sync/lock_core.i: pico-sdk/src/common/pico_sync/lock_core.c.i
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_sync/lock_core.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/lock_core.c.i
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.c.i
+
+pico-sdk/src/common/pico_sync/lock_core.s: pico-sdk/src/common/pico_sync/lock_core.c.s
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_sync/lock_core.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/lock_core.c.s
+.PHONY : pico-sdk/src/common/pico_sync/lock_core.c.s
+
+pico-sdk/src/common/pico_sync/mutex.obj: pico-sdk/src/common/pico_sync/mutex.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/mutex.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_sync/mutex.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/mutex.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/mutex.c.obj
+
+pico-sdk/src/common/pico_sync/mutex.i: pico-sdk/src/common/pico_sync/mutex.c.i
+.PHONY : pico-sdk/src/common/pico_sync/mutex.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_sync/mutex.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/mutex.c.i
+.PHONY : pico-sdk/src/common/pico_sync/mutex.c.i
+
+pico-sdk/src/common/pico_sync/mutex.s: pico-sdk/src/common/pico_sync/mutex.c.s
+.PHONY : pico-sdk/src/common/pico_sync/mutex.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_sync/mutex.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/mutex.c.s
+.PHONY : pico-sdk/src/common/pico_sync/mutex.c.s
+
+pico-sdk/src/common/pico_sync/sem.obj: pico-sdk/src/common/pico_sync/sem.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/sem.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_sync/sem.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/sem.c.obj
+.PHONY : pico-sdk/src/common/pico_sync/sem.c.obj
+
+pico-sdk/src/common/pico_sync/sem.i: pico-sdk/src/common/pico_sync/sem.c.i
+.PHONY : pico-sdk/src/common/pico_sync/sem.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_sync/sem.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/sem.c.i
+.PHONY : pico-sdk/src/common/pico_sync/sem.c.i
+
+pico-sdk/src/common/pico_sync/sem.s: pico-sdk/src/common/pico_sync/sem.c.s
+.PHONY : pico-sdk/src/common/pico_sync/sem.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_sync/sem.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_sync/sem.c.s
+.PHONY : pico-sdk/src/common/pico_sync/sem.c.s
+
+pico-sdk/src/common/pico_time/time.obj: pico-sdk/src/common/pico_time/time.c.obj
+.PHONY : pico-sdk/src/common/pico_time/time.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_time/time.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/time.c.obj
+.PHONY : pico-sdk/src/common/pico_time/time.c.obj
+
+pico-sdk/src/common/pico_time/time.i: pico-sdk/src/common/pico_time/time.c.i
+.PHONY : pico-sdk/src/common/pico_time/time.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_time/time.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/time.c.i
+.PHONY : pico-sdk/src/common/pico_time/time.c.i
+
+pico-sdk/src/common/pico_time/time.s: pico-sdk/src/common/pico_time/time.c.s
+.PHONY : pico-sdk/src/common/pico_time/time.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_time/time.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/time.c.s
+.PHONY : pico-sdk/src/common/pico_time/time.c.s
+
+pico-sdk/src/common/pico_time/timeout_helper.obj: pico-sdk/src/common/pico_time/timeout_helper.c.obj
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_time/timeout_helper.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/timeout_helper.c.obj
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.c.obj
+
+pico-sdk/src/common/pico_time/timeout_helper.i: pico-sdk/src/common/pico_time/timeout_helper.c.i
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_time/timeout_helper.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/timeout_helper.c.i
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.c.i
+
+pico-sdk/src/common/pico_time/timeout_helper.s: pico-sdk/src/common/pico_time/timeout_helper.c.s
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_time/timeout_helper.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_time/timeout_helper.c.s
+.PHONY : pico-sdk/src/common/pico_time/timeout_helper.c.s
+
+pico-sdk/src/common/pico_util/datetime.obj: pico-sdk/src/common/pico_util/datetime.c.obj
+.PHONY : pico-sdk/src/common/pico_util/datetime.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_util/datetime.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/datetime.c.obj
+.PHONY : pico-sdk/src/common/pico_util/datetime.c.obj
+
+pico-sdk/src/common/pico_util/datetime.i: pico-sdk/src/common/pico_util/datetime.c.i
+.PHONY : pico-sdk/src/common/pico_util/datetime.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_util/datetime.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/datetime.c.i
+.PHONY : pico-sdk/src/common/pico_util/datetime.c.i
+
+pico-sdk/src/common/pico_util/datetime.s: pico-sdk/src/common/pico_util/datetime.c.s
+.PHONY : pico-sdk/src/common/pico_util/datetime.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_util/datetime.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/datetime.c.s
+.PHONY : pico-sdk/src/common/pico_util/datetime.c.s
+
+pico-sdk/src/common/pico_util/pheap.obj: pico-sdk/src/common/pico_util/pheap.c.obj
+.PHONY : pico-sdk/src/common/pico_util/pheap.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_util/pheap.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/pheap.c.obj
+.PHONY : pico-sdk/src/common/pico_util/pheap.c.obj
+
+pico-sdk/src/common/pico_util/pheap.i: pico-sdk/src/common/pico_util/pheap.c.i
+.PHONY : pico-sdk/src/common/pico_util/pheap.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_util/pheap.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/pheap.c.i
+.PHONY : pico-sdk/src/common/pico_util/pheap.c.i
+
+pico-sdk/src/common/pico_util/pheap.s: pico-sdk/src/common/pico_util/pheap.c.s
+.PHONY : pico-sdk/src/common/pico_util/pheap.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_util/pheap.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/pheap.c.s
+.PHONY : pico-sdk/src/common/pico_util/pheap.c.s
+
+pico-sdk/src/common/pico_util/queue.obj: pico-sdk/src/common/pico_util/queue.c.obj
+.PHONY : pico-sdk/src/common/pico_util/queue.obj
+
+# target to build an object file
+pico-sdk/src/common/pico_util/queue.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/queue.c.obj
+.PHONY : pico-sdk/src/common/pico_util/queue.c.obj
+
+pico-sdk/src/common/pico_util/queue.i: pico-sdk/src/common/pico_util/queue.c.i
+.PHONY : pico-sdk/src/common/pico_util/queue.i
+
+# target to preprocess a source file
+pico-sdk/src/common/pico_util/queue.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/queue.c.i
+.PHONY : pico-sdk/src/common/pico_util/queue.c.i
+
+pico-sdk/src/common/pico_util/queue.s: pico-sdk/src/common/pico_util/queue.c.s
+.PHONY : pico-sdk/src/common/pico_util/queue.s
+
+# target to generate assembly for a file
+pico-sdk/src/common/pico_util/queue.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/common/pico_util/queue.c.s
+.PHONY : pico-sdk/src/common/pico_util/queue.c.s
+
+pico-sdk/src/rp2_common/hardware_claim/claim.obj: pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_claim/claim.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
+
+pico-sdk/src/rp2_common/hardware_claim/claim.i: pico-sdk/src/rp2_common/hardware_claim/claim.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_claim/claim.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_claim/claim.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.c.i
+
+pico-sdk/src/rp2_common/hardware_claim/claim.s: pico-sdk/src/rp2_common/hardware_claim/claim.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_claim/claim.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_claim/claim.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_claim/claim.c.s
+
+pico-sdk/src/rp2_common/hardware_clocks/clocks.obj: pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
+
+pico-sdk/src/rp2_common/hardware_clocks/clocks.i: pico-sdk/src/rp2_common/hardware_clocks/clocks.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_clocks/clocks.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.c.i
+
+pico-sdk/src/rp2_common/hardware_clocks/clocks.s: pico-sdk/src/rp2_common/hardware_clocks/clocks.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_clocks/clocks.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_clocks/clocks.c.s
+
+pico-sdk/src/rp2_common/hardware_divider/divider.obj: pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_divider/divider.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_divider/divider.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
+
+pico-sdk/src/rp2_common/hardware_gpio/gpio.obj: pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
+
+pico-sdk/src/rp2_common/hardware_gpio/gpio.i: pico-sdk/src/rp2_common/hardware_gpio/gpio.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_gpio/gpio.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.c.i
+
+pico-sdk/src/rp2_common/hardware_gpio/gpio.s: pico-sdk/src/rp2_common/hardware_gpio/gpio.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_gpio/gpio.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_gpio/gpio.c.s
+
+pico-sdk/src/rp2_common/hardware_irq/irq.obj: pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_irq/irq.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
+
+pico-sdk/src/rp2_common/hardware_irq/irq.i: pico-sdk/src/rp2_common/hardware_irq/irq.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_irq/irq.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_irq/irq.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.c.i
+
+pico-sdk/src/rp2_common/hardware_irq/irq.s: pico-sdk/src/rp2_common/hardware_irq/irq.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_irq/irq.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_irq/irq.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq.c.s
+
+pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.obj: pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
+
+pico-sdk/src/rp2_common/hardware_pll/pll.obj: pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_pll/pll.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
+
+pico-sdk/src/rp2_common/hardware_pll/pll.i: pico-sdk/src/rp2_common/hardware_pll/pll.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_pll/pll.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_pll/pll.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.c.i
+
+pico-sdk/src/rp2_common/hardware_pll/pll.s: pico-sdk/src/rp2_common/hardware_pll/pll.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_pll/pll.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_pll/pll.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_pll/pll.c.s
+
+pico-sdk/src/rp2_common/hardware_sync/sync.obj: pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_sync/sync.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
+
+pico-sdk/src/rp2_common/hardware_sync/sync.i: pico-sdk/src/rp2_common/hardware_sync/sync.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_sync/sync.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_sync/sync.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.c.i
+
+pico-sdk/src/rp2_common/hardware_sync/sync.s: pico-sdk/src/rp2_common/hardware_sync/sync.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_sync/sync.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_sync/sync.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_sync/sync.c.s
+
+pico-sdk/src/rp2_common/hardware_timer/timer.obj: pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_timer/timer.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
+
+pico-sdk/src/rp2_common/hardware_timer/timer.i: pico-sdk/src/rp2_common/hardware_timer/timer.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_timer/timer.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_timer/timer.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.c.i
+
+pico-sdk/src/rp2_common/hardware_timer/timer.s: pico-sdk/src/rp2_common/hardware_timer/timer.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_timer/timer.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_timer/timer.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_timer/timer.c.s
+
+pico-sdk/src/rp2_common/hardware_uart/uart.obj: pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_uart/uart.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
+
+pico-sdk/src/rp2_common/hardware_uart/uart.i: pico-sdk/src/rp2_common/hardware_uart/uart.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_uart/uart.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_uart/uart.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.c.i
+
+pico-sdk/src/rp2_common/hardware_uart/uart.s: pico-sdk/src/rp2_common/hardware_uart/uart.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_uart/uart.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_uart/uart.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_uart/uart.c.s
+
+pico-sdk/src/rp2_common/hardware_vreg/vreg.obj: pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
+
+pico-sdk/src/rp2_common/hardware_vreg/vreg.i: pico-sdk/src/rp2_common/hardware_vreg/vreg.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_vreg/vreg.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.c.i
+
+pico-sdk/src/rp2_common/hardware_vreg/vreg.s: pico-sdk/src/rp2_common/hardware_vreg/vreg.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_vreg/vreg.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_vreg/vreg.c.s
+
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.obj: pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
+
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.i: pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.i
+
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.s: pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.s
+
+pico-sdk/src/rp2_common/hardware_xosc/xosc.obj: pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
+
+pico-sdk/src/rp2_common/hardware_xosc/xosc.i: pico-sdk/src/rp2_common/hardware_xosc/xosc.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/hardware_xosc/xosc.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.i
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.c.i
+
+pico-sdk/src/rp2_common/hardware_xosc/xosc.s: pico-sdk/src/rp2_common/hardware_xosc/xosc.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/hardware_xosc/xosc.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.s
+.PHONY : pico-sdk/src/rp2_common/hardware_xosc/xosc.c.s
+
+pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.obj: pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
+
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.obj: pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
+
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.i: pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.i
+
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.s: pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.s
+
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.obj: pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.obj
+
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.i: pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.i
+
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.s: pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.c.s
+
+pico-sdk/src/rp2_common/pico_divider/divider.obj: pico-sdk/src/rp2_common/pico_divider/divider.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_divider/divider.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_divider/divider.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_divider/divider.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_divider/divider.S.obj
+
+pico-sdk/src/rp2_common/pico_double/double_aeabi.obj: pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_aeabi.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
+
+pico-sdk/src/rp2_common/pico_double/double_init_rom.obj: pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
+
+pico-sdk/src/rp2_common/pico_double/double_init_rom.i: pico-sdk/src/rp2_common/pico_double/double_init_rom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_double/double_init_rom.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.c.i
+
+pico-sdk/src/rp2_common/pico_double/double_init_rom.s: pico-sdk/src/rp2_common/pico_double/double_init_rom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_double/double_init_rom.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_init_rom.c.s
+
+pico-sdk/src/rp2_common/pico_double/double_math.obj: pico-sdk/src/rp2_common/pico_double/double_math.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_double/double_math.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_math.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.c.obj
+
+pico-sdk/src/rp2_common/pico_double/double_math.i: pico-sdk/src/rp2_common/pico_double/double_math.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_double/double_math.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_math.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.c.i
+
+pico-sdk/src/rp2_common/pico_double/double_math.s: pico-sdk/src/rp2_common/pico_double/double_math.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_double/double_math.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_math.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_math.c.s
+
+pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.obj: pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
+
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.obj: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
+
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.i: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.i
+
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.s: pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.s
+
+pico-sdk/src/rp2_common/pico_float/float_aeabi.obj: pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_aeabi.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
+
+pico-sdk/src/rp2_common/pico_float/float_init_rom.obj: pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
+
+pico-sdk/src/rp2_common/pico_float/float_init_rom.i: pico-sdk/src/rp2_common/pico_float/float_init_rom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_float/float_init_rom.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.c.i
+
+pico-sdk/src/rp2_common/pico_float/float_init_rom.s: pico-sdk/src/rp2_common/pico_float/float_init_rom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_float/float_init_rom.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_init_rom.c.s
+
+pico-sdk/src/rp2_common/pico_float/float_math.obj: pico-sdk/src/rp2_common/pico_float/float_math.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_float/float_math.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_math.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.c.obj
+
+pico-sdk/src/rp2_common/pico_float/float_math.i: pico-sdk/src/rp2_common/pico_float/float_math.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_float/float_math.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_math.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.c.i
+
+pico-sdk/src/rp2_common/pico_float/float_math.s: pico-sdk/src/rp2_common/pico_float/float_math.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_float/float_math.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_math.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_math.c.s
+
+pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.obj: pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
+
+pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.obj: pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
+
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.obj: pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
+
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.i: pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.i
+
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.s: pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.s
+
+pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.obj: pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
+
+pico-sdk/src/rp2_common/pico_platform/platform.obj: pico-sdk/src/rp2_common/pico_platform/platform.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_platform/platform.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.c.obj
+
+pico-sdk/src/rp2_common/pico_platform/platform.i: pico-sdk/src/rp2_common/pico_platform/platform.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_platform/platform.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_platform/platform.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.c.i
+
+pico-sdk/src/rp2_common/pico_platform/platform.s: pico-sdk/src/rp2_common/pico_platform/platform.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_platform/platform.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_platform/platform.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_platform/platform.c.s
+
+pico-sdk/src/rp2_common/pico_printf/printf.obj: pico-sdk/src/rp2_common/pico_printf/printf.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_printf/printf.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_printf/printf.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.c.obj
+
+pico-sdk/src/rp2_common/pico_printf/printf.i: pico-sdk/src/rp2_common/pico_printf/printf.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_printf/printf.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_printf/printf.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.c.i
+
+pico-sdk/src/rp2_common/pico_printf/printf.s: pico-sdk/src/rp2_common/pico_printf/printf.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_printf/printf.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_printf/printf.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_printf/printf.c.s
+
+pico-sdk/src/rp2_common/pico_runtime/runtime.obj: pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
+
+pico-sdk/src/rp2_common/pico_runtime/runtime.i: pico-sdk/src/rp2_common/pico_runtime/runtime.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_runtime/runtime.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_runtime/runtime.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.c.i
+
+pico-sdk/src/rp2_common/pico_runtime/runtime.s: pico-sdk/src/rp2_common/pico_runtime/runtime.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_runtime/runtime.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_runtime/runtime.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_runtime/runtime.c.s
+
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.obj: pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
+
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.i: pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.i
+
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.s: pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.s
+
+pico-sdk/src/rp2_common/pico_standard_link/crt0.obj: pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/crt0.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
+
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.obj: pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
+
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.i: pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.i
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.i
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.i
+
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.s: pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.s
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.s
+.PHONY : pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.s
+
+pico-sdk/src/rp2_common/pico_stdio/stdio.obj: pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
+
+pico-sdk/src/rp2_common/pico_stdio/stdio.i: pico-sdk/src/rp2_common/pico_stdio/stdio.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_stdio/stdio.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio/stdio.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.c.i
+
+pico-sdk/src/rp2_common/pico_stdio/stdio.s: pico-sdk/src/rp2_common/pico_stdio/stdio.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_stdio/stdio.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio/stdio.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdio/stdio.c.s
+
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.obj: pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
+
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.i: pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.i
+
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.s: pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.s
+
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.obj: pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.obj
+
+# target to build an object file
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
+
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.i: pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.i
+
+# target to preprocess a source file
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.i
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.i
+
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.s: pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.s
+
+# target to generate assembly for a file
+pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.s
+.PHONY : pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.s
+
+src/main.obj: src/main.c.obj
+.PHONY : src/main.obj
+
+# target to build an object file
+src/main.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/main.c.obj
+.PHONY : src/main.c.obj
+
+src/main.i: src/main.c.i
+.PHONY : src/main.i
+
+# target to preprocess a source file
+src/main.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/main.c.i
+.PHONY : src/main.c.i
+
+src/main.s: src/main.c.s
+.PHONY : src/main.s
+
+# target to generate assembly for a file
+src/main.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/main.c.s
+.PHONY : src/main.c.s
+
+src/usb_descriptors.obj: src/usb_descriptors.c.obj
+.PHONY : src/usb_descriptors.obj
+
+# target to build an object file
+src/usb_descriptors.c.obj:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/usb_descriptors.c.obj
+.PHONY : src/usb_descriptors.c.obj
+
+src/usb_descriptors.i: src/usb_descriptors.c.i
+.PHONY : src/usb_descriptors.i
+
+# target to preprocess a source file
+src/usb_descriptors.c.i:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/usb_descriptors.c.i
+.PHONY : src/usb_descriptors.c.i
+
+src/usb_descriptors.s: src/usb_descriptors.c.s
+.PHONY : src/usb_descriptors.s
+
+# target to generate assembly for a file
+src/usb_descriptors.c.s:
+	$(MAKE) $(MAKESILENT) -f CMakeFiles/kempston-mod.dir/build.make CMakeFiles/kempston-mod.dir/src/usb_descriptors.c.s
+.PHONY : src/usb_descriptors.c.s
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... rebuild_cache"
+	@echo "... ELF2UF2Build"
+	@echo "... bs2_default_bin"
+	@echo "... bs2_default_padded_checksummed_asm"
+	@echo "... bs2_default"
+	@echo "... kempston-mod"
+	@echo "... pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.obj"
+	@echo "... pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.i"
+	@echo "... pico-sdk/lib/tinyusb/hw/bsp/rp2040/family.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/audio/audio_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/audio/audio_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/audio/audio_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/hid/hid_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/hid/hid_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/hid/hid_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/midi/midi_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/midi/midi_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/midi/midi_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/msc/msc_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/msc/msc_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/msc/msc_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ncm_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ncm_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/net/ncm_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/class/video/video_device.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/class/video/video_device.i"
+	@echo "... pico-sdk/lib/tinyusb/src/class/video/video_device.s"
+	@echo "... pico-sdk/lib/tinyusb/src/common/tusb_fifo.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/common/tusb_fifo.i"
+	@echo "... pico-sdk/lib/tinyusb/src/common/tusb_fifo.s"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd.i"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd.s"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd_control.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd_control.i"
+	@echo "... pico-sdk/lib/tinyusb/src/device/usbd_control.s"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.i"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.s"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.i"
+	@echo "... pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.s"
+	@echo "... pico-sdk/lib/tinyusb/src/tusb.obj"
+	@echo "... pico-sdk/lib/tinyusb/src/tusb.i"
+	@echo "... pico-sdk/lib/tinyusb/src/tusb.s"
+	@echo "... pico-sdk/src/common/pico_sync/critical_section.obj"
+	@echo "... pico-sdk/src/common/pico_sync/critical_section.i"
+	@echo "... pico-sdk/src/common/pico_sync/critical_section.s"
+	@echo "... pico-sdk/src/common/pico_sync/lock_core.obj"
+	@echo "... pico-sdk/src/common/pico_sync/lock_core.i"
+	@echo "... pico-sdk/src/common/pico_sync/lock_core.s"
+	@echo "... pico-sdk/src/common/pico_sync/mutex.obj"
+	@echo "... pico-sdk/src/common/pico_sync/mutex.i"
+	@echo "... pico-sdk/src/common/pico_sync/mutex.s"
+	@echo "... pico-sdk/src/common/pico_sync/sem.obj"
+	@echo "... pico-sdk/src/common/pico_sync/sem.i"
+	@echo "... pico-sdk/src/common/pico_sync/sem.s"
+	@echo "... pico-sdk/src/common/pico_time/time.obj"
+	@echo "... pico-sdk/src/common/pico_time/time.i"
+	@echo "... pico-sdk/src/common/pico_time/time.s"
+	@echo "... pico-sdk/src/common/pico_time/timeout_helper.obj"
+	@echo "... pico-sdk/src/common/pico_time/timeout_helper.i"
+	@echo "... pico-sdk/src/common/pico_time/timeout_helper.s"
+	@echo "... pico-sdk/src/common/pico_util/datetime.obj"
+	@echo "... pico-sdk/src/common/pico_util/datetime.i"
+	@echo "... pico-sdk/src/common/pico_util/datetime.s"
+	@echo "... pico-sdk/src/common/pico_util/pheap.obj"
+	@echo "... pico-sdk/src/common/pico_util/pheap.i"
+	@echo "... pico-sdk/src/common/pico_util/pheap.s"
+	@echo "... pico-sdk/src/common/pico_util/queue.obj"
+	@echo "... pico-sdk/src/common/pico_util/queue.i"
+	@echo "... pico-sdk/src/common/pico_util/queue.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_claim/claim.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_claim/claim.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_claim/claim.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_clocks/clocks.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_clocks/clocks.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_clocks/clocks.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_divider/divider.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_gpio/gpio.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_gpio/gpio.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_gpio/gpio.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_irq/irq.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_irq/irq.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_irq/irq.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_pll/pll.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_pll/pll.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_pll/pll.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_sync/sync.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_sync/sync.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_sync/sync.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_timer/timer.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_timer/timer.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_timer/timer.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_uart/uart.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_uart/uart.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_uart/uart.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_vreg/vreg.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_vreg/vreg.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_vreg/vreg.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_watchdog/watchdog.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_watchdog/watchdog.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_watchdog/watchdog.s"
+	@echo "... pico-sdk/src/rp2_common/hardware_xosc/xosc.obj"
+	@echo "... pico-sdk/src/rp2_common/hardware_xosc/xosc.i"
+	@echo "... pico-sdk/src/rp2_common/hardware_xosc/xosc.s"
+	@echo "... pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_bootrom/bootrom.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_bootrom/bootrom.i"
+	@echo "... pico-sdk/src/rp2_common/pico_bootrom/bootrom.s"
+	@echo "... pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.i"
+	@echo "... pico-sdk/src/rp2_common/pico_bootsel_via_double_reset/pico_bootsel_via_double_reset.s"
+	@echo "... pico-sdk/src/rp2_common/pico_divider/divider.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_aeabi.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_init_rom.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_init_rom.i"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_init_rom.s"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_math.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_math.i"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_math.s"
+	@echo "... pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.i"
+	@echo "... pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.s"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_aeabi.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_init_rom.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_init_rom.i"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_init_rom.s"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_math.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_math.i"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_math.s"
+	@echo "... pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_malloc/pico_malloc.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_malloc/pico_malloc.i"
+	@echo "... pico-sdk/src/rp2_common/pico_malloc/pico_malloc.s"
+	@echo "... pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_platform/platform.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_platform/platform.i"
+	@echo "... pico-sdk/src/rp2_common/pico_platform/platform.s"
+	@echo "... pico-sdk/src/rp2_common/pico_printf/printf.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_printf/printf.i"
+	@echo "... pico-sdk/src/rp2_common/pico_printf/printf.s"
+	@echo "... pico-sdk/src/rp2_common/pico_runtime/runtime.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_runtime/runtime.i"
+	@echo "... pico-sdk/src/rp2_common/pico_runtime/runtime.s"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/binary_info.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/binary_info.i"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/binary_info.s"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/crt0.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/new_delete.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/new_delete.i"
+	@echo "... pico-sdk/src/rp2_common/pico_standard_link/new_delete.s"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio/stdio.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio/stdio.i"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio/stdio.s"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.i"
+	@echo "... pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.s"
+	@echo "... pico-sdk/src/rp2_common/pico_stdlib/stdlib.obj"
+	@echo "... pico-sdk/src/rp2_common/pico_stdlib/stdlib.i"
+	@echo "... pico-sdk/src/rp2_common/pico_stdlib/stdlib.s"
+	@echo "... src/main.obj"
+	@echo "... src/main.i"
+	@echo "... src/main.s"
+	@echo "... src/usb_descriptors.obj"
+	@echo "... src/usb_descriptors.i"
+	@echo "... src/usb_descriptors.s"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+

+ 55 - 0
cmake_install.cmake

@@ -0,0 +1,55 @@
+# Install script for directory: /home/dan/src/kempston-mod
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX "/usr/local")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  if(BUILD_TYPE)
+    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  else()
+    set(CMAKE_INSTALL_CONFIG_NAME "Release")
+  endif()
+  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+  if(COMPONENT)
+    message(STATUS "Install component: \"${COMPONENT}\"")
+    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  else()
+    set(CMAKE_INSTALL_COMPONENT)
+  endif()
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+  set(CMAKE_CROSSCOMPILING "TRUE")
+endif()
+
+# Set default install directory permissions.
+if(NOT DEFINED CMAKE_OBJDUMP)
+  set(CMAKE_OBJDUMP "/usr/bin/arm-none-eabi-objdump")
+endif()
+
+if(NOT CMAKE_INSTALL_LOCAL_ONLY)
+  # Include the install script for each subdirectory.
+  include("/home/dan/src/kempston-mod/pico-sdk/cmake_install.cmake")
+
+endif()
+
+if(CMAKE_INSTALL_COMPONENT)
+  set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
+else()
+  set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
+endif()
+
+string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
+       "${CMAKE_INSTALL_MANIFEST_FILES}")
+file(WRITE "/home/dan/src/kempston-mod/${CMAKE_INSTALL_MANIFEST}"
+     "${CMAKE_INSTALL_MANIFEST_CONTENT}")

+ 4 - 0
pico-sdk/.github/pull_request_template.md

@@ -0,0 +1,4 @@
+_Instructions: (please delete)_
+ - _please do not submit against `master`, use `develop` instead_
+ - _please make sure there is an associated issue for your PR, and reference it via "Fixes #num" in the description_
+ - _please enter a detailed description_

+ 49 - 0
pico-sdk/.github/workflows/cmake.yml

@@ -0,0 +1,49 @@
+name: CMake
+on: [push, pull_request]
+
+env:
+  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
+  BUILD_TYPE: Release
+
+jobs:
+  build:
+    if: github.repository_owner == 'raspberrypi'
+    runs-on: [self-hosted, Linux, X64]
+
+    steps:
+    - name: Clean workspace
+      run: |
+        echo "Cleaning up previous run"
+        rm -rf "${{ github.workspace }}"
+        mkdir -p "${{ github.workspace }}"
+
+    - name: Checkout repo
+      uses: actions/checkout@v2
+
+    - name: Checkout submodules
+      run: git submodule update --init
+
+    - name: Create Build Environment
+      # Some projects don't allow in-source building, so create a separate build directory
+      # We'll use this as our working directory for all subsequent commands
+      run: cmake -E make_directory ${{github.workspace}}/build
+
+    - name: Configure CMake
+      # Use a bash shell so we can use the same syntax for environment variable
+      # access regardless of the host operating system
+      shell: bash
+      working-directory: ${{github.workspace}}/build
+      # Note the current convention is to use the -S and -B options here to specify source 
+      # and build directories, but this is only available with CMake 3.13 and higher.  
+      # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
+      run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
+
+    - name: Get core count
+      id: core_count
+      run : cat /proc/cpuinfo  | grep processor | wc -l
+
+    - name: Build
+      working-directory: ${{github.workspace}}/build
+      shell: bash
+      # Execute the build.  You can specify a specific target with "--target <NAME>"
+      run: cmake --build . --config $BUILD_TYPE --parallel ${{steps.core_count.outputs.output}}

+ 5 - 0
pico-sdk/.gitignore

@@ -0,0 +1,5 @@
+.idea
+.vscode
+cmake-*
+.DS_Store
+build

+ 3 - 0
pico-sdk/.gitmodules

@@ -0,0 +1,3 @@
+[submodule "tinyusb"]
+	path = lib/tinyusb
+	url = https://github.com/hathach/tinyusb.git

+ 16 - 0
pico-sdk/CMakeFiles/CMakeDirectoryInformation.cmake

@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/dan/src/kempston-mod")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/dan/src/kempston-mod")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})

+ 1 - 0
pico-sdk/CMakeFiles/progress.marks

@@ -0,0 +1 @@
+2

+ 57 - 0
pico-sdk/CMakeLists.txt

@@ -0,0 +1,57 @@
+cmake_minimum_required(VERSION 3.13)
+
+# Note: this CMakeLists.txt can be used as a top-level CMakeLists.txt for the SDK itself. For all other uses
+# it is included as a subdirectory via the pico_sdk_init() method provided by pico_sdk_init.cmake
+if (NOT TARGET _pico_sdk_inclusion_marker)
+    add_library(_pico_sdk_inclusion_marker INTERFACE)
+    # This is a no-op unless we are the top-level CMakeLists.txt
+    include(pico_sdk_init.cmake)
+
+    project(pico_sdk C CXX ASM)
+
+    message("Build type is ${CMAKE_BUILD_TYPE}")
+    if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+        if (PICO_DEOPTIMIZED_DEBUG)
+            message("Using fully de-optimized debug build (set PICO_DEOPTIMIZED_DEBUG=0 to optimize)")
+        else()
+            message("Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)")
+        endif()
+    endif()
+
+    pico_is_top_level_project(PICO_SDK_TOP_LEVEL_PROJECT)
+
+    set(CMAKE_C_STANDARD 11)
+    set(CMAKE_CXX_STANDARD 11)
+
+    if (NOT PICO_SDK_TOP_LEVEL_PROJECT)
+        set(PICO_SDK 1 PARENT_SCOPE)
+    endif()
+
+    # allow customization
+    add_sub_list_dirs(PICO_SDK_PRE_LIST_DIRS)
+    add_sub_list_files(PICO_SDK_PRE_LIST_FILES)
+
+    add_subdirectory(tools)
+    add_subdirectory(src)
+
+    # allow customization
+    add_sub_list_dirs(PICO_SDK_POST_LIST_DIRS)
+    add_sub_list_files(PICO_SDK_POST_LIST_FILES)
+
+    if (PICO_SDK_TOP_LEVEL_PROJECT AND NOT DEFINED PICO_SDK_TESTS_ENABLED)
+        set(PICO_SDK_TESTS_ENABLED 1)
+    endif()
+    if (PICO_SDK_TESTS_ENABLED)
+        add_subdirectory(test)
+    endif ()
+
+    set(PICO_SDK_TESTS_ENABLED "${PICO_SDK_TESTS_ENABLED}" CACHE INTERNAL "Enable build of SDK tests")
+
+    # add docs at the end, as we gather documentation dirs as we go
+    add_subdirectory(docs)
+
+    if (NOT PICO_SDK_TOP_LEVEL_PROJECT)
+        pico_promote_common_scope_vars()
+    endif()
+endif()
+

+ 25 - 0
pico-sdk/CONTRIBUTING.md

@@ -0,0 +1,25 @@
+# Contributing to Raspberry Pi Pico C/C++ SDK
+
+## How to Report a Bug
+
+We use GitHub to host code, track [issues](https://github.com/raspberrypi/pico-sdk/issues) and feature requests, and to accept [pull requests](https://github.com/raspberrypi/pico-sdk/pulls). If you find think you have found a bug in the SDK please report it by [opening a new issue](https://github.com/raspberrypi/pico-sdk/issues/new). Please include as much detail as possible, and ideally some code to reproduce the problem.
+
+## How to Contribute Code
+
+In order to contribute new or updated code, you must first create a GitHub account and fork the original repository to your own account. You can make changes, save them in your repository, then [make a pull request](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) against this repository. The pull request will appear [in the repository](https://github.com/raspberrypi/pico-sdk/pulls) where it can be assessed by the maintainers, and if appropriate, merged with the official repository.
+
+**NOTE:** Development takes place on the `develop` branch in this repository. Please open your https://github.com/raspberrypi/pico-sdk/pulls[pull request] (PR) against the [`develop`](https://github.com/raspberrypi/pico-sdk/tree/develop) branch, pull requests against the `master` branch will automatically CI fail checks and will not be accepted. You will be asked to rebase your PR against `develop` and if you do not do so, your PR will be closed.
+
+While we are happy to take contributions, big or small, changes in the SDK may have knock-on effects in other places so it is possible that apparently benign pull requests that make seemingly small changes could be refused. 
+
+### Code Style
+
+If you are contributing new or updated code please match the existing code style, particularly:
+
+* Use 4 spaces for indentation rather than tabs.
+* Braces are required for everything except single line `if` statements.
+* Opening braces should not be placed on a new line.
+
+### Licensing 
+
+Code in this repository is lisensed under the [BSD-3 License](LICENSE.TXT). By contributing content to this repository you are agreeing to place your contributions under this licence.

+ 21 - 0
pico-sdk/LICENSE.TXT

@@ -0,0 +1,21 @@
+Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+   disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ 140 - 0
pico-sdk/Makefile

@@ -0,0 +1,140 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/dan/src/kempston-mod
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/dan/src/kempston-mod
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..."
+	/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
+	/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles /home/dan/src/kempston-mod/pico-sdk//CMakeFiles/progress.marks
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... rebuild_cache"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+

+ 158 - 0
pico-sdk/README.md

@@ -0,0 +1,158 @@
+# Raspberry Pi Pico SDK
+
+The Raspberry Pi Pico SDK (henceforth the SDK) provides the headers, libraries and build system
+necessary to write programs for the RP2040-based devices such as the Raspberry Pi Pico
+in C, C++ or assembly language.
+
+The SDK is designed to provide an API and programming environment that is familiar both to non-embedded C developers and embedded C developers alike.
+A single program runs on the device at a time and starts with a conventional `main()` method. Standard C/C++ libraries are supported along with
+C level libraries/APIs for accessing all of the RP2040's hardware include PIO (Programmable IO).
+
+Additionally the SDK provides higher level libraries for dealing with timers, synchronization, USB (TinyUSB) and multi-core programming
+along with various utilities.
+
+The SDK can be used to build anything from simple applications, to fully fledged runtime environments such as MicroPython, to low level software
+such as RP2040's on-chip bootrom itself.
+
+Additional libraries/APIs that are not yet ready for inclusion in the SDK can be found in [pico-extras](https://github.com/raspberrypi/pico-extras).
+
+# Documentation
+
+See [Getting Started with the Raspberry Pi Pico](https://rptl.io/pico-get-started) for information on how to setup your
+hardware, IDE/environment and for how to build and debug software for the Raspberry Pi Pico
+and other RP2040-based devices.
+
+See [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk) to learn more about programming using the
+SDK, to explore more advanced features, and for complete PDF-based API documentation.
+
+See [Online Raspberry Pi Pico SDK API docs](https://rptl.io/pico-doxygen) for HTML-based API documentation.
+
+# Example code
+
+See [pico-examples](https://github.com/raspberrypi/pico-examples) for example code you can build.
+
+# Quick-start your own project
+
+These instructions are extremely terse, and Linux-based only. For detailed steps,
+instructions for other platforms, and just in general, we recommend you see [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk)
+
+1. Install CMake (at least version 3.13), and GCC cross compiler
+   ```
+   sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
+   ```
+1. Set up your project to point to use the Raspberry Pi Pico SDK
+
+   * Either by cloning the SDK locally (most common) :
+      1. `git clone` this Raspberry Pi Pico SDK repository
+      1. Copy [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake)
+         from the SDK into your project directory
+      2. Set `PICO_SDK_PATH` to the SDK location in your environment, or pass it (`-DPICO_SDK_PATH=`) to cmake later.
+      3. Setup a `CMakeLists.txt` like:
+
+          ```cmake
+          cmake_minimum_required(VERSION 3.13)
+
+          # initialize the SDK based on PICO_SDK_PATH
+          # note: this must happen before project()
+          include(pico_sdk_import.cmake)
+
+          project(my_project)
+
+          # initialize the Raspberry Pi Pico SDK
+          pico_sdk_init()
+
+          # rest of your project
+
+          ```
+
+   * Or with the Raspberry Pi Pico SDK as a submodule :
+      1. Clone the SDK as a submodule called `pico-sdk`
+      1. Setup a `CMakeLists.txt` like:
+
+          ```cmake
+          cmake_minimum_required(VERSION 3.13)
+
+          # initialize pico-sdk from submodule
+          # note: this must happen before project()
+          include(pico-sdk/pico_sdk_init.cmake)
+
+          project(my_project)
+
+          # initialize the Raspberry Pi Pico SDK
+          pico_sdk_init()
+
+          # rest of your project
+
+          ```
+
+   * Or with automatic download from GitHub :
+      1. Copy [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake)
+         from the SDK into your project directory
+      1. Setup a `CMakeLists.txt` like:
+
+          ```cmake
+          cmake_minimum_required(VERSION 3.13)
+
+          # initialize pico-sdk from GIT
+          # (note this can come from environment, CMake cache etc)
+          set(PICO_SDK_FETCH_FROM_GIT on)
+
+          # pico_sdk_import.cmake is a single file copied from this SDK
+          # note: this must happen before project()
+          include(pico_sdk_import.cmake)
+
+          project(my_project)
+
+          # initialize the Raspberry Pi Pico SDK
+          pico_sdk_init()
+
+          # rest of your project
+
+          ```
+
+1. Write your code (see [pico-examples](https://github.com/raspberrypi/pico-examples) or the [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk) documentation for more information)
+
+   About the simplest you can do is a single source file (e.g. hello_world.c)
+
+   ```c
+   #include <stdio.h>
+   #include "pico/stdlib.h"
+
+   int main() {
+       setup_default_uart();
+       printf("Hello, world!\n");
+       return 0;
+   }
+   ```
+   And add the following to your `CMakeLists.txt`:
+
+   ```cmake
+   add_executable(hello_world
+       hello_world.c
+   )
+
+   # Add pico_stdlib library which aggregates commonly used features
+   target_link_libraries(hello_world pico_stdlib)
+
+   # create map/bin/hex/uf2 file in addition to ELF.
+   pico_add_extra_outputs(hello_world)
+   ```
+
+   Note this example uses the default UART for _stdout_;
+   if you want to use the default USB see the [hello-usb](https://github.com/raspberrypi/pico-examples/tree/master/hello_world/usb) example.
+
+
+1. Setup a CMake build directory.
+      For example, if not using an IDE:
+      ```
+      $ mkdir build
+      $ cd build
+      $ cmake ..
+      ```
+
+1. Make your target from the build directory you created.
+      ```sh
+      $ make hello_world
+      ```
+
+1. You now have `hello_world.elf` to load via a debugger, or `hello_world.uf2` that can be installed and run on your Raspberry Pi Pico via drag and drop.

+ 4 - 0
pico-sdk/cmake/Platform/PICO.cmake

@@ -0,0 +1,4 @@
+# this is included because toolchain file sets SYSTEM_NAME=PICO
+
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
+set(CMAKE_EXECUTABLE_SUFFIX .elf)

+ 29 - 0
pico-sdk/cmake/pico_pre_load_platform.cmake

@@ -0,0 +1,29 @@
+# PICO_CMAKE_CONFIG: PICO_PLATFORM, platform to build for e.g. rp2040/host, default=rp2040 or environment value, group=build
+if (DEFINED ENV{PICO_PLATFORM} AND (NOT PICO_PLATFORM))
+    set(PICO_PLATFORM $ENV{PICO_PLATFORM})
+    message("Using PICO_PLATFORM from environment ('${PICO_PLATFORM}')")
+else()
+    if (NOT PICO_PLATFORM)
+        set(PICO_PLATFORM "rp2040")
+        pico_message("Defaulting PICO_PLATFORM to ${PICO_PLATFORM} since not specified.")
+    else()
+        message("PICO platform is ${PICO_PLATFORM}.")
+    endif()
+endif ()
+
+set(PICO_PLATFORM ${PICO_PLATFORM} CACHE STRING "PICO Build platform (e.g. rp2040, host)")
+
+# PICO_CMAKE_CONFIG: PICO_CMAKE_RELOAD_PLATFORM_FILE, custom CMake file to use to set up the platform environment, default=none, group=build
+set(PICO_CMAKE_PRELOAD_PLATFORM_FILE "" CACHE INTERNAL "")
+set(PICO_CMAKE_PRELOAD_PLATFORM_DIR "${CMAKE_CURRENT_LIST_DIR}/preload/platforms" CACHE INTERNAL "")
+
+if (NOT PICO_CMAKE_PRELOAD_PLATFORM_FILE)
+    set(PICO_CMAKE_PRELOAD_PLATFORM_FILE ${PICO_CMAKE_PRELOAD_PLATFORM_DIR}/${PICO_PLATFORM}.cmake CACHE INTERNAL "")
+endif ()
+
+if (NOT EXISTS "${PICO_CMAKE_PRELOAD_PLATFORM_FILE}")
+    message(FATAL_ERROR "${PICO_CMAKE_PRELOAD_PLATFORM_FILE} does not exist. \
+    Either specify a valid PICO_PLATFORM (or PICO_CMAKE_PRELOAD_PLATFORM_FILE).")
+endif ()
+
+include(${PICO_CMAKE_PRELOAD_PLATFORM_FILE})

+ 43 - 0
pico-sdk/cmake/pico_pre_load_toolchain.cmake

@@ -0,0 +1,43 @@
+# PICO_CMAKE_CONFIG: PICO_TOOLCHAIN_PATH, Path to search for compiler, default=none (i.e. search system paths), group=build
+set(PICO_TOOLCHAIN_PATH "${PICO_TOOLCHAIN_PATH}" CACHE INTERNAL "")
+
+# Set a default build type if none was specified
+set(default_build_type "Release")
+
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+    message(STATUS "Defaulting build type to '${default_build_type}' since not specified.")
+    set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build, options are: 'Debug', 'Release', 'MinSizeRel', 'RelWithDebInfo'." FORCE)
+    # Set the possible values of build type for cmake-gui
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+            "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+endif()
+
+if (CMAKE_BUILD_TYPE STREQUAL "Default")
+    error("Default build type is NOT supported")
+endif()
+
+# PICO_CMAKE_CONFIG: PICO_COMPILER, Optionally specifies a different compiler (other than pico_arm_gcc.cmake) - this is not yet fully supported, default=none, group=build
+# If PICO_COMPILER is specified, set toolchain file to ${PICO_COMPILER}.cmake.
+if (DEFINED PICO_COMPILER)
+    if (DEFINED CMAKE_TOOLCHAIN_FILE)
+        get_filename_component(toolchain "${CMAKE_TOOLCHAIN_FILE}" NAME_WE)
+        if (NOT "${PICO_COMPILER}" STREQUAL "${toolchain}")
+            message(WARNING "CMAKE_TOOLCHAIN_FILE is already defined to ${toolchain}.cmake, you\
+                need to delete cache and reconfigure if you want to switch compiler.")
+        endif ()
+    else ()
+        set(toolchain_dir "${CMAKE_CURRENT_LIST_DIR}/preload/toolchains")
+        set(toolchain_file "${toolchain_dir}/${PICO_COMPILER}.cmake")
+        if (EXISTS "${toolchain_file}")
+            set(CMAKE_TOOLCHAIN_FILE "${toolchain_file}" CACHE INTERNAL "")
+        else ()
+            # todo improve message
+            message(FATAL_ERROR "Toolchain file \"${PICO_COMPILER}.cmake\" does not exist, please\
+                select one from \"cmake/toolchains\" folder.")
+        endif ()
+    endif ()
+    message("PICO compiler is ${PICO_COMPILER}")
+endif ()
+
+unset(PICO_COMPILER CACHE)
+

+ 28 - 0
pico-sdk/cmake/pico_utils.cmake

@@ -0,0 +1,28 @@
+function(pico_message param)
+    if (${ARGC} EQUAL 1)
+        message("${param}")
+        return()
+    endif ()
+
+    if (NOT ${ARGC} EQUAL 2)
+        message(FATAL_ERROR "Expect at most 2 arguments")
+    endif ()
+    message("${param}" "${ARGV1}")
+endfunction()
+
+macro(assert VAR MSG)
+    if (NOT ${VAR})
+        message(FATAL_ERROR "${MSG}")
+    endif ()
+endmacro()
+
+function(pico_find_in_paths OUT PATHS NAME)
+    foreach(PATH IN LISTS ${PATHS})
+        if (EXISTS ${PATH}/${NAME})
+            get_filename_component(FULLNAME ${PATH}/${NAME} ABSOLUTE)
+            set(${OUT} ${FULLNAME} PARENT_SCOPE)
+            return()
+        endif()
+    endforeach()
+    set(${OUT} "" PARENT_SCOPE)
+endfunction()

+ 0 - 0
pico-sdk/cmake/preload/platforms/host.cmake


+ 7 - 0
pico-sdk/cmake/preload/platforms/pico/pico.cmake

@@ -0,0 +1,7 @@
+if (NOT (DEFINED PICO_COMPILER OR DEFINED CMAKE_TOOLCHAIN_FILE))
+    pico_message("Defaulting PICO platform compiler to pico_arm_gcc since not specified.")
+    set(PICO_COMPILER "pico_arm_gcc")
+endif ()
+
+
+

+ 1 - 0
pico-sdk/cmake/preload/platforms/rp2040.cmake

@@ -0,0 +1 @@
+include(${CMAKE_CURRENT_LIST_DIR}/pico/pico.cmake)

+ 31 - 0
pico-sdk/cmake/preload/toolchains/find_compiler.cmake

@@ -0,0 +1,31 @@
+# Toolchain file is processed multiple times, however, it cannot access CMake cache on some runs.
+# We store the search path in an environment variable so that we can always access it.
+if (NOT "${PICO_TOOLCHAIN_PATH}" STREQUAL "")
+    set(ENV{PICO_TOOLCHAIN_PATH} "${PICO_TOOLCHAIN_PATH}")
+endif ()
+
+# Find the compiler executable and store its path in a cache entry ${compiler_path}.
+# If not found, issue a fatal message and stop processing. PICO_TOOLCHAIN_PATH can be provided from
+# commandline as additional search path.
+function(pico_find_compiler compiler_path compiler_exe)
+    # Search user provided path first.
+    find_program(
+            ${compiler_path} ${compiler_exe}
+            PATHS ENV PICO_TOOLCHAIN_PATH
+            PATH_SUFFIXES bin
+            NO_DEFAULT_PATH
+    )
+
+    # If not then search system paths.
+    if ("${${compiler_path}}" STREQUAL "${compiler_path}-NOTFOUND")
+        if (DEFINED ENV{PICO_TOOLCHAIN_PATH})
+            message(WARNING "PICO_TOOLCHAIN_PATH specified ($ENV{PICO_TOOLCHAIN_PATH}), but ${compiler_exe} not found there")
+        endif()
+        find_program(${compiler_path} ${compiler_exe})
+    endif ()
+    if ("${${compiler_path}}" STREQUAL "${compiler_path}-NOTFOUND")
+        set(PICO_TOOLCHAIN_PATH "" CACHE PATH "Path to search for compiler.")
+        message(FATAL_ERROR "Compiler '${compiler_exe}' not found, you can specify search path with\
+            \"PICO_TOOLCHAIN_PATH\".")
+    endif ()
+endfunction()

+ 53 - 0
pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake

@@ -0,0 +1,53 @@
+# NOTE: THIS IS A WIP ONLY PICO_ARM_GCC IS CURRENTLY SUPPORTED
+# todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform
+#  i.e. CMake<Lang>Information and whatnot
+include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake)
+
+# include our Platform/pico.cmake
+set(CMAKE_SYSTEM_NAME PICO)
+set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus)
+
+# Find CLANG
+pico_find_compiler(PICO_COMPILER_CC clang)
+pico_find_compiler(PICO_COMPILER_CXX clang)
+#pico_find_compiler(PICO_COMPILER_ASM armasm)
+set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "")
+pico_find_compiler(PICO_OBJCOPY llvm-objcopy)
+pico_find_compiler(PICO_OBJDUMP llvm-objdump)
+
+# Specify the cross compiler.
+set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler")
+set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler")
+set(CMAKE_C_OUTPUT_EXTENSION .o)
+
+# todo should we be including CMakeASMInformation anyway - i guess that is host side
+set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler")
+set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>   -c <SOURCE>")
+set(CMAKE_INCLUDE_FLAG_ASM "-I")
+set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
+set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
+
+# Disable compiler checks.
+set(CMAKE_C_COMPILER_FORCED TRUE)
+set(CMAKE_CXX_COMPILER_FORCED TRUE)
+
+# Add target system root to cmake find path.
+get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
+get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
+
+# Look for includes and libraries only in the target system prefix.
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+include_directories(/usr/include/newlib)
+
+# todo move to platform/Generix-xxx
+set(ARM_CLANG_COMMON_FLAGS " --target=arm-none-eabi -mcpu=cortex-m0plus -mthumb")
+set(CMAKE_C_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+set(CMAKE_CXX_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+set(CMAKE_ASM_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+set(CMAKE_C_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
+set(CMAKE_CXX_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
+

+ 52 - 0
pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake

@@ -0,0 +1,52 @@
+# NOTE: THIS IS A WIP ONLY PICO_ARM_GCC IS CURRENTLY SUPPORTED
+# todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform
+#  i.e. CMake<Lang>Information and whatnot
+include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake)
+
+# include our Platform/PICO.cmake
+set(CMAKE_SYSTEM_NAME PICO)
+set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus)
+
+# Find ARMClang.
+pico_find_compiler(PICO_COMPILER_CC armclang)
+pico_find_compiler(PICO_COMPILER_CXX armclang)
+pico_find_compiler(PICO_COMPILER_ASM armasm)
+set(PICO_COMPILER_ASM "${PICO_COMPILER_ASM}" CACHE INTERNAL "")
+pico_find_compiler(PICO_OBJCOPY llvm-objcopy)
+pico_find_compiler(PICO_OBJDUMP llvm-objdump)
+
+# Specify the cross compiler.
+set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler")
+set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler")
+set(CMAKE_C_OUTPUT_EXTENSION .o)
+
+# todo should we be including CMakeASMInformation anyway - i guess that is host side
+set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler")
+set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>   -c <SOURCE>")
+set(CMAKE_INCLUDE_FLAG_ASM "-I")
+set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
+set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
+
+# Disable compiler checks.
+set(CMAKE_C_COMPILER_FORCED TRUE)
+set(CMAKE_CXX_COMPILER_FORCED TRUE)
+
+# Add target system root to cmake find path.
+get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
+get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
+
+# Look for includes and libraries only in the target system prefix.
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+# todo move to platform/Generix-xxx
+set(ARM_CLANG_COMMON_FLAGS " --cpu=Cortex-M0plus")
+string(APPEND CMAKE_C_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+string(APPEND CMAKE_CXX_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+string(APPEND CMAKE_ASM_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
+string(APPEND CMAKE_C_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
+string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
+
+

+ 67 - 0
pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake

@@ -0,0 +1,67 @@
+# todo there is probably a more "cmake" way of doing this going thru the standard path with our "PICO" platform
+#  i.e. CMake<Lang>Information and whatnot
+include(${CMAKE_CURRENT_LIST_DIR}/find_compiler.cmake)
+
+# include our Platform/PICO.cmake
+set(CMAKE_SYSTEM_NAME PICO)
+set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus)
+
+if (NOT PICO_GCC_TRIPLE)
+    if (DEFINED ENV{PICO_GCC_TRIPLE})
+        set(PICO_GCC_TRIPLE $ENV{PICO_GCC_TRIPLE})
+        message("PICO_GCC_TRIPLE set from environment: $ENV{PICO_GCC_TRIPLE}")
+    else()
+        set(PICO_GCC_TRIPLE arm-none-eabi)
+        #pico_message_debug("PICO_GCC_TRIPLE defaulted to arm-none-eabi")
+    endif()
+endif()
+
+# Find GCC for ARM.
+pico_find_compiler(PICO_COMPILER_CC ${PICO_GCC_TRIPLE}-gcc)
+pico_find_compiler(PICO_COMPILER_CXX ${PICO_GCC_TRIPLE}-g++)
+set(PICO_COMPILER_ASM "${PICO_COMPILER_CC}" CACHE INTERNAL "")
+pico_find_compiler(PICO_OBJCOPY ${PICO_GCC_TRIPLE}-objcopy)
+pico_find_compiler(PICO_OBJDUMP ${PICO_GCC_TRIPLE}-objdump)
+
+# Specify the cross compiler.
+set(CMAKE_C_COMPILER ${PICO_COMPILER_CC} CACHE FILEPATH "C compiler")
+set(CMAKE_CXX_COMPILER ${PICO_COMPILER_CXX} CACHE FILEPATH "C++ compiler")
+set(CMAKE_C_OUTPUT_EXTENSION .o)
+
+# todo should we be including CMakeASMInformation anyway - i guess that is host side
+set(CMAKE_ASM_COMPILER ${PICO_COMPILER_ASM} CACHE FILEPATH "ASM compiler")
+set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT>   -c <SOURCE>")
+set(CMAKE_INCLUDE_FLAG_ASM "-I")
+set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
+set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
+
+# Disable compiler checks.
+set(CMAKE_C_COMPILER_FORCED TRUE)
+set(CMAKE_CXX_COMPILER_FORCED TRUE)
+
+# Add target system root to cmake find path.
+get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
+get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
+
+# Look for includes and libraries only in the target system prefix.
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0)
+
+# todo move to platform/Generix-xxx
+
+# on ARM -mcpu should not be mixed with -march
+set(ARM_GCC_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb")
+foreach(LANG IN ITEMS C CXX ASM)
+    set(CMAKE_${LANG}_FLAGS_INIT "${ARM_GCC_COMMON_FLAGS}")
+    if (PICO_DEOPTIMIZED_DEBUG)
+        set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0")
+    else()
+        set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og")
+    endif()
+    set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none")
+endforeach()
+

+ 47 - 0
pico-sdk/cmake_install.cmake

@@ -0,0 +1,47 @@
+# Install script for directory: /home/dan/src/kempston-mod/pico-sdk
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX "/usr/local")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  if(BUILD_TYPE)
+    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  else()
+    set(CMAKE_INSTALL_CONFIG_NAME "Release")
+  endif()
+  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+  if(COMPONENT)
+    message(STATUS "Install component: \"${COMPONENT}\"")
+    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  else()
+    set(CMAKE_INSTALL_COMPONENT)
+  endif()
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+  set(CMAKE_CROSSCOMPILING "TRUE")
+endif()
+
+# Set default install directory permissions.
+if(NOT DEFINED CMAKE_OBJDUMP)
+  set(CMAKE_OBJDUMP "/usr/bin/arm-none-eabi-objdump")
+endif()
+
+if(NOT CMAKE_INSTALL_LOCAL_ONLY)
+  # Include the install script for each subdirectory.
+  include("/home/dan/src/kempston-mod/pico-sdk/tools/cmake_install.cmake")
+  include("/home/dan/src/kempston-mod/pico-sdk/src/cmake_install.cmake")
+  include("/home/dan/src/kempston-mod/pico-sdk/docs/cmake_install.cmake")
+
+endif()
+

+ 16 - 0
pico-sdk/docs/CMakeFiles/CMakeDirectoryInformation.cmake

@@ -0,0 +1,16 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/dan/src/kempston-mod")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/dan/src/kempston-mod")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})

+ 1 - 0
pico-sdk/docs/CMakeFiles/progress.marks

@@ -0,0 +1 @@
+0

+ 59 - 0
pico-sdk/docs/CMakeLists.txt

@@ -0,0 +1,59 @@
+find_package(Doxygen QUIET)
+if (PICO_SDK_TOP_LEVEL_PROJECT AND ${DOXYGEN_FOUND})
+    set(PICO_BUILD_DOCS_DEFAULT 1)
+endif()
+option(PICO_BUILD_DOCS "Build HTML Doxygen docs" ${PICO_BUILD_DOCS_DEFAULT})
+
+if (DEFINED ENV{PICO_EXAMPLES_PATH} AND NOT PICO_EXAMPLES_PATH)
+    set(PICO_EXAMPLES_PATH $ENV{PICO_EXAMPLES_PATH})
+    message("Using PICO_EXAMPLES_PATH from environment ('${PICO_EXAMPLES_PATH}')")
+endif()
+
+if(PICO_BUILD_DOCS)
+    if(NOT DOXYGEN_FOUND)
+        message(FATAL_ERROR "Doxygen is needed to build the documentation.")
+    endif()
+
+    include(ExternalProject)
+
+    if(PICO_EXAMPLES_PATH)
+        get_filename_component(PICO_EXAMPLES_PATH "${PICO_EXAMPLES_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
+        if (EXISTS ${PICO_EXAMPLES_PATH})
+            message("Documentation example code will come from ${PICO_EXAMPLES_PATH}")
+        else()
+            message(WARNING "Documentation example code configured to come from ${PICO_EXAMPLES_PATH}, but that path does not exist")
+        endif()
+        add_custom_target(doc-pico-examples)
+    else()
+        ExternalProject_Add(doc-pico-examples
+                GIT_REPOSITORY    https://github.com/raspberrypi/pico-examples
+                GIT_TAG           master
+                CONFIGURE_COMMAND ""
+                BUILD_COMMAND ""
+                INSTALL_COMMAND ""
+                )
+        ExternalProject_Get_property(doc-pico-examples SOURCE_DIR)
+        ExternalProject_Get_property(doc-pico-examples GIT_REPOSITORY)
+        ExternalProject_Get_property(doc-pico-examples GIT_TAG)
+        set(PICO_EXAMPLES_PATH ${SOURCE_DIR})
+        message("Documentation example code will come from git repo ${GIT_REPOSITORY}, branch ${GIT_TAG}")
+    endif()
+
+    set(DOXY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen")
+    set(DOXY_INPUT_DIRS "${PICO_DOXYGEN_PATHS}")
+    set(DOXY_EXCLUDE_DIRS "${PICO_DOXYGEN_EXCLUDE_PATHS}")
+    set(DOXY_EXAMPLE_DIR "${PICO_EXAMPLES_PATH}")
+
+    set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
+    set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
+
+    configure_file(${doxyfile_in} ${doxyfile} @ONLY)
+
+    add_custom_target(docs
+            COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+            COMMENT "Generating API documentation with Doxygen"
+            VERBATIM)
+
+    add_dependencies(docs doc-pico-examples)
+endif()

+ 63 - 0
pico-sdk/docs/Doxyfile.in

@@ -0,0 +1,63 @@
+PROJECT_NAME            = "Raspberry Pi Pico SDK"
+PROJECT_BRIEF           = "Raspberry Pi Pico SDK documentation"
+PROJECT_NUMBER          = @PICO_SDK_VERSION_STRING@
+
+#STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@
+STRIP_FROM_PATH         = @DOXY_INPUT_DIRS@
+#                         @PROJECT_BINARY_DIR@
+#INPUT                  = @doxy_main_page@ \
+#                         @PROJECT_SOURCE_DIR@ \
+#                         @PROJECT_BINARY_DIR@
+
+FILE_PATTERNS          = *.h \
+                         *.cpp \
+                         *.c \
+                         *.S \
+                         *.s \
+                         *.md
+
+USE_MDFILE_AS_MAINPAGE = @PROJECT_SOURCE_DIR@/docs/mainpage.md
+LAYOUT_FILE = @PROJECT_SOURCE_DIR@/docs/DoxygenLayout.xml
+HTML_FOOTER = @PROJECT_SOURCE_DIR@/docs/footer.html
+HTML_HEADER = @PROJECT_SOURCE_DIR@/docs/header.html
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+# HTML_EXTRA_STYLESHEET = @PROJECT_SOURCE_DIR@/docs/customdoxygen.css
+HTML_EXTRA_STYLESHEET  = @PROJECT_SOURCE_DIR@/docs/normalise.css @PROJECT_SOURCE_DIR@/docs/main.css @PROJECT_SOURCE_DIR@/docs/styles.css
+HTML_EXTRA_FILES       = @PROJECT_SOURCE_DIR@/docs/logo-mobile.svg @PROJECT_SOURCE_DIR@/docs/logo.svg @PROJECT_SOURCE_DIR@/docs/search.svg \
+                         @PROJECT_SOURCE_DIR@/docs/main.js @PROJECT_SOURCE_DIR@/docs/pico.jpg @PROJECT_SOURCE_DIR@/docs/rp2040.png
+GENERATE_TREEVIEW      = YES # This is needed as it wraps the content area in an HTML tag that we need to use
+HTML_COLORSTYLE_HUE = 350
+HTML_COLORSTYLE_SAT = 200
+HTML_COLORSTYLE_GAMMA = 150
+GENERATE_LATEX = NO
+GENERATE_XML = YES
+GROUP_GRAPHS = NO
+
+ALIASES += tag=@internal
+ALIASES += end=@internal
+
+OUTPUT_DIRECTORY       = @DOXY_OUTPUT_DIR@
+INPUT                  = @PROJECT_SOURCE_DIR@/docs/index.h @DOXY_INPUT_DIRS@ @PROJECT_SOURCE_DIR@/docs/
+
+#EXCLUDE               = @DOXY_EXCLUDE_DIRS@ @PROJECT_SOURCE_DIR@/src/rp2040
+EXCLUDE                = @DOXY_EXCLUDE_DIRS@
+RECURSIVE              = YES
+EXAMPLE_PATH           = @PICO_EXAMPLES_PATH@
+
+# This is needed as we have a number of static inline functions that need to be documented.
+EXTRACT_STATIC         = YES
+
+EXTRACT_ALL            = NO
+ALWAYS_DETAILED_SEC    = NO
+#REPEAT_BRIEF           = NO
+
+# Need these next options to ensure that functions with modifiers do not confuse the Doxygen parser.
+# And any further function modifiers here.
+MACRO_EXPANSION        = YES
+
+PREDEFINED             = __not_in_flash_func(x) \
+                         __time_critical_func(x) \
+                         __not_in_flash(x)= \
+                         __no_inline_not_in_flash(x)= \
+                         __attribute__(x)=

+ 246 - 0
pico-sdk/docs/DoxygenLayout.xml

@@ -0,0 +1,246 @@
+<doxygenlayout version="1.0">
+  <!-- Generated by doxygen 1.8.17 -->
+  <!-- Navigation index tabs for HTML output -->
+  <navindex>
+    <tab type="mainpage" visible="yes" title="Introduction"></tab>
+    <tab type="modules" visible="yes" title="API Documentation" intro="These are the libraries supplied in the Raspberry Pi Pico SDK"/>
+    <tab type="user" url="@ref examples_page" visible="yes" title="Examples" intro="Links to SDK examples"/>
+    <tab type="usergroup" url="@ref weblinks_page" visible="yes" title="Additional Documentation" intro="Links to datasheets and documentation">
+      <tab type="user" url="https://rptl.io/pico-datasheet" visible="yes" title="Raspberry Pi Pico Datasheet" intro=""/>
+      <tab type="user" url="https://rptl.io/rp2040-datasheet" visible="yes" title="RP2040 Datasheet" intro=""/>
+      <tab type="user" url="https://rptl.io/rp2040-design" visible="yes" title="Hardware design with RP2040" intro=""/>
+      <tab type="user" url="https://rptl.io/pico-c-sdk" visible="yes" title="Raspberry Pi Pico C/C++ SDK" intro=""/>
+      <tab type="user" url="https://rptl.io/pico-micropython" visible="yes" title="Raspberry Pi Pico Python SDK" intro=""/>
+      <tab type="user" url="https://rptl.io/pico-get-started" visible="yes" title="Getting started with Raspberry Pi Pico" intro=""/>
+      <tab type="user" url="https://rptl.io/pico-faq" visible="yes" title="Raspberry Pi Pico FAQ" intro=""/>
+    </tab>
+    <tab type="usergroup" url="@ref weblinks_page" visible="yes" title="Web" intro="useful weblinks">
+      <tab type="user" url="https://www.raspberrypi.com/" visible="yes" title="Raspberry Pi Site" intro=""/>
+      <tab type="user" url="https://rptl.io/rp2040-get-started" visible="yes" title="Raspberry Pi Pico Page" intro=""/>
+      <tab type="user" url="https://forums.raspberrypi.com/" visible="yes" title="Raspberry Pi Forums" intro=""/>
+      <tab type="user" url="https://github.com/raspberrypi/pico-sdk" visible="yes" title="Raspberry Pi Pico SDK on GitHub" intro=""/>
+      <tab type="user" url="https://github.com/raspberrypi/pico-examples" visible="yes" title="Pico Examples on GitHub" intro=""/>
+      <tab type="user" url="https://github.com/raspberrypi/pico-extras" visible="yes" title="Pico Extras on GitHub" intro=""/>
+      <tab type="user" url="https://github.com/raspberrypi/pico-playground" visible="yes" title="Pico Playground on GitHub" intro=""/>
+      <tab type="user" url="https://github.com/raspberrypi/pico-bootrom" visible="yes" title="Pico Bootrom on GitHub" intro=""/>
+    </tab>
+    <tab type="pages" visible="no" title="" intro=""/>
+    <tab type="namespaces" visible="yes" title="">
+      <tab type="namespacelist" visible="yes" title="" intro=""/>
+      <tab type="namespacemembers" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="interfaces" visible="yes" title="">
+      <tab type="interfacelist" visible="yes" title="" intro=""/>
+      <tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
+      <tab type="interfacehierarchy" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="classes" visible="no" title="">
+      <tab type="classlist" visible="yes" title="" intro=""/>
+      <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
+      <tab type="hierarchy" visible="yes" title="" intro=""/>
+      <tab type="classmembers" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="structs" visible="yes" title="">
+      <tab type="structlist" visible="yes" title="" intro=""/>
+      <tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
+    </tab>
+    <tab type="exceptions" visible="yes" title="">
+      <tab type="exceptionlist" visible="yes" title="" intro=""/>
+      <tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
+      <tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="files" visible="no" title="">
+      <tab type="filelist" visible="yes" title="" intro=""/>
+      <tab type="globals" visible="yes" title="" intro=""/>
+    </tab>
+    <tab type="examples" visible="yes" title="" intro=""/>
+  </navindex>
+
+  <!-- Layout definition for a class page -->
+  <class>
+    <briefdescription visible="yes"/>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <inheritancegraph visible="$CLASS_GRAPH"/>
+    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
+    <memberdecl>
+      <nestedclasses visible="yes" title=""/>
+      <publictypes title=""/>
+      <services title=""/>
+      <interfaces title=""/>
+      <publicslots title=""/>
+      <signals title=""/>
+      <publicmethods title=""/>
+      <publicstaticmethods title=""/>
+      <publicattributes title=""/>
+      <publicstaticattributes title=""/>
+      <protectedtypes title=""/>
+      <protectedslots title=""/>
+      <protectedmethods title=""/>
+      <protectedstaticmethods title=""/>
+      <protectedattributes title=""/>
+      <protectedstaticattributes title=""/>
+      <packagetypes title=""/>
+      <packagemethods title=""/>
+      <packagestaticmethods title=""/>
+      <packageattributes title=""/>
+      <packagestaticattributes title=""/>
+      <properties title=""/>
+      <events title=""/>
+      <privatetypes title=""/>
+      <privateslots title=""/>
+      <privatemethods title=""/>
+      <privatestaticmethods title=""/>
+      <privateattributes title=""/>
+      <privatestaticattributes title=""/>
+      <friends title=""/>
+      <related title="" subtitle=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <inlineclasses title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <services title=""/>
+      <interfaces title=""/>
+      <constructors title=""/>
+      <functions title=""/>
+      <related title=""/>
+      <variables title=""/>
+      <properties title=""/>
+      <events title=""/>
+    </memberdef>
+    <allmemberslink visible="yes"/>
+    <usedfiles visible="$SHOW_USED_FILES"/>
+    <authorsection visible="yes"/>
+  </class>
+
+  <!-- Layout definition for a namespace page -->
+  <namespace>
+    <briefdescription visible="yes"/>
+    <memberdecl>
+      <nestednamespaces visible="yes" title=""/>
+      <constantgroups visible="yes" title=""/>
+      <interfaces visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <structs visible="yes" title=""/>
+      <exceptions visible="yes" title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <inlineclasses title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </namespace>
+
+  <!-- Layout definition for a file page -->
+  <file>
+    <briefdescription visible="yes"/>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <includegraph visible="$INCLUDE_GRAPH"/>
+    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+    <sourcelink visible="yes"/>
+    <memberdecl>
+      <interfaces visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <structs visible="yes" title=""/>
+      <exceptions visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <constantgroups visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <inlineclasses title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection/>
+  </file>
+
+  <!-- Layout definition for a group page -->
+  <group>
+    <briefdescription visible="yes"/>
+    <groupgraph visible="$GROUP_GRAPHS"/>
+    <memberdecl>
+      <nestedgroups visible="yes" title=""/>
+      <dirs visible="yes" title=""/>
+      <files visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <pagedocs/>
+      <inlineclasses title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <sequences title=""/>
+      <dictionaries title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </group>
+
+  <!-- Layout definition for a directory page -->
+  <directory>
+    <briefdescription visible="yes"/>
+    <directorygraph visible="yes"/>
+    <memberdecl>
+      <dirs visible="yes"/>
+      <files visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+  </directory>
+</doxygenlayout>

+ 140 - 0
pico-sdk/docs/Makefile

@@ -0,0 +1,140 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+
+# Default target executed when no arguments are given to make.
+default_target: all
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+# The shell in which to execute make rules.
+SHELL = /bin/sh
+
+# The CMake executable.
+CMAKE_COMMAND = /usr/bin/cmake
+
+# The command to remove a file.
+RM = /usr/bin/cmake -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = /home/dan/src/kempston-mod
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = /home/dan/src/kempston-mod
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..."
+	/usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+	@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
+	/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles /home/dan/src/kempston-mod/pico-sdk/docs//CMakeFiles/progress.marks
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/docs/all
+	$(CMAKE_COMMAND) -E cmake_progress_start /home/dan/src/kempston-mod/CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/docs/clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/docs/preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+	cd /home/dan/src/kempston-mod && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 pico-sdk/docs/preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+.PHONY : depend
+
+# Help Target
+help:
+	@echo "The following are some of the valid targets for this Makefile:"
+	@echo "... all (the default if no target is provided)"
+	@echo "... clean"
+	@echo "... depend"
+	@echo "... edit_cache"
+	@echo "... rebuild_cache"
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+	cd /home/dan/src/kempston-mod && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+.PHONY : cmake_check_build_system
+

+ 39 - 0
pico-sdk/docs/cmake_install.cmake

@@ -0,0 +1,39 @@
+# Install script for directory: /home/dan/src/kempston-mod/pico-sdk/docs
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+  set(CMAKE_INSTALL_PREFIX "/usr/local")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+  if(BUILD_TYPE)
+    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+  else()
+    set(CMAKE_INSTALL_CONFIG_NAME "Release")
+  endif()
+  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+  if(COMPONENT)
+    message(STATUS "Install component: \"${COMPONENT}\"")
+    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+  else()
+    set(CMAKE_INSTALL_COMPONENT)
+  endif()
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+  set(CMAKE_CROSSCOMPILING "TRUE")
+endif()
+
+# Set default install directory permissions.
+if(NOT DEFINED CMAKE_OBJDUMP)
+  set(CMAKE_OBJDUMP "/usr/bin/arm-none-eabi-objdump")
+endif()
+

+ 21 - 0
pico-sdk/docs/examples.md

@@ -0,0 +1,21 @@
+## Examples Index {#examples_page}
+
+This page links to the various example code fragments in this documentation. For more complete examples, please see the [pico-examples](https://github.com/raspberrypi/pico-examples) repository, which contains complete buildable projects.
+
+ - [RTC example](@ref rtc_example)
+ - [UART example](@ref uart_example)
+ - [ADC example](@ref adc_example)
+ - [I2C example](@ref i2c_example)
+ - [Clock example](@ref clock_example)
+ - [Timer example](@ref timer_example)
+ - [Flash programming example](@ref flash_example)
+ - [Watchdog example](@ref watchdog_example)
+ - [Divider example](@ref divider_example)
+ - [PWM example](@ref pwm_example)
+ - [Multicore example](@ref multicore_example)
+ - [Reset example](@ref reset_example)
+
+
+All examples are "Copyright (c) 2020 Raspberry Pi (Trading) Ltd", and are released under a 3-Clause BSD licence. Briefly, this means you are free to use the example code
+as long as you retain the copyright notice. Full details on the licence can be found [here](https://opensource.org/licenses/BSD-3-Clause).
+

+ 5 - 0
pico-sdk/docs/footer.html

@@ -0,0 +1,5 @@
+
+	<script src="main.js"></script>
+
+</body>
+</html>

+ 64 - 0
pico-sdk/docs/header.html

@@ -0,0 +1,64 @@
+<!-- HTML header for doxygen 1.8.20-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+	<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+	<meta name="generator" content="Doxygen $doxygenversion"/>
+	<meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+	<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+	<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+
+	<!-- <link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/> -->
+	<script type="text/javascript" src="$relpath^jquery.js"></script>
+	<script type="text/javascript" src="$relpath^dynsections.js"></script>
+	$treeview
+	$search
+	$mathjax
+
+    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
+	<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+	$extrastylesheet
+
+</head>
+
+<body>
+
+
+	<div class="navigation-mobile">
+		<div class="logo--mobile">
+			<a href="/"><img src="logo-mobile.svg" alt="Raspberry Pi"></a>
+		</div>
+		<div class="navigation-toggle">
+			<span class="line-1"></span>
+			<span class="line-2">
+				<p>Menu Toggle</p>
+			</span>
+			<span class="line-3"></span>
+		</div>
+	</div>
+
+
+
+	<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+		<div class="logo">
+			<a href="$relpath^index.html"> <img src="logo.svg" alt="Raspberry Pi"></a>
+			<span style="display: inline-block; margin-top: 10px;">
+				v$projectnumber
+			</span>
+		</div>
+
+
+		<div class="navigation-footer">
+			<img src="logo-mobile.svg" alt="Raspberry Pi">
+			<a href="https://www.raspberrypi.com/" target="_blank">By Raspberry Pi Ltd</a>
+		</div>
+<!-- 		<div class="search">
+			<form>
+				<input type="search" name="search" id="search" placeholder="Search">
+				<input type="submit" value="Search">
+			</form>
+		</div> -->

+ 90 - 0
pico-sdk/docs/index.h

@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+// Here to organize documentation order
+
+/**
+ * \defgroup hardware Hardware APIs
+ * This group of libraries provides a thin and efficient C API / abstractions to access the RP2040 hardware without having to read and write
+ * hardware registers directly.
+ * @{
+ * \defgroup hardware_adc hardware_adc
+ * \defgroup hardware_base hardware_base
+ * \defgroup hardware_claim hardware_claim
+ * \defgroup hardware_clocks hardware_clocks
+ * \defgroup hardware_divider hardware_divider
+ * \defgroup hardware_dma hardware_dma
+ * \defgroup hardware_exception hardware_exception
+ * \defgroup hardware_flash hardware_flash
+ * \defgroup hardware_gpio hardware_gpio
+ * \defgroup hardware_i2c hardware_i2c
+ * \defgroup hardware_interp hardware_interp
+ * \defgroup hardware_irq hardware_irq
+ * \defgroup hardware_pio hardware_pio
+ * \defgroup hardware_pll hardware_pll
+ * \defgroup hardware_pwm hardware_pwm
+ * \defgroup hardware_resets hardware_resets
+ * \defgroup hardware_rtc hardware_rtc
+ * \defgroup hardware_spi hardware_spi
+ * \defgroup hardware_sync hardware_sync
+ * \defgroup hardware_timer hardware_timer
+ * \defgroup hardware_uart hardware_uart
+ * \defgroup hardware_vreg hardware_vreg
+ * \defgroup hardware_watchdog hardware_watchdog
+ * \defgroup hardware_xosc hardware_xosc
+ * @}
+ *
+ * \defgroup high_level High Level APIs
+ * This group of libraries provide higher level functionality that isn't hardware related or provides a richer
+ * set of functionality above the basic hardware interfaces
+ * @{
+ * \defgroup pico_multicore pico_multicore
+ * \defgroup pico_stdlib pico_stdlib
+ * \defgroup pico_sync pico_sync
+ * \defgroup pico_time pico_time
+ * \defgroup pico_unique_id pico_unique_id
+ * \defgroup pico_util pico_util
+ * @}
+ *
+ * \defgroup third_party Third-party Libraries
+ * Third party libraries for implementing high level functionality.
+ * @{
+ * \defgroup tinyusb_device tinyusb_device
+ * \defgroup tinyusb_host tinyusb_host
+ * @}
+ *
+ * \defgroup runtime Runtime Infrastructure
+ * Libraries that are used to provide efficient implementation of certain
+ * language level and C library functions, as well as CMake INTERFACE libraries
+ * abstracting the compilation and link steps in the SDK
+ * @{
+ * \defgroup boot_stage2 boot_stage2
+ * \defgroup pico_base pico_base
+ * \defgroup pico_binary_info pico_binary_info
+ * \defgroup pico_bit_ops pico_bit_ops
+ * \defgroup pico_bootrom pico_bootrom
+ * \defgroup pico_bootsel_via_double_reset pico_bootsel_via_double_reset
+ * \defgroup pico_cxx_options pico_cxx_options
+ * \defgroup pico_divider pico_divider
+ * \defgroup pico_double pico_double
+ * \defgroup pico_float pico_float
+ * \defgroup pico_int64_ops pico_int64_ops
+ * \defgroup pico_malloc pico_malloc
+ * \defgroup pico_mem_ops pico_mem_ops
+ * \defgroup pico_platform pico_platform
+ * \defgroup pico_printf pico_printf
+ * \defgroup pico_runtime pico_runtime
+ * \defgroup pico_stdio pico_stdio
+ * \defgroup pico_standard_link pico_standard_link
+ * @}
+ *
+ * \defgroup misc External API Headers
+ * Headers for interfaces that are shared with code outside of the SDK
+ * @{
+ * \defgroup boot_picoboot boot_picoboot
+ * \defgroup boot_uf2 boot_uf2
+ * @}
+*/

+ 29 - 0
pico-sdk/docs/logo-mobile.svg

@@ -0,0 +1,29 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="50mm" height="50mm" viewBox="0 0 141.73228 141.73228">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #46af4b;
+      }
+
+      .cls-2 {
+        fill: #cd2355;
+      }
+    </style>
+  </defs>
+  <g>
+    <path d="M120.397,80.45865c-.56815-5.90742-3.22385-11.16309-6.995-13.93267a17.27379,17.27379,0,0,0-3.24656-6.31353,19.36966,19.36966,0,0,0-6.892-13.02018,7.27722,7.27722,0,0,0,1.59572-1.944c4.57759-2.04455,7.80508-6.33776,8.1794-9.53072a12.5259,12.5259,0,0,0,3.95675-8.20484,7.846,7.846,0,0,0-.69989-3.69357,7.01847,7.01847,0,0,0,1.82922-7.2442c-1.36677-3.95887-6.15514-6.52856-12.58679-6.80113A10.13626,10.13626,0,0,0,98.52937,7.374a16.203,16.203,0,0,0-3.78352.46578,8.61261,8.61261,0,0,0-3.719-.75319,14.555,14.555,0,0,0-7.0952,1.934,6.5202,6.5202,0,0,0-.85646-.05542c-3.193-.0003-6.38471,2.19991-8.00284,3.51125a24.2642,24.2642,0,0,0-4.2063,4.38226,24.27017,24.27017,0,0,0-4.206-4.38195c-1.61814-1.31135-4.80988-3.51126-8.00254-3.51156a6.525,6.525,0,0,0-.85677.05542,14.55806,14.55806,0,0,0-7.09489-1.934,8.614,8.614,0,0,0-3.71931.75319A16.201,16.201,0,0,0,43.203,7.374a10.13676,10.13676,0,0,0-7.00858,2.39979c-6.432.27257-11.22033,2.84226-12.5871,6.80143a7.018,7.018,0,0,0,1.82922,7.2439A7.84794,7.84794,0,0,0,24.737,27.513a12.52529,12.52529,0,0,0,3.95675,8.20454c.37432,3.19326,3.60181,7.48617,8.1794,9.53072a7.27538,7.27538,0,0,0,1.59542,1.944,19.37028,19.37028,0,0,0-6.89168,13.02018A17.27118,17.27118,0,0,0,28.33031,66.526c-3.77111,2.76958-6.42681,8.02525-6.99495,13.93236-.56482,5.87168,1.046,11.35328,4.32471,14.82547a20.99222,20.99222,0,0,0,3.56516,8.18667,21.30368,21.30368,0,0,0,5.378,12.42629,22.01533,22.01533,0,0,0,11.859,7.04734,28.71359,28.71359,0,0,0,9.48469,5.87137A20.881,20.881,0,0,0,70.866,134.64567a20.8833,20.8833,0,0,0,14.91936-5.83019,28.72034,28.72034,0,0,0,9.48469-5.87137,22.01559,22.01559,0,0,0,11.85873-7.04734,21.3036,21.3036,0,0,0,5.378-12.426,20.98659,20.98659,0,0,0,3.56517-8.187C119.35068,91.81162,120.96155,86.33,120.397,80.45865Z"/>
+    <path class="cls-1" d="M82.88834,15.64565a.50715.50715,0,0,1,.64431.53875c-.16085,1.517.75688,1.32594.97375,1.05634,2.38917-2.97065,4.91974-3.64653,7.18552-3.447a.5073.5073,0,0,1,.347.81808c-.90026,1.33535.06917,1.58923.42806,1.34935,3.67706-2.299,7.18462-2.30316,8.53087-1.33751a.50652.50652,0,0,1,.03017.78741c-1.36075,1.15928-.599,1.73636-.11843,1.56042,3.73308-1.31743,8.88679-.15193,10.68462,1.36809a.511.511,0,0,1,.01278.77323,10.12618,10.12618,0,0,0-3.89825,6.80014c-.10141.89409,1.38228.706,2.00839.54492a.50694.50694,0,0,1,.63161.47341c.05646,2.14911-1.97606,4.51144-5.00017,6.53158-.405.27055-.34746.91972.57694.94363a.50088.50088,0,0,1,.43014.75445c-1.0784,2.00172-2.545,3.88636-7.54009,5.18055a.51181.51181,0,0,0-.07052.96565.48972.48972,0,0,1,.15941.86532c-4.97342,4.27273-17.58014,2.58829-19.18036-4.603a.50477.50477,0,0,1,.09069-.4114A47.92158,47.92158,0,0,1,100.721,21.25148a.3975.3975,0,0,0-.19687-.76539,34.186,34.186,0,0,0-22.704,13.68742.512.512,0,0,1-.65061.14752C69.08866,30.14885,75.72444,17.82948,82.88834,15.64565Z"/>
+    <path class="cls-1" d="M35.37668,35.161a.50084.50084,0,0,1,.43005-.75445c.92449-.02391.982-.67308.57694-.94363-3.02411-2.02014-5.05663-4.38247-5.00007-6.53158a.5069.5069,0,0,1,.6316-.47341c.626.16108,2.10971.34917,2.0083-.54492a10.126,10.126,0,0,0-3.89816-6.80014.51094.51094,0,0,1,.0127-.77323c1.79782-1.52,6.95154-2.68552,10.6847-1.36809.48048.17594,1.24223-.40114-.11843-1.56042a.50652.50652,0,0,1,.03008-.78741c1.34634-.96565,4.85381-.96146,8.53087,1.33751.3589.23988,1.32833-.014.42815-1.34935a.5073.5073,0,0,1,.34692-.81808c2.26588-.19954,4.79644.47634,7.18561,3.447.21678.2696,1.13461.46062.97375-1.05634a.50711.50711,0,0,1,.64422-.53875c7.164,2.18383,13.79977,14.5032,5.71877,18.67538a.512.512,0,0,1-.65061-.14752A34.18579,34.18579,0,0,0,41.20821,20.48609a.3975.3975,0,0,0-.19688.76539,47.92145,47.92145,0,0,1,20.90622,15.9066.50472.50472,0,0,1,.0906.4114c-1.60022,7.19128-14.20694,8.87572-19.18035,4.603a.48975.48975,0,0,1,.15941-.86532.51183.51183,0,0,0-.07043-.96565C37.92166,39.04731,36.455,37.16267,35.37668,35.161Z"/>
+    <path class="cls-2" d="M102.70391,57.14512c2.07215,5.51262.45788,8.1631-4.45781,5.35681a35.23186,35.23186,0,0,1-10.324-8.6538c-3.70264-4.39923-1.29618-6.3588,4.53643-5.30214A15.74307,15.74307,0,0,1,102.70391,57.14512Z"/>
+    <path class="cls-2" d="M80.656,50.9434c7.02971,5.84278-1.02445,9.97893-9.78984,9.97893s-16.81947-4.13615-9.78976-9.97893a15.62992,15.62992,0,0,1,19.5796,0Z"/>
+    <path class="cls-2" d="M39.02843,57.14512A15.74294,15.74294,0,0,1,49.27372,48.546c5.83261-1.05666,8.23916.90291,4.53644,5.30214a35.232,35.232,0,0,1-10.324,8.6538C38.57056,65.30822,36.95628,62.65774,39.02843,57.14512Z"/>
+    <path class="cls-2" d="M28.86006,87.77634a15.73764,15.73764,0,0,1,1.16828-13.39206c2.59721-4.419,5.21118-4.2431,6.24869-.49944a23.47909,23.47909,0,0,1-1.35309,15.47529C33.00057,93.18313,30.595,91.89119,28.86006,87.77634Z"/>
+    <path class="cls-2" d="M47.58848,116.39963A15.64491,15.64491,0,0,1,35.82,102.43657C36.79507,79.749,69.49268,120.26554,47.58848,116.39963Z"/>
+    <path class="cls-2" d="M48.254,88.14263c-5.48323-3.16572-6.9343-10.91794-3.24093-17.31507s11.13243-9.01664,16.61566-5.85087c5.48323,3.16572,6.9343,10.918,3.24094,17.31507S53.73709,91.3084,48.254,88.14263Z"/>
+    <path class="cls-2" d="M80.0159,125.05829a15.6584,15.6584,0,0,1-18.29955,0c-5.43318-3.75194.03278-8.06894,9.14978-8.06894S85.44917,121.30635,80.0159,125.05829Z"/>
+    <ellipse class="cls-2" cx="70.86613" cy="100.39562" rx="12.72753" ry="10.90937"/>
+    <path class="cls-2" d="M76.86255,82.29176c-3.69336-6.39709-2.24229-14.14935,3.24094-17.31507,5.48323-3.16577,12.9223-.54622,16.61567,5.85087s2.24229,14.14935-3.24094,17.31507C87.99516,91.3084,80.55592,88.68885,76.86255,82.29176Z"/>
+    <path class="cls-2" d="M94.14377,116.39963c-21.9042,3.86591,10.79341-36.65066,11.7686-13.96306A15.64488,15.64488,0,0,1,94.14377,116.39963Z"/>
+    <path class="cls-2" d="M112.87229,87.77634c-1.73505,4.11485-4.14061,5.40679-6.064,1.58379a23.47913,23.47913,0,0,1-1.353-15.47529c1.03742-3.74366,3.65139-3.9196,6.2486.49944A15.73769,15.73769,0,0,1,112.87229,87.77634Z"/>
+  </g>
+</svg>

+ 213 - 0
pico-sdk/docs/logo.svg

@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 231.43986 61.396812"
+   xml:space="preserve"
+   sodipodi:docname="logo.svg"
+   width="231.43987"
+   height="61.39682"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+   id="metadata6202"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs6200">
+
+	</defs><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1081"
+   id="namedview6198"
+   showgrid="false"
+   inkscape:zoom="3.1460265"
+   inkscape:cx="146.61494"
+   inkscape:cy="35.501241"
+   inkscape:window-x="0"
+   inkscape:window-y="32"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="Layer_1" />
+<style
+   type="text/css"
+   id="style6081">
+	.st0{enable-background:new    ;}
+	.st1{fill:#1E1E1E;}
+	.st2{fill:#C31C4A;}
+	.st3{fill:#6ABF4B;}
+</style>
+<g
+   id="g6332"
+   transform="matrix(0.63209031,0,0,0.63209031,-0.16434348,-45.049552)"><g
+     transform="translate(-73.51,57.850753)"
+     style="enable-background:new"
+     id="g6105"
+     class="st0">
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6083"
+   d="M 85.34,42.72 H 80.21 V 54.16 H 73.77 V 22.91 h 11.61 c 3.69,0 6.54,0.82 8.54,2.47 2,1.65 3.01,3.97 3.01,6.98 0,2.13 -0.46,3.91 -1.38,5.33 -0.92,1.42 -2.32,2.56 -4.2,3.4 l 6.76,12.77 v 0.3 H 91.2 Z M 80.21,37.5 h 5.2 c 1.62,0 2.87,-0.41 3.76,-1.23 0.89,-0.82 1.33,-1.96 1.33,-3.4 0,-1.47 -0.42,-2.63 -1.26,-3.48 -0.84,-0.84 -2.12,-1.27 -3.85,-1.27 h -5.17 v 9.38 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6085"
+   d="m 114.88,54.16 c -0.29,-0.56 -0.49,-1.25 -0.62,-2.08 -1.5,1.67 -3.46,2.51 -5.86,2.51 -2.28,0 -4.16,-0.66 -5.66,-1.98 -1.5,-1.32 -2.24,-2.98 -2.24,-4.98 0,-2.46 0.91,-4.35 2.74,-5.67 1.83,-1.32 4.46,-1.98 7.91,-2 H 114 v -1.33 c 0,-1.07 -0.28,-1.93 -0.83,-2.58 -0.55,-0.64 -1.42,-0.97 -2.61,-0.97 -1.04,0 -1.86,0.25 -2.46,0.75 -0.59,0.5 -0.89,1.19 -0.89,2.06 h -6.2 c 0,-1.35 0.42,-2.59 1.25,-3.74 0.83,-1.15 2,-2.04 3.52,-2.69 1.52,-0.65 3.22,-0.98 5.11,-0.98 2.86,0 5.13,0.72 6.82,2.16 1.68,1.44 2.52,3.46 2.52,6.06 v 10.1 c 0.01,2.2 0.32,3.87 0.92,5 v 0.37 z m -5.13,-4.31 c 0.92,0 1.76,-0.2 2.53,-0.61 0.77,-0.41 1.35,-0.96 1.72,-1.64 v -4 h -2.32 c -3.11,0 -4.76,1.07 -4.96,3.22 l -0.02,0.36 c 0,0.77 0.27,1.41 0.82,1.91 0.54,0.51 1.29,0.76 2.23,0.76 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6087"
+   d="m 137.57,47.74 c 0,-0.76 -0.38,-1.36 -1.13,-1.79 -0.75,-0.44 -1.96,-0.83 -3.62,-1.17 -5.52,-1.16 -8.29,-3.51 -8.29,-7.04 0,-2.06 0.85,-3.78 2.57,-5.16 1.71,-1.38 3.95,-2.07 6.71,-2.07 2.95,0 5.31,0.69 7.07,2.08 1.77,1.39 2.65,3.19 2.65,5.41 h -6.2 c 0,-0.89 -0.29,-1.62 -0.86,-2.2 -0.57,-0.58 -1.47,-0.87 -2.68,-0.87 -1.04,0 -1.85,0.24 -2.43,0.71 -0.57,0.47 -0.86,1.07 -0.86,1.8 0,0.69 0.33,1.24 0.98,1.66 0.65,0.42 1.75,0.79 3.3,1.09 1.55,0.3 2.85,0.65 3.91,1.04 3.28,1.2 4.92,3.28 4.92,6.25 0,2.12 -0.91,3.83 -2.73,5.14 -1.82,1.31 -4.17,1.96 -7.04,1.96 -1.95,0 -3.67,-0.35 -5.18,-1.04 -1.51,-0.69 -2.69,-1.65 -3.55,-2.85 -0.86,-1.21 -1.29,-2.52 -1.29,-3.92 h 5.88 c 0.06,1.1 0.46,1.95 1.22,2.53 0.76,0.59 1.77,0.88 3.05,0.88 1.19,0 2.09,-0.23 2.69,-0.68 0.61,-0.44 0.91,-1.03 0.91,-1.76 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6089"
+   d="m 168.51,42.76 c 0,3.58 -0.81,6.44 -2.44,8.6 -1.62,2.15 -3.82,3.23 -6.58,3.23 -2.35,0 -4.24,-0.82 -5.69,-2.45 v 10.95 h -6.2 V 30.93 h 5.75 l 0.21,2.28 c 1.5,-1.8 3.46,-2.71 5.88,-2.71 2.86,0 5.09,1.06 6.68,3.18 1.59,2.12 2.38,5.04 2.38,8.76 z m -6.21,-0.45 c 0,-2.16 -0.38,-3.83 -1.15,-5 -0.77,-1.17 -1.88,-1.76 -3.34,-1.76 -1.95,0 -3.28,0.75 -4.01,2.23 v 9.51 c 0.76,1.53 2.11,2.3 4.06,2.3 2.96,0 4.44,-2.43 4.44,-7.28 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6091"
+   d="m 193.28,42.76 c 0,3.72 -0.79,6.62 -2.38,8.71 -1.59,2.08 -3.81,3.12 -6.65,3.12 -2.52,0 -4.53,-0.97 -6.03,-2.9 l -0.28,2.47 h -5.58 V 21.19 h 6.2 v 11.83 c 1.43,-1.67 3.31,-2.51 5.65,-2.51 2.83,0 5.06,1.04 6.67,3.12 1.61,2.08 2.42,5.01 2.42,8.79 v 0.34 z m -6.2,-0.45 c 0,-2.35 -0.37,-4.06 -1.12,-5.14 -0.74,-1.08 -1.85,-1.62 -3.33,-1.62 -1.98,0 -3.33,0.81 -4.08,2.43 v 9.17 c 0.76,1.63 2.13,2.45 4.12,2.45 2,0 3.32,-0.99 3.95,-2.96 0.31,-0.96 0.46,-2.39 0.46,-4.33 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6093"
+   d="m 207.8,54.59 c -3.41,0 -6.18,-1.04 -8.32,-3.13 -2.14,-2.09 -3.21,-4.87 -3.21,-8.35 v -0.6 c 0,-2.33 0.45,-4.42 1.35,-6.26 0.9,-1.84 2.18,-3.26 3.83,-4.25 1.65,-0.99 3.54,-1.49 5.66,-1.49 3.18,0 5.68,1 7.5,3.01 1.82,2.01 2.74,4.84 2.74,8.52 v 2.53 h -14.79 c 0.2,1.52 0.81,2.73 1.81,3.65 1,0.92 2.29,1.37 3.83,1.37 2.39,0 4.26,-0.87 5.6,-2.6 l 3.05,3.41 c -0.93,1.32 -2.19,2.34 -3.78,3.08 -1.58,0.74 -3.34,1.11 -5.27,1.11 z m -0.71,-19.08 c -1.23,0 -2.23,0.42 -3,1.25 -0.77,0.83 -1.26,2.03 -1.47,3.58 h 8.63 v -0.5 c -0.03,-1.38 -0.4,-2.45 -1.12,-3.2 -0.71,-0.76 -1.73,-1.13 -3.04,-1.13 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6095"
+   d="m 233.92,36.75 c -0.84,-0.12 -1.59,-0.17 -2.23,-0.17 -2.35,0 -3.89,0.79 -4.62,2.38 v 15.2 h -6.21 V 30.93 h 5.86 l 0.17,2.77 c 1.25,-2.13 2.97,-3.2 5.17,-3.2 0.69,0 1.33,0.09 1.93,0.28 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6097"
+   d="m 249.96,36.75 c -0.84,-0.12 -1.59,-0.17 -2.23,-0.17 -2.35,0 -3.88,0.79 -4.62,2.38 v 15.2 h -6.2 V 30.93 h 5.86 l 0.17,2.77 c 1.25,-2.13 2.97,-3.2 5.17,-3.2 0.69,0 1.33,0.09 1.93,0.28 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6099"
+   d="m 262,45.38 4.29,-14.45 h 6.66 l -9.34,26.83 -0.51,1.22 c -1.39,3.03 -3.68,4.55 -6.87,4.55 -0.9,0 -1.82,-0.14 -2.75,-0.41 v -4.7 l 0.95,0.02 c 1.17,0 2.05,-0.18 2.63,-0.54 0.58,-0.36 1.03,-0.95 1.36,-1.78 l 0.73,-1.91 -8.14,-23.29 h 6.68 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6101"
+   d="m 293.2,43.15 v 11.01 h -6.44 V 22.91 h 12.19 c 2.35,0 4.41,0.43 6.19,1.29 1.78,0.86 3.15,2.08 4.11,3.66 0.96,1.58 1.44,3.38 1.44,5.4 0,3.06 -1.05,5.48 -3.14,7.25 -2.09,1.77 -5,2.65 -8.71,2.65 h -5.64 z m 0,-5.22 h 5.75 c 1.7,0 3,-0.4 3.9,-1.2 0.89,-0.8 1.34,-1.95 1.34,-3.44 0,-1.53 -0.45,-2.77 -1.35,-3.71 -0.9,-0.94 -2.15,-1.43 -3.74,-1.46 h -5.9 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6103"
+   d="m 314.66,24.92 c 0,-0.93 0.31,-1.7 0.93,-2.3 0.62,-0.6 1.47,-0.9 2.54,-0.9 1.06,0 1.9,0.3 2.53,0.9 0.63,0.6 0.94,1.37 0.94,2.3 0,0.94 -0.32,1.72 -0.96,2.32 -0.64,0.6 -1.48,0.9 -2.52,0.9 -1.04,0 -1.89,-0.3 -2.52,-0.9 -0.62,-0.6 -0.94,-1.37 -0.94,-2.32 z m 6.59,29.24 h -6.23 V 30.93 h 6.23 z"
+   class="st1" />
+		</g><g
+     transform="translate(-73.51,57.850753)"
+     style="enable-background:new"
+     id="g6115"
+     class="st0">
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6107"
+   d="m 352.17,41.43 v 12.73 h -2.64 V 22.91 h 10.65 c 3.25,0 5.81,0.83 7.7,2.49 1.88,1.66 2.82,3.94 2.82,6.85 0,2.93 -0.91,5.2 -2.72,6.79 -1.81,1.59 -4.43,2.39 -7.87,2.39 z m 0,-2.23 h 8.01 c 2.56,0 4.52,-0.61 5.86,-1.83 1.35,-1.22 2.02,-2.92 2.02,-5.1 0,-2.16 -0.67,-3.89 -2.01,-5.17 -1.34,-1.28 -3.24,-1.94 -5.7,-1.97 h -8.18 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6109"
+   d="m 375.85,24.23 c 0,-0.48 0.16,-0.89 0.47,-1.23 0.32,-0.33 0.74,-0.5 1.29,-0.5 0.55,0 0.98,0.17 1.3,0.5 0.32,0.33 0.48,0.74 0.48,1.23 0,0.48 -0.16,0.89 -0.48,1.22 -0.32,0.33 -0.75,0.49 -1.3,0.49 -0.55,0 -0.97,-0.16 -1.29,-0.49 -0.31,-0.33 -0.47,-0.74 -0.47,-1.22 z m 3.03,29.93 H 376.3 V 30.93 h 2.58 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6111"
+   d="m 394.44,52.42 c 1.79,0 3.29,-0.5 4.5,-1.51 1.21,-1.01 1.86,-2.32 1.96,-3.92 h 2.47 c -0.07,1.42 -0.52,2.71 -1.33,3.88 -0.82,1.17 -1.9,2.08 -3.25,2.74 -1.35,0.66 -2.8,0.99 -4.35,0.99 -3.05,0 -5.46,-1.06 -7.25,-3.18 -1.79,-2.12 -2.67,-4.97 -2.67,-8.54 V 42.1 c 0,-2.29 0.4,-4.31 1.2,-6.08 0.8,-1.77 1.95,-3.12 3.45,-4.08 1.5,-0.96 3.24,-1.44 5.25,-1.44 2.55,0 4.65,0.76 6.3,2.28 1.65,1.52 2.54,3.51 2.65,5.99 h -2.47 c -0.11,-1.82 -0.77,-3.28 -1.96,-4.4 -1.2,-1.12 -2.7,-1.67 -4.52,-1.67 -2.32,0 -4.12,0.84 -5.4,2.51 -1.28,1.67 -1.92,4.02 -1.92,7.04 V 43 c 0,2.96 0.64,5.27 1.92,6.93 1.28,1.66 3.09,2.49 5.42,2.49 z"
+   class="st1" />
+			<path
+   style="fill:#1e1e1e"
+   inkscape:connector-curvature="0"
+   id="path6113"
+   d="m 407.08,42.21 c 0,-2.23 0.43,-4.24 1.3,-6.03 0.87,-1.79 2.09,-3.18 3.67,-4.18 1.58,-0.99 3.37,-1.49 5.38,-1.49 3.09,0 5.6,1.08 7.51,3.25 1.91,2.17 2.88,5.04 2.88,8.62 v 0.54 c 0,2.25 -0.43,4.27 -1.3,6.06 -0.87,1.79 -2.09,3.18 -3.66,4.15 -1.57,0.97 -3.37,1.46 -5.39,1.46 -3.08,0 -5.58,-1.08 -7.5,-3.25 -1.92,-2.17 -2.89,-5.04 -2.89,-8.62 z m 2.58,0.7 c 0,2.78 0.72,5.06 2.16,6.84 1.44,1.78 3.32,2.67 5.66,2.67 2.32,0 4.2,-0.89 5.64,-2.67 1.44,-1.78 2.16,-4.13 2.16,-7.05 v -0.49 c 0,-1.77 -0.33,-3.4 -0.99,-4.87 -0.66,-1.47 -1.58,-2.62 -2.77,-3.42 -1.19,-0.81 -2.55,-1.21 -4.08,-1.21 -2.29,0 -4.16,0.9 -5.6,2.69 -1.45,1.8 -2.17,4.15 -2.17,7.05 v 0.46 z"
+   class="st1" />
+		</g><path
+     style="fill:#c31c4a"
+     inkscape:connector-curvature="0"
+     id="path6117"
+     d="m 274.43,121.33075 c -6.39,0 -11.58,-5.2 -11.58,-11.58 V 82.850753 c 0,-6.39 5.2,-11.58 11.58,-11.58 h 80.4 c 6.39,0 11.58,5.2 11.58,11.58 v 26.799997 c 0,6.39 -5.2,11.58 -11.58,11.58 h -79.02 z m -1.33,-2.86 h 81.73 c 4.86,0 8.82,-3.96 8.82,-8.82 V 82.850753 c 0,-4.86 -3.96,-8.82 -8.82,-8.82 h -80.4 c -4.86,0 -8.82,3.96 -8.82,8.82 v 26.899997 c 0,4.41 3.25,8.07 7.49,8.72 z"
+     class="st2" /></g><g
+   id="g6350"
+   transform="matrix(0.84770507,0,0,0.84770507,0.18908311,-61.910993)"><path
+     inkscape:connector-curvature="0"
+     id="path6161"
+     d="m 5.2185549,138.93075 c -1.61,-0.46 -2.78,-1.03 -3.51,-1.7 -0.73000003,-0.67 -1.10000003,-1.51 -1.10000003,-2.5 0,-1.12 0.45000003,-2.05 1.34000003,-2.78 0.89,-0.73 2.06,-1.1 3.49,-1.1 0.98,0 1.85,0.19 2.61,0.57 0.76,0.38 1.36,0.9 1.78,1.56 0.4200001,0.66 0.6300001,1.39 0.6300001,2.18 H 8.5785549 c 0,-0.86 -0.27,-1.54 -0.82,-2.03 -0.55,-0.49 -1.32,-0.74 -2.31,-0.74 -0.92,0 -1.65,0.2 -2.16,0.61 -0.52,0.41 -0.78,0.97 -0.78,1.7 0,0.58 0.25,1.07 0.74,1.47 0.49,0.4 1.33,0.77 2.51,1.1 1.18,0.33 2.11,0.7 2.77,1.1 0.66,0.4 1.16,0.87 1.4800001,1.4 0.32,0.53 0.48,1.16 0.48,1.88 0,1.15 -0.45,2.08 -1.3500001,2.77 -0.9,0.69 -2.1,1.04 -3.6,1.04 -0.98,0 -1.89,-0.19 -2.73,-0.56 -0.84,-0.37 -1.5,-0.89 -1.96000003,-1.54 -0.46,-0.65 -0.69,-1.39 -0.69,-2.22 H 2.0385549 c 0,0.86 0.32,1.54 0.95,2.04 0.63,0.5 1.48,0.75 2.54,0.75 0.99,0 1.75,-0.2 2.28,-0.61 0.53,-0.41 0.79,-0.95 0.79,-1.65 0,-0.7 -0.24,-1.24 -0.73,-1.62 -0.49,-0.38 -1.37,-0.75 -2.65,-1.12 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6163"
+     d="m 12.898555,145.26075 v -14.22 h 4.01 c 1.24,0 2.33,0.27 3.28,0.82 0.95,0.55 1.68,1.33 2.2,2.33 0.52,1 0.78,2.17 0.79,3.48 v 0.91 c 0,1.34 -0.26,2.52 -0.78,3.53 -0.52,1.01 -1.26,1.78 -2.22,2.32 -0.96,0.54 -2.08,0.82 -3.35,0.83 z m 1.87,-12.68 v 11.15 h 1.97 c 1.45,0 2.57,-0.45 3.37,-1.35 0.8,-0.9 1.21,-2.18 1.21,-3.84 v -0.83 c 0,-1.62 -0.38,-2.87 -1.14,-3.77 -0.76,-0.9 -1.83,-1.35 -3.23,-1.36 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6165"
+     d="m 29.618555,138.65075 -1.74,1.81 v 4.8 h -1.88 v -14.22 h 1.88 v 7.03 l 6.32,-7.03 h 2.27 l -5.6,6.28 6.04,7.94 h -2.25 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6167"
+     d="m 43.498555,145.26075 v -14.22 h 4.01 c 1.24,0 2.33,0.27 3.28,0.82 0.95,0.55 1.68,1.33 2.2,2.33 0.52,1 0.78,2.17 0.79,3.48 v 0.91 c 0,1.34 -0.26,2.52 -0.78,3.53 -0.52,1.01 -1.26,1.78 -2.22,2.32 -0.96,0.54 -2.08,0.82 -3.35,0.83 z m 1.88,-12.68 v 11.15 h 1.97 c 1.45,0 2.57,-0.45 3.37,-1.35 0.8,-0.9 1.21,-2.18 1.21,-3.84 v -0.83 c 0,-1.62 -0.38,-2.87 -1.14,-3.77 -0.76,-0.9 -1.83,-1.35 -3.23,-1.36 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6169"
+     d="m 55.858555,139.88075 c 0,-1.04 0.2,-1.97 0.61,-2.79 0.41,-0.82 0.97,-1.46 1.7,-1.91 0.73,-0.45 1.55,-0.67 2.49,-0.67 1.44,0 2.6,0.5 3.49,1.49 0.89,0.99 1.33,2.32 1.33,3.97 v 0.13 c 0,1.03 -0.2,1.95 -0.59,2.77 -0.39,0.82 -0.96,1.45 -1.69,1.91 -0.73,0.46 -1.57,0.68 -2.52,0.68 -1.43,0 -2.59,-0.5 -3.48,-1.49 -0.89,-0.99 -1.33,-2.31 -1.33,-3.96 v -0.13 z m 1.81,0.22 c 0,1.17 0.27,2.11 0.82,2.82 0.55,0.71 1.27,1.06 2.18,1.06 0.92,0 1.65,-0.36 2.19,-1.08 0.54,-0.72 0.81,-1.73 0.81,-3.02 0,-1.16 -0.27,-2.1 -0.83,-2.82 -0.56,-0.72 -1.28,-1.08 -2.19,-1.08 -0.89,0 -1.61,0.35 -2.16,1.06 -0.55,0.71 -0.82,1.74 -0.82,3.06 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6171"
+     d="m 71.978555,143.98075 c 0.64,0 1.21,-0.2 1.69,-0.59 0.48,-0.39 0.75,-0.88 0.8,-1.46 h 1.71 c -0.03,0.61 -0.24,1.18 -0.62,1.73 -0.38,0.55 -0.9,0.98 -1.54,1.31 -0.64,0.33 -1.32,0.49 -2.04,0.49 -1.44,0 -2.58,-0.48 -3.43,-1.44 -0.85,-0.96 -1.27,-2.27 -1.27,-3.94 v -0.3 c 0,-1.03 0.19,-1.94 0.57,-2.74 0.38,-0.8 0.92,-1.42 1.63,-1.87 0.71,-0.45 1.54,-0.66 2.5,-0.66 1.19,0 2.17,0.35 2.95,1.06 0.78,0.71 1.2,1.63 1.25,2.76 h -1.71 c -0.05,-0.68 -0.31,-1.25 -0.78,-1.68 -0.47,-0.43 -1.04,-0.66 -1.72,-0.66 -0.92,0 -1.63,0.33 -2.13,0.99 -0.5,0.66 -0.76,1.62 -0.76,2.87 v 0.34 c 0,1.22 0.25,2.16 0.75,2.81 0.5,0.65 1.22,0.98 2.15,0.98 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6173"
+     d="m 84.728555,144.22075 c -0.7,0.83 -1.73,1.24 -3.1,1.24 -1.13,0 -1.98,-0.33 -2.57,-0.98 -0.59,-0.65 -0.89,-1.62 -0.89,-2.91 v -6.88 h 1.81 v 6.83 c 0,1.6 0.65,2.4 1.95,2.4 1.38,0 2.3,-0.51 2.75,-1.54 v -7.69 h 1.81 v 10.57 h -1.72 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6175"
+     d="m 90.928555,134.70075 0.05,1.17 c 0.77,-0.91 1.82,-1.37 3.13,-1.37 1.48,0 2.48,0.57 3.02,1.7 0.35,-0.51 0.81,-0.92 1.37,-1.23 0.56,-0.31 1.23,-0.47 1.999995,-0.47 2.32,0 3.5,1.23 3.53,3.68 v 7.08 h -1.81 v -6.97 c 0,-0.75 -0.17,-1.32 -0.52,-1.69 -0.35,-0.37 -0.92,-0.56 -1.739995,-0.56 -0.67,0 -1.23,0.2 -1.67,0.6 -0.44,0.4 -0.7,0.94 -0.77,1.62 v 7.01 h -1.82 v -6.92 c 0,-1.54 -0.75,-2.3 -2.26,-2.3 -1.19,0 -2,0.5 -2.43,1.51 v 7.71 h -1.79 v -10.57 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6177"
+     d="m 111.14855,145.46075 c -1.43,0 -2.6,-0.47 -3.5,-1.41 -0.9,-0.94 -1.35,-2.2 -1.35,-3.77 v -0.33 c 0,-1.05 0.2,-1.98 0.6,-2.81 0.4,-0.83 0.96,-1.47 1.68,-1.93 0.72,-0.46 1.5,-0.7 2.34,-0.7 1.37,0 2.44,0.45 3.2,1.36 0.76,0.91 1.14,2.2 1.14,3.89 v 0.75 h -7.16 c 0.03,1.04 0.33,1.88 0.91,2.52 0.58,0.64 1.32,0.96 2.22,0.96 0.64,0 1.18,-0.13 1.62,-0.39 0.44,-0.26 0.83,-0.61 1.16,-1.04 l 1.1,0.86 c -0.86,1.36 -2.19,2.04 -3.96,2.04 z m -0.23,-9.47 c -0.73,0 -1.34,0.27 -1.84,0.8 -0.5,0.53 -0.8,1.27 -0.92,2.23 h 5.29 v -0.14 c -0.05,-0.92 -0.3,-1.63 -0.74,-2.13 -0.44,-0.5 -1.03,-0.76 -1.79,-0.76 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6179"
+     d="m 119.06855,134.70075 0.06,1.33 c 0.81,-1.02 1.86,-1.52 3.16,-1.52 2.23,0 3.36,1.26 3.38,3.78 v 6.98 h -1.81 v -6.99 c -0.01,-0.76 -0.18,-1.33 -0.52,-1.69 -0.34,-0.36 -0.87,-0.55 -1.6,-0.55 -0.59,0 -1.1,0.16 -1.54,0.47 -0.44,0.31 -0.79,0.72 -1.04,1.23 v 7.53 h -1.81 v -10.57 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6181"
+     d="m 130.84855,132.14075 v 2.56 h 1.97 v 1.4 h -1.97 v 6.56 c 0,0.42 0.09,0.74 0.26,0.95 0.17,0.21 0.48,0.32 0.9,0.32 0.21,0 0.5,-0.04 0.86,-0.12 v 1.46 c -0.48,0.13 -0.94,0.19 -1.39,0.19 -0.81,0 -1.42,-0.24 -1.83,-0.73 -0.41,-0.49 -0.62,-1.18 -0.62,-2.08 v -6.55 h -1.92 v -1.4 h 1.92 v -2.56 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6183"
+     d="m 141.44855,145.26075 c -0.1,-0.21 -0.19,-0.58 -0.25,-1.11 -0.84,0.87 -1.84,1.31 -3.01,1.31 -1.04,0 -1.9,-0.29 -2.56,-0.88 -0.66,-0.59 -1,-1.34 -1,-2.24 0,-1.1 0.42,-1.96 1.25,-2.56 0.83,-0.6 2.01,-0.91 3.53,-0.91 h 1.76 v -0.83 c 0,-0.63 -0.19,-1.13 -0.57,-1.51 -0.38,-0.38 -0.93,-0.56 -1.67,-0.56 -0.64,0 -1.18,0.16 -1.62,0.49 -0.44,0.33 -0.65,0.72 -0.65,1.18 h -1.82 c 0,-0.53 0.19,-1.04 0.56,-1.53 0.37,-0.49 0.88,-0.88 1.52,-1.17 0.64,-0.29 1.35,-0.43 2.11,-0.43 1.22,0 2.17,0.3 2.86,0.91 0.69,0.61 1.05,1.45 1.07,2.51 v 4.86 c 0,0.97 0.12,1.74 0.37,2.31 v 0.16 z m -3,-1.37 c 0.57,0 1.1,-0.15 1.61,-0.44 0.51,-0.29 0.88,-0.67 1.1,-1.14 v -2.17 h -1.42 c -2.21,0 -3.32,0.65 -3.32,1.94 0,0.57 0.19,1.01 0.57,1.33 0.38,0.32 0.87,0.48 1.46,0.48 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6185"
+     d="m 148.25855,132.14075 v 2.56 h 1.97 v 1.4 h -1.97 v 6.56 c 0,0.42 0.09,0.74 0.26,0.95 0.17,0.21 0.48,0.32 0.9,0.32 0.21,0 0.5,-0.04 0.86,-0.12 v 1.46 c -0.48,0.13 -0.94,0.19 -1.39,0.19 -0.81,0 -1.42,-0.24 -1.83,-0.73 -0.41,-0.49 -0.62,-1.18 -0.62,-2.08 v -6.55 h -1.92 v -1.4 h 1.92 v -2.56 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6187"
+     d="m 152.34855,131.89075 c 0,-0.29 0.09,-0.54 0.27,-0.74 0.18,-0.2 0.44,-0.3 0.8,-0.3 0.36,0 0.62,0.1 0.8,0.3 0.18,0.2 0.27,0.45 0.27,0.74 0,0.29 -0.09,0.54 -0.27,0.73 -0.18,0.19 -0.45,0.29 -0.8,0.29 -0.35,0 -0.62,-0.1 -0.8,-0.29 -0.18,-0.19 -0.27,-0.43 -0.27,-0.73 z m 1.95,13.37 h -1.81 v -10.56 h 1.81 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6189"
+     d="m 156.70855,139.88075 c 0,-1.04 0.2,-1.97 0.61,-2.79 0.41,-0.82 0.97,-1.46 1.7,-1.91 0.73,-0.45 1.55,-0.67 2.49,-0.67 1.44,0 2.6,0.5 3.49,1.49 0.89,0.99 1.33,2.32 1.33,3.97 v 0.13 c 0,1.03 -0.2,1.95 -0.59,2.77 -0.39,0.82 -0.96,1.45 -1.69,1.91 -0.73,0.46 -1.57,0.68 -2.52,0.68 -1.43,0 -2.59,-0.5 -3.48,-1.49 -0.89,-0.99 -1.33,-2.31 -1.33,-3.96 v -0.13 z m 1.82,0.22 c 0,1.17 0.27,2.11 0.82,2.82 0.55,0.71 1.27,1.06 2.18,1.06 0.92,0 1.65,-0.36 2.19,-1.08 0.54,-0.72 0.81,-1.73 0.81,-3.02 0,-1.16 -0.28,-2.1 -0.83,-2.82 -0.55,-0.72 -1.28,-1.08 -2.19,-1.08 -0.89,0 -1.61,0.35 -2.16,1.06 -0.55,0.71 -0.82,1.74 -0.82,3.06 z" /><path
+     inkscape:connector-curvature="0"
+     id="path6191"
+     d="m 170.30855,134.70075 0.06,1.33 c 0.81,-1.02 1.86,-1.52 3.16,-1.52 2.23,0 3.36,1.26 3.38,3.78 v 6.98 h -1.81 v -6.99 c -0.01,-0.76 -0.18,-1.33 -0.52,-1.69 -0.34,-0.36 -0.87,-0.55 -1.6,-0.55 -0.59,0 -1.1,0.16 -1.54,0.47 -0.44,0.31 -0.79,0.72 -1.04,1.23 v 7.53 h -1.81 v -10.57 z" /></g>
+</svg>

+ 105 - 0
pico-sdk/docs/main.css

@@ -0,0 +1,105 @@
+/************************/
+/*       GENERAL        */
+/************************/
+
+body {
+    color: #1e1e1e;
+}
+
+h1, h2, h3, h4, h5, h6, p, a, li, span, blockquote, input, textarea, select, label {
+    font-family: 'Roboto', sans-serif;
+}
+
+p {
+/*    font-size: 16px;
+    line-height: 25px;
+    margin-bottom: 20px;*/
+}
+
+a {
+    text-decoration: none;
+    color: inherit;
+}
+
+
+/* Sidebar */
+#top {
+	background-color: #F5F5F5;
+	width: 275px;
+	position: fixed;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	height: auto !important;
+    overflow: auto;
+    padding: 25px;
+    box-sizing: border-box;
+    display: flex;
+    flex-direction: column;
+}
+@media (max-width: 1012px) {
+	#top {
+		box-shadow: 5px 0px 10px 0px rgba(0,0,0,0.25);
+		position: fixed;
+		z-index: 9999;
+		left: -100%;
+		width: 450px;
+		background-color: #F5F5F5;
+		transition: 0.2s left;
+	}
+}
+@media (max-width: 767px) {
+	#top {
+		width: calc(100% - 50px);
+		padding: 20px;
+	}
+}
+@media (max-width: 1012px) {
+	#top.open {
+		left: 0;
+	}
+}
+
+
+/* Content */
+#doc-content {
+	padding: 25px 50px 25px 290px;
+	margin: 0 !important;
+	height: auto !important;
+}
+@media (max-width: 1012px) {
+    #doc-content {
+        padding: 110px 40px 40px 40px;
+    }
+}
+@media (max-width: 767px) {
+    #doc-content {
+        padding: 90px 20px 50px 20px;
+    }
+}
+
+
+/* Hide the default doxygen stuff that we dont want */
+.ui-resizable-handle {
+	display: none !important;
+}
+#nav-sync {
+	display: none !important;
+}
+#nav-tree {
+	height: 100% !important;
+	background: none;
+    overflow: auto;
+    padding: 35px;
+    box-sizing: border-box;
+}
+#nav-path, #side-nav {
+	display: none !important;
+}
+
+div.line,
+div.line a,
+div.line span {
+	font-family: monospace;
+}
+

+ 17 - 0
pico-sdk/docs/main.js

@@ -0,0 +1,17 @@
+$(document).ready(function() {
+
+    // Trigger the mobile navigation
+    $(document).on('click', '.navigation-toggle', function (event) {
+        event.preventDefault();
+        $(this).toggleClass('clicked');
+        $('#top').toggleClass('open');
+    });
+
+    // Add a class to all <li>'s with children
+    $('#main-nav ul li > ul').parent().addClass('hasChildren');
+    $('#main-nav .has-submenu').removeClass('has-submenu');
+    $('#main-nav .sm').removeClass('sm');
+    $('#main-nav .sm-dox').removeClass('sm-dox');
+    $('#main-nav #main-menu').removeAttr('data-smartmenus-id');
+    $('#main-nav #main-menu').removeAttr('id');
+});

+ 28 - 0
pico-sdk/docs/mainpage.md

@@ -0,0 +1,28 @@
+# Raspberry Pi Pico SDK
+
+The Raspberry Pi Pico SDK (Software Development Kit), henceforth SDK, provides the headers, libraries and build system necessary to write programs for RP2040-based devices such as the Raspberry Pi Pico in C, C++ or assembly language. The SDK is designed to provide an API (Application Programming Interface) and programming environment that is familiar both to non-embedded C developers and embedded C developers alike.
+
+A single program runs on the device at a time with a conventional `main()` method. Standard C/C++ libraries are supported along with APIs for accessing the RP2040’s hardware, including DMA, IRQs, and the wide variety of fixed-function peripherals and PIO (Programmable IO).
+
+Additionally the SDK provides higher-level libraries for dealing with timers, USB, synchronization and multi-core programming, along with additional high-level functionality built using PIO, such as audio. The SDK can be used to build anything from simple applications, or full-fledged runtime environments such as MicroPython, to low-level software such as the RP2040’s on-chip bootrom itself.
+
+This documentation is generated from the SDK source tree using Doxygen. It provides basic information on the APIs used for each library, but does not provide usage information. Please refer to the Databooks for usage and more technical information.
+
+## SDK Design
+
+The RP2040 is a powerful chip, however it is an embedded environment, so both RAM and program space are at premium. Additionally the trade-offs between performance and other factors (e.g. edge-case error handling, runtime vs compile-time configuration) are necessarily much more visible to the developer than they might be on other higher-level platforms.
+
+The intention within the SDK has been for features to just work out of the box, with sensible defaults, but also to give the developer as much control and power as possible (if they want it) to fine-tune every aspect of the application they are building and the libraries used.
+
+## The Build System
+
+The SDK uses CMake to manage the build. CMake is widely supported by IDEs (Integrated Development Environments), and allows a simple specification of the build (via `CMakeLists.txt` files), from which CMake can generate a build system (for use by `make`, `ninja` or other build tools) customized for the platform and by any configuration variables the developer chooses.
+
+Apart from being a widely-used build system for C/C++ development, CMake is fundamental to the way the SDK is structured, and how applications are configured and built.
+
+The SDK builds an executable which is bare-metal, i.e. it includes the entirety of the code needed to run on the device (other than floating-point and other optimized code contained in the bootrom within the RP2040).
+
+## Examples
+
+This SDK documentation contains a number of example code fragments. An index of these examples can be found [here](@ref examples_page). These examples, and any other source code included in this documentation, is Copyright &copy; 2020 Raspberry Pi (Trading) Ltd. and licensed under the [3-Clause BSD](https://opensource.org/licenses/BSD-3-Clause) license.
+

+ 447 - 0
pico-sdk/docs/normalise.css

@@ -0,0 +1,447 @@
+/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in
+ *    IE on Windows Phone and in iOS.
+ */
+
+ html {
+    line-height: 1.15; /* 1 */
+    -ms-text-size-adjust: 100%; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+  }
+
+  /* Sections
+     ========================================================================== */
+
+  /**
+   * Remove the margin in all browsers (opinionated).
+   */
+
+  body {
+    margin: 0;
+  }
+
+  /**
+   * Add the correct display in IE 9-.
+   */
+
+  article,
+  aside,
+  footer,
+  header,
+  nav,
+  section {
+    display: block;
+  }
+
+  /**
+   * Correct the font size and margin on `h1` elements within `section` and
+   * `article` contexts in Chrome, Firefox, and Safari.
+   */
+
+  h1 {
+    font-size: 145%;
+    margin: 0.67em 0;
+  }
+
+  /* Grouping content
+     ========================================================================== */
+
+  /**
+   * Add the correct display in IE 9-.
+   * 1. Add the correct display in IE.
+   */
+
+  figcaption,
+  figure,
+  main { /* 1 */
+    display: block;
+  }
+
+  /**
+   * Add the correct margin in IE 8.
+   */
+
+  figure {
+    margin: 1em 40px;
+  }
+
+  /**
+   * 1. Add the correct box sizing in Firefox.
+   * 2. Show the overflow in Edge and IE.
+   */
+
+  hr {
+    box-sizing: content-box; /* 1 */
+    height: 0; /* 1 */
+    overflow: visible; /* 2 */
+  }
+
+  /**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+
+  pre {
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
+  }
+
+  /* Text-level semantics
+     ========================================================================== */
+
+  /**
+   * 1. Remove the gray background on active links in IE 10.
+   * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+   */
+
+  a {
+    background-color: transparent; /* 1 */
+    -webkit-text-decoration-skip: objects; /* 2 */
+  }
+
+  /**
+   * 1. Remove the bottom border in Chrome 57- and Firefox 39-.
+   * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+   */
+
+  abbr[title] {
+    border-bottom: none; /* 1 */
+    text-decoration: underline; /* 2 */
+    text-decoration: underline dotted; /* 2 */
+  }
+
+  /**
+   * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+   */
+
+  b,
+  strong {
+    font-weight: inherit;
+  }
+
+  /**
+   * Add the correct font weight in Chrome, Edge, and Safari.
+   */
+
+  b,
+  strong {
+    font-weight: bolder;
+  }
+
+  /**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+
+  code,
+  kbd,
+  samp {
+    font-family: monospace, monospace; /* 1 */
+    font-size: 1em; /* 2 */
+  }
+
+  /**
+   * Add the correct font style in Android 4.3-.
+   */
+
+  dfn {
+    font-style: italic;
+  }
+
+  /**
+   * Add the correct background and color in IE 9-.
+   */
+
+  mark {
+    background-color: #ff0;
+    color: #000;
+  }
+
+  /**
+   * Add the correct font size in all browsers.
+   */
+
+  small {
+    font-size: 80%;
+  }
+
+  /**
+   * Prevent `sub` and `sup` elements from affecting the line height in
+   * all browsers.
+   */
+
+  sub,
+  sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+  }
+
+  sub {
+    bottom: -0.25em;
+  }
+
+  sup {
+    top: -0.5em;
+  }
+
+  /* Embedded content
+     ========================================================================== */
+
+  /**
+   * Add the correct display in IE 9-.
+   */
+
+  audio,
+  video {
+    display: inline-block;
+  }
+
+  /**
+   * Add the correct display in iOS 4-7.
+   */
+
+  audio:not([controls]) {
+    display: none;
+    height: 0;
+  }
+
+  /**
+   * Remove the border on images inside links in IE 10-.
+   */
+
+  img {
+    border-style: none;
+  }
+
+  /**
+   * Hide the overflow in IE.
+   */
+
+  svg:not(:root) {
+    overflow: hidden;
+  }
+
+  /* Forms
+     ========================================================================== */
+
+  /**
+   * 1. Change the font styles in all browsers (opinionated).
+   * 2. Remove the margin in Firefox and Safari.
+   */
+
+  button,
+  input,
+  optgroup,
+  select,
+  textarea {
+    font-family: sans-serif; /* 1 */
+    font-size: 100%; /* 1 */
+    line-height: 1.15; /* 1 */
+    margin: 0; /* 2 */
+  }
+
+  /**
+   * Show the overflow in IE.
+   * 1. Show the overflow in Edge.
+   */
+
+  button,
+  input { /* 1 */
+    overflow: visible;
+  }
+
+  /**
+   * Remove the inheritance of text transform in Edge, Firefox, and IE.
+   * 1. Remove the inheritance of text transform in Firefox.
+   */
+
+  button,
+  select { /* 1 */
+    text-transform: none;
+  }
+
+  /**
+   * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+   *    controls in Android 4.
+   * 2. Correct the inability to style clickable types in iOS and Safari.
+   */
+
+  button,
+  html [type="button"], /* 1 */
+  [type="reset"],
+  [type="submit"] {
+    -webkit-appearance: button; /* 2 */
+  }
+
+  /**
+   * Remove the inner border and padding in Firefox.
+   */
+
+  button::-moz-focus-inner,
+  [type="button"]::-moz-focus-inner,
+  [type="reset"]::-moz-focus-inner,
+  [type="submit"]::-moz-focus-inner {
+    border-style: none;
+    padding: 0;
+  }
+
+  /**
+   * Restore the focus styles unset by the previous rule.
+   */
+
+  button:-moz-focusring,
+  [type="button"]:-moz-focusring,
+  [type="reset"]:-moz-focusring,
+  [type="submit"]:-moz-focusring {
+    outline: 1px dotted ButtonText;
+  }
+
+  /**
+   * Correct the padding in Firefox.
+   */
+
+  fieldset {
+    padding: 0.35em 0.75em 0.625em;
+  }
+
+  /**
+   * 1. Correct the text wrapping in Edge and IE.
+   * 2. Correct the color inheritance from `fieldset` elements in IE.
+   * 3. Remove the padding so developers are not caught out when they zero out
+   *    `fieldset` elements in all browsers.
+   */
+
+  legend {
+    box-sizing: border-box; /* 1 */
+    color: inherit; /* 2 */
+    display: table; /* 1 */
+    max-width: 100%; /* 1 */
+    padding: 0; /* 3 */
+    white-space: normal; /* 1 */
+  }
+
+  /**
+   * 1. Add the correct display in IE 9-.
+   * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+   */
+
+  progress {
+    display: inline-block; /* 1 */
+    vertical-align: baseline; /* 2 */
+  }
+
+  /**
+   * Remove the default vertical scrollbar in IE.
+   */
+
+  textarea {
+    overflow: auto;
+  }
+
+  /**
+   * 1. Add the correct box sizing in IE 10-.
+   * 2. Remove the padding in IE 10-.
+   */
+
+  [type="checkbox"],
+  [type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+  }
+
+  /**
+   * Correct the cursor style of increment and decrement buttons in Chrome.
+   */
+
+  [type="number"]::-webkit-inner-spin-button,
+  [type="number"]::-webkit-outer-spin-button {
+    height: auto;
+  }
+
+  /**
+   * 1. Correct the odd appearance in Chrome and Safari.
+   * 2. Correct the outline style in Safari.
+   */
+
+  [type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    outline-offset: -2px; /* 2 */
+  }
+
+  /**
+   * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+   */
+
+  [type="search"]::-webkit-search-cancel-button,
+  [type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+  }
+
+  /**
+   * 1. Correct the inability to style clickable types in iOS and Safari.
+   * 2. Change font properties to `inherit` in Safari.
+   */
+
+  ::-webkit-file-upload-button {
+    -webkit-appearance: button; /* 1 */
+    font: inherit; /* 2 */
+  }
+
+  /* Interactive
+     ========================================================================== */
+
+  /*
+   * Add the correct display in IE 9-.
+   * 1. Add the correct display in Edge, IE, and Firefox.
+   */
+
+  details, /* 1 */
+  menu {
+    display: block;
+  }
+
+  /*
+   * Add the correct display in all browsers.
+   */
+
+  summary {
+    display: list-item;
+  }
+
+  /* Scripting
+     ========================================================================== */
+
+  /**
+   * Add the correct display in IE 9-.
+   */
+
+  canvas {
+    display: inline-block;
+  }
+
+  /**
+   * Add the correct display in IE.
+   */
+
+  template {
+    display: none;
+  }
+
+  /* Hidden
+     ========================================================================== */
+
+  /**
+   * Add the correct display in IE 10-.
+   */
+
+  [hidden] {
+    display: none;
+  }

BIN
pico-sdk/docs/pico.jpg


BIN
pico-sdk/docs/rp2040.png


+ 1 - 0
pico-sdk/docs/search.svg

@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 29 29" xml:space="preserve"><style type="text/css">.st0{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;} .st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;} .st2{fill:none;stroke:#000000;stroke-miterlimit:10;} .st3{fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:10;stroke-dasharray:1.7411,1.7411;} .st4{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.0261,4.0522;}</style><circle class="st0" cx="11.854" cy="11.854" r="9" fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="2"/><path class="st1" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M18.451 18.451l7.695 7.695"/><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description about="https://iconscout.com/legal#licenses" dc:title="search,find,magnifier,glass,magnify" dc:description="search,find,magnifier,glass,magnify" dc:publisher="Iconscout" dc:date="2017-10-04" dc:format="image/svg+xml" dc:language="en"><dc:creator><rdf:Bag><rdf:li>Jemis Mali</rdf:li></rdf:Bag></dc:creator></rdf:Description></rdf:RDF></metadata></svg>

+ 703 - 0
pico-sdk/docs/styles.css

@@ -0,0 +1,703 @@
+
+.logo {
+    margin-bottom: 30px;
+}
+@media (max-width: 1012px) {
+    .logo {
+        display: none;
+    }
+}
+
+.logo--mobile {
+    display: none;
+}
+@media (max-width: 1012px) {
+    .logo--mobile {
+        display: block;
+        box-sizing: border-box;
+        max-width: 35px;
+        position: absolute;
+        z-index: 10;
+        top: 50%;
+        left: 40px;
+        transform: translateY(-50%);
+    }
+    .logo--mobile img {
+        width: 100%;
+    }
+}
+@media (max-width: 767px) {
+    .logo--mobile {
+        left: 20px;
+    }
+}
+
+
+
+.navigation-footer {
+    margin-top: auto;
+    order: 3;
+    color: #CA4F62;
+    display: flex;
+    align-items: center;
+}
+@media (max-width: 1012px) {
+    .navigation-footer {
+        margin-top: 50px;
+    }
+}
+.navigation-footer img {
+    height: 35px;
+}
+.navigation-footer a {
+    font-size: .9em;
+    margin-left: 10px;
+}
+
+
+
+
+
+/* Search Box */
+#MSearchBox {
+    border-radius: 5px;
+    margin-top: 0px;
+    margin-bottom: 15px;
+    background: none;
+    background-color: white;
+    position: relative;
+    border-radius: 0;
+    box-shadow: none;
+    width: 100%;
+}
+#MSearchBox .right {
+    display: none;
+}
+#MSearchBox .left {
+    width: 100%;
+    height: auto;
+    left: 0;
+}
+#MSearchBox img {
+    position: absolute;
+    z-index: 1;
+    top: 4px;
+    left: 0px;
+}
+#MSearchBox input[type=text] {
+    position: inherit;
+    padding: 16px 15px 14px 30px;
+    border: 0;
+    box-sizing: border-box;
+    background: none;
+    background-color: white;
+    width: 100%;
+    margin: 0;
+    box-sizing: border-box;
+    font-family: 'Roboto', sans-serif;
+    font-size: 0.9em;
+}
+#MSearchSelectWindow {
+    position: fixed;
+    top: 178px !important;
+    left: 49px !important;
+    border: solid 1px #d4d4d4;
+    border-radius: 0;
+    box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.25);
+    background-color: white;
+}
+#MSearchSelectWindow .SelectItem {
+    font-family: 'Roboto', sans-serif;
+    padding: 1px 25px 1px 6px;
+}
+#MSearchSelectWindow .SelectionMark {
+    color: black;
+}
+#MSearchSelectWindow .SelectItem:hover {
+    background-color: #CA4F62;
+}
+#MSearchResultsWindow {
+    position: fixed;
+    top: 178px !important;
+    left: 49px !important;
+    border: solid 1px #d4d4d4;
+    border-radius: 0;
+    box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.25);
+    background-color: white;
+}
+.SRSymbol {
+    color: #CA4F62;
+}
+
+
+
+/* Main Navigation */
+#main-nav ul {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+#main-nav > ul {
+    display: flex;
+    flex-direction: column;
+}
+#main-nav > ul > li > a {
+    font-weight: normal;
+    font-size: 18px;
+}
+#main-nav > ul > li {
+    position: relative;
+    padding-bottom: 20px;
+    flex: 1;
+    order: 2;
+}
+#main-nav > ul > li:last-child {
+    order: 1;
+    float: none !important;
+}
+#main-nav ul li a {
+    display: block;
+}
+
+#main-nav ul li.hasChildren > a:hover[aria-expanded="false"] {
+    text-decoration: none;
+}
+
+#main-nav ul li a:hover {
+    text-decoration: underline;
+    color: #CA4F62;
+}
+
+#main-nav ul ul li {
+    position: relative;
+    padding-bottom: 10px;
+}
+
+#main-nav ul li.hasChildren > a[aria-expanded="false"]:after {
+    position: absolute;
+    content: "+";
+    /*top: -1px;*/
+    right: -2px;
+    line-height: 20px;
+    font-size: 20px;
+}
+
+#main-nav li ul {
+    padding-left: 5px;
+    display: none;
+    padding-top: 15px;
+    /*padding-bottom: 15px;*/
+}
+
+@media (max-width: 1012px) {
+    #main-nav > ul > li.hasChildren:after {
+        top: 9px;
+    }
+    #main-nav > ul > li {
+        padding-bottom: 0px;
+    }
+    #main-nav > ul > li:first-child {
+        border-top: 1px solid rgba(0,0,0,0.2);
+    }
+    #main-nav > ul > li {
+        padding: 10px 0;
+        border-bottom: 1px solid rgba(0,0,0,0.2);
+    }
+    #main-nav > ul > li:last-child {
+        padding: 10px 0;
+    }
+    #main-nav > ul > li ul {
+        padding-bottom: 10px;
+    }
+}
+
+
+/* Page Header */
+div.header {
+    background: none;
+    padding: 0px;
+    margin-bottom: 20px;
+    border-bottom: none;
+}
+div.header .headertitle {
+    padding: 0;
+}
+div.header .title {
+    margin: 0;
+}
+div.header .summary {
+    font-size: 13px;
+    padding: 9px 0 0 0;
+    width: auto;
+}
+@media (max-width: 767px) {
+    div.header .summary {
+        text-align: left;
+        margin-bottom: 20px;
+    }
+}
+div.header .summary a:hover {
+    color: #CA4F62;
+}
+div.header .ingroups {
+    font-size: 13px;
+    width: auto;
+    font-weight: normal;
+}
+
+
+/* Floating labels */
+span.mlabels {
+    margin: 0;
+    margin-left: 10px;
+}
+span.mlabel {
+    margin: 0;
+    margin-left: 10px;
+    border: solid 1px #CA4F62;
+    background-color: #CA4F62;
+    padding: 3px 5px;
+    font-weight: normal;
+}
+
+
+/* Content area */
+div.contents {
+    padding: 0;
+    margin: 0px;
+    margin-bottom: 20px;
+}
+div.contents ul li {
+    margin-bottom: 10px;
+}
+div.contents ul li:last-child {
+    margin-bottom: 0px;
+}
+
+div.toc {
+    padding: 0;
+    padding-bottom: 20px;
+    background-color: transparent;
+    border: none;
+    box-sizing: border-box;
+    float: none;
+    width: 100%;
+    margin: 0;
+    border-radius: 0;
+}
+
+@media (max-width: 767px) {
+    div.toc {
+        //
+    }
+}
+div.toc h3 {
+    margin: 0;
+    margin-bottom: 5px;
+    color: black;
+    font: 400 14px/22px Roboto,sans-serif;
+    font-weight: bold;
+}
+div.toc ul {
+    margin: 0;
+}
+div.toc ul li {
+    margin-left: 0 !important;
+    padding-left: 15px !important;
+    font: 400 14px/22px Roboto,sans-serif;
+}
+div.toc li ul {
+    padding-left: 10px;
+    padding-top: 7px;
+}
+
+/* Group Headers */
+h2.groupheader {
+    border-bottom: solid 1px #d4d4d4;
+    color: black;
+    margin: 0px;
+    margin-top: 30px;
+    padding: 10px 0;
+}
+tr.heading h2 {
+    margin: 0px;
+}
+
+
+/* Tables */
+table.memberdecls {
+    margin-top: 30px;
+    /*margin-bottom: 30px;*/
+}
+table.memberdecls td.memSeparator {
+    line-height: 0;
+    font-size: 0;
+    border-bottom: 1px solid #d4d4d4;
+}
+table.memberdecls td.memItemLeft {
+    padding: 7px 15px 4px 15px;
+    background-color: #f5f5f5;
+}
+table.memberdecls td.memItemRight {
+    padding: 7px 15px 4px 15px;
+    background-color: #f5f5f5;
+}
+table.memberdecls td.mdescLeft {
+    padding: 7px 15px 4px 15px;
+    background-color: #f5f5f5;
+}
+table.memberdecls td.mdescRight {
+    padding: 7px 15px 4px 15px;
+    background-color: #f5f5f5;
+}
+
+table.params .paramname {
+    color: black;
+}
+
+
+table.markdownTable td, table.markdownTable th {
+    border: 1px solid #d4d4d4;
+    padding: 3px 7px;
+    color: black;
+}
+
+table.markdownTable th.markdownTableHeadLeft, table.markdownTable th.markdownTableHeadRight, table.markdownTable th.markdownTableHeadCenter, table.markdownTable th.markdownTableHeadNone {
+    background-color: #f5f5f5;
+    color: black;
+    padding: 3px 7px;
+}
+
+div.contents .fragment {
+    border: solid 1px #CA4F62;
+    padding: 20px;
+    border-radius: 4px;
+}
+
+div.contents .line {
+    line-height: 15px;
+}
+
+
+.memtitle {
+    margin-top: 10px;
+    border-top: solid 1px #d4d4d4;
+    border-left: solid 1px #d4d4d4;
+    border-right: solid 1px #d4d4d4;
+    background: none;
+    background-color: #f5f5f5;
+    padding: 8px 10px;
+    font-weight: bold;
+    font-size: 18px;
+}
+.memtitle .permalink a, .memtitle .permalink a:visited {
+    color: black;
+}
+.memtitle .permalink a:hover {
+    text-decoration: none;
+}
+.memitem {
+    margin: 0;
+    box-shadow: none;
+}
+.memitem.glow {
+    box-shadow: 0 0 15px #CA4F62;
+}
+.memitem .memproto {
+    box-shadow: none;
+    background: none;
+    background-color: #f5f5f5;
+    border-top: solid 1px #d4d4d4;
+    border-left: solid 1px #d4d4d4;
+    border-right: solid 1px #d4d4d4;
+    color: black;
+    padding: 8px 10px;
+}
+.memitem .memproto .memname {
+    margin-left: 0;
+}
+.memitem .memdoc {
+    box-shadow: none;
+    background: none;
+    border-bottom: solid 1px #d4d4d4;
+    border-left: solid 1px #d4d4d4;
+    border-right: solid 1px #d4d4d4;
+    padding: 10px 12px;
+
+}
+
+
+/* General links? */
+a.el {
+    font-weight: normal;
+}
+a.el {
+    color: #CA4F62;
+}
+a.el:visited {
+    color: #CA4F62;
+}
+a.el:hover {
+    color: #CA4F62;
+}
+div.contents a {
+    color: #CA4F62;
+}
+div.contents a:visited {
+    color: #CA4F62;
+}
+div.contents a:hover {
+    color: #CA4F62;
+}
+
+
+/* Highlighted effect */
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+    text-shadow: 0 0 15px #CA4F62;
+}
+
+
+/* Directory */
+div.directory {
+    margin: 20px 0px;
+    border-top: 1px solid #d4d4d4;
+    border-bottom: 1px solid #d4d4d4;
+}
+div.directory .levels {
+    font-size: 13px;
+    padding: 8px 0;
+}
+div.directory .levels span:hover {
+    color: #CA4F62;
+}
+table.directory {
+    /*width: 100%;*/
+}
+table.directory tr.even {
+    background-color: #f5f5f5;
+}
+table.directory td.entry {
+    padding: 8px 6px;
+    vertical-align: middle;
+    box-sizing: border-box;
+}
+table.directory td.desc {
+    padding: 8px 6px;
+    vertical-align: middle;
+    box-sizing: border-box;
+}
+
+
+/* Icons */
+.iconfopen, .icondoc {
+    margin: 0;
+}
+
+
+
+dl.reflist dt {
+    box-shadow: none;
+    background-color: #F5F5F5;
+    border-top: solid 1px #d4d4d4;
+    border-left: solid 1px #d4d4d4;
+    border-right: solid 1px #d4d4d4;
+    padding: 10px;
+}
+dl.reflist dd {
+    box-shadow: none;
+    background: none;
+    border-bottom: solid 1px #d4d4d4;
+    border-left: solid 1px #d4d4d4;
+    border-right: solid 1px #d4d4d4;
+    padding: 10px;
+}
+
+
+/* Standard arrow icon? */
+.arrow {
+    color: #d4d4d4;
+    width: auto;
+    height: auto;
+    margin: 0 5px;
+}
+
+.icona {
+    height: auto;
+    width: auto;
+    margin-right: 8px;
+}
+.icona .icon {
+    font-family: 'Roboto', sans-serif;
+    margin: 0;
+    background-color: #CA4F62;
+    padding: 1px;
+    font-weight: normal;
+}
+
+/* horizontal ruler */
+hr {
+    border: none;
+    border-top: 1px solid #d4d4d4;
+    margin-top: 20px;
+    margin-bottom: 20px;
+}
+
+
+/* Notes */
+dl.warning {
+    margin: 0px;
+    padding: 0px;
+    padding-left: 10px;
+}
+dl.note {
+    margin: 0px;
+    padding: 0px;
+    padding-left: 10px;
+}
+dl.attention {
+    margin: 0px;
+    padding: 0px;
+    padding-left: 10px;
+}
+dl.todo {
+    margin: 0px;
+    padding: 0px;
+    padding-left: 10px;
+}
+dl dt, dl dt a.el {
+    font-weight: bold;
+}
+dl dd {
+    margin: 0px;
+}
+
+
+table.fieldtable {
+    box-shadow: none;
+    border: 1px solid #d4d4d4;
+}
+table.fieldtable th {
+    background: none;
+    background-color: #F5F5F5;
+    border-bottom: 1px solid #d4d4d4;
+    color: black;
+    font-size: 100%;
+    font-weight: bold;
+}
+table.fieldtable td.fieldname, table.fieldtable td.fielddoc {
+    border-bottom: 1px solid #d4d4d4;
+    border-right: 1px solid #d4d4d4;
+    vertical-align: middle;
+}
+
+
+div.qindex {
+    background-color: #F5F5F5;
+    border: none;
+    text-align: center;
+    padding: 8px 0;
+}
+table.classindex div.ah {
+    font-family: 'Roboto', sans-serif;
+    margin: 0;
+    background: none;
+    background-color: #CA4F62;
+    padding: 1px;
+    font-weight: normal;
+    border: none;
+    box-shadow: none;
+    border-radius: 0;
+    padding: 3px;
+}
+table.classindex td {
+    padding: 3px 6px;
+    vertical-align: middle;
+    font-size: 14px;
+}
+table.classindex table td {
+    padding: 0;
+    vertical-align: middle;
+}
+
+
+div.textblock h2 {
+    border-bottom: solid 1px #d4d4d4;
+    padding-bottom: 10px;
+}
+
+
+
+
+
+.navigation-mobile {
+    display: none;
+    background-color: #F5F5F5;
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 70px;
+}
+@media (max-width: 1012px) {
+    .navigation-mobile {
+        display: block;
+    }
+}
+
+
+.navigation-toggle {
+    cursor: pointer;
+    width: 44px;
+    height: 44px;
+    margin-right: 20px;
+    position: absolute;
+    right: 0;
+    top: 50%;
+    transform: translateY(-50%);
+    bottom: 5%;
+    z-index: 50;
+    display: none;
+}
+@media (max-width: 1012px) {
+    .navigation-toggle {
+        display: block;
+    }
+}
+@media (max-width: 767px) {
+    .navigation-toggle {
+        margin-right: 0px;
+    }
+}
+.navigation-toggle span {
+    display: block;
+    text-indent: -9999px;
+    position: absolute;
+    height: 2px;
+    left: 10px;
+    right: 10px;
+    background-color: #CA4F62;
+    border-radius: 1px;
+    transition: 0.15s all;
+}
+.line-1 {
+    top: 14px;
+}
+.line-2 {
+    top: 50%;
+    margin-top: -1px;
+}
+.line-3 {
+    bottom: 14px;
+}
+.navigation-toggle.clicked .line-1 {
+    transform: rotate(45deg);
+    top: 21px;
+}
+.navigation-toggle.clicked .line-2 {
+    opacity: 0;
+}
+.navigation-toggle.clicked .line-3 {
+    transform: rotate(-45deg);
+    bottom: 21px;
+}
+

+ 31 - 0
pico-sdk/docs/weblinks_page.md

@@ -0,0 +1,31 @@
+## Documentation and datasheets {#weblinks_page}
+
+The full documentation for the RP2040 and Raspberry Pi Pico board can be found at the following links
+
+ - [RP2040 Datasheet](https://rptl.io/rp2040-datasheet)
+ - [Raspberry Pi Pico Datasheet](https://rptl.io/pico-datasheet)
+ - [Hardware design with the RP2040](https://rptl.io/rp2040-design)
+ - [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk)
+ - [Raspberry Pi Pico Python SDK](https://rptl.io/pico-micropython)
+ - [Getting started with Raspberry Pi Pico](https://rptl.io/pico-get-started)
+ - [Raspberry Pi Pico FAQ](https://rptl.io/pico-faq)
+
+### Weblinks
+
+At Raspberry Pi we have a very community-based attitude to help. We run a very popular and busy forum where you can ask questions about any aspect of the Raspberry Pi ecosystem, including the Raspberry Pi Pico.
+
+You can find our forums at the [following link](https://forums.raspberrypi.com/).
+
+For the main Raspberry Pi website, [see here](https://www.raspberrypi.com)
+
+For the Raspberry Pi Pico page, [see here](https://rptl.io/rp2040-get-started)
+
+### GitHub
+
+All the source code for the Raspberry Pi Pico SDK, examples and other libraries can be found on GitHub.
+
+ - [Raspberry Pi Pico SDK](https://github.com/raspberrypi/pico-sdk)
+ - [Pico Examples](https://github.com/raspberrypi/pico-examples)
+ - [Pico Extras - Libraries under development](https://github.com/raspberrypi/pico-extras)
+ - [Pico Playground - Examples that use Pico Extras](https://github.com/raspberrypi/pico-playground)
+ - [Pico Bootrom source code](https://github.com/raspberrypi/pico-bootrom)

+ 73 - 0
pico-sdk/external/pico_sdk_import.cmake

@@ -0,0 +1,73 @@
+# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
+
+# This can be dropped into an external project to help locate this SDK
+# It should be include()ed prior to project()
+
+if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
+    set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
+    message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
+endif ()
+
+if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
+    set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
+    message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
+endif ()
+
+if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
+    set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
+    message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
+endif ()
+
+set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
+set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
+set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
+
+if (NOT PICO_SDK_PATH)
+    if (PICO_SDK_FETCH_FROM_GIT)
+        include(FetchContent)
+        set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
+        if (PICO_SDK_FETCH_FROM_GIT_PATH)
+            get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
+        endif ()
+        # GIT_SUBMODULES_RECURSE was added in 3.17
+        if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
+            FetchContent_Declare(
+                    pico_sdk
+                    GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
+                    GIT_TAG master
+                    GIT_SUBMODULES_RECURSE FALSE
+            )
+        else ()
+            FetchContent_Declare(
+                    pico_sdk
+                    GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
+                    GIT_TAG master
+            )
+        endif ()
+
+        if (NOT pico_sdk)
+            message("Downloading Raspberry Pi Pico SDK")
+            FetchContent_Populate(pico_sdk)
+            set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
+        endif ()
+        set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
+    else ()
+        message(FATAL_ERROR
+                "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
+                )
+    endif ()
+endif ()
+
+get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
+if (NOT EXISTS ${PICO_SDK_PATH})
+    message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
+endif ()
+
+set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
+if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
+    message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
+endif ()
+
+set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
+
+include(${PICO_SDK_INIT_CMAKE_FILE})

+ 25 - 0
pico-sdk/lib/tinyusb/.gitattributes

@@ -0,0 +1,25 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text=auto
+
+*.c text 
+*.cpp text 
+*.h text
+*.icf text 
+*.js text
+*.json text
+*.ld text
+*.md text
+*.mk text
+*.py text
+*.rst text
+*.s text
+*.txt text
+*.xml text
+*.yml text
+
+Makefile text
+
+# Windows-only Visual Studio things
+
+*.sln        text eol=crlf
+*.csproj     text eol=crlf

+ 74 - 0
pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/bug_report.yml

@@ -0,0 +1,74 @@
+name: Bug Report
+description: Report a problem with TinyUSB
+labels: 'Bug 🐞'
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for taking the time to fill out this bug report!
+        It's okay to leave some blank if it doesn't apply to your problem.
+
+  - type: dropdown
+    attributes:
+      label: Operating System
+      options:
+              - Linux
+              - MacOS
+              - RaspberryPi OS
+              - Windows 7
+              - Windows 10
+              - Windows 11
+              - Others
+    validations:
+      required: true
+
+  - type: input
+    attributes:
+      label: Board
+      placeholder: e.g Feather nRF52840 Express
+    validations:
+      required: true
+
+  - type: textarea
+    attributes:
+      label: Firmware
+      placeholder: |
+        e.g examples/device/cdc_msc.
+        If it is custom firmware, please provide links to your minimal sources or as attached files.
+    validations:
+      required: true
+
+  - type: textarea
+    attributes:
+      label: What happened ?
+      placeholder: A clear and concise description of what the bug is.
+    validations:
+      required: true
+
+  - type: textarea
+    attributes:
+      label: How to reproduce ?
+      placeholder: |
+        1. Go to '...'
+        2. Click on '....'
+        3. See error      
+    validations:
+      required: true
+
+  - type: textarea
+    attributes:
+      label: Debug Log
+      placeholder: |
+        TinyUSB debug log where the issue occurred as attached txt file, best with comments to explain the actual events.
+
+        Note: To enable logging, add `LOG=3` to to the make command if building with stock examples or set `CFG_TUSB_DEBUG=3` in your tusb_config.h. 
+        More information can be found at [example's readme](https://github.com/hathach/tinyusb/blob/master/docs/getting_started.md)
+    validations:
+      required: false
+
+  - type: textarea
+    attributes:
+      label: Screenshots
+      description: If applicable, add screenshots to help explain your problem.
+    validations:
+      required: false

+ 4 - 0
pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/config.yml

@@ -0,0 +1,4 @@
+contact_links:
+  - name: TinyUSB Discussion
+    url: https://github.com/hathach/tinyusb/discussions
+    about: If you have other questions or need help, post it here.

+ 14 - 0
pico-sdk/lib/tinyusb/.github/ISSUE_TEMPLATE/feature_request.md

@@ -0,0 +1,14 @@
+---
+name: Feature Request
+about: Suggest an idea for this project
+title: ''
+labels: Feature 💡
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.

+ 5 - 0
pico-sdk/lib/tinyusb/.github/pull_request_template.md

@@ -0,0 +1,5 @@
+**Describe the PR**
+A clear and concise description of what this PR solve.
+
+**Additional context**
+If applicable, add any other context about the PR and/or screenshots here.

+ 159 - 0
pico-sdk/lib/tinyusb/.github/workflows/build.yml

@@ -0,0 +1,159 @@
+name: Build ARM
+
+on:
+  pull_request:
+  push:
+  release:
+    types:
+      - created
+
+jobs:
+  # ---------------------------------------
+  # Unit testing with Ceedling
+  # ---------------------------------------
+  unit-test:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Setup Ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: '2.7'
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Unit Tests
+      run: |
+        # Install Ceedling
+        gem install ceedling
+        cd test
+        ceedling test:all
+
+  # ---------------------------------------
+  # Build ARM family
+  # ---------------------------------------
+  build-arm:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        family:
+        # Alphabetical order
+        - 'imxrt'
+        - 'lpc15'
+        - 'lpc18'
+        - 'lpc54'
+        - 'lpc55'
+        - 'mm32'
+        - 'nrf'
+        - 'rp2040'
+        - 'samd11'
+        - 'samd21'
+        - 'samd51'
+        - 'saml2x'
+        - 'stm32f0'
+        - 'stm32f1'
+        - 'stm32f4'
+        - 'stm32f7'
+        - 'stm32h7'
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout common submodules in lib
+      run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip lib/sct_neopixel
+
+    - name: Checkout hathach/linkermap
+      uses: actions/checkout@v2
+      with:
+         repository: hathach/linkermap
+         path: linkermap
+
+    - name: Checkout pico-sdk
+      if: matrix.family == 'rp2040'
+      run: |
+        git clone --depth 1 -b develop https://github.com/raspberrypi/pico-sdk ~/pico-sdk
+        echo >> $GITHUB_ENV PICO_SDK_PATH=~/pico-sdk
+
+    - name: Set Toolchain URL
+      run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v10.2.1-1.1/xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-x64.tar.gz
+
+    - name: Cache Toolchain
+      uses: actions/cache@v2
+      id: cache-toolchain
+      with:
+        path: ~/cache/
+        key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }}
+
+    - name: Install Toolchain
+      if: steps.cache-toolchain.outputs.cache-hit != 'true'
+      run: |
+        mkdir -p ~/cache/toolchain
+        wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.gz
+        tar -C ~/cache/toolchain -xaf toolchain.tar.gz
+
+    - name: Set Toolchain Path
+      run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
+
+    - name: Build
+      run: python3 tools/build_family.py ${{ matrix.family }}
+
+    - name: Linker Map
+      run: |
+        pip install linkermap/
+        for ex in `ls -d examples/device/*/`; do \
+          find ${ex} -name *.map -print -quit | \
+          xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
+        done
+
+  # ---------------------------------------
+  # Build all no-family (opharned) boards
+  # ---------------------------------------
+  build-board:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        example:
+        # Alphabetical order, a group of 4
+        - 'device/audio_test device/board_test device/cdc_dual_ports device/cdc_msc'
+        - 'device/cdc_msc_freertos device/dfu_runtime device/hid_composite device/hid_composite_freertos'
+        - 'device/hid_generic_inout device/hid_multiple_interface device/midi_test device/msc_dual_lun'
+        - 'device/net_lwip_webserver'
+        - 'device/uac2_headset device/usbtmc device/webusb_serial host/cdc_msc_hid'
+
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout common submodules in lib
+      run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
+
+    - name: Set Toolchain URL
+      run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v10.2.1-1.1/xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-x64.tar.gz
+
+    - name: Cache Toolchain
+      uses: actions/cache@v2
+      id: cache-toolchain
+      with:
+        path: ~/cache/
+        key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }}
+
+    - name: Install Toolchain
+      if: steps.cache-toolchain.outputs.cache-hit != 'true'
+      run: |
+        mkdir -p ~/cache/toolchain
+        wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.gz
+        tar -C ~/cache/toolchain -xaf toolchain.tar.gz
+
+    - name: Set Toolchain Path
+      run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
+
+    - name: Build
+      run: python3 tools/build_board.py ${{ matrix.example }}

+ 48 - 0
pico-sdk/lib/tinyusb/.github/workflows/build_esp.yml

@@ -0,0 +1,48 @@
+name: Build ESP
+
+on:
+  pull_request:
+  push:
+  release:
+    types:
+      - created
+
+jobs:
+  build-esp:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        board:
+        # Alphabetical order
+        # ESP32-S2
+        - 'espressif_saola_1'
+        # ESP32-S3
+        - 'espressif_addax_1'
+
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Pull ESP-IDF docker
+      run: docker pull espressif/idf:latest
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout hathach/linkermap
+      uses: actions/checkout@v2
+      with:
+         repository: hathach/linkermap
+         path: linkermap
+
+    - name: Build
+      run: docker run --rm -v $PWD:/project -w /project espressif/idf:latest python3 tools/build_esp32sx.py ${{ matrix.board }}
+
+    - name: Linker Map
+      run: |
+        pip install linkermap/
+        for ex in `ls -d examples/device/*/`; do \
+          find ${ex} -maxdepth 3 -name *.map -print -quit | \
+          xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
+        done

+ 64 - 0
pico-sdk/lib/tinyusb/.github/workflows/build_msp430.yml

@@ -0,0 +1,64 @@
+name: Build MSP430
+
+on:
+  pull_request:
+  push:
+  release:
+    types:
+      - created
+
+jobs:  
+  build-msp430:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        family:
+        # Alphabetical order
+        - 'msp430'
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout common submodules in lib
+      run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
+
+    - name: Checkout hathach/linkermap
+      uses: actions/checkout@v2
+      with:
+         repository: hathach/linkermap
+         path: linkermap
+
+    - name: Set Toolchain URL
+      run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/9_2_0_0/export/msp430-gcc-9.2.0.50_linux64.tar.bz2
+
+    - name: Cache Toolchain
+      uses: actions/cache@v2
+      id: cache-toolchain
+      with:
+        path: ~/cache/
+        key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }}
+
+    - name: Install Toolchain
+      if: steps.cache-toolchain.outputs.cache-hit != 'true'
+      run: |
+        mkdir -p ~/cache/toolchain
+        wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.bz2
+        tar -C ~/cache/toolchain -xaf toolchain.tar.bz2
+
+    - name: Set Toolchain Path
+      run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
+
+    - name: Build
+      run: python3 tools/build_family.py ${{ matrix.family }}
+
+    - name: Linker Map
+      run: |
+        pip install linkermap/
+        for ex in `ls -d examples/device/*/`; do \
+          find ${ex} -name *.map -print -quit | \
+          xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
+        done

+ 65 - 0
pico-sdk/lib/tinyusb/.github/workflows/build_renesas.yml

@@ -0,0 +1,65 @@
+name: Build Renesas
+
+on:
+  pull_request:
+  push:
+  release:
+    types:
+      - created
+
+jobs:
+  build-rx:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        family:
+        # Alphabetical order
+        - 'rx'
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout common submodules in lib
+      run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
+
+    - name: Checkout hathach/linkermap
+      uses: actions/checkout@v2
+      with:
+         repository: hathach/linkermap
+         path: linkermap
+
+    - name: Set Toolchain URL
+      run: echo >> $GITHUB_ENV TOOLCHAIN_URL=http://gcc-renesas.com/downloads/get.php?f=rx/8.3.0.202004-gnurx/gcc-8.3.0.202004-GNURX-ELF.run
+
+    - name: Cache Toolchain
+      uses: actions/cache@v2
+      id: cache-toolchain
+      with:
+        path: ~/cache/
+        key: ${{ runner.os }}-21-03-30-${{ env.TOOLCHAIN_URL }}
+
+    - name: Install Toolchain
+      if: steps.cache-toolchain.outputs.cache-hit != 'true'
+      run: |
+        mkdir -p ~/cache/toolchain/gnurx
+        wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.run
+        chmod +x toolchain.run
+        ./toolchain.run -p ~/cache/toolchain/gnurx -y
+
+    - name: Set Toolchain Path
+      run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
+
+    - name: Build
+      run: python3 tools/build_family.py ${{ matrix.family }}
+
+    - name: Linker Map
+      run: |
+        pip install linkermap/
+        for ex in `ls -d examples/device/*/`; do \
+          find ${ex} -name *.map -print -quit | \
+          xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
+        done

+ 65 - 0
pico-sdk/lib/tinyusb/.github/workflows/build_riscv.yml

@@ -0,0 +1,65 @@
+name: Build RISC-V
+
+on:
+  pull_request:
+  push:
+  release:
+    types:
+      - created
+
+jobs:
+  build-riscv:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        family:
+        # Alphabetical order
+        - 'fomu'
+        - 'gd32vf103'
+    steps:
+    - name: Setup Python
+      uses: actions/setup-python@v2
+
+    - name: Checkout TinyUSB
+      uses: actions/checkout@v2
+
+    - name: Checkout common submodules in lib
+      run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip
+
+    - name: Checkout hathach/linkermap
+      uses: actions/checkout@v2
+      with:
+         repository: hathach/linkermap
+         path: linkermap
+
+    - name: Set Toolchain URL
+      run: echo >> $GITHUB_ENV TOOLCHAIN_URL=https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v10.1.0-1.1/xpack-riscv-none-embed-gcc-10.1.0-1.1-linux-x64.tar.gz
+
+    - name: Cache Toolchain
+      uses: actions/cache@v2
+      id: cache-toolchain
+      with:
+        path: ~/cache/
+        key: ${{ runner.os }}-21-03-04-${{ env.TOOLCHAIN_URL }}
+
+    - name: Install Toolchain
+      if: steps.cache-toolchain.outputs.cache-hit != 'true'
+      run: |
+        mkdir -p ~/cache/toolchain
+        wget --progress=dot:mega $TOOLCHAIN_URL -O toolchain.tar.gz
+        tar -C ~/cache/toolchain -xaf toolchain.tar.gz
+
+    - name: Set Toolchain Path
+      run: echo >> $GITHUB_PATH `echo ~/cache/toolchain/*/bin`
+
+    - name: Build
+      run: python3 tools/build_family.py ${{ matrix.family }}
+
+    - name: Linker Map
+      run: |
+        pip install linkermap/
+        for ex in `ls -d examples/device/*/`; do \
+          find ${ex} -name *.map -print -quit | \
+          xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"'; \
+        done

+ 58 - 0
pico-sdk/lib/tinyusb/.github/workflows/trigger.yml

@@ -0,0 +1,58 @@
+name: Trigger Repos
+
+on:
+  push:
+    branches: master
+  release:
+    types:
+      - created
+
+jobs:
+  trigger-mynewt:
+    if: github.repository == 'hathach/tinyusb'
+    runs-on: ubuntu-latest
+    steps:
+    - name: Trigger mynewt-tinyusb-example
+      shell: bash
+      run: |
+        curl -X POST -H "Authorization: token ${{ secrets.API_TOKEN_GITHUB }}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" --data '{"event_type": "rebuild"}' https://api.github.com/repos/hathach/mynewt-tinyusb-example/dispatches
+
+  mirror-tinyusb-src:
+    if: github.repository == 'hathach/tinyusb'
+    runs-on: ubuntu-latest
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v2
+
+    - name: Push to tinyusb_src
+      run: |
+        # clone tinyusb_src with PAT
+        git config --global user.email "thach@tinyusb.org"
+        git config --global user.name "hathach"
+        git clone --depth 1 --single-branch --branch main "https://${{ secrets.API_TOKEN_GITHUB }}@github.com/hathach/tinyusb_src.git" tinyusb_src
+
+        # Remove all files
+        rm -rf tinyusb_src/*
+
+        # Copy src and other files
+        cp -r src tinyusb_src/
+        cp LICENSE tinyusb_src/
+        cd tinyusb_src
+
+        # Commit if there is changes
+        if [ -n "$(git status --porcelain)" ]; then
+          git add .
+          git commit --message "Update from https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA"
+          git push 
+        fi
+
+    - name: Create tinyusb_src Release
+      if: ${{ github.event_name == 'release' }}
+      run: |
+        # Push tag
+        cd tinyusb_src
+        git tag ${{ github.event.release.tag_name }}
+        git push origin ${{ github.event.release.tag_name }}
+        
+        # Send POST reqwuest to release https://docs.github.com/en/rest/reference/repos#create-a-release
+        curl -X POST -H "Authorization: token ${{ secrets.API_TOKEN_GITHUB }}" -H "Accept: application/vnd.github.v3+json" --data '{"tag_name": "${{ github.event.release.tag_name }}", "name": "${{ github.event.release.name }}", "body": "${{ github.event.release.body }}", "draft": ${{ github.event.release.draft }}, "prerelease": ${{ github.event.release.prerelease }}}' https://api.github.com/repos/hathach/tinyusb_src/releases

+ 28 - 0
pico-sdk/lib/tinyusb/.gitignore

@@ -0,0 +1,28 @@
+html
+latex
+*.d
+*.o
+*.P
+*.map
+*.axf
+*.bin
+*.jlink
+*.emSession
+*.elf
+*.ind
+.env
+.settings/
+.idea/
+.gdb_history
+/examples/*/*/build*
+test_old/
+tests_obsolete/
+_build
+/examples/*/*/ses
+/examples/*/*/ozone
+/examples/obsolete
+# coverity intermediate files
+cov-int
+# cppcheck build directories
+*-build-dir
+/_bin/

+ 129 - 0
pico-sdk/lib/tinyusb/.gitmodules

@@ -0,0 +1,129 @@
+[submodule "hw/mcu/nordic/nrfx"]
+	path = hw/mcu/nordic/nrfx
+	url = https://github.com/NordicSemiconductor/nrfx.git
+[submodule "tools/uf2"]
+	path = tools/uf2
+	url = https://github.com/microsoft/uf2.git
+[submodule "hw/mcu/sony/cxd56/spresense-exported-sdk"]
+	path = hw/mcu/sony/cxd56/spresense-exported-sdk
+	url = https://github.com/sonydevworld/spresense-exported-sdk.git
+[submodule "hw/mcu/ti"]
+	path = hw/mcu/ti
+	url = https://github.com/hathach/ti_driver.git
+[submodule "hw/mcu/microchip"]
+	path = hw/mcu/microchip
+	url = https://github.com/hathach/microchip_driver.git
+[submodule "hw/mcu/nuvoton"]
+	path = hw/mcu/nuvoton
+	url = https://github.com/majbthrd/nuc_driver.git
+[submodule "lib/lwip"]
+	path = lib/lwip
+	url = https://github.com/lwip-tcpip/lwip.git
+[submodule "hw/mcu/st/cmsis_device_f4"]
+	path = hw/mcu/st/cmsis_device_f4
+	url = https://github.com/STMicroelectronics/cmsis_device_f4.git
+[submodule "hw/mcu/st/stm32f4xx_hal_driver"]
+	path = hw/mcu/st/stm32f4xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f4xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_f0"]
+	path = hw/mcu/st/cmsis_device_f0
+	url = https://github.com/STMicroelectronics/cmsis_device_f0.git
+[submodule "hw/mcu/st/stm32f0xx_hal_driver"]
+	path = hw/mcu/st/stm32f0xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f0xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_f1"]
+	path = hw/mcu/st/cmsis_device_f1
+	url = https://github.com/STMicroelectronics/cmsis_device_f1.git
+[submodule "hw/mcu/st/stm32f1xx_hal_driver"]
+	path = hw/mcu/st/stm32f1xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f1xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_f2"]
+	path = hw/mcu/st/cmsis_device_f2
+	url = https://github.com/STMicroelectronics/cmsis_device_f2.git
+[submodule "hw/mcu/st/stm32f2xx_hal_driver"]
+	path = hw/mcu/st/stm32f2xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f2xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_f3"]
+	path = hw/mcu/st/cmsis_device_f3
+	url = https://github.com/STMicroelectronics/cmsis_device_f3.git
+[submodule "hw/mcu/st/stm32f3xx_hal_driver"]
+	path = hw/mcu/st/stm32f3xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f3xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_f7"]
+	path = hw/mcu/st/cmsis_device_f7
+	url = https://github.com/STMicroelectronics/cmsis_device_f7.git
+[submodule "hw/mcu/st/stm32f7xx_hal_driver"]
+	path = hw/mcu/st/stm32f7xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32f7xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_h7"]
+	path = hw/mcu/st/cmsis_device_h7
+	url = https://github.com/STMicroelectronics/cmsis_device_h7.git
+[submodule "hw/mcu/st/stm32h7xx_hal_driver"]
+	path = hw/mcu/st/stm32h7xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32h7xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_l0"]
+	path = hw/mcu/st/cmsis_device_l0
+	url = https://github.com/STMicroelectronics/cmsis_device_l0.git
+[submodule "hw/mcu/st/stm32l0xx_hal_driver"]
+	path = hw/mcu/st/stm32l0xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32l0xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_l1"]
+	path = hw/mcu/st/cmsis_device_l1
+	url = https://github.com/STMicroelectronics/cmsis_device_l1.git
+[submodule "hw/mcu/st/stm32l1xx_hal_driver"]
+	path = hw/mcu/st/stm32l1xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32l1xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_l4"]
+	path = hw/mcu/st/cmsis_device_l4
+	url = https://github.com/STMicroelectronics/cmsis_device_l4.git
+[submodule "hw/mcu/st/stm32l4xx_hal_driver"]
+	path = hw/mcu/st/stm32l4xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32l4xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_g0"]
+	path = hw/mcu/st/cmsis_device_g0
+	url = https://github.com/STMicroelectronics/cmsis_device_g0.git
+[submodule "hw/mcu/st/stm32g0xx_hal_driver"]
+	path = hw/mcu/st/stm32g0xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_g4"]
+	path = hw/mcu/st/cmsis_device_g4
+	url = https://github.com/STMicroelectronics/cmsis_device_g4.git
+[submodule "hw/mcu/st/stm32g4xx_hal_driver"]
+	path = hw/mcu/st/stm32g4xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git
+[submodule "hw/mcu/st/cmsis_device_l5"]
+	path = hw/mcu/st/cmsis_device_l5
+	url = https://github.com/STMicroelectronics/cmsis_device_l5.git
+[submodule "hw/mcu/st/stm32l5xx_hal_driver"]
+	path = hw/mcu/st/stm32l5xx_hal_driver
+	url = https://github.com/STMicroelectronics/stm32l5xx_hal_driver.git
+[submodule "lib/sct_neopixel"]
+	path = lib/sct_neopixel
+	url = https://github.com/gsteiert/sct_neopixel
+[submodule "lib/FreeRTOS-Kernel"]
+	path = lib/FreeRTOS-Kernel
+	url = https://github.com/FreeRTOS/FreeRTOS-Kernel.git
+[submodule "lib/CMSIS_5"]
+	path = lib/CMSIS_5
+	url = https://github.com/ARM-software/CMSIS_5.git
+[submodule "hw/mcu/silabs/cmsis-dfp-efm32gg12b"]
+	path = hw/mcu/silabs/cmsis-dfp-efm32gg12b
+	url = https://github.com/cmsis-packs/cmsis-dfp-efm32gg12b
+[submodule "hw/mcu/renesas/rx"]
+	path = hw/mcu/renesas/rx
+	url = https://github.com/kkitayam/rx_device.git
+[submodule "hw/mcu/nxp/lpcopen"]
+	path = hw/mcu/nxp/lpcopen
+	url = https://github.com/hathach/nxp_lpcopen.git
+[submodule "hw/mcu/nxp/mcux-sdk"]
+	path = hw/mcu/nxp/mcux-sdk
+	url = https://github.com/NXPmicro/mcux-sdk.git
+[submodule "hw/mcu/nxp/nxp_sdk"]
+	path = hw/mcu/nxp/nxp_sdk
+	url = https://github.com/hathach/nxp_sdk.git
+[submodule "hw/mcu/gd/nuclei-sdk"]
+	path = hw/mcu/gd/nuclei-sdk
+	url = https://github.com/Nuclei-Software/nuclei-sdk.git
+[submodule "hw/mcu/mindmotion/mm32sdk"]
+	path = hw/mcu/mindmotion/mm32sdk
+	url = https://github.com/hathach/mm32sdk.git

+ 18 - 0
pico-sdk/lib/tinyusb/.readthedocs.yaml

@@ -0,0 +1,18 @@
+# .readthedocs.yaml
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+version: 2
+
+sphinx:
+   configuration: docs/conf.py
+
+python:
+  version: 3.8
+  install:
+    - requirements: docs/requirements.txt
+
+submodules:
+  include: []
+  recursive: false
+    

+ 88 - 0
pico-sdk/lib/tinyusb/CODE_OF_CONDUCT.rst

@@ -0,0 +1,88 @@
+***************
+Code of Conduct
+***************
+
+Our Pledge
+----------
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our
+project and our community a harassment-free experience for everyone,
+regardless of age, body size, disability, ethnicity, sex
+characteristics, gender identity and expression, level of experience,
+education, socio-economic status, nationality, personal appearance,
+race, religion, or sexual identity and orientation.
+
+Our Standards
+-------------
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+-  Using welcoming and inclusive language
+-  Being respectful of differing viewpoints and experiences
+-  Gracefully accepting constructive criticism
+-  Focusing on what is best for the community
+-  Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+-  The use of sexualized language or imagery and unwelcome sexual
+   attention or advances
+-  Trolling, insulting/derogatory comments, and personal or political
+   attacks
+-  Public or private harassment
+-  Publishing others' private information, such as a physical or
+   electronic address, without explicit permission
+-  Other conduct which could reasonably be considered inappropriate in a
+   professional setting
+
+Our Responsibilities
+--------------------
+
+Project maintainers are responsible for clarifying the standards of
+acceptable behavior and are expected to take appropriate and fair
+corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit,
+or reject comments, commits, code, wiki edits, issues, and other
+contributions that are not aligned to this Code of Conduct, or to ban
+temporarily or permanently any contributor for other behaviors that they
+deem inappropriate, threatening, offensive, or harmful.
+
+Scope
+-----
+
+This Code of Conduct applies both within project spaces and in public
+spaces when an individual is representing the project or its community.
+Examples of representing a project or community include using an
+official project e-mail address, posting via an official social media
+account, or acting as an appointed representative at an online or
+offline event. Representation of a project may be further defined and
+clarified by project maintainers.
+
+Enforcement
+-----------
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may
+be reported by contacting the project team at thach@tinyusb.org. All
+complaints will be reviewed and investigated and will result in a
+response that is deemed necessary and appropriate to the circumstances.
+The project team is obligated to maintain confidentiality with regard to
+the reporter of an incident. Further details of specific enforcement
+policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in
+good faith may face temporary or permanent repercussions as determined
+by other members of the project's leadership.
+
+Attribution
+-----------
+
+This Code of Conduct is adapted from the `Contributor
+Covenant <https://www.contributor-covenant.org>`__, version 1.4,
+available at
+https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq

+ 192 - 0
pico-sdk/lib/tinyusb/CONTRIBUTORS.rst

@@ -0,0 +1,192 @@
+************
+Contributors
+************
+
+Special thanks to all the people who spent their precious time and effort to help this project so far.
+list contributors and their awesome work for the stack:
+
+Notable contributors
+====================
+
+(sorted alphabetically)
+
+`Adafruit Team <https://github.com/adafruit>`__
+-----------------------------------------------
+
+-  Main supporter and sponsor for hardware boards and kits
+-  Discussion and suggestion for feature and improvement
+-  Design the project logo
+
+
+`Ha Thach <https://github.com/hathach>`__
+-----------------------------------------
+
+-  *Author and maintainer*
+-  Most features development
+
+
+`Hristo Gochkov <https://github.com/me-no-dev>`__
+-------------------------------------------------
+
+-  Improve ESP32s2 DCD
+
+
+`Jacob Berg Potter <https://github.com/j4cbo>`__
+------------------------------------------------
+
+-  Add new class driver for network CDC-NCM
+
+
+`Jan Dümpelmann <https://github.com/duempel>`__
+-----------------------------------------------
+
+-  Improve transfer performance for Synopsys DCD for STM32 MCUs
+
+
+`Jeff Epler <https://github.com/jepler>`__
+------------------------------------------
+
+-  Improve MIDI class driver
+
+
+`Jerzy Kasenberg <https://github.com/kasjer>`__
+-----------------------------------------------
+
+-  Add new DCD port for Dialog DA1469x
+-  Add new class driver for Bluetooth HCI
+-  Add ISO transfer for STM32 Synopsys, Nordic nRF, Dialog DA1469x
+-  Improve Audio driver and add uac2\_headset example
+-  Improve STM32 Synopsys DCD with various PRs
+
+
+`J McCarthy <https://github.com/xmos-jmccarthy>`__
+--------------------------------------------------
+
+-  Add new DFU 1.1 class driver
+-  Add new example for dfu
+
+
+`Kamil Tomaszewski <https://github.com/kamtom480>`__
+----------------------------------------------------
+
+-  Add new DCD port for Sony CXD56 (spresnese board)
+
+
+`Kay Sievers <https://github.com/kaysievers>`__
+-----------------------------------------------
+
+-  Improve MIDI driver with packet API
+
+
+`Koji KITAYAMA <https://github.com/kkitayam>`__
+-----------------------------------------------
+
+-  Add new DCD port for NXP Kinetis KL25
+-  Add new DCD port for Renesas RX family (RX600, RX700 ..) with GR-CITRUS, RX65n target board
+-  Add new class driver for USB Video Class (UVC 1.5)
+
+
+`Nathan Conrad <https://github.com/pigrew>`__
+---------------------------------------------
+
+-  Add new DCD port for STM32 fsdev Fullspeed device for STM32 L0,
+   F0, F1, F3 etc ...
+-  Add new class driver for USB Test and Measurement Class (USBTMC)
+-  Various improvement e.g Zero-length packet, Lint setup
+-  Board support for STM32F070RB Nucleo, STM32F303 Discovery
+
+
+`Peter Lawrence <https://github.com/majbthrd>`__
+------------------------------------------------
+
+-  Add new DCD port for Nuvoton NUC 120, 121, 125, 126, 505
+-  Add new class driver for network RNDIS, CDC-ECM
+-  Enhance CDC-NCM network driver to compatible with RNDIS/ECM
+-  Add *net\_lwip\_webserver* example for demonstration of usbnet with lwip
+-  Board support for NuTiny NUC120, NUC121s, NUC125s, NUC126V, NUC505
+-  Improve multiple cdc interfaces API & add cdc\_dual\_ports example
+
+
+`Rafael Silva <https://github.com/perigoso>`__
+----------------------------------------------
+
+-  Add new DCD port for Silabs EFM32GG12 with SLTB009A board
+-  Rewrite documentation in rst and setup for readthedocs
+
+
+`Raspberry Pi Team <https://github.com/raspberrypi>`__
+------------------------------------------------------
+
+-  Add new DCD port for Raspberry Pi RP2040
+-  Add new HCD port for Raspberry Pi RP2040
+
+
+`Reinhard Panhuber <https://github.com/PanRe>`__
+------------------------------------------------
+
+-  Add new class driver for USB Audio Class 2.0 (UAC2)
+-  Rework tu\_fifo with unmasked pointer, add DMA support, and constant address support
+-  Add new DCD/USBD edpt\_xfer\_fifo() API for optimizing endpoint transfer
+-  Add and greatly improve Isochronous transfer
+-  Add new audio examples: audio\_test and audio\_4\_channel\_mic
+
+
+`Scott Shawcroft <https://github.com/tannewt>`__
+------------------------------------------------
+
+-  Add new DCD port for SAMD21 and SAMD51
+-  Add new class driver for Musical Instrument Digital Interface (MIDI)
+-  Improve USBD control transfer, MSC, CDC class driver
+-  Board support for Metro M0 & M4 express
+-  Write the excellent porting.md documentation
+-  Add initial Makefile
+
+`Sean Cross <https://github.com/xobs>`__
+----------------------------------------
+
+-  Add new DCD port for ValentyUSB eptri (fomu board)
+
+
+`Sylvain "tnt" Munaut <https://github.com/smunaut>`__
+-----------------------------------------------------
+
+-  Add new class driver for DFU Runtime
+
+
+`Timon Skerutsch <https://github.com/PTS93>`__
+----------------------------------------------
+
+-  Add hid\_test.js script and extensive test for bi-directional raw HID
+
+
+`Tod E. Kurt <https://github.com/todbot>`__
+-------------------------------------------
+
+-  Add hid\_test.js script and extensive test for bi-directional raw HID
+
+
+`Uwe Bonnes <https://github.com/UweBonnes>`__
+---------------------------------------------
+
+-  Improve STM32 Synopsys highspeed DCD
+
+
+`William D. Jones <https://github.com/cr1901>`__
+------------------------------------------------
+
+-  Add new DCD port for Synopsys DesignWare for STM32 L4, F2, F4,
+   F7, H7 etc ...
+-  Add new DCD port for TI MSP430
+-  Board support for STM32F407 Discovery, STM32H743 Nucleo, pyboard v1.1, msp\_exp430f5529lp etc ...
+
+
+`Zixun Li <https://github.com/HiFiPhile>`__
+-------------------------------------------
+
+-  Add new DCD port for Microchip SAMx7x
+-  Add IAR compiler support
+-  Improve UAC2, CDC, DFU class driver
+
+
+`Full contributors list <https://github.com/hathach/tinyusb/contributors>`__
+============================================================================

+ 21 - 0
pico-sdk/lib/tinyusb/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018, hathach (tinyusb.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 141 - 0
pico-sdk/lib/tinyusb/README.rst

@@ -0,0 +1,141 @@
+.. figure:: docs/assets/logo.svg
+   :alt: TinyUSB
+
+|Build Status| |Documentation Status| |License|
+
+TinyUSB is an open-source cross-platform USB Host/Device stack for
+embedded system, designed to be memory-safe with no dynamic allocation
+and thread-safe with all interrupt events are deferred then handled in
+the non-ISR task function.
+
+Please take a look at the online `documentation <https://docs.tinyusb.org/>`__.
+
+.. figure:: docs/assets/stack.svg
+   :width: 500px
+   :alt: stackup
+
+::
+
+	.
+	├── docs            # Documentation
+	├── examples        # Sample with Makefile build support
+	├── hw
+	│   ├── bsp         # Supported boards source files
+	│   └── mcu         # Low level mcu core & peripheral drivers
+	├── lib             # Sources from 3rd party such as freeRTOS, fatfs ...
+	├── src             # All sources files for TinyUSB stack itself.
+	├── test            # Unit tests for the stack
+	└── tools           # Files used internally
+
+Supported MCUs
+==============
+
+The stack supports the following MCUs:
+
+- **Dialog:** DA1469x
+- **Espressif:** ESP32-S2, ESP32-S3
+- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x
+- **NordicSemi:** nRF52833, nRF52840
+- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505
+- **NXP:**
+
+  - iMX RT Series: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064
+  - Kinetis: KL25, K32L2Bxx
+  - LPC Series: 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55
+
+- **Raspberry Pi:** RP2040
+- **Renesas:** RX63N, RX65N
+- **Silabs:** EFM32GG12
+- **Sony:** CXD56
+- **ST:** STM32 series: L0, L1, F0, F1, F2, F3, F4, F7, H7 both FullSpeed and HighSpeed
+- **TI:** MSP430
+- **ValentyUSB:** eptri
+
+Here is the list of `Supported Devices`_ that can be used with provided examples.
+
+Device Stack
+============
+
+Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:
+
+-  Audio Class 2.0 (UAC2)
+-  Bluetooth Host Controller Interface (BTH HCI)
+-  Communication Device Class (CDC)
+-  Device Firmware Update (DFU): DFU mode (WIP) and Runtinme
+-  Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
+-  Mass Storage Class (MSC): with multiple LUNs
+-  Musical Instrument Digital Interface (MIDI)
+-  Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)
+-  Test and Measurement Class (USBTMC)
+-  Video class 1.5 (UVC): work in progress
+-  Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
+-  `WebUSB <https://github.com/WICG/webusb>`__ with vendor-specific class
+
+If you have a special requirement, `usbd_app_driver_get_cb()` can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface [raspberrypi/pico-sdk#197](https://github.com/raspberrypi/pico-sdk/pull/197)
+
+Host Stack
+==========
+
+- Human Interface Device (HID): Keyboard, Mouse, Generic
+- Mass Storage Class (MSC)
+- Hub currently only supports 1 level of hub (due to my laziness)
+
+OS Abstraction layer
+====================
+
+TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS's basic APIs. Following OSes are already supported out of the box.
+
+- **No OS**
+- **FreeRTOS**
+- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its [own repo](https://github.com/hathach/mynewt-tinyusb-example)
+
+Local Docs
+==========
+
+- Info
+
+  - `Uses`_
+  - `Changelog`_
+  - `Contributors`_
+
+- `Reference`_
+
+  - `Supported Devices`_
+  - `Getting Started`_
+  - `Concurrency`_
+
+- `Contributing`_
+
+  - `Code of Conduct`_
+  - `Structure`_
+  - `Porting`_
+
+License
+=======
+
+All TinyUSB sources in the ``src`` folder are licensed under MIT
+license, the `Full license is here <LICENSE>`__. However, each file can be
+individually licensed especially those in ``lib`` and ``hw/mcu`` folder.
+Please make sure you understand all the license term for files you use
+in your project.
+
+
+.. |Build Status| image:: https://github.com/hathach/tinyusb/workflows/Build/badge.svg
+   :target: https://github.com/hathach/tinyusb/actions
+.. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest
+   :target: https://docs.tinyusb.org/en/latest/?badge=latest
+.. |License| image:: https://img.shields.io/badge/license-MIT-brightgreen.svg
+   :target: https://opensource.org/licenses/MIT
+
+
+.. _Uses: docs/info/uses.rst
+.. _Changelog: docs/info/changelog.rst
+.. _Contributors: CONTRIBUTORS.rst
+.. _Reference: docs/reference/index.rst
+.. _Supported Devices: docs/reference/supported.rst
+.. _Getting Started: docs/reference/getting_started.rst
+.. _Concurrency: docs/reference/concurrency.rst
+.. _Contributing: docs/contributing/index.rst
+.. _Code of Conduct: CODE_OF_CONDUCT.rst
+.. _Structure: docs/contributing/structure.rst
+.. _Porting: docs/contributing/porting.rst

+ 18 - 0
pico-sdk/lib/tinyusb/docs/assets/logo.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="280" height="140" version="1.1" viewBox="0 0 74.083 37.042" xmlns="http://www.w3.org/2000/svg">
+  <g transform="translate(-60.931 -79.245)">
+    <g transform="matrix(1.0442 0 0 1.1531 -27.105 33.588)" fill="#fff">
+      <path d="m86.972 39.594c-1.4683 3.2e-5 -2.6588 1.181-2.66 2.6384v26.844c3.3e-5 1.4583 1.1909 2.6404 2.66 2.6404h65.63c1.469-3.2e-5 2.66-1.1822 2.66-2.6404v-26.844c-1e-3 -1.4575-1.1917-2.6384-2.66-2.6384z" color="#000000" fill="#fff" style="-inkscape-stroke:none"/>
+    </g>
+    <g transform="matrix(.35278 0 0 -.35278 -160.36 421.93)" fill="#231f20">
+      <path transform="translate(672.09 955.48)" d="m0 0h-21.484v-12.601h-5.349v-6.436h5.349v-25.383c0-11.331 7.252-13.87 17.223-13.87 4.352 0 8.613 0.272 12.873 0.907v6.073c-0.816-0.09-2.266-0.362-3.535-0.362-3.807 0-5.077 0.816-5.077 4.896v27.739h8.612v6.436h-8.612z"/>
+      <path transform="translate(693.61 925.33)" d="m0 0h-0.049c-1.518 0-2.165-0.896-2.165-2.24v-0.05h4.504v0.05c0 1.344-0.771 2.24-2.29 2.24"/>
+      <path transform="translate(700.92 925.5)" d="m0 0h-0.124c-1.443 0-2.265-0.995-2.265-2.389v-0.074h4.654v0.074c0 1.394-0.822 2.389-2.265 2.389"/>
+      <path transform="translate(750.09 943.78)" d="m0 0c-6.165 0-11.876-2.267-14.505-5.893v4.986h-20.578v-45.326h21.484v36.533c1.27 0.272 2.449 0.453 3.717 0.453 4.715 0 5.44-2.538 5.44-6.436v-30.55h21.484v30.278c0 11.694-7.523 15.955-17.042 15.955"/>
+      <path transform="translate(811.83 942.88)" d="m0 0-10.516-23.57-11.784 23.57h-23.388l24.204-48.046-6.799-15.411h8.249l28.193 63.457z"/>
+      <path transform="translate(706 920)" d="m0 0h-17.421v2.637c0 2.938 1.194 5.675 4.43 5.675h0.124c2.24 0 3.335-1.269 3.932-2.514 0.647 1.469 1.667 2.738 3.883 2.738h0.224c3.086 0 4.828-2.39 4.828-5.774zm-0.598-9.412h-3.16c0.622 1.07 0.971 1.917 0.971 2.737 0 0.871-0.424 1.618-1.493 1.618h-0.05c-0.797 0-1.394-0.249-3.037-1.692-2.339-2.065-3.459-2.912-5.574-2.912h-0.05c-2.787 0-4.555 1.816-4.555 4.231 0 1.219 0.175 1.941 0.548 2.687h3.161c-0.548-0.945-0.797-1.518-0.797-2.314 0-0.845 0.548-1.568 1.493-1.568h0.05c0.821 0 1.12 0.25 2.788 1.692 2.762 2.39 3.832 2.912 5.824 2.912h0.048c2.739 0 4.555-1.917 4.555-4.305 0-1.195-0.298-2.215-0.722-3.086m-4.479-10.93h-12.344v3.011h12.643c1.567 0 2.189 0.548 2.189 1.319 0 0.772-0.622 1.32-2.189 1.32h-12.643v3.01h12.344c3.658 0 5.301-1.841 5.301-4.33 0-2.488-1.643-4.33-5.301-4.33m-9.641 53.817h12.114v-10.601h-12.114zm14.114 2h-16.114v-12.601h-2.685v-45.326h21.484v45.326h-2.685z"/>
+      <path d="m692.79 947.02h2.827v2.319h-2.827z"/>
+      <path d="m699.06 947.02h2.826v2.319h-2.826z"/>
+    </g>
+  </g>
+</svg>

File diff suppressed because it is too large
+ 0 - 0
pico-sdk/lib/tinyusb/docs/assets/stack.svg


+ 42 - 0
pico-sdk/lib/tinyusb/docs/conf.py

@@ -0,0 +1,42 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'TinyUSB'
+copyright = '2021, Ha Thach'
+author = 'Ha Thach'
+
+
+# -- General configuration ---------------------------------------------------
+
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx_autodoc_typehints',
+    'sphinxemoji.sphinxemoji',
+]
+
+templates_path = ['_templates']
+
+exclude_patterns = ['_build']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+html_theme = 'furo'
+html_title = 'TinyUSB'
+html_logo = 'assets/logo.svg'
+html_favicon = 'assets/logo.svg'
+html_theme_options = {
+    'sidebar_hide_name': True,
+}
+
+todo_include_todos = True

+ 1 - 0
pico-sdk/lib/tinyusb/docs/contributing/code_of_conduct.rst

@@ -0,0 +1 @@
+../../CODE_OF_CONDUCT.rst

+ 23 - 0
pico-sdk/lib/tinyusb/docs/contributing/index.rst

@@ -0,0 +1,23 @@
+************
+Contributing
+************
+
+Contributing can be highly rewarding, but it can also be frustrating at times.
+It takes time to review patches, and as this is an open source project, that
+sometimes can take a while. The reviewing process depends on the availability
+of the maintainers, who may not be always available. Please try to be
+understanding throught the process.
+
+There a few guidelines you need to keep in mind when contributing. Please have
+a look at them as that will make the contribution process easier for all
+parties.
+
+Index
+=====
+
+.. toctree::
+   :maxdepth: 2
+
+   code_of_conduct
+   structure
+   porting

+ 241 - 0
pico-sdk/lib/tinyusb/docs/contributing/porting.rst

@@ -0,0 +1,241 @@
+
+*******
+Porting
+*******
+
+TinyUSB is designed to be a universal USB protocol stack for microcontrollers. It
+handles most of the high level USB protocol and relies on the microcontroller's USB peripheral for
+data transactions on different endpoints. Porting is the process of adding low-level support for
+the rest of the common stack. Once the low-level is implemented, it is very easy to add USB support
+for the microcontroller to other projects, especially those already using TinyUSB such as CircuitPython.
+
+Below are instructions on how to get the cdc_msc device example running on a new microcontroller. Doing so includes adding the common code necessary for other uses while minimizing other extra code. Whenever you see a phrase or word in <> it should be replaced.
+
+Register defs
+-------------
+
+The first step to adding support is including the register definitions and startup code for the
+microcontroller in TinyUSB. We write the TinyUSB implementation against these structs instead of higher level functions to keep the code small and to prevent function name collisions in linking of larger projects. For ARM microcontrollers this is the CMSIS definitions. They should be
+placed in the ``hw/mcu/<vendor>/<chip_family>`` directory.
+
+Once this is done, create a directory in ``hw/bsp/<your board name>`` for the specific board you are using to test the code.  (Duplicating an existing board's directory is the best way to get started.) The board should be a readily available development board so that others can also test.
+
+Build
+-----
+
+Now that those directories are in place, we can start our iteration process to get the example building successfully. To build, run from the root of TinyUSB:
+
+``make -C examples/device/cdc_msc BOARD=<board>``
+
+Unless, you've read ahead, this will fail miserably. Now, lets get it to fail less by updating the files in the board directory. The code in the board's directory is responsible for setting up the microcontroller's clocks and pins so that USB works. TinyUSB itself only operates on the USB peripheral. The board directory also includes information what files are needed to build the example.
+
+One of the first things to change is the ``-DCFG_TUSB_MCU`` cflag in the ``board.mk`` file. This is used to tell TinyUSB what platform is being built. So, add an entry to ``src/tusb_option.h`` and update the CFLAG to match.
+
+Update ``board.mk``\ 's VENDOR and CHIP_FAMILY values when creating the directory for the struct files. Duplicate one of the other sources from ``src/portable`` into ``src/portable/<vendor>/<chip_family>`` and delete all of the implementation internals. We'll cover what everything there does later. For now, get it compiling.
+
+Implementation
+--------------
+
+At this point you should get an error due to an implementation issue and hopefully the build is setup for the new MCU. You will still need to modify the ``board.mk`` to include specific CFLAGS, the linker script, linker flags, source files, include directories. All file paths are relative to the top of the TinyUSB repo.
+
+Board Support (BSP)
+^^^^^^^^^^^^^^^^^^^
+
+The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. Its responsible for getting the MCU started and the USB peripheral clocked. It also optionally provides LED definitions that are used to blink an LED to show that the code is running.
+
+It is located in ``hw/bsp/<board name>/board_<board name>.c``.
+
+board_init
+~~~~~~~~~~
+
+``board_init`` is responsible for starting the MCU, setting up the USB clock and USB pins. It is also responsible for initializing LED pins.
+
+One useful clock debugging technique is to set up a PWM output at a known value such as 500hz based on the USB clock so that you can verify it is correct with a logic probe or oscilloscope.
+
+Setup your USB in a crystal-less mode when available. That makes the code easier to port across boards.
+
+board_led_write
+~~~~~~~~~~~~~~~
+
+Feel free to skip this until you want to verify your demo code is running. To implement, set the pin corresponding to the led to output a value that lights the LED when ``state`` is true.
+
+OS Abstraction Layer (OSAL)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The OS Abstraction Layer is responsible for providing basic data structures for TinyUSB that may allow for concurrency when used with an RTOS. Without an RTOS it simply handles concurrency issues between the main code and interrupts.
+
+The code is almost entirely agnostic of MCU and lives in ``src/osal``.
+
+Device API
+^^^^^^^^^^
+
+After the USB device is setup, the USB device code works by processing events on the main thread (by calling ``tud_task``\ ). These events are queued by the USB interrupt handler. So, there are three parts to the device low-level API: device setup, endpoint setup and interrupt processing.
+
+All of the code for the low-level device API is in ``src/portable/<vendor>/<chip family>/dcd_<chip family>.c``.
+
+Device Setup
+~~~~~~~~~~~~
+
+dcd_init
+""""""""
+
+Initializes the USB peripheral for device mode and enables it.
+This function should enable internal D+/D- pull-up for enumeration.
+
+dcd_int_enable / dcd_int_disable
+""""""""""""""""""""""""""""""""
+
+Enables or disables the USB device interrupt(s). May be used to prevent concurrency issues when mutating data structures shared between main code and the interrupt handler.
+
+dcd_int_handler
+"""""""""""""""
+
+Processes all the hardware generated events e.g Bus reset, new data packet from host etc ... It will be called by application in the MCU USB interrupt handler.
+
+dcd_set_address
+"""""""""""""""
+
+Called when the device is given a new bus address.
+
+If your peripheral automatically changes address during enumeration (like the nrf52) you may leave this empty and also no queue an event for the corresponding SETUP packet.
+
+dcd_remote_wakeup
+"""""""""""""""""
+
+Called to remote wake up host when suspended (e.g hid keyboard)
+
+dcd_connect / dcd_disconnect
+""""""""""""""""""""""""""""
+
+Connect or disconnect the data-line pull-up resistor. Define only if MCU has an internal pull-up. (BSP may define for MCU without internal pull-up.)
+
+Special events
+~~~~~~~~~~~~~~
+
+You must let TinyUSB know when certain events occur so that it can continue its work. There are a few methods you can call to queue events for TinyUSB to process.
+
+dcd_event_bus_signal
+""""""""""""""""""""
+
+There are a number of events that your peripheral may communicate about the state of the bus. Here is an overview of what they are. Events in **BOLD** must be provided for TinyUSB to work.
+
+
+* **DCD_EVENT_RESET** - Triggered when the host resets the bus causing the peripheral to reset. Do any other internal reset you need from the interrupt handler such as resetting the control endpoint.
+* DCD_EVENT_SOF - Signals the start of a new USB frame.
+
+Calls to this look like:
+
+.. code-block::
+
+   dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
+
+
+The first ``0`` is the USB peripheral number. Statically saying 0 is common for single USB device MCUs.
+
+The ``true`` indicates the call is from an interrupt handler and will always be the case when porting in this way.
+
+dcd_setup_received
+""""""""""""""""""
+
+SETUP packets are a special type of transaction that can occur at any time on the control endpoint, numbered ``0``. Since they are unique, most peripherals have special handling for them. Their data is always 8 bytes in length as well.
+
+Calls to this look like:
+
+.. code-block::
+
+   dcd_event_setup_received(0, setup, true);
+
+
+As before with ``dcd_event_bus_signal`` the first argument is the USB peripheral number and the third is true to signal its being called from an interrupt handler. The middle argument is byte array of length 8 with the contents of the SETUP packet. It can be stack allocated because it is copied into the queue.
+
+Endpoints
+~~~~~~~~~
+
+Endpoints are the core of the USB data transfer process. They come in a few forms such as control, isochronous, bulk, and interrupt. We won't cover the details here except with some caveats in open below. In general, data is transferred by setting up a buffer of a given length to be transferred on a given endpoint address and then waiting for an interrupt to signal that the transfer is finished. Further details below.
+
+Endpoints within USB have an address which encodes both the number and direction of an endpoint. TinyUSB provides ``tu_edpt_number`` and ``tu_edpt_dir`` to unpack this data from the address. Here is a snippet that does it.
+
+.. code-block::
+
+   uint8_t epnum = tu_edpt_number(ep_addr);
+   uint8_t dir   = tu_edpt_dir(ep_addr);
+
+
+dcd_edpt_open
+"""""""""""""
+
+Opening an endpoint is done for all non-control endpoints once the host picks a configuration that the device should use. At this point, the endpoint should be enabled in the peripheral and configured to match the endpoint descriptor. Pay special attention to the direction of the endpoint you can get from the helper methods above. It will likely change what registers you are setting.
+
+Also make sure to enable endpoint specific interrupts.
+
+dcd_edpt_close
+""""""""""""""
+
+Close an endpoint. his function is used for implementing alternate settings.
+
+After calling this, the device should not respond to any packets directed towards this endpoint. When called, this function must abort any transfers in progress through this endpoint, before returning.
+
+Implementation is optional. Must be called from the USB task. Interrupts could be disabled or enabled during the call.
+
+dcd_edpt_xfer
+"""""""""""""
+
+``dcd_edpt_xfer`` is responsible for configuring the peripheral to send or receive data from the host. "xfer" is short for "transfer". **This is one of the core methods you must implement for TinyUSB to work (one other is the interrupt handler).**  Data from the host is the OUT direction and data to the host is IN. It  is used for all endpoints including the control endpoint 0. Make sure to handle the zero-length packet STATUS packet on endpoint 0 correctly. It may be a special transaction to the peripheral.
+
+Besides that, all other transactions are relatively straight-forward. The endpoint address provides the endpoint
+number and direction which usually determines where to write the buffer info. The buffer and its length are usually
+written to a specific location in memory and the peripheral is told the data is valid. (Maybe by writing a 1 to a
+register or setting a counter register to 0 for OUT or length for IN.)
+
+The transmit buffer alignment is determined by ``CFG_TUSB_MEM_ALIGN``.
+
+One potential pitfall is that the buffer may be longer than the maximum endpoint size of one USB
+packet. Some peripherals can handle transmitting multiple USB packets for a provided buffer (like the SAMD21).
+Others (like the nRF52) may need each USB packet queued individually. To make this work you'll need to track
+some state for yourself and queue up an intermediate USB packet from the interrupt handler.
+
+Once the transaction is going, the interrupt handler will notify TinyUSB of transfer completion.
+During transmission, the IN data buffer is guarenteed to remain unchanged in memory until the ``dcd_xfer_complete`` function is called.
+
+The dcd_edpt_xfer function must never add zero-length-packets (ZLP) on its own to a transfer. If a ZLP is required,
+then it must be explicitly sent by the stack calling dcd_edpt_xfer(), by calling dcd_edpt_xfer() a second time with len=0.
+For control transfers, this is automatically done in ``usbd_control.c``.
+
+At the moment, only a single buffer can be transmitted at once. There is no provision for double-buffering. new dcd_edpt_xfer() will not
+be called again on the same endpoint address until the driver calls dcd_xfer_complete() (except in cases of USB resets).
+
+dcd_xfer_complete
+"""""""""""""""""
+
+Once a transfer completes you must call dcd_xfer_complete from the USB interrupt handler to let TinyUSB know that a transaction has completed. Here is a sample call:
+
+.. code-block::
+
+   dcd_event_xfer_complete(0, ep_addr, xfer->actual_len, XFER_RESULT_SUCCESS, true);
+
+
+The arguments are:
+
+
+* the USB peripheral number
+* the endpoint address
+* the actual length of the transfer. (OUT transfers may be smaller than the buffer given in ``dcd_edpt_xfer``\ )
+* the result of the transfer. Failure isn't handled yet.
+* ``true`` to note the call is from an interrupt handler.
+
+dcd_edpt_stall / dcd_edpt_clear_stall
+"""""""""""""""""""""""""""""""""""""
+
+Stalling is one way an endpoint can indicate failure such as when an unsupported command is transmitted. The pair of ``dcd_edpt_stall``\ , ``dcd_edpt_clear_stall`` help manage the stall state of all endpoints.
+
+Woohoo!
+-------
+
+At this point you should have everything working! ;-) Of course, you may not write perfect code. Here are some tips and tricks for debugging.
+
+Use `WireShark <https://www.wireshark.org/>`_ or `a Beagle <https://www.totalphase.com/protocols/usb/>`_ to sniff the USB traffic. When things aren't working its likely very early in the USB enumeration process. Figuring out where can help clue in where the issue is. For example:
+
+
+* If the host sends a SETUP packet and its not ACKed then your USB peripheral probably isn't started correctly.
+* If the peripheral is started correctly but it still didn't work, then verify your usb clock is correct. (You did output a PWM based on it right? ;-) )
+* If the SETUP packet is ACKed but nothing is sent back then you interrupt handler isn't queueing the setup packet correctly. (Also, if you are using your own code instead of an example ``tud_task`` may not be called.) If thats OK, the ``dcd_xfer_complete`` may not be setting up the next transaction correctly.

+ 59 - 0
pico-sdk/lib/tinyusb/docs/contributing/structure.rst

@@ -0,0 +1,59 @@
+*********
+Structure
+*********
+
+Tree
+====
+
+::
+
+  .
+  ├── docs
+  ├── examples
+  ├── hw
+  │   ├── bsp
+  │   └── mcu
+  ├── lib
+  ├── src
+  ├── test
+  └── tools
+
+docs
+----
+
+Documentation
+
+examples
+--------
+
+Sample with Makefile build support
+
+hw/bsp
+------
+
+Supported boards source files
+
+hw/mcu
+------
+
+Low level mcu core & peripheral drivers
+
+lib
+---
+
+Sources from 3rd party such as freeRTOS, fatfs ...
+
+src
+---
+
+All sources files for TinyUSB stack itself.
+
+test
+----
+
+Unit tests for the stack
+
+tools
+-----
+
+Files used internally

+ 25 - 0
pico-sdk/lib/tinyusb/docs/index.rst

@@ -0,0 +1,25 @@
+:hide-toc:
+
+*********
+TinyUSB
+*********
+
+TinyUSB is an open-source cross-platform USB Host/Device stack for embedded systems,
+designed to be memory-safe with no dynamic allocation and thread-safe with all interrupt events being deferred and then handled in the non-ISR task function.
+
+
+.. toctree::
+   :caption: Index
+   :hidden:
+
+   Info <info/index>
+   Reference <reference/index>
+   Contributing <contributing/index>
+
+.. toctree::
+   :caption: External Links
+   :hidden:
+
+   Source Code <https://github.com/hathach/tinyusb>
+   Issue Tracker <https://github.com/hathach/tinyusb/issues>
+   Discussions <https://github.com/hathach/tinyusb/discussions>

+ 621 - 0
pico-sdk/lib/tinyusb/docs/info/changelog.rst

@@ -0,0 +1,621 @@
+*********
+Changelog
+*********
+
+0.12.0
+======
+
+- add CFG_TUSB_OS_INC_PATH for os include path
+
+Device Controller Driver (DCD)
+------------------------------
+
+- Getting device stack to pass USB Compliance Verification test (chapter9, HID, MSC). Ports are tested:
+  nRF, SAMD 21/51, rp2040, stm32f4, Renesas RX, iMXRT, ESP32-S2/3, Kinetic KL25/32, DA146xx
+- Added dcd_edpt_close_all() for switching configuration
+- [Transdimension] Support dcd_edpt_xfer_fifo() with auto wrap over if fifo buffer is 4K aligned and size is multiple of 4K.
+- [DA146xx] Improve vbus, reset, suspend, resume detection, and remote wakeup.
+
+Device Stack
+------------
+
+- Add new network driver Network Control Model (CDC-NCM), update net_lwip_webserver to work with NCM (need re-configure example)
+- Add new USB Video Class UVC 1.5 driver and video_capture example ((work in progress)
+- Fix potential buffer overflow for HID, bluetooth drivers
+
+Host Controller Driver (HCD)
+----------------------------
+
+No notable changes
+
+Host Stack
+----------
+
+No notable changes
+
+0.11.0 (2021-08-29)
+===================
+
+- Add host/hid_controller example: only worked/tested with Sony PS4 DualShock controller
+- Add device/hid_boot_interface example
+- Add support for Renesas CCRX toolchain for RX mcu
+
+Device Controller Driver (DCD)
+------------------------------
+
+- Add new DCD port for SAMx7x (E70, S70, V70, V71)
+- Add new mcu K32L2Bxx
+- Add new mcu GD32VF103
+- Add new mcu STM32l151
+- Add new mcu SAML21
+- Add new mcu RX65n RX72n
+- Fix NUC120/121/126 USBRAM can only be accessed in byte manner. Also improve set_address & disable sof
+- Add Suspend/Resume handling for Renesas RX family.
+- Fix DA1469x no VBUS startup
+
+Synopsys
+^^^^^^^^
+
+- Fix Synopsys set address bug which could cause re-enumeration failed
+- Fix dcd_synopsys driver integer overflow in HS mode (issue #968)
+
+nRF5x
+^^^^^
+
+- Add nRF5x suspend, resume and remote wakeup
+- Fix nRF5x race condition with TASKS_EP0RCVOUT
+
+RP2040
+^^^^^^
+
+- Add RP2040 suspend & resume support
+- Implement double buffer for both host and device (#891). Howver device EPOUT is still single bufferred due to techinical issue with short packet 
+
+Device Stack
+------------
+
+USBD
+^^^^
+
+- Better support big endian mcu
+- Add tuh_inited() and tud_inited(), will separte tusb_init/inited() to tud/tuh init/inited
+- Add dcd_attr.h for defining common controller attribute such as max endpoints
+
+Bluetooth
+^^^^^^^^^
+
+- Fix stridx error in descriptor template
+
+DFU
+^^^
+
+- Enhance DFU implementation to support multiple alternate interface and better support bwPollTimeout
+- Rename CFG_TUD_DFU_MODE to simply CFG_TUD_DFU 
+
+HID
+^^^
+
+- Fix newline usage keyboard (ENTER 0x28)
+- Better support Hid Get/Set report
+- Change max gamepad support from 16 to 32 buttons
+
+MIDI
+^^^^
+
+- Fix midi available
+- Fix midi data
+- Fix an issue when calling midi API when not enumerated yet
+
+UAC2
+^^^^
+
+- Fix bug and enhance of UAC2
+ 
+Vendor
+^^^^^^
+
+- Fix vendor fifo deadlock in certain case
+- Add tud_vendor_n_read_flush
+
+Host Controller Driver (HCD)
+----------------------------
+
+RP2040
+^^^^^^
+
+- Implement double bufferred to fix E4 errata and boost performance
+- Lots of rp2040 update and enhancment
+
+Host Stack
+----------
+
+- Major update and rework most of host stack, still needs more improvement
+- Lots of improvement and update in parsing configuration and control
+- Rework and major update to HID driver. Will default to enable boot interface if available
+- Sepearate CFG_TUH_DEVICE_MAX and CFG_TUH_HUB for better management and reduce SRAM usage
+
+0.10.1 (2021-06-03)
+===================
+
+- rework rp2040 examples and CMake build, allow better integration with pico-sdk
+
+Host Controller Driver (HCD)
+----------------------------
+
+- Fix rp2040 host driver: incorrect PID with low speed device with max packet size of 8 bytes
+- Improve hub driver
+- Remove obsolete hcd_pipe_queue_xfer()/hcd_pipe_xfer()
+- Use hcd_frame_number() instead of micro frame
+- Fix OHCI endpoint address and xferred_bytes in xfer complete event
+
+0.10.0 (2021-05-28)
+===================
+
+- Rework tu_fifo_t with separated mutex for read and write, better support DMA with read/write buffer info. And constant address mode
+- Improve audio_test example and add audio_4_channel_mic example
+- Add new dfu example
+- Remove pico-sdk from submodule
+
+Device Controller Driver (DCD)
+------------------------------
+
+- Add new DCD port for Silabs EFM32GG12 with board Thunderboard Kit (SLTB009A)
+- Add new DCD port Renesas RX63N, board GR-CITRUS
+- Add new (optional) endpoint API dcd_edpt_xfer_fifo
+- Fix build with nRF5340
+- Fix build with lpc15 and lpc54
+- Fix build with lpc177x_8x
+- STM32 Synopsys: greatly improve Isochronous transfer with edpt_xfer_fifo API
+- Support LPC55 port1 highspeed
+- Add support for Espressif esp32s3
+- nRF: fix race condition that could cause drop packet of Bulk OUT transfer
+
+USB Device Driver (USBD)
+------------------------
+
+- Add new (optional) endpoint ADPI usbd_edpt_xfer_fifo
+
+Device Class Driver
+-------------------
+
+CDC
+
+- [Breaking] tud_cdc_peek(), tud_vendor_peek() no longer support random offset and dropped position parameter.
+
+DFU
+
+- Add new DFU 1.1 class driver (WIP)
+
+HID
+
+- Fix keyboard report descriptor template
+- Add more hid keys constant from 0x6B to 0xA4
+
+- [Breaking] rename API
+  - HID_PROTOCOL_NONE/KEYBOARD/MOUST to HID_ITF_PROTOCOL_NONE/KEYBOARD/MOUSE
+  - tud_hid_boot_mode() to tud_hid_get_protocol()
+  - tud_hid_boot_mode_cb() to tud_hid_set_protocol_cb()
+
+MIDI
+
+- Fix MIDI buffer overflow issue
+
+- [Breaking] rename API
+  - Rename tud_midi_read() to tud_midi_stream_read()
+  - Rename tud_midi_write() to tud_midi_stream_write()
+  - Rename tud_midi_receive() to tud_midi_packet_read()
+  - Rename tud_midi_send() to tud_midi_packet_write()
+
+Host Controller Driver (HCD)
+----------------------------
+
+- No noticable changes
+
+USB Host Driver (USBH)
+----------------------
+
+- No noticable changes
+
+Host Class Driver
+-----------------
+
+- HID: Rework host hid driver, basically everything changes
+
+
+0.9.0 (2021-03-12)
+==================
+
+Device Stack
+------------
+
+Device Controller Driver (DCD)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+RP2040
+
+- Fix endpoint buffer reallocation overrun problem
+- Fix osal_pico queue overflow in initialization
+- Fix Isochronous endpoint buffer size in transfer
+- Optimize hardware endpoint struct to reduce RAM usage
+- Fix enum walkaround forever check for SE0 when pull up is disabled
+
+Sony CXD56
+
+- Pass the correct speed on Spresense
+- Fix setup processed flag
+
+NXP Transdimention
+
+- Update dcd_init() to reset controller to device mode
+
+USB Device Driver (USBD)
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Fix issue with status zlp (tud_control_status) is returned by class driver with SET/CLEAR_FEATURE for endpoint.
+- Correct endpoint size check for fullspeed bulk, can be 8, 16, 32, 64
+- Ack SET_INTERFACE even if it is not implemented by class driver.
+
+Device Class Driver
+^^^^^^^^^^^^^^^^^^^
+
+DFU Runtime
+
+- rename dfu_rt to dfu_runtime for easy reading
+
+CDC
+
+- Add tud_cdc_send_break_cb() to support break request
+- Improve CDC receive, minor behavior changes: when tud_cdc_rx_wanted_cb() is invoked wanted_char may not be the last byte in the fifo
+
+HID
+
+- [Breaking] Add itf argument to hid API to support multiple instances, follow API has signature changes
+
+  - tud_hid_descriptor_report_cb()
+  - tud_hid_get_report_cb()
+  - tud_hid_set_report_cb()
+  - tud_hid_boot_mode_cb()
+  - tud_hid_set_idle_cb()
+
+- Add report complete callback tud_hid_report_complete_cb() API
+- Add DPad/Hat support for HID Gamepad
+
+  - `TUD_HID_REPORT_DESC_GAMEPAD()` now support 16 buttons, 2 joysticks, 1 hat/dpad
+  - Add hid_gamepad_report_t along with `GAMEPAD_BUTTON_` and `GAMEPAD_HAT_` enum
+  - Add Gamepad to hid_composite / hid_composite_freertos example
+
+MIDI
+
+- Fix dropping MIDI sysex message when fifo is full
+- Fix typo in tud_midi_write24(), make example less ambigous for cable and channel
+- Fix incorrect endpoint descriptor length, MIDI v1 use Audio v1 which has 9-byte endpoint descriptor (instead of 7)
+
+Host Stack
+----------
+
+Host Controller Driver (HCD)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Add rhport to hcd_init()
+- Improve EHCI/OHCI driver abstraction
+
+  - Move echi/ohci files to portable/
+  - Rename hcd_lpc18_43 to hcd_transdimension
+  - Sub hcd API with hcd_ehci_init(), hcd_ehci_register_addr()
+  
+- Update NXP transdimention hcd_init() to reset controller to host mode
+
+  - Ported hcd to rt10xx
+
+USB Host Driver (USBH)
+^^^^^^^^^^^^^^^^^^^^^^
+
+- No noticeable changes to usbh
+
+Host Class Driver
+^^^^^^^^^^^^^^^^^
+
+MSC
+
+- Rename tuh_msc_scsi_inquiry() to tuh_msc_inquiry()
+- Rename tuh_msc_mounted_cb/tuh_msc_unmounted_cb to tuh_msc_mount_cb/tuh_msc_unmount_cb to match device stack naming
+- Change tuh_msc_is_busy() to tuh_msc_ready()
+- Add read10 and write10 function: tuh_msc_read10(), tuh_msc_write10()
+- Read_Capacity is invoked as part of enumeration process
+- Add tuh_msc_get_block_count(), tuh_msc_get_block_size()
+- Add CFG_TUH_MSC_MAXLUN (default to 4) to hold lun capacities
+
+Others
+------
+
+- Add basic support for rt-thread OS
+- Change zero bitfield length to more explicit padding
+- Build example now fetch required submodules on the fly while running `make` without prio submodule init for mcu drivers
+- Update pico-sdk to v1.1.0
+
+**New Boards**
+
+- Microchip SAM E54 Xplained Pro
+- LPCXpresso 55s28
+- LPCXpresso 18s37
+
+
+0.8.0 (2021-02-05)
+==================
+
+Device Controller Driver
+------------------------
+
+- Added new device support for Raspberry Pi RP2040
+- Added new device support for NXP Kinetis KL25ZXX
+- Use dcd_event_bus_reset() with link speed to replace bus_signal
+
+- ESP32-S2:
+  - Add bus suspend and wakeup support
+  
+- SAMD21:
+  - Fix (walkaround) samd21 setup_packet overflow by USB DMA
+  
+- STM32 Synopsys:
+  - Rework USB FIFO allocation scheme and allow RX FIFO size reduction
+  
+- Sony CXD56
+  - Update Update Spresense SDK to 2.0.2
+  - Fix dcd issues with setup packets
+  - Correct EP number for cdc_msc example
+
+USB Device
+----------
+
+**USBD**
+
+- Rework usbd control transfer to have additional stage parameter for setup, data, status
+- Fix tusb_init() return true instead of TUSB_ERROR_NONE
+- Added new API tud_connected() that return true after device got out of bus reset and received the very first setup packet
+
+**Class Driver**
+
+- CDC
+  - Allow to transmit data, even if the host does not support control line states i.e set DTR
+  
+- HID
+  - change default CFG_TUD_HID_EP_BUFSIZE from 16 to 64
+  
+- MIDI
+  - Fix midi sysex sending bug
+  
+- MSC
+  - Invoke only scsi complete callback after status transaction is complete.
+  - Fix scsi_mode_sense6_t padding, which cause IAR compiler internal error.
+  
+- USBTMC
+  - Change interrupt endpoint example size to 8 instead of 2 for better compatibility with mcu
+
+**Example**
+
+- Support make from windows cmd.exe
+- Add HID Consumer Control (media keys) to hid_composite & hid_composite_freertos examples
+
+
+USB Host
+--------
+
+No noticeable changes to host stack
+
+New Boards
+----------
+
+- NXP/Freescale Freedom FRDM-KL25Z
+- Feather Double M33 express
+- Raspberry Pi Pico
+- Adafruit Feather RP2040
+- Adafruit Itsy Bitsy RP2040
+- Adafruit QT RP2040
+- Adfruit Feather ESP32-S2
+- Adafruit Magtag 29" Eink
+- Adafruit Metro ESP32-S2
+- Adafruit PyBadge
+- Adafruit PyPortal
+- Great Scott Gadgets' LUNA D11 & D21
+
+
+0.7.0 (2020-11-08)
+==================
+
+Device Controller Driver
+------------------------
+
+- Added new support for Espressif ESP32-S2
+- Added new support for Dialog DA1469x
+- Enhance STM32 Synopsys
+
+- Support bus events disconnection/suspend/resume/wakeup
+  - Improve transfer performance with optimizing xfer and fifo size
+  - Support Highspeed port (OTG_HS) with both internal and external PHY
+  - Support multiple usb ports with rhport=1 is highspeed on selected MCUs e.g H743, F23. It is possible to have OTG_HS to run on Fullspeed PHY (e.g lacking external PHY)
+  - Add ISO transfer, fix odd/even frame
+  - Fix FIFO flush during stall
+  - Implement dcd_edpt_close() API
+  - Support F105, F107
+  
+- Enhance STM32 fsdev
+  - Improve dcd fifo allocation
+  - Fix ISTR race condition
+  - Support remap USB IRQ on supported MCUs
+  - Implement dcd_edpt_close() API
+  
+- Enhance NUC 505: enhance set configure behavior
+
+- Enhance SAMD
+  - Fix race condition with setup packet
+  - Add SAMD11 option `OPT_MCU_SAMD11`
+  - Add SAME5x option `OPT_MCU_SAME5X`
+  
+- Fix SAMG control data toggle and stall race condition
+
+- Enhance nRF
+  - Fix hanged when tud_task() is called within critical section (disabled interrupt)
+  - Fix disconnect bus event not submitted
+  - Implement ISO transfer and dcd_edpt_close()
+
+
+USB Device
+----------
+
+**USBD**
+
+- Add new class driver for **Bluetooth HCI** class driver with example can be found in [mynewt-tinyusb-example](https://github.com/hathach/mynewt-tinyusb-example) since it needs mynewt OS to run with.
+- Fix USBD endpoint usage racing condition with `usbd_edpt_claim()/usbd_edpt_release()`
+- Added `tud_task_event_ready()` and `osal_queue_empty()`. This API is needed to check before enter low power mode with WFI/WFE
+- Rename USB IRQ Handler to `dcd_int_handler()`. Application must define IRQ handler in which it calls this API.
+- Add `dcd_connect()` and `dcd_disconnect()` to enable/disable internal pullup on D+/D- on supported MCUs.
+- Add `usbd_edpt_open()`
+- Remove `dcd_set_config()`
+- Add *OPT_OS_CUMSTOM* as hook for application to overwrite and/or add their own OS implementation
+- Support SET_INTERFACE, GET_INTERFACE request
+- Add Logging for debug with optional uart/rtt/swo printf retarget or `CFG_TUSB_DEBUG_PRINTF` hook
+- Add IAR compiler support
+- Support multiple configuration descriptors. `TUD_CONFIG_DESCRIPTOR()` template has extra config_num as 1st argument
+- Improve USB Highspeed support with actual link speed detection with `dcd_event_bus_reset()`
+
+- Enhance class driver management
+  - `usbd_driver_open()` add max length argument, and return length of interface (0 for not supported). Return value is used for finding appropriate driver
+  - Add application implemented class driver via `usbd_app_driver_get_cb()`
+  - IAD is handled to assign driver id
+  
+- Added `tud_descriptor_device_qualifier_cb()` callback
+- Optimize `tu_fifo` bulk write/read transfer
+- Forward non-std control request to class driver
+- Let application handle Microsoft OS 1.0 Descriptors (the 0xEE index string)
+- Fix OSAL FreeRTOS yield from ISR
+
+**Class Drivers**
+
+- USBNET: remove ACM-EEM due to lack of support from host
+- USBTMC: fix descriptors when INT EP is disabled
+
+- CDC:
+  - Send zero length packet for end of data when needed
+  - Add `tud_cdc_tx_complete_cb()` callback
+  - Change tud_cdc_n_write_flush() return number of bytes forced to transfer, and flush when writing enough data to fifo
+  
+- MIDI:
+  - Add packet interface
+  - Add multiple jack descriptors
+  - Fix MIDI driver for sysex
+  
+- DFU Runtime: fix response to SET_INTERFACE and DFU_GETSTATUS request
+
+- Rename some configure macro to make it clear that those are used directly for endpoint transfer
+  - CFG_TUD_HID_BUFSIZE to CFG_TUD_HID_EP_BUFSIZE
+  - CFG_TUD_CDC_EPSIZE to CFG_TUD_CDC_EP_BUFSIZE
+  - CFG_TUD_MSC_BUFSIZE to CFG_TUD_MSC_EP_BUFSIZE
+  - CFG_TUD_MIDI_EPSIZE to CFG_TUD_MIDI_EP_BUFSIZE
+  
+- HID:
+  - Fix gamepad template descriptor
+  - Add multiple HID interface API
+  - Add extra comma to HID_REPORT_ID
+
+USB Host
+--------
+
+- Rework USB host stack (still work in progress)
+   - Fix compile error with pipehandle
+   - Rework usbh control and enumeration as non-blocking
+   
+- Improve Hub, MSC, HID host driver
+
+Examples
+--------
+
+- Add new hid_composite_freertos
+- Add new dynamic_configuration to demonstrate how to switch configuration descriptors
+- Add new hid_multiple_interface
+
+- Enhance `net_lwip_webserver` example
+  - Add multiple configuration: RNDIS for Windows, CDC-ECM for macOS (Linux will work with both)
+  - Update lwip to STABLE-2_1_2_RELEASE for net_lwip_webserver
+  
+- Added new Audio example: audio_test uac2_headsest
+
+New Boards
+----------
+
+- Espressif ESP32-S2: saola_1, kaluga_1
+- STM32: F746 Nucleo, H743 Eval, H743 Nucleo, F723 discovery, stlink v3 mini, STM32L4r5 Nucleo
+- Dialog DA1469x dk pro and dk usb
+- Microchip: Great Scoot Gadgets' LUNA, samd11_xplained, D5035-01, atsamd21 xplained pro
+- nRF: ItsyBitsy nRF52840
+
+
+0.6.0 (2020-03-30)
+==================
+
+Added **CONTRIBUTORS.md** to give proper credit for contributors to the stack. Special thanks to `Nathan Conrad <https://github.com/pigrew>`__ , `Peter Lawrence <https://github.com/majbthrd>`__ , `William D. Jones <https://github.com/cr1901>`__ and `Sean Cross <https://github.com/xobs>`__ and others for spending their precious time to add lots of features and ports for this release.
+
+Added
+-----
+
+**MCU**
+
+- Added support for Microchip SAMG55
+- Added support for Nordic nRF52833
+- Added support for Nuvoton: NUC120, NUC121/NUC125, NUC126, NUC505
+- Added support for NXP LPC: 51Uxx, 54xxx, 55xx
+- Added support for NXP iMXRT: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064
+- Added support for Sony CXD56 (Spresense)
+- Added support for STM32: L0, F0, F1, F2, F3, F4, F7, H7
+- Added support for TI MSP430
+- Added support for ValentyUSB's eptri
+
+**Class Driver**
+
+- Added DFU Runtime class driver
+- Added Network class driver with RNDIS, CDC-ECM, CDC-EEM (work in progress)
+- Added USBTMC class driver
+- Added WebUSB class driver using vendor-specific class
+- Added multiple instances support for CDC and MIDI
+- Added a handful of unit test with Ceedling.
+- Added LOG support for debugging with CFG_TUSB_DEBUG
+- Added `tud_descriptor_bos_cb()` for BOS descriptor (required for USB 2.1)
+- Added `dcd_edpt0_status_complete()` as optional API for DCD
+
+**Examples**
+
+Following examples are added:
+
+- board_test
+- cdc_dual_ports
+- dfu_rt
+- hid_composite
+- net_lwip_webserver
+- usbtmc
+- webusb_serial
+
+Changed
+-------
+
+- Changed `tud_descriptor_string_cb()` to have additional Language ID argument
+- Merged hal_nrf5x.c into dcd_nrf5x.c
+- Merged dcd_samd21.c and dcd_samd51.c into dcd_samd.c
+- Generalized dcd_stm32f4.c to dcd_synopsys.c
+- Changed cdc_msc_hid to cdc_msc (drop hid) due to limited endpoints number of some MCUs
+- Improved DCD SAMD stability, fix missing setup packet occasionally
+- Improved usbd/usbd_control with proper hanlding of zero-length packet (ZLP)
+- Improved STM32 DCD FSDev
+- Improved STM32 DCD Synopsys
+- Migrated CI from Travis to Github Action
+- Updated nrfx submodule to 2.1.0
+- Fixed mynewt osal queue definition
+- Fixed cdc_msc_freertos example build for all MCUs
+
+
+0.5.0 (2019-06)
+===============
+
+First release, device stack works great, host stack works but still need improvement.
+
+- Special thanks to @adafruit team, especially @tannewt to help out immensely to rework device stack: simplify osal & control transfer, adding SAMD21/SAMD51 ports, writing porting docs, adding MIDI class support etc...
+- Thanks to @cr1901 for adding STM32F4 port.
+- Thanks to @PTS93 and @todbot for HID raw API

+ 1 - 0
pico-sdk/lib/tinyusb/docs/info/contributors.rst

@@ -0,0 +1 @@
+../../CONTRIBUTORS.rst

+ 13 - 0
pico-sdk/lib/tinyusb/docs/info/index.rst

@@ -0,0 +1,13 @@
+****
+Info
+****
+
+Index
+=====
+
+.. toctree::
+   :maxdepth: 2
+
+   uses
+   changelog
+   contributors

+ 17 - 0
pico-sdk/lib/tinyusb/docs/info/uses.rst

@@ -0,0 +1,17 @@
+****
+Uses
+****
+
+TinyUSB is currently used by these other projects:
+
+-  `Adafruit nRF52 Arduino <https://github.com/adafruit/Adafruit_nRF52_Arduino>`__
+-  `Adafruit nRF52 Bootloader <https://github.com/adafruit/Adafruit_nRF52_Bootloader>`__
+-  `Adafruit SAMD Arduino <https://github.com/adafruit/ArduinoCore-samd>`__
+-  `CircuitPython <https://github.com/adafruit/circuitpython>`__
+-  `Espressif IDF <https://github.com/espressif/esp-idf>`__
+-  `MicroPython <https://github.com/micropython/micropython>`__
+-  `mynewt <https://mynewt.apache.org>`__
+-  `openinput <https://github.com/openinput-fw/openinput>`__
+-  `Raspberry Pi Pico SDK <https://github.com/raspberrypi/pico-sdk>`__
+-  `TinyUF2 Bootloader <https://github.com/adafruit/tinyuf2>`__
+-  `TinyUSB Arduino Library <https://github.com/adafruit/Adafruit_TinyUSB_Arduino>`__

+ 42 - 0
pico-sdk/lib/tinyusb/docs/reference/concurrency.rst

@@ -0,0 +1,42 @@
+***********
+Concurrency
+***********
+
+The TinyUSB library is designed to operate on single-core MCUs with multi-threaded applications in mind. Interaction with interrupts is especially important to pay attention to.
+It is compatible with optionally using a RTOS.
+
+General
+-------
+
+When writing code, keep in mind that the OS (if using a RTOS) may swap out your code at any time. Also, your code can be preempted by an interrupt at any time.
+
+Application Code
+----------------
+
+The USB core does not execute application callbacks while in an interrupt context. Calls to application code are from within the USB core task context. Note that the application core will call class drivers from within their own task.
+
+Class Drivers
+-------------
+
+Class driver code should never be called from an interrupt context by the USB core, though the application is allowed to call class driver functions from interrupts. USB core functions may be called simultaneously by multiple tasks. Use care that proper locking is used to guard the USBD core functions from this case.
+
+Class drivers are allowed to call ``usbd_*`` functions, but not ``dcd_*`` functions.
+
+USB Core
+--------
+
+All functions that may be called from an (USB core) interrupt context have a ``bool in_isr`` parameter to remind the implementer that special care must be taken.
+
+Interrupt handlers must not directly call class driver code, they must pass a message to the USB core's task.
+
+ ``usbd_*`` functions may be called from interrupts without any notice. They may also be called simultaneously by multiple tasks.
+
+Device Drivers
+--------------
+
+Much of the processing of the USB stack is done in an interrupt context, and care must be taken in order to ensure variables are handled in the appropriate ways by the compiler and optimizer.
+
+In particular:
+
+*  Ensure that all memory-mapped registers (including packet memory) are marked as volatile. GCC's optimizer will even combine memory access (like two 16-bit to be a 32-bit) if you don't mark the pointers as volatile. On some architectures, this can use macros like _I , _O , or _IO.
+*  All defined global variables are marked as  ``static``.

+ 198 - 0
pico-sdk/lib/tinyusb/docs/reference/getting_started.rst

@@ -0,0 +1,198 @@
+***************
+Getting Started
+***************
+
+Add TinyUSB to your project
+---------------------------
+
+It is relatively simple to incorporate tinyusb to your (existing) project
+
+
+* Copy or ``git submodule`` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
+* Add all the .c in the ``tinyusb/src`` folder to your project
+* Add *your_project/tinyusb/src* to your include path. Also make sure your current include path also contains the configuration file tusb_config.h.
+* Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as CFG_TUSB_MCU, CFG_TUSB_OS since they are passed by IDE/compiler to maintain a unique configure for all boards).
+* If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to implement all **tud descriptor** callbacks for the stack to work.
+* Add tusb_init() call to your reset initialization code.
+* Call ``tud_int_handler()`` (device) and/or ``tuh_int_handler()`` (host) in your USB IRQ Handler
+* Implement all enabled classes's callbacks.
+* If you don't use any RTOSes at all, you need to continuously and/or periodically call tud_task()/tuh_task() function. All of the callbacks and functionality are handled and invoked within the call of that task runner.
+
+.. code-block::
+
+   int main(void)
+   {
+     your_init_code();
+     tusb_init(); // initialize tinyusb stack
+
+     while(1) // the mainloop
+     {
+       your_application_code();
+
+       tud_task(); // device task
+       tuh_task(); // host task
+     }
+   }
+
+Examples
+--------
+
+For your convenience, TinyUSB contains a handful of examples for both host and device with/without RTOS to quickly test the functionality as well as demonstrate how API() should be used. Most examples will work on most of `the supported Boards <boards.md>`_. Firstly we need to ``git clone`` if not already
+
+.. code-block::
+
+   $ git clone https://github.com/hathach/tinyusb tinyusb
+   $ cd tinyusb
+
+Some TinyUSB examples also requires external submodule libraries in ``/lib`` such as FreeRTOS, Lightweight IP to build. Run following command to fetch them 
+
+.. code-block::
+
+   $ git submodule update --init lib
+
+In addition, MCU driver submodule is also needed to provide low-level MCU peripheral's driver. Luckily, it will be fetched if needed when you run the ``make`` to build your board.
+
+Note: some examples especially those that uses Vendor class (e.g webUSB) may requires udev permission on Linux (and/or macOS) to access usb device. It depends on your OS distro, typically copy ``/examples/device/99-tinyusb.rules`` file to /etc/udev/rules.d/ then run ``sudo udevadm control --reload-rules && sudo udevadm trigger`` is good enough.
+
+Build
+^^^^^
+
+To build example, first change directory to an example folder. 
+
+.. code-block::
+
+   $ cd examples/device/cdc_msc
+
+Then compile with ``make BOARD=[board_name] all``\ , for example
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express all
+
+Note: ``BOARD`` can be found as directory name in ``hw/bsp``\ , either in its family/boards or directly under bsp (no family).
+
+Port Selection
+~~~~~~~~~~~~~~
+
+If a board has several ports, one port is chosen by default in the individual board.mk file. Use option ``PORT=x`` To choose another port. For example to select the HS port of a STM32F746Disco board, use:
+
+.. code-block::
+
+   $ make BOARD=stm32f746disco PORT=1 all
+
+Port Speed
+~~~~~~~~~~
+
+A MCU can support multiple operational speed. By default, the example build system will use the fastest supported on the board. Use option ``SPEED=full/high`` e.g To force F723 operate at full instead of default high speed
+
+.. code-block::
+
+   $ make BOARD=stm32f746disco SPEED=full all
+
+Size Analysis
+~~~~~~~~~~~~~
+
+First install `linkermap tool <https://github.com/hathach/linkermap>`_ then ``linkermap`` target can be used to analyze code size. You may want to compile with ``NO_LTO=1`` since -flto merges code across .o files and make it difficult to analyze.
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express NO_LTO=1 all linkermap
+
+Debug
+^^^^^
+
+To compile for debugging add ``DEBUG=1``\ , for example
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express DEBUG=1 all
+
+Log
+~~~
+
+Should you have an issue running example and/or submitting an bug report. You could enable TinyUSB built-in debug logging with optional ``LOG=``. LOG=1 will only print out error message, LOG=2 print more information with on-going events. LOG=3 or higher is not used yet. 
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express LOG=2 all
+
+Logger
+~~~~~~
+
+By default log message is printed via on-board UART which is slow and take lots of CPU time comparing to USB speed. If your board support on-board/external debugger, it would be more efficient to use it for logging. There are 2 protocols: 
+
+
+* `LOGGER=rtt`: use `Segger RTT protocol <https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/>`_
+
+  * Cons: requires jlink as the debugger.
+  * Pros: work with most if not all MCUs
+  * Software viewer is JLink RTT Viewer/Client/Logger which is bundled with JLink driver package.
+
+* ``LOGGER=swo``\ : Use dedicated SWO pin of ARM Cortex SWD debug header.
+
+  * Cons: only work with ARM Cortex MCUs minus M0
+  * Pros: should be compatible with more debugger that support SWO.
+  * Software viewer should be provided along with your debugger driver.
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express LOG=2 LOGGER=rtt all
+   $ make BOARD=feather_nrf52840_express LOG=2 LOGGER=swo all
+
+Flash
+^^^^^
+
+``flash`` target will use the default on-board debugger (jlink/cmsisdap/stlink/dfu) to flash the binary, please install those support software in advance. Some board use bootloader/DFU via serial which is required to pass to make command
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express flash
+   $ make SERIAL=/dev/ttyACM0 BOARD=feather_nrf52840_express flash
+
+Since jlink can be used with most of the boards, there is also ``flash-jlink`` target for your convenience.
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express flash-jlink
+
+Some board use uf2 bootloader for drag & drop in to mass storage device, uf2 can be generated with ``uf2`` target
+
+.. code-block::
+
+   $ make BOARD=feather_nrf52840_express all uf2
+
+IAR Support
+^^^^^^^^^^^
+
+IAR Project Connection files are provided to import TinyUSB stack into your project.
+
+* A buldable project of your MCU need to be created in advance.
+
+
+  * Take example of STM32F0:
+  
+    -  You need `stm32l0xx.h`, `startup_stm32f0xx.s`, `system_stm32f0xx.c`.
+
+    - `STM32L0xx_HAL_Driver` is only needed to run examples, TinyUSB stack itself doesn't rely on MCU's SDKs.
+
+* Open `Tools -> Configure Custom Argument Variables` (Switch to `Global` tab if you want to do it for all your projects) 
+   Click `New Group ...`, name it to `TUSB`, Click `Add Variable ...`, name it to `TUSB_DIR`, change it's value to the path of your TinyUSB stack,
+   for example `C:\\tinyusb`
+
+Import stack only
+~~~~~~~~~~~~~~~~~
+
+1. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\tools\\iar_template.ipcf`.
+
+Run examples
+~~~~~~~~~~~~
+
+1. (Python3 is needed) Run `iar_gen.py` to generate .ipcf files of examples:
+
+   .. code-block::
+
+     cd C:\tinyusb\tools
+     python iar_gen.py
+
+2. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\examples\\(.ipcf of example)`.
+   For example `C:\\tinyusb\\examples\\device\\cdc_msc\\iar_cdc_msc.ipcf`

+ 59 - 0
pico-sdk/lib/tinyusb/docs/reference/index.rst

@@ -0,0 +1,59 @@
+*********
+Reference
+*********
+
+.. figure:: ../assets/stack.svg
+   :width: 1600px
+   :alt: stackup
+
+   representation of the TinyUSB stack.
+
+Device Stack
+============
+
+Supports multiple device configurations by dynamically changing usb descriptors. Low power functions such like suspend, resume, and remote wakeup. Following device classes are supported:
+
+-  Audio Class 2.0 (UAC2)
+-  Bluetooth Host Controller Interface (BTH HCI)
+-  Communication Class (CDC)
+-  Device Firmware Update (DFU): DFU mode (WIP) and Runtinme
+-  Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
+-  Mass Storage Class (MSC): with multiple LUNs
+-  Musical Instrument Digital Interface (MIDI)
+-  Network with RNDIS, CDC-ECM (work in progress)
+-  USB Test and Measurement Class (USBTMC)
+-  Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
+-  `WebUSB <https://github.com/WICG/webusb>`__ with vendor-specific class
+
+If you have special need, `usbd_app_driver_get_cb()` can be used to write your own class driver without modifying the stack. Here is how RPi team add their reset interface [raspberrypi/pico-sdk#197](https://github.com/raspberrypi/pico-sdk/pull/197)
+
+Host Stack
+==========
+
+- Human Interface Device (HID): Keyboard, Mouse, Generic
+- Mass Storage Class (MSC)
+- Hub currently only supports 1 level of hub (due to my laziness)
+
+OS Abstraction layer
+====================
+
+TinyUSB is completely thread-safe by pushing all ISR events into a central queue, then process it later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as CDC FIFO. Therefore the stack needs to use some of OS's basic APIs. Following OSes are already supported out of the box.
+
+- **No OS**
+- **FreeRTOS**
+- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its [own repo](https://github.com/hathach/mynewt-tinyusb-example)
+
+License
+=======
+
+All TinyUSB sources in the `src` folder are licensed under MIT license. However, each file can be individually licensed especially those in `lib` and `hw/mcu` folder. Please make sure you understand all the license term for files you use in your project.
+
+Index
+=====
+
+.. toctree::
+   :maxdepth: 2
+
+   supported
+   getting_started
+   concurrency

+ 344 - 0
pico-sdk/lib/tinyusb/docs/reference/supported.rst

@@ -0,0 +1,344 @@
+*****************
+Supported Devices
+*****************
+
+
+Supported MCUs
+==============
+
+.. admonition:: Warning
+   :class: warning
+
+   This table is a WIP! the data is not correct, tho if a device is listed, it likely works as a usb full speed device at the least.
+
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Manufacturer | Family             | Device            | Host               | FS                | HS                | Known Issues |
++==============+====================+===================+====================+===================+===================+==============+
+| Dialog       | DA1469x            | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Espressif    | ESP32-S2           | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | ESP32-S3           | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| MicroChip    | SAMD11             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAMD21             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAMD51             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAME5x             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAMG55             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAML21             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAML22             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | SAME70,S70,V70,V71 | |:green_square:|  | |:red_square:|     | |:green_square:|  | |:green_square:|  |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| NordicSemi   | nRF52833           | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | nRF52840           | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Nuvoton      | NUC120             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | NUC121/NUC125      | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | NUC126             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | NUC505             | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
++--------------+-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| NXP          | iMX   | RT1011     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | RT1015     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | RT1021     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | RT1052     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | RT1062     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | RT1064     | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              +-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | Kinetis KL25       | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              +-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | LPC   | 11u        | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 13         | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 15         | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 17         | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 18         |                   | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 40         |                   | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 43         | |:green_square:|  | |:yellow_square:|  | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 51u        | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 54         | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | 55         | |:green_square:|  | |:x:|              | |:green_square:|  |                   |              |
++--------------+-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Raspberry Pi | RP2040             | |:green_square:|  | |:x:|              | |:green_square:|  |                   |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Renesas      | RX63N              | |:green_square:|  |                    | |:green_square:|  | |:x:|             |              |
+|              +--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              | RX65N              | |:green_square:|  |                    | |:green_square:|  | |:x:|             |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Silabs       | EFM32GG12          | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             | #750         |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| Sony         | CXD56              | |:green_square:|  | |:x:|              | |:green_square:|  | |:x:|             |              |
++--------------+-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| ST           | STM32 | L0         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F0         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F1         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F2         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F3         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F4         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | F7         | |:green_square:|  |                    | |:green_square:|  |                   |              |
+|              |       +------------+-------------------+--------------------+-------------------+-------------------+--------------+
+|              |       | H7         | |:green_square:|  |                    | |:green_square:|  | |:green_square:|  |              |
++--------------+-------+------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| TI           | MSP430             | |:green_square:|  |                    | |:green_square:|  |                   |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+| ValentyUSB   | eptri              | |:green_square:|  |                    | |:green_square:|  |                   |              |
++--------------+--------------------+-------------------+--------------------+-------------------+-------------------+--------------+
+
+Table Legend
+------------
+
+================= ===================
+|:x:|             Not available
+|:red_square:|    Not supported
+|:yellow_square:| WIP/partial support
+|:green_square:|  Supported
+================= ===================
+
+Supported Boards
+================
+
+The board support code is only used for self-contained examples and testing. It is not used when TinyUSB is part of a larger project. It is responsible for getting the MCU started and the USB peripheral clocked with minimal of on-board devices
+
+-  One LED : for status
+-  One Button : to get input from user
+-  One UART : optional for device, but required for host examples
+
+The following boards are supported (sorted alphabetically):
+
+Dialog DA146xx
+--------------
+
+-  `DA14695 Development Kit – USB <https://www.dialog-semiconductor.com/products/da14695-development-kit-usb>`__
+-  `DA1469x Development Kit – Pro <https://www.dialog-semiconductor.com/products/da14695-development-kit-pro>`__
+
+Espressif ESP32-S2
+------------------
+
+-  Adafruit Feather ESP32-S2
+-  `Adafruit Magtag 2.9" E-Ink WiFi Display <https://www.adafruit.com/product/4800>`__
+-  `Adafruit Metro ESP32-S2 <https://www.adafruit.com/product/4775>`__
+-  `ESP32-S2-Kaluga-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-esp32-s2-kaluga-1-kit.html>`__
+-  `ESP32-S2-Saola-1 <https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html>`__
+
+MicroChip
+---------
+
+SAMD11 & SAMD21
+^^^^^^^^^^^^^^^
+
+-  `Adafruit Circuit Playground Express <https://www.adafruit.com/product/3333>`__
+-  `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__
+-  `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`__
+-  `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`__
+-  `Great Scott Gadgets LUNA <https://greatscottgadgets.com/luna/>`__
+-  `Microchip SAMD11 Xplained Pro <https://www.microchip.com/developmenttools/ProductDetails/atsamd11-xpro>`__
+-  `Microchip SAMD21 Xplained Pro <https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAMD21-XPRO>`__
+-  `Seeeduino Xiao <https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html>`__
+
+SAMD51 & SAME54
+^^^^^^^^^^^^^^^
+
+-  `Adafruit Feather M4 Express <https://www.adafruit.com/product/3857>`__
+-  `Adafruit ItsyBitsy M4 Express <https://www.adafruit.com/product/3800>`__
+-  `Adafruit PyBadge <https://www.adafruit.com/product/4200>`__
+-  `Adafruit PyPortal <https://www.adafruit.com/product/4116>`__
+-  `Adafruit Metro M4 Express <https://www.adafruit.com/product/3382>`__
+-  `D5035-01 <https://github.com/RudolphRiedel/USB_CAN-FD>`__
+-  `Microchip SAME54 Xplained Pro <https://www.microchip.com/developmenttools/productdetails/atsame54-xpro>`__
+
+SAME7x
+^^^^^^
+
+- `Microchip SAME70 Xplained <https://www.microchip.com/en-us/development-tool/ATSAME70-XPLD>`_
+- `QMTECH ATSAME70N19 <https://www.aliexpress.com/item/1005003173783268.html>`_
+
+SAMG
+^^^^
+
+-  `Microchip SAMG55 Xplained Pro <https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/ATSAMG55-XPRO>`__
+
+SAML2x
+^^^^^^
+
+-  `SAML21 Xplaind Pro <https://www.microchip.com/DevelopmentTools/ProductDetails/ATSAML21-XPRO-B>`__
+-  `SAML22 Feather <https://github.com/joeycastillo/Feather-Projects/tree/main/SAML22%20Feather>`__
+-  `Sensor Watch <https://github.com/joeycastillo/Sensor-Watch>`__
+
+Nordic nRF5x
+------------
+
+-  `Adafruit Circuit Playground Bluefruit <https://www.adafruit.com/product/4333>`__
+-  `Adafruit CLUE <https://www.adafruit.com/product/4500>`__
+-  `Adafruit Feather nRF52840 Express <https://www.adafruit.com/product/4062>`__
+-  `Adafruit Feather nRF52840 Sense <https://www.adafruit.com/product/4516>`__
+-  `Adafruit ItsyBitsy nRF52840 Express <https://www.adafruit.com/product/4481>`__
+-  `Arduino Nano 33 BLE <https://store.arduino.cc/usa/nano-33-ble>`__
+-  `Arduino Nano 33 BLE Sense <https://store.arduino.cc/usa/nano-33-ble-sense>`__
+-  `Maker Diary nRF52840 MDK Dongle <https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle>`__
+-  `Nordic nRF52840 Development Kit (aka pca10056) <https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK>`__
+-  `Nordic nRF52840 Dongle (aka pca10059) <https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle>`__
+-  `Nordic nRF52833 Development Kit (aka pca10100) <https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52833-DK>`__
+-  `Raytac MDBT50Q-RX Dongle <https://www.raytac.com/product/ins.php?index_id=89>`__
+
+Nuvoton
+-------
+
+-  NuTiny SDK NUC120
+-  `NuTiny NUC121S <https://direct.nuvoton.com/en/nutiny-nuc121s>`__
+-  `NuTiny NUC125S <https://direct.nuvoton.com/en/nutiny-nuc125s>`__
+-  `NuTiny NUC126V <https://direct.nuvoton.com/en/nutiny-nuc126v>`__
+-  `NuTiny SDK NUC505Y <https://direct.nuvoton.com/en/nutiny-nuc505y>`__
+
+NXP
+---
+
+iMX RT
+^^^^^^
+
+-  `MIMX RT1010 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1010-evaluation-kit:MIMXRT1010-EVK>`__
+-  `MIMX RT1015 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1015-evaluation-kit:MIMXRT1015-EVK>`__
+-  `MIMX RT1020 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1020-evaluation-kit:MIMXRT1020-EVK>`__
+-  `MIMX RT1050 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/i.mx-rt1050-evaluation-kit:MIMXRT1050-EVK>`__
+-  `MIMX RT1060 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/mimxrt1060-evk-i.mx-rt1060-evaluation-kit:MIMXRT1060-EVK>`__
+-  `MIMX RT1064 Evaluation Kit <https://www.nxp.com/design/development-boards/i.mx-evaluation-and-development-boards/mimxrt1064-evk-i.mx-rt1064-evaluation-kit:MIMXRT1064-EVK>`__
+-  `Teensy 4.0 Development Board <https://www.pjrc.com/store/teensy40.html>`__
+
+Kinetis
+^^^^^^^
+
+-  `FRDM-KL25Z <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z>`__
+
+LPC 11-13-15
+^^^^^^^^^^^^
+
+-  `LPCXpresso 11u37 <https://www.nxp.com/design/microcontrollers-developer-resources/lpcxpresso-boards/lpcxpresso-board-for-lpc11u37h:OM13074>`__
+-  `LPCXpresso 11u68 <https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc11u68:OM13058>`__
+-  `LPCXpresso 1347 <https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1347:OM13045>`__
+-  `LPCXpresso 1549 <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1500-cortex-m3/lpcxpresso-board-for-lpc1549:OM13056>`__
+
+LPC 17-40
+^^^^^^^^^
+
+-  `ARM mbed LPC1768 <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1700-cortex-m3/arm-mbed-lpc1768-board:OM11043>`__
+-  `Embedded Artists LPC4088 Quick Start board <https://www.embeddedartists.com/products/lpc4088-quickstart-board>`__
+-  `LPCXpresso 1769 <https://www.nxp.com/support/developer-resources/evaluation-and-development-boards/lpcxpresso-boards/lpcxpresso-board-for-lpc1769:OM13000>`__
+
+LPC 18-43
+^^^^^^^^^
+
+-  `Embedded Artists LPC4357 Developer Kit <http://www.embeddedartists.com/products/kits/lpc4357_kit.php>`__
+-  `Keil MCB1800 Evaluation Board <http://www.keil.com/mcb1800>`__
+-  `LPCXpresso18S37 Development Board <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc4000-cortex-m4/lpcxpresso18s37-development-board:OM13076>`__
+-  `NGX LPC4330-Xplorer <https://www.nxp.com/design/designs/lpc4330-xplorer-board:OM13027>`__
+
+LPC 51
+^^^^^^
+
+-  `LPCXpresso 51U68 <https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpcxpresso51u68-for-the-lpc51u68-mcus:OM40005>`__
+
+LPC 54
+^^^^^^
+
+-  `LPCXpresso 54114 <https://www.nxp.com/design/microcontrollers-developer-resources/lpcxpresso-boards/lpcxpresso54114-board:OM13089>`__
+
+LPC55
+^^^^^
+
+-  `Double M33 Express <https://www.crowdsupply.com/steiert-solutions/double-m33-express>`__
+-  `LPCXpresso 55s28 EVK <https://www.nxp.com/design/software/development-software/lpcxpresso55s28-development-board:LPC55S28-EVK>`__
+-  `LPCXpresso 55s69 EVK <https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s69-development-board:LPC55S69-EVK>`__
+-  `MCU-Link <https://www.nxp.com/design/development-boards/lpcxpresso-boards/mcu-link-debug-probe:MCU-LINK>`__
+
+Renesas RX
+----------
+
+-  `GR-CITRUS <https://www.renesas.com/us/en/products/gadget-renesas/boards/gr-citrus>`__
+-  `Renesas RX65N Target Board <https://www.renesas.com/us/en/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx65n0c00000br-target-board-rx65n>`__
+
+Raspberry Pi RP2040
+-------------------
+
+-  `Adafruit Feather RP2040 <https://www.adafruit.com/product/4884>`__
+-  `Adafruit ItsyBitsy RP2040 <https://www.adafruit.com/product/4888>`__
+-  `Adafruit QT Py RP2040 <https://www.adafruit.com/product/4900>`__
+-  `Raspberry Pi Pico <https://www.raspberrypi.org/products/raspberry-pi-pico/>`__
+
+Silabs
+------
+
+-  `EFM32GG12 Thunderboard Kit (SLTB009A) <https://www.silabs.com/development-tools/thunderboard/thunderboard-gg12-kit>`__
+
+Sony
+----
+
+-  `Sony Spresense CXD5602 <https://developer.sony.com/develop/spresense>`__
+
+ST STM32
+--------
+
+-  `Adafruit Feather STM32F405 <https://www.adafruit.com/product/4382>`__
+-  `Micro Python PyBoard v1.1 <https://store.micropython.org/product/PYBv1.1>`__
+-  `STLink-V3 Mini <https://www.st.com/en/development-tools/stlink-v3mini.html>`__
+-  `STM32 L035c8 Discovery <https://www.st.com/en/evaluation-tools/32l0538discovery.html>`__
+-  `STM32 L4R5zi Nucleo <https://www.st.com/en/evaluation-tools/nucleo-l4r5zi.html>`__
+-  `STM32 F070rb Nucleo <https://www.st.com/en/evaluation-tools/nucleo-f070rb.html>`__
+-  `STM32 F072 Evaluation <https://www.st.com/en/evaluation-tools/stm32072b-eval.html>`__
+-  `STM32 F072rb Discovery <https://www.st.com/en/evaluation-tools/32f072bdiscovery.html>`__
+-  `STM32 F103c8 Blue Pill <https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill>`__
+-  `STM32 F103rc Mini v2.0 <https://stm32-base.org/boards/STM32F103RCT6-STM32-Mini-V2.0>`__
+-  `STM32 F207zg Nucleo <https://www.st.com/en/evaluation-tools/nucleo-f207zg.html>`__
+-  `STM32 F303vc Discovery <https://www.st.com/en/evaluation-tools/stm32f3discovery.html>`__
+-  `STM32 F401cc Black Pill <https://stm32-base.org/boards/STM32F401CCU6-WeAct-Black-Pill-V1.2>`__
+-  `STM32 F407vg Discovery <https://www.st.com/en/evaluation-tools/stm32f4discovery.html>`__
+-  `STM32 F411ce Black Pill <https://www.adafruit.com/product/4877>`__
+-  `STM32 F411ve Discovery <https://www.st.com/en/evaluation-tools/32f411ediscovery.html>`__
+-  `STM32 F412zg Discovery <https://www.st.com/en/evaluation-tools/32f412gdiscovery.html>`__
+-  `STM32 F412zg Nucleo <https://www.st.com/en/evaluation-tools/nucleo-f412zg.html>`__
+-  `STM32 F723e Discovery <https://www.st.com/en/evaluation-tools/32f723ediscovery.html>`__
+-  `STM32 F746zg Nucleo <https://www.st.com/en/evaluation-tools/nucleo-f746zg.html>`__
+-  `STM32 F746g Discovery <https://www.st.com/en/evaluation-tools/32f746gdiscovery.html>`__
+-  `STM32 F767zi Nucleo <https://www.st.com/en/evaluation-tools/nucleo-f767zi.html>`__
+-  `STM32 F769i Discovery <https://www.st.com/en/evaluation-tools/32f769idiscovery.html>`__
+-  `STM32 H743zi Nucleo <https://www.st.com/en/evaluation-tools/nucleo-h743zi.html>`__
+-  `STM32 H743i Evaluation <https://www.st.com/en/evaluation-tools/stm32h743i-eval.html>`__
+-  `STM32 H745i Discovery <https://www.st.com/en/evaluation-tools/stm32h745i-disco.html>`__
+-  `Waveshare OpenH743I-C <https://www.waveshare.com/openh743i-c-standard.htm>`__
+
+TI
+--
+
+-  `MSP430F5529 USB LaunchPad Evaluation Kit <http://www.ti.com/tool/MSP-EXP430F5529LP>`__
+
+Tomu
+----
+
+-  `Fomu <https://www.crowdsupply.com/sutajio-kosagi/fomu>`__

+ 4 - 0
pico-sdk/lib/tinyusb/docs/requirements.txt

@@ -0,0 +1,4 @@
+sphinx~=3.0
+furo>=2020.12.30.b24
+sphinxemoji>=0.1.8
+sphinx-autodoc-typehints>=1.10

+ 14 - 0
pico-sdk/lib/tinyusb/examples/device/99-tinyusb.rules

@@ -0,0 +1,14 @@
+# Copy this file to the location of your distribution's udev rules, for example on Ubuntu:
+#   sudo cp 99-tinyusb.rules /etc/udev/rules.d/
+# Then reload udev configuration by executing:
+#   sudo udevadm control --reload-rules
+#   sudo udevadm trigger
+
+# Check SUBSYSTEM
+SUBSYSTEMS=="hidraw", KERNEL=="hidraw*", MODE="0666", GROUP="dialout"
+
+# Rule applies to all TinyUSB example
+ATTRS{idVendor}=="cafe", MODE="0666", GROUP="dialout"
+
+# Rule to blacklist TinyUSB example from being manipulated by ModemManager.
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="cafe", ENV{ID_MM_DEVICE_IGNORE}="1"

+ 1 - 0
pico-sdk/lib/tinyusb/examples/device/CMakeFiles/cmake.check_cache

@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file

+ 28 - 0
pico-sdk/lib/tinyusb/examples/device/CMakeLists.txt

@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/family_support.cmake)
+
+project(tinyusb_device_examples)
+family_initialize_project(tinyusb_device_examples ${CMAKE_CURRENT_LIST_DIR})
+
+# family_add_subdirectory will filter what to actually add based on selected FAMILY
+family_add_subdirectory(audio_4_channel_mic)
+family_add_subdirectory(audio_test)
+family_add_subdirectory(board_test)
+family_add_subdirectory(cdc_dual_ports)
+family_add_subdirectory(cdc_msc)
+family_add_subdirectory(cdc_msc_freertos)
+family_add_subdirectory(dfu)
+family_add_subdirectory(dfu_runtime)
+family_add_subdirectory(dynamic_configuration)
+family_add_subdirectory(hid_composite)
+family_add_subdirectory(hid_composite_freertos)
+family_add_subdirectory(hid_generic_inout)
+family_add_subdirectory(hid_multiple_interface)
+family_add_subdirectory(midi_test)
+family_add_subdirectory(msc_dual_lun)
+family_add_subdirectory(net_lwip_webserver)
+family_add_subdirectory(uac2_headset)
+family_add_subdirectory(usbtmc)
+family_add_subdirectory(video_capture)
+family_add_subdirectory(webusb_serial)

+ 0 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMD11


+ 0 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAME5X


+ 0 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/.skip.MCU_SAMG


+ 28 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/CMakeLists.txt

@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/family_support.cmake)
+
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
+
+project(${PROJECT})
+
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
+
+add_executable(${PROJECT})
+
+# Example source
+target_sources(${PROJECT} PUBLIC
+  ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+  ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+)
+
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+  ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT})

+ 12 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/Makefile

@@ -0,0 +1,12 @@
+include ../../../tools/top.mk
+include ../../make.mk
+
+INC += \
+  src \
+  $(TOP)/hw \
+
+# Example source
+EXAMPLE_SOURCE += $(wildcard src/*.c)
+SRC_C += $(addprefix $(CURRENT_PATH)/, $(EXAMPLE_SOURCE))
+
+include ../../rules.mk

+ 458 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/main.c

@@ -0,0 +1,458 @@
+/* 
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Reinhard Panhuber
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+/* plot_audio_samples.py requires following modules:
+ * $ sudo apt install libportaudio
+ * $ pip3 install sounddevice matplotlib
+ *
+ * Then run
+ * $ python3 plot_audio_samples.py
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "bsp/board.h"
+#include "tusb.h"
+
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF PROTYPES
+//--------------------------------------------------------------------+
+
+#ifndef AUDIO_SAMPLE_RATE
+#define AUDIO_SAMPLE_RATE   48000
+#endif
+
+/* Blink pattern
+ * - 250 ms  : device not mounted
+ * - 1000 ms : device mounted
+ * - 2500 ms : device is suspended
+ */
+enum  {
+  BLINK_NOT_MOUNTED = 250,
+  BLINK_MOUNTED = 1000,
+  BLINK_SUSPENDED = 2500,
+};
+
+static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED;
+
+// Audio controls
+// Current states
+bool mute[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; 				          // +1 for master channel 0
+uint16_t volume[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX + 1]; 					// +1 for master channel 0
+uint32_t sampFreq;
+uint8_t clkValid;
+
+// Range states
+audio_control_range_2_n_t(1) volumeRng[CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX+1]; 			// Volume range state
+audio_control_range_4_n_t(1) sampleFreqRng; 						// Sample frequency range state
+
+// Audio test data
+uint16_t i2s_dummy_buffer[CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO][CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ/2];   // Ensure half word aligned
+
+void led_blinking_task(void);
+void audio_task(void);
+
+/*------------- MAIN -------------*/
+int main(void)
+{
+  board_init();
+
+  tusb_init();
+
+  // Init values
+  sampFreq = AUDIO_SAMPLE_RATE;
+  clkValid = 1;
+
+  sampleFreqRng.wNumSubRanges = 1;
+  sampleFreqRng.subrange[0].bMin = AUDIO_SAMPLE_RATE;
+  sampleFreqRng.subrange[0].bMax = AUDIO_SAMPLE_RATE;
+  sampleFreqRng.subrange[0].bRes = 0;
+
+  while (1)
+  {
+    tud_task(); // tinyusb device task
+    led_blinking_task();
+    audio_task();
+  }
+
+
+  return 0;
+}
+
+//--------------------------------------------------------------------+
+// Device callbacks
+//--------------------------------------------------------------------+
+
+// Invoked when device is mounted
+void tud_mount_cb(void)
+{
+  blink_interval_ms = BLINK_MOUNTED;
+}
+
+// Invoked when device is unmounted
+void tud_umount_cb(void)
+{
+  blink_interval_ms = BLINK_NOT_MOUNTED;
+}
+
+// Invoked when usb bus is suspended
+// remote_wakeup_en : if host allow us  to perform remote wakeup
+// Within 7ms, device must draw an average of current less than 2.5 mA from bus
+void tud_suspend_cb(bool remote_wakeup_en)
+{
+  (void) remote_wakeup_en;
+  blink_interval_ms = BLINK_SUSPENDED;
+}
+
+// Invoked when usb bus is resumed
+void tud_resume_cb(void)
+{
+  blink_interval_ms = BLINK_MOUNTED;
+}
+
+//--------------------------------------------------------------------+
+// AUDIO Task
+//--------------------------------------------------------------------+
+
+void audio_task(void)
+{
+  // Yet to be filled - e.g. put meas data into TX FIFOs etc.
+  asm("nop");
+}
+
+//--------------------------------------------------------------------+
+// Application Callback API Implementations
+//--------------------------------------------------------------------+
+
+// Invoked when audio class specific set request received for an EP
+bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
+{
+  (void) rhport;
+  (void) pBuff;
+
+  // We do not support any set range requests here, only current value requests
+  TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  uint8_t ep = TU_U16_LOW(p_request->wIndex);
+
+  (void) channelNum; (void) ctrlSel; (void) ep;
+
+  return false; 	// Yet not implemented
+}
+
+// Invoked when audio class specific set request received for an interface
+bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
+{
+  (void) rhport;
+  (void) pBuff;
+
+  // We do not support any set range requests here, only current value requests
+  TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  uint8_t itf = TU_U16_LOW(p_request->wIndex);
+
+  (void) channelNum; (void) ctrlSel; (void) itf;
+
+  return false; 	// Yet not implemented
+}
+
+// Invoked when audio class specific set request received for an entity
+bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
+{
+  (void) rhport;
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  uint8_t itf = TU_U16_LOW(p_request->wIndex);
+  uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
+
+  (void) itf;
+
+  // We do not support any set range requests here, only current value requests
+  TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
+
+  // If request is for our feature unit
+  if ( entityID == 2 )
+  {
+    switch ( ctrlSel )
+    {
+      case AUDIO_FU_CTRL_MUTE:
+        // Request uses format layout 1
+        TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t));
+
+        mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur;
+
+        TU_LOG2("    Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum);
+      return true;
+
+      case AUDIO_FU_CTRL_VOLUME:
+        // Request uses format layout 2
+        TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t));
+
+        volume[channelNum] = ((audio_control_cur_2_t*) pBuff)->bCur;
+
+        TU_LOG2("    Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum);
+      return true;
+
+        // Unknown/Unsupported control
+      default:
+        TU_BREAKPOINT();
+      return false;
+    }
+  }
+  return false;    // Yet not implemented
+}
+
+// Invoked when audio class specific get request received for an EP
+bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request)
+{
+  (void) rhport;
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  uint8_t ep = TU_U16_LOW(p_request->wIndex);
+
+  (void) channelNum; (void) ctrlSel; (void) ep;
+
+  //	return tud_control_xfer(rhport, p_request, &tmp, 1);
+
+  return false; 	// Yet not implemented
+}
+
+// Invoked when audio class specific get request received for an interface
+bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request)
+{
+  (void) rhport;
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  uint8_t itf = TU_U16_LOW(p_request->wIndex);
+
+  (void) channelNum; (void) ctrlSel; (void) itf;
+
+  return false; 	// Yet not implemented
+}
+
+// Invoked when audio class specific get request received for an entity
+bool tud_audio_get_req_entity_cb(uint8_t rhport, tusb_control_request_t const * p_request)
+{
+  (void) rhport;
+
+  // Page 91 in UAC2 specification
+  uint8_t channelNum = TU_U16_LOW(p_request->wValue);
+  uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
+  // uint8_t itf = TU_U16_LOW(p_request->wIndex); 			// Since we have only one audio function implemented, we do not need the itf value
+  uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
+
+  // Input terminal (Microphone input)
+  if (entityID == 1)
+  {
+    switch ( ctrlSel )
+    {
+      case AUDIO_TE_CTRL_CONNECTOR:
+      {
+        // The terminal connector control only has a get request with only the CUR attribute.
+        audio_desc_channel_cluster_t ret;
+
+        // Those are dummy values for now
+        ret.bNrChannels = 1;
+        ret.bmChannelConfig = 0;
+        ret.iChannelNames = 0;
+
+        TU_LOG2("    Get terminal connector\r\n");
+
+        return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret));
+      }
+      break;
+
+        // Unknown/Unsupported control selector
+      default:
+        TU_BREAKPOINT();
+        return false;
+    }
+  }
+
+  // Feature unit
+  if (entityID == 2)
+  {
+    switch ( ctrlSel )
+    {
+      case AUDIO_FU_CTRL_MUTE:
+        // Audio control mute cur parameter block consists of only one byte - we thus can send it right away
+        // There does not exist a range parameter block for mute
+        TU_LOG2("    Get Mute of channel: %u\r\n", channelNum);
+        return tud_control_xfer(rhport, p_request, &mute[channelNum], 1);
+
+      case AUDIO_FU_CTRL_VOLUME:
+        switch ( p_request->bRequest )
+        {
+          case AUDIO_CS_REQ_CUR:
+            TU_LOG2("    Get Volume of channel: %u\r\n", channelNum);
+            return tud_control_xfer(rhport, p_request, &volume[channelNum], sizeof(volume[channelNum]));
+
+          case AUDIO_CS_REQ_RANGE:
+            TU_LOG2("    Get Volume range of channel: %u\r\n", channelNum);
+
+            // Copy values - only for testing - better is version below
+            audio_control_range_2_n_t(1)
+            ret;
+
+            ret.wNumSubRanges = 1;
+            ret.subrange[0].bMin = -90;           // -90 dB
+            ret.subrange[0].bMax = 90;		// +90 dB
+            ret.subrange[0].bRes = 1; 		// 1 dB steps
+
+            return tud_audio_buffer_and_schedule_control_xfer(rhport, p_request, (void*) &ret, sizeof(ret));
+
+            // Unknown/Unsupported control
+          default:
+            TU_BREAKPOINT();
+            return false;
+        }
+      break;
+
+        // Unknown/Unsupported control
+      default:
+        TU_BREAKPOINT();
+        return false;
+    }
+  }
+
+  // Clock Source unit
+  if ( entityID == 4 )
+  {
+    switch ( ctrlSel )
+    {
+      case AUDIO_CS_CTRL_SAM_FREQ:
+        // channelNum is always zero in this case
+        switch ( p_request->bRequest )
+        {
+          case AUDIO_CS_REQ_CUR:
+            TU_LOG2("    Get Sample Freq.\r\n");
+            return tud_control_xfer(rhport, p_request, &sampFreq, sizeof(sampFreq));
+
+          case AUDIO_CS_REQ_RANGE:
+            TU_LOG2("    Get Sample Freq. range\r\n");
+            return tud_control_xfer(rhport, p_request, &sampleFreqRng, sizeof(sampleFreqRng));
+
+           // Unknown/Unsupported control
+          default:
+            TU_BREAKPOINT();
+            return false;
+        }
+      break;
+
+      case AUDIO_CS_CTRL_CLK_VALID:
+        // Only cur attribute exists for this request
+        TU_LOG2("    Get Sample Freq. valid\r\n");
+        return tud_control_xfer(rhport, p_request, &clkValid, sizeof(clkValid));
+
+      // Unknown/Unsupported control
+      default:
+        TU_BREAKPOINT();
+        return false;
+    }
+  }
+
+  TU_LOG2("  Unsupported entity: %d\r\n", entityID);
+  return false; 	// Yet not implemented
+}
+
+bool tud_audio_tx_done_pre_load_cb(uint8_t rhport, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting)
+{
+  (void) rhport;
+  (void) itf;
+  (void) ep_in;
+  (void) cur_alt_setting;
+
+  for (uint8_t cnt=0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++)
+  {
+    tud_audio_write_support_ff(cnt, i2s_dummy_buffer[cnt], AUDIO_SAMPLE_RATE/1000 * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX);
+  }
+
+  return true;
+}
+
+bool tud_audio_tx_done_post_load_cb(uint8_t rhport, uint16_t n_bytes_copied, uint8_t itf, uint8_t ep_in, uint8_t cur_alt_setting)
+{
+  (void) rhport;
+  (void) n_bytes_copied;
+  (void) itf;
+  (void) ep_in;
+  (void) cur_alt_setting;
+
+  uint16_t dataVal;
+
+  // Generate dummy data
+  for (uint16_t cnt = 0; cnt < CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO; cnt++)
+  {
+    uint16_t * p_buff = i2s_dummy_buffer[cnt];              // 2 bytes per sample
+    dataVal = 1;
+    for (uint16_t cnt2 = 0; cnt2 < AUDIO_SAMPLE_RATE/1000; cnt2++)
+    {
+      for (uint8_t cnt3 = 0; cnt3 < CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX; cnt3++)
+      {
+        *p_buff++ = dataVal;
+      }
+      dataVal++;
+    }
+  }
+  return true;
+}
+
+bool tud_audio_set_itf_close_EP_cb(uint8_t rhport, tusb_control_request_t const * p_request)
+{
+  (void) rhport;
+  (void) p_request;
+
+  return true;
+}
+
+//--------------------------------------------------------------------+
+// BLINKING TASK
+//--------------------------------------------------------------------+
+void led_blinking_task(void)
+{
+  static uint32_t start_ms = 0;
+  static bool led_state = false;
+
+  // Blink every interval ms
+  if ( board_millis() - start_ms < blink_interval_ms) return; // not enough time
+  start_ms += blink_interval_ms;
+
+  board_led_write(led_state);
+  led_state = 1 - led_state; // toggle
+}

+ 34 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/plot_audio_samples.py

@@ -0,0 +1,34 @@
+import sounddevice as sd
+import matplotlib.pyplot as plt
+import numpy as np
+import platform
+
+if __name__ == '__main__':
+
+    # If you got "ValueError: No input device matching", that is because your PC name example device
+    # differently from tested list below. Uncomment the next line to see full list and try to pick correct one
+    # print(sd.query_devices())
+
+    fs = 48000  		# Sample rate
+    duration = 100e-3   # Duration of recording
+
+    if platform.system() == 'Windows':
+        # WDM-KS is needed since there are more than one MicNode device APIs (at least in Windows)
+        device = 'Microphone (MicNode_4_Ch), Windows WDM-KS'
+    elif platform.system() == 'Darwin':
+        device = 'MicNode_4_Ch'
+    else:
+        device ='default'
+
+    myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=4, dtype='int16', device=device)
+    print('Waiting...')
+    sd.wait()  # Wait until recording is finished
+    print('Done!')
+
+    time = np.arange(0, duration, 1 / fs)  # time vector
+    plt.plot(time, myrecording)
+    plt.xlabel('Time [s]')
+    plt.ylabel('Amplitude')
+    plt.title('MicNode 4 Channel')
+    plt.show()
+    

+ 118 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/tusb_config.h

@@ -0,0 +1,118 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+#ifndef _TUSB_CONFIG_H_
+#define _TUSB_CONFIG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//--------------------------------------------------------------------
+// COMMON CONFIGURATION
+//--------------------------------------------------------------------
+
+// defined by compiler flags for flexibility
+#ifndef CFG_TUSB_MCU
+#error CFG_TUSB_MCU must be defined
+#endif
+
+#if CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX
+#define CFG_TUSB_RHPORT0_MODE       (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
+#else
+#define CFG_TUSB_RHPORT0_MODE       OPT_MODE_DEVICE
+#endif
+
+#ifndef CFG_TUSB_OS
+#define CFG_TUSB_OS                 OPT_OS_NONE
+#endif
+
+#ifndef CFG_TUSB_DEBUG
+#define CFG_TUSB_DEBUG              0
+#endif
+
+// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
+// #define CFG_TUSB_DEBUG           0
+
+/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
+ * Tinyusb use follows macros to declare transferring memory so that they can be put
+ * into those specific section.
+ * e.g
+ * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") ))
+ * - CFG_TUSB_MEM_ALIGN   : __attribute__ ((aligned(4)))
+ */
+#ifndef CFG_TUSB_MEM_SECTION
+#define CFG_TUSB_MEM_SECTION
+#endif
+
+#ifndef CFG_TUSB_MEM_ALIGN
+#define CFG_TUSB_MEM_ALIGN          __attribute__ ((aligned(4)))
+#endif
+
+//--------------------------------------------------------------------
+// DEVICE CONFIGURATION
+//--------------------------------------------------------------------
+
+#ifndef CFG_TUD_ENDPOINT0_SIZE
+#define CFG_TUD_ENDPOINT0_SIZE    64
+#endif
+
+//------------- CLASS -------------//
+#define CFG_TUD_CDC               0
+#define CFG_TUD_MSC               0
+#define CFG_TUD_HID               0
+#define CFG_TUD_MIDI              0
+#define CFG_TUD_AUDIO             1
+#define CFG_TUD_VENDOR            0
+
+//--------------------------------------------------------------------
+// AUDIO CLASS DRIVER CONFIGURATION
+//--------------------------------------------------------------------
+
+// Have a look into audio_device.h for all configurations
+
+#define CFG_TUD_AUDIO_FUNC_1_DESC_LEN                                 TUD_AUDIO_MIC_FOUR_CH_DESC_LEN
+
+#define CFG_TUD_AUDIO_FUNC_1_N_AS_INT                                 1
+#define CFG_TUD_AUDIO_FUNC_1_CTRL_BUF_SZ                              64
+
+#define CFG_TUD_AUDIO_ENABLE_EP_IN                                    1
+#define CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX                    2         // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
+#define CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX                            4         // This value is not required by the driver, it parses this information from the descriptor once the alternate interface is set by the host - we use it for the setup
+#define CFG_TUD_AUDIO_EP_SZ_IN                                        (48 + 1) * CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX * CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX      // 48 Samples (48 kHz) x 2 Bytes/Sample x CFG_TUD_AUDIO_N_CHANNELS_TX Channels - the Windows driver always needs an extra sample per channel of space more, otherwise it complains... found by trial and error
+#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SZ_MAX                             CFG_TUD_AUDIO_EP_SZ_IN
+#define CFG_TUD_AUDIO_FUNC_1_EP_IN_SW_BUF_SZ                          CFG_TUD_AUDIO_EP_SZ_IN
+
+#define CFG_TUD_AUDIO_ENABLE_ENCODING                                 1
+#define CFG_TUD_AUDIO_ENABLE_TYPE_I_ENCODING                          1
+#define CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX                      2         // One I2S stream contains two channels, each stream is saved within one support FIFO - this value is currently fixed, the driver does not support a changing value
+#define CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO                        (CFG_TUD_AUDIO_FUNC_1_N_CHANNELS_TX / CFG_TUD_AUDIO_FUNC_1_CHANNEL_PER_FIFO_TX)
+#define CFG_TUD_AUDIO_FUNC_1_TX_SUPP_SW_FIFO_SZ                       (CFG_TUD_AUDIO_EP_SZ_IN / CFG_TUD_AUDIO_FUNC_1_N_TX_SUPP_SW_FIFO)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TUSB_CONFIG_H_ */

+ 165 - 0
pico-sdk/lib/tinyusb/examples/device/audio_4_channel_mic/src/usb_descriptors.c

@@ -0,0 +1,165 @@
+/* 
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2019 Ha Thach (tinyusb.org)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+#include "tusb.h"
+
+/* A combination of interfaces must have a unique product id, since PC will save device driver after the first plug.
+ * Same VID/PID with different interface e.g MSC (first), then CDC (later) will possibly cause system error on PC.
+ *
+ * Auto ProductID layout's Bitmap:
+ *   [MSB]     AUDIO | MIDI | HID | MSC | CDC          [LSB]
+ */
+#define _PID_MAP(itf, n)  ( (CFG_TUD_##itf) << (n) )
+#define USB_PID           (0x4000 | _PID_MAP(CDC, 0) | _PID_MAP(MSC, 1) | _PID_MAP(HID, 2) | \
+    _PID_MAP(MIDI, 3) | _PID_MAP(AUDIO, 4) | _PID_MAP(VENDOR, 5) )
+
+//--------------------------------------------------------------------+
+// Device Descriptors
+//--------------------------------------------------------------------+
+tusb_desc_device_t const desc_device =
+{
+    .bLength            = sizeof(tusb_desc_device_t),
+    .bDescriptorType    = TUSB_DESC_DEVICE,
+    .bcdUSB             = 0x0200,
+
+    // Use Interface Association Descriptor (IAD) for CDC
+    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
+    .bDeviceClass       = TUSB_CLASS_MISC,
+    .bDeviceSubClass    = MISC_SUBCLASS_COMMON,
+    .bDeviceProtocol    = MISC_PROTOCOL_IAD,
+    .bMaxPacketSize0    = CFG_TUD_ENDPOINT0_SIZE,
+
+    .idVendor           = 0xCafe,
+    .idProduct          = USB_PID,
+    .bcdDevice          = 0x0100,
+
+    .iManufacturer      = 0x01,
+    .iProduct           = 0x02,
+    .iSerialNumber      = 0x03,
+
+    .bNumConfigurations = 0x01
+};
+
+// Invoked when received GET DEVICE DESCRIPTOR
+// Application return pointer to descriptor
+uint8_t const * tud_descriptor_device_cb(void)
+{
+  return (uint8_t const *) &desc_device;
+}
+
+//--------------------------------------------------------------------+
+// Configuration Descriptor
+//--------------------------------------------------------------------+
+enum
+{
+  ITF_NUM_AUDIO_CONTROL = 0,
+  ITF_NUM_AUDIO_STREAMING,
+  ITF_NUM_TOTAL
+};
+
+#define CONFIG_TOTAL_LEN    	(TUD_CONFIG_DESC_LEN + CFG_TUD_AUDIO * TUD_AUDIO_MIC_FOUR_CH_DESC_LEN)
+
+#if TU_CHECK_MCU(LPC175X_6X) || TU_CHECK_MCU(LPC177X_8X) || TU_CHECK_MCU(LPC40XX)
+  // LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
+  // 0 control, 1 In, 2 Bulk, 3 Iso, 4 In etc ...
+  #define EPNUM_AUDIO   0x03
+
+#elif TU_CHECK_MCU(NRF5X)
+  // nRF5x ISO can only be endpoint 8
+  #define EPNUM_AUDIO   0x08
+
+#else
+  #define EPNUM_AUDIO   0x01
+#endif
+
+uint8_t const desc_configuration[] =
+{
+    // Interface count, string index, total length, attribute, power in mA
+    TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100),
+
+    // Interface number, string index, EP Out & EP In address, EP size
+    TUD_AUDIO_MIC_FOUR_CH_DESCRIPTOR(/*_itfnum*/ ITF_NUM_AUDIO_CONTROL, /*_stridx*/ 0, /*_nBytesPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX, /*_nBitsUsedPerSample*/ CFG_TUD_AUDIO_FUNC_1_N_BYTES_PER_SAMPLE_TX*8, /*_epin*/ 0x80 | EPNUM_AUDIO, /*_epsize*/ CFG_TUD_AUDIO_EP_SZ_IN)
+};
+
+// Invoked when received GET CONFIGURATION DESCRIPTOR
+// Application return pointer to descriptor
+// Descriptor contents must exist long enough for transfer to complete
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
+{
+  (void) index; // for multiple configurations
+  return desc_configuration;
+}
+
+//--------------------------------------------------------------------+
+// String Descriptors
+//--------------------------------------------------------------------+
+
+// array of pointer to string descriptors
+char const* string_desc_arr [] =
+{
+    (const char[]) { 0x09, 0x04 }, 	// 0: is supported language is English (0x0409)
+    "PaniRCorp",                   	// 1: Manufacturer
+    "MicNode_4_Ch",    		// 2: Product
+    "123458",                      	// 3: Serials, should use chip ID
+    "UAC2",                 	 	// 4: Audio Interface
+};
+
+static uint16_t _desc_str[32];
+
+// Invoked when received GET STRING DESCRIPTOR request
+// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
+uint16_t const* tud_descriptor_string_cb(uint8_t index, uint16_t langid)
+{
+  (void) langid;
+
+  uint8_t chr_count;
+
+  if ( index == 0)
+  {
+    memcpy(&_desc_str[1], string_desc_arr[0], 2);
+    chr_count = 1;
+  }else
+  {
+    // Convert ASCII string into UTF-16
+
+    if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL;
+
+    const char* str = string_desc_arr[index];
+
+    // Cap at max char
+    chr_count = strlen(str);
+    if ( chr_count > 31 ) chr_count = 31;
+
+    for(uint8_t i=0; i<chr_count; i++)
+    {
+      _desc_str[1+i] = str[i];
+    }
+  }
+
+  // first byte is length (including header), second byte is string type
+  _desc_str[0] = (TUSB_DESC_STRING << 8 ) | (2*chr_count + 2);
+
+  return _desc_str;
+}

+ 0 - 0
pico-sdk/lib/tinyusb/examples/device/audio_test/.skip.MCU_SAMD11


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