From fc55b07d6618be23f8a9e4d6faa7b0e9480ed422 Mon Sep 17 00:00:00 2001 From: Kai Yamada <gpioblink@gmail.com> Date: Thu, 11 Aug 2022 01:36:24 +0900 Subject: [PATCH 01/83] add relay introduction --- capes/overlays/basics.rst | 25 ++++++++++++++++ capes/overlays/index.rst | 12 ++++++++ capes/overlays/relay.rst | 61 +++++++++++++++++++++++++++++++++++++++ index.rst | 4 +++ 4 files changed, 102 insertions(+) create mode 100644 capes/overlays/basics.rst create mode 100644 capes/overlays/index.rst create mode 100644 capes/overlays/relay.rst diff --git a/capes/overlays/basics.rst b/capes/overlays/basics.rst new file mode 100644 index 00000000..a9ae5d04 --- /dev/null +++ b/capes/overlays/basics.rst @@ -0,0 +1,25 @@ +.. _bone-cape-basics: + +Basics +####### + +BeagleBone has sold a module called Cape, which connects to the BeagleBoard and the PocketBeagle. + +Using Cape, you can easily add sensors, communication peripherals, etc. with ease. + +Please see below for Cape available to date. + +`BeagleBoard.org - Cape <https://beagleboard.org/capes>`_ + +Features +============= + +For example, BeagleBoard has various variants such as Black, Green, and AI. +The device tree overlay feature allows BeagleBone capes +to be identical across these different pieces of hardware. + +Each hardware has different internal pin assignments +and the number of peripherals in the SoC, but the device tree overlay absorbs these differences. + +The user of Cape are essentially able to use it +across the corresponding Boards without changing any code at all. \ No newline at end of file diff --git a/capes/overlays/index.rst b/capes/overlays/index.rst new file mode 100644 index 00000000..9b01043a --- /dev/null +++ b/capes/overlays/index.rst @@ -0,0 +1,12 @@ +.. _beagleboard-cape: + +Capes Overlays +############### + +.. note:: This section is under developmement right now. + +.. toctree:: + :maxdepth: 1 + + basics.rst + relay.rst diff --git a/capes/overlays/relay.rst b/capes/overlays/relay.rst new file mode 100644 index 00000000..7f133a44 --- /dev/null +++ b/capes/overlays/relay.rst @@ -0,0 +1,61 @@ +.. _bone-cape-relay: + +BeagleBoard.org BeagleBone Relay Cape +######### + +Relay Cape, as the name suggests, is a simple Cape with a relay on it. +It contains four relays, each of which can be operated independently from the BeagleBone. + +`Schematic <https://github.com/beagleboard/capes/tree/master/beaglebone/Relay>`_ + +.. note:: + The following describes how to use the device tree overlay under development. + The description may not be suitable for those using older firmware. + +How to Use +--------------- + +Installation +****** + +No special configuration is required. When you plug Cape into your BeagleBoard, +it is automatically recognized by the Cape Universal function. + +You can check to see if Relay Cape is recognized with the following command. + +.. code-block:: + + ls /proc/device-tree/chosen/overlay + +A list of currently loaded device tree overlays is displayed here. +If you see `BBORG_RELAY-00A2.kernel` in this list, it has been loaded correctly. + +If it is not loaded correctly, you can also load it directly +by adding the following to the U-Boot options +(which can be reflected by changing /boot/uEnv.txt). + +.. code-block:: + + uboot_overlay_addr0=/boot/dtbs/X.XX.XXX-ti-rXX/overlays/BBORG_RELAY-00A2.dtbo + +Enter the kernel version specified by uname in the `X.XX.XXX-ti-rXX` part. + +Usage +****** + +.. code-block:: + + ls /sys/class/leds + +The directory "relay*" exists in the following directory. +The LEDs can be controlled by modifying the files in this directory. + +.. code-block:: + + echo 1 > relay1/brightness + +This allows you to adjust the brightness; +entering 1 for brightness turns it ON, and entering 0 for OFF. + +The four relays can be changed individually +by changing the number after "relay. \ No newline at end of file diff --git a/index.rst b/index.rst index 9b7f6f0b..112da649 100644 --- a/index.rst +++ b/index.rst @@ -34,7 +34,11 @@ Sections :caption: Projects simppru/index.rst +.. toctree:: + :maxdepth: 1 + :caption: Capes + cape/overlays/index.rst .. toctree:: :maxdepth: 1 :caption: Books -- GitLab From 009bbc0027f40da3c041eeddefdd5f7a13fc9612 Mon Sep 17 00:00:00 2001 From: Deepak Khatri <lorforlinux@beagleboard.org> Date: Mon, 29 Aug 2022 09:12:30 +0530 Subject: [PATCH 02/83] Add sphinx git versioning --- _templates/versions.html | 3 ++- conf.py | 31 +++++++++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/_templates/versions.html b/_templates/versions.html index cc0dc9cf..8cee4f7a 100644 --- a/_templates/versions.html +++ b/_templates/versions.html @@ -14,7 +14,8 @@ </dl> <dl> <dt>{{ _('Downloads') }}</dt> - <dd><a href="{{ url }}/beagleboard-docs.pdf">PDF</a></dd> + {% set prefix = current_version if is_release else "latest" %} + <dd><a href="/{{ prefix }}/beagleboard-docs.pdf">PDF</a></dd> </dl> <dl> <dt>{{ _('BeagleBoard.org Links') }}</dt> diff --git a/conf.py b/conf.py index 7a531675..ecc2552d 100644 --- a/conf.py +++ b/conf.py @@ -10,7 +10,7 @@ from pathlib import Path import re # sys.path.insert(0, os.path.abspath('.')) # sys.path.append('.') - +from sphinx.cmd.build import get_parser import sphinx_rtd_theme BBDOCS_BASE = Path(__file__).resolve().parents[0] @@ -25,7 +25,8 @@ author = 'BeagleBoard.org Foundation' # -- General configuration --------------------------------------------------- extensions = [ - "sphinxcontrib.rsvgconverter", "sphinx_design" + "sphinxcontrib.rsvgconverter", + "sphinx_design" ] templates_path = ['_templates'] @@ -39,9 +40,6 @@ navigation_with_keys = True # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# -- Options for HTML output ------------------------------------------------- - html_theme = 'sphinx_rtd_theme' html_show_sphinx = False html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] @@ -56,8 +54,7 @@ html_static_path = [str(BBDOCS_BASE / "_static")] html_last_updated_fmt = "%b %d, %Y" html_domain_indices = False html_split_index = True -html_show_sourcelink = True -html_baseurl = 'https://docs.beagleboard.io/' +html_show_sourcelink = False # parse version from 'VERSION' file with open(BBDOCS_BASE / "VERSION") as f: @@ -84,15 +81,21 @@ with open(BBDOCS_BASE / "VERSION") as f: release = version +is_release = tags.has("release") # pylint: disable=undefined-variable +reference_prefix = "" +if tags.has("publish"): # pylint: disable=undefined-variable + reference_prefix = f"/{version}" if is_release else "/latest" +docs_title = "Docs / {}".format(version if is_release else "Latest") + html_context = { "display_gitlab": True, - "gitlab_host": "git.beagleboard.org", - "gitlab_user": "docs", - "gitlab_repo": "docs.beagleboard.io", - "gitlab_version": "main", - "conf_py_path": "/", + "show_license": True, + "docs_title": docs_title, + "is_release": is_release, + "current_version": version, "versions": ( ("latest", "/"), + ("0.0.7", "/0.0.7/"), ) } @@ -119,6 +122,10 @@ latex_documents = [ ("index-tex", "beagleboard-docs.tex", "BeagleBoard Docs", author, "manual"), ] +vcs_link_version = f"v{version}" if is_release else "main" +vcs_link_base_url = f"https://git.beagleboard.org/docs/docs.beagleboard.io/blob/{vcs_link_version}" + + def setup(app): # theme customizations app.add_css_file("css/custom.css") -- GitLab From 2dd2449367d719dd3448b36e195f6f9f37525333 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 10:41:09 -0400 Subject: [PATCH 03/83] Try a huge reorganization --- beagleconnect/ch02.rst | 5 - boards/beagleboard/index.rst | 12 ++ .../beaglebone/ai-64}/ch01.rst | 0 .../beaglebone/ai-64}/ch02.rst | 0 .../beaglebone/ai-64}/ch03.rst | 0 .../beaglebone/ai-64}/ch04.rst | 0 .../beaglebone/ai-64}/ch05.rst | 0 .../beaglebone/ai-64}/ch06.rst | 0 .../beaglebone/ai-64}/ch07.rst | 0 .../beaglebone/ai-64}/ch08.rst | 0 .../beaglebone/ai-64}/ch09.rst | 0 .../beaglebone/ai-64}/ch10.rst | 0 .../beaglebone/ai-64}/ch11.rst | 0 .../edge_ai_apps/configuration_file.rst | 0 .../ai-64}/edge_ai_apps/data_flows.rst | 0 .../ai-64}/edge_ai_apps/datasheet.rst | 0 .../edge_ai_apps/docker_environment.rst | 0 .../ai-64}/edge_ai_apps/getting_started.rst | 0 .../edge_ai_apps/images/TDA4VM-SK-SD-Boot.png | Bin .../edge_ai_apps/images/balena_etcher.png | Bin .../images/board_connections_bbai_64.jpg | Bin .../images/board_connections_tda4vm_evm.jpg | Bin .../images/board_connections_tda4vm_sk.jpg | Bin .../edge_ai_apps/images/boot_wallpaper.jpg | Bin .../images/csi_camera_connection.png | Bin .../edge_ai_apps/images/edge_ai_demos.drawio | 0 .../edge_ai_demos_CPP_Demo_Data_Flow.png | Bin .../edge_ai_demos_Python_Demo_Data_Flow.png | Bin .../images/edgeai-image-classify.jpg | Bin .../images/edgeai-multi-input-multi-infer.jpg | Bin .../images/edgeai-object-detect.jpg | Bin .../images/edgeai-overview-image1.jpg | Bin .../images/edgeai-overview-image2.jpg | Bin .../images/edgeai-overview-image3.jpg | Bin .../images/edgeai-sdk-components.png | Bin .../images/edgeai-sdk-feature.png | Bin .../images/edgeai-sdk-overview.png | Bin .../images/edgeai-sdk-programming-env.png | Bin .../images/edgeai-sdk-roadmap.png | Bin .../edgeai-single-input-multi-infer.jpg | Bin .../edge_ai_apps/images/edgeai_human_pose.png | Bin .../images/edgeai_image_classification.png | Bin .../images/edgeai_imx390_camera_source.png | Bin .../images/edgeai_object_detection.png | Bin .../images/edgeai_ov5640_camera_source.png | Bin .../images/edgeai_rpi_camera_source.png | Bin .../images/edgeai_rtsp_source.png | Bin .../images/edgeai_semantic_segmentation.png | Bin .../images/edgeai_video_output.png | Bin .../images/edgeai_video_source.png | Bin .../ai-64}/edge_ai_apps/images/favicon.ico | Bin .../ai-64}/edge_ai_apps/images/j721esk-ap.png | Bin .../edge_ai_apps/images/model_downloader.png | Bin .../images/open-src-components.png | Bin .../ai-64}/edge_ai_apps/images/perf_plots.png | Bin .../images/rpi_camera_connection.png | Bin .../ai-64}/edge_ai_apps/images/vs_code.png | Bin .../images/wifi-oob-iw-command.png | Bin .../beaglebone/ai-64}/edge_ai_apps/index.rst | 0 .../ai-64}/edge_ai_apps/inference_models.rst | 0 .../edge_ai_apps/performance_visualizer.rst | 0 .../edge_ai_apps/running_advance_demos.rst | 0 .../edge_ai_apps/running_simple_demos.rst | 0 .../ai-64}/edge_ai_apps/sdk_components.rst | 0 .../edge_ai_apps/static/theme_overrides.css | 0 .../ai-64}/edge_ai_apps/test_report.rst | 0 .../themes/sphinx_rtd_theme_ti/__init__.py | 0 .../sphinx_rtd_theme_ti/breadcrumbs.html | 0 .../themes/sphinx_rtd_theme_ti/footer.html | 0 .../themes/sphinx_rtd_theme_ti/layout.html | 0 .../sphinx_rtd_theme_ti/layout_old.html | 0 .../themes/sphinx_rtd_theme_ti/search.html | 0 .../themes/sphinx_rtd_theme_ti/searchbox.html | 0 .../static/css/badge_only.css | 0 .../sphinx_rtd_theme_ti/static/css/theme.css | 0 .../static/fonts/FontAwesome.otf | Bin .../static/fonts/Inconsolata-Bold.ttf | Bin .../static/fonts/Inconsolata-Regular.ttf | Bin .../static/fonts/Lato-Bold.ttf | Bin .../static/fonts/Lato-Regular.ttf | Bin .../static/fonts/RobotoSlab-Bold.ttf | Bin .../static/fonts/RobotoSlab-Regular.ttf | Bin .../static/fonts/fontawesome-webfont.eot | Bin .../static/fonts/fontawesome-webfont.svg | 0 .../static/fonts/fontawesome-webfont.ttf | Bin .../static/fonts/fontawesome-webfont.woff | Bin .../static/img/ti_logo.png | Bin .../static/js/modernizr.min.js | 0 .../sphinx_rtd_theme_ti/static/js/theme.js | 0 .../themes/sphinx_rtd_theme_ti/theme.conf | 0 .../themes/sphinx_rtd_theme_ti/versions.html | 0 .../ai-64}/images/45-back-heatsink.png | Bin .../beaglebone/ai-64}/images/45-back.png | Bin .../beaglebone/ai-64}/images/45-front.png | Bin .../ai-64}/images/Desktop-Configuration.png | Bin .../beaglebone/ai-64}/images/LED-Pattern.png | Bin .../ai-64/images/OSHW_mark_US002120.png | Bin 0 -> 10781 bytes .../ai-64/images/OSHW_mark_US002120.svg | 1 + .../beaglebone/ai-64}/images/Power-LED.png | Bin .../ai-64}/images/USB-Connection.png | Bin .../ai-64}/images/USB-Tethering.png | Bin .../ai-64}/images/back-heatsink.png | Bin .../beaglebone/ai-64}/images/back.png | Bin .../beaglebone/ai-64}/images/by-sa.png | Bin .../images/ch03/BBAI-64-to-monitor-cable.png | Bin .../ai-64}/images/ch03/XFCE-Desktop.png | Bin .../ai-64}/images/ch03/barrel-jack.jpg | Bin .../ai-64}/images/ch03/barrel-jack.png | Bin .../ai-64}/images/ch03/bbai64-in-box.jpg | Bin .../images/ch03/desktop-configuration.jpg | Bin .../ai-64}/images/ch03/display-adaptors.jpg | Bin .../ai-64}/images/ch03/display-adaptors.png | Bin .../ai-64}/images/ch03/ethernet-cable.jpg | Bin .../ai-64}/images/ch03/ethernet-cable.png | Bin .../ai-64}/images/ch03/led-pattern.jpg | Bin .../beaglebone/ai-64}/images/ch03/leds.jpg | Bin .../ai-64}/images/ch03/miniDP-connector.jpg | Bin .../ai-64}/images/ch03/miniDP-connector.png | Bin .../ai-64}/images/ch03/monitor-cable.jpg | Bin .../ai-64}/images/ch03/mouse-keyboard.jpg | Bin .../ai-64}/images/ch03/mouse-keyboard.png | Bin .../beaglebone/ai-64}/images/ch03/ports.jpg | Bin .../ai-64}/images/ch03/power-led.jpg | Bin .../ai-64}/images/ch03/usb-a-connection.jpg | Bin .../ai-64}/images/ch03/usb-c-connection.jpg | Bin .../ai-64}/images/ch03/usb-tethering.jpg | Bin .../ai-64}/images/ch03/xfce-desktop.jpg | Bin .../ai-64}/images/ch04/components.png | Bin .../ai-64}/images/ch04/components.svg | 0 .../images/ch05/board-block-diagram.svg | 0 .../ai-64}/images/ch05/soc-block-diagram.svg | 0 .../ai-64}/images/ch06/TPS6594-Q1.svg | 0 .../beaglebone/ai-64}/images/ch06/pmic-a.svg | 0 .../beaglebone/ai-64}/images/ch06/pmic-b.svg | 0 .../beaglebone/ai-64}/images/ch06/power.svg | 0 .../images/ch08/berg-stip-insertion.jpg | Bin .../ai-64}/images/ch08/can-cape.jpg | Bin .../ai-64}/images/ch08/cape-dimension.jpg | Bin .../ai-64}/images/ch08/cape-placement.jpg | Bin .../images/ch08/eeprom-write-protect.png | Bin .../beaglebone/ai-64}/images/ch08/eeprom.png | Bin .../images/ch08/expansion-connector.jpg | Bin .../beaglebone/ai-64}/images/ch08/proto.jpg | Bin .../ch08/single-expansion-connector.jpg | Bin .../ch08/stealing-expansion-connector.jpg | Bin .../ai-64}/images/ch09/board-dimensions.jpg | Bin .../ai-64}/images/ch09/bottom-silkscreen.png | Bin .../ai-64}/images/ch09/top-silkscreen.png | Bin .../ai-64}/images/ch10/45-back-heatsink.jpg | Bin .../beaglebone/ai-64}/images/ch10/45-back.jpg | Bin .../ai-64}/images/ch10/45-front-hires.jpg | Bin .../ai-64}/images/ch10/45-front.jpg | Bin .../ai-64}/images/ch10/back-heatsink.jpg | Bin .../beaglebone/ai-64}/images/ch10/back.jpg | Bin .../beaglebone/ai-64}/images/ch10/feature.jpg | Bin .../beaglebone/ai-64}/images/ch10/front.jpg | Bin .../beaglebone/ai-64}/images/feature.png | Bin .../beaglebone/ai-64}/images/front.png | Bin .../beaglebone/ai-64}/index.rst | 0 .../black}/System-Reference-Manual.asciidoc | 0 .../beaglebone/black}/ch01.rst | 0 .../beaglebone/black}/ch02.rst | 0 .../beaglebone/black}/ch03.rst | 0 .../beaglebone/black}/ch04.rst | 0 .../beaglebone/black}/ch05.rst | 0 .../beaglebone/black}/ch06.rst | 0 .../beaglebone/black}/ch07.rst | 0 .../beaglebone/black}/ch08.rst | 0 .../beaglebone/black}/ch09.rst | 0 .../beaglebone/black}/ch10.rst | 0 .../beaglebone/black}/ch11.rst | 0 .../beaglebone/black}/images/BBvsBBB.jpg | Bin .../beaglebone/black}/images/COMP_A5A.jpg | Bin .../beaglebone/black}/images/CONN_REVA5A.jpg | Bin .../beaglebone/black}/images/Features.jpg | Bin .../black/images/OSHW_mark_US000236.png | Bin 0 -> 22845 bytes .../beaglebone/black}/images/REV_A5A.jpg | Bin .../beaglebone/black}/index.rst | 0 .../beaglebone/black}/media/image1.jpg | Bin .../beaglebone/black}/media/image10.jpg | Bin .../beaglebone/black}/media/image11.jpg | Bin .../beaglebone/black}/media/image12.jpg | Bin .../beaglebone/black}/media/image13.jpg | Bin .../beaglebone/black}/media/image14.jpg | Bin .../beaglebone/black}/media/image16.jpg | Bin .../beaglebone/black}/media/image17.jpg | Bin .../beaglebone/black}/media/image18.jpg | Bin .../beaglebone/black}/media/image2.jpg | Bin .../beaglebone/black}/media/image24.jpg | Bin .../beaglebone/black}/media/image25.jpg | Bin .../beaglebone/black}/media/image26.jpg | Bin .../beaglebone/black}/media/image27.jpg | Bin .../beaglebone/black}/media/image28.jpg | Bin .../beaglebone/black}/media/image29.jpg | Bin .../beaglebone/black}/media/image30.jpg | Bin .../beaglebone/black}/media/image31.png | Bin .../beaglebone/black}/media/image37.png | Bin .../beaglebone/black}/media/image38.png | Bin .../beaglebone/black}/media/image39.jpg | Bin .../beaglebone/black}/media/image40.png | Bin .../beaglebone/black}/media/image41.png | Bin .../beaglebone/black}/media/image42.jpg | Bin .../beaglebone/black}/media/image43.png | Bin .../beaglebone/black}/media/image44.png | Bin .../beaglebone/black}/media/image45.png | Bin .../beaglebone/black}/media/image46.png | Bin .../beaglebone/black}/media/image47.jpg | Bin .../beaglebone/black}/media/image48.png | Bin .../beaglebone/black}/media/image49.png | Bin .../beaglebone/black}/media/image50.png | Bin .../beaglebone/black}/media/image51.png | Bin .../beaglebone/black}/media/image52.png | Bin .../beaglebone/black}/media/image53.png | Bin .../beaglebone/black}/media/image54.jpg | Bin .../beaglebone/black}/media/image55.png | Bin .../beaglebone/black}/media/image56.png | Bin .../beaglebone/black}/media/image57.png | Bin .../beaglebone/black}/media/image58.png | Bin .../beaglebone/black}/media/image59.png | Bin .../beaglebone/black}/media/image60.png | Bin .../beaglebone/black}/media/image64.png | Bin .../beaglebone/black}/media/image65.png | Bin .../beaglebone/black}/media/image66.png | Bin .../beaglebone/black}/media/image67.png | Bin .../beaglebone/black}/media/image68.jpg | Bin .../beaglebone/black}/media/image69.jpg | Bin .../beaglebone/black}/media/image7.jpg | Bin .../beaglebone/black}/media/image71.jpg | Bin .../beaglebone/black}/media/image73.jpg | Bin .../beaglebone/black}/media/image75.jpg | Bin .../beaglebone/black}/media/image77.jpg | Bin .../beaglebone/black}/media/image78.png | Bin .../beaglebone/black}/media/image79.png | Bin .../beaglebone/black}/media/image8.jpg | Bin .../beaglebone/black}/media/image80.png | Bin .../beaglebone/black}/media/image81.jpg | Bin .../beaglebone/black}/media/image82.jpg | Bin .../beaglebone/black}/media/image83.jpg | Bin .../beaglebone/black}/media/image84.jpg | Bin .../beaglebone/black}/media/image85.jpg | Bin .../beaglebone/black}/media/image86.jpg | Bin .../beaglebone/black}/media/image87.jpg | Bin .../beaglebone/black}/media/image88.jpg | Bin .../beaglebone/black}/media/image89.jpg | Bin .../beaglebone/black}/media/image9.jpg | Bin .../beaglebone/black}/media/image90.jpg | Bin .../beaglebone/black}/media/image91.jpg | Bin .../beaglebone/black}/media/image92.jpg | Bin .../beaglebone/black}/media/image93.jpg | Bin .../beaglebone/black}/media/image94.jpg | Bin .../beaglebone/black}/media/image95.jpg | Bin .../beaglebone/black}/media/image96.png | Bin .../beaglebone/black}/media/image97.png | Bin .../beaglebone/blue}/accessories.rst | 0 .../beaglebone/blue}/code.rst | 0 .../beaglebone/blue}/faq.rst | 0 .../beaglebone/blue}/flashing-firmware.rst | 0 .../beaglebone/blue}/index.rst | 0 .../beaglebone/blue}/ip-settings.rst | 0 .../blue}/media/BeagleBone_Blue_pinouts.png | Bin .../blue/media/OSHW_mark_US000064.png | Bin 0 -> 30025 bytes .../beaglebone/blue}/media/pinout.jpg | Bin .../beaglebone/blue}/pinouts.rst | 0 .../beaglebone/blue}/rev-c-priorities.rst | 0 .../beaglebone/blue}/ssh.rst | 0 .../beaglebone/blue}/tests.rst | 0 .../beaglebone/blue}/wifi.rst | 0 boards/beaglebone/index.rst | 32 ++++++ .../beagleconnect/freedom/index.rst | 91 +-------------- .../freedom}/media/bcf-c5-boards.jpg | Bin .../beagleconnect/freedom/usage.rst | 0 .../beagleconnect/freedom/zephyr.rst | 0 boards/beagleconnect/index.rst | 105 ++++++++++++++++++ .../beagleconnect}/media/ProvStep1.jpg | Bin .../beagleconnect}/media/ProvStep2.jpg | Bin .../beagleconnect}/media/ProvStep3.jpg | Bin .../beagleconnect}/media/SoftwareProp.jpg | Bin .../media/bcf_block_diagram.svg | 0 .../beagleconnect}/media/image1.jpg | Bin .../beagleconnect/overview.rst | 0 .../beagleconnect/story.rst | 3 +- .../capes}/cape-interface-spec.rst | 0 .../tables/BeagleBone cape interface spec.ods | Bin .../BeagleBone-Cape-header-definition.csv | 0 .../capes}/tables/Bone-LEDs-Overlays.csv | 0 .../capes}/tables/Bone-LEDs.csv | 0 boards/index.rst | 28 +++++ .../System-Reference-Manual.wiki | 0 .../pocketbeagle}/ch01.rst | 0 .../pocketbeagle}/ch02.rst | 0 .../pocketbeagle}/ch03.rst | 0 .../pocketbeagle}/ch04.rst | 0 .../pocketbeagle}/ch05.rst | 0 .../pocketbeagle}/ch06.rst | 0 .../pocketbeagle}/ch07.rst | 0 .../pocketbeagle}/ch08.rst | 0 .../pocketbeagle}/ch09.rst | 0 .../pocketbeagle}/ch10.rst | 0 .../pocketbeagle}/ch11.rst | 0 .../images/10fig-PB-SDcardinsert1.jpg | Bin .../images/10fig-PB-SDcardinsert2.jpg | Bin .../images/11fig-PB-microUSBattach1.jpg | Bin .../images/12fig-PB-USBtoPC1.jpg | Bin .../images/13fig-PB-PowerLED1.png | Bin .../images/14fig-PB-UserLEDs1.png | Bin .../images/15fig-PB-starthtmpage.png | Bin .../images/16fig-PB-enablenetwork.png | Bin .../pocketbeagle}/images/17fig-PB-cloud9.png | Bin .../images/18fig-PB-cloud9exs.png | Bin .../images/19fig-PB-cloud9blink.png | Bin .../pocketbeagle}/images/1fig-PB-homepage.png | Bin .../images/20fig-PB-powerbutton.png | Bin .../images/21fig-PB-walkaround.png | Bin .../images/22fig-PB-blockdiagram.png | Bin .../images/24fig-PB-Headerphoto.png | Bin .../pocketbeagle}/images/25fig-PB-SDcard.png | Bin .../pocketbeagle}/images/26fig-PB-USB.png | Bin .../images/27fig-PB-JTAGpads.png | Bin .../images/28fig-PB-serialdebug.png | Bin .../images/40fig-PB-PRU-block.png | Bin .../images/41fig-PB-Headerback.png | Bin .../pocketbeagle}/images/46fig-PB-Mikro.png | Bin .../images/5fig-PB-GetStarted.png | Bin .../images/6fig-PB-DownloadSW.png | Bin .../images/7fig-PB-Etcherdownload.png | Bin .../images/8fig-PB-Etcherselectimage.png | Bin .../images/9fig-PB-Etcherfinish.png | Bin .../pocketbeagle}/images/Bonescript-ex.png | Bin .../pocketbeagle}/images/Header-P1-sch.png | Bin .../pocketbeagle}/images/Header-P2-sch.png | Bin .../pocketbeagle}/images/Header-both-sch.png | Bin .../pocketbeagle}/images/JTAG-pads-sch.png | Bin .../images/OSD335x-color-block.jpg | Bin .../images/OSHW_mark_US000083.png | Bin 0 -> 30833 bytes .../pocketbeagle}/images/PB-USB-photo.png | Bin .../pocketbeagle}/images/PB-block-diag2.jpg | Bin .../pocketbeagle}/images/PB-block-diag3.png | Bin .../pocketbeagle}/images/PB-block-diagram.png | Bin .../pocketbeagle}/images/PB-card-back-1.jpg | Bin .../pocketbeagle}/images/PB-card-back.jpg | Bin .../pocketbeagle}/images/PB-card-front-1.jpg | Bin .../pocketbeagle}/images/PB-card-front.jpg | Bin .../pocketbeagle}/images/PB-header-photo.png | Bin .../images/PB-microSDphoto-small.jpg | Bin .../pocketbeagle}/images/PB-microSDphoto.jpg | Bin .../images/PB-powerLED-photo.png | Bin .../pocketbeagle}/images/PB-powerbutton.png | Bin .../pocketbeagle}/images/PB-tethered.png | Bin .../pocketbeagle}/images/PB-tutorials.png | Bin .../pocketbeagle}/images/PB-userLED-photo.png | Bin .../pocketbeagle}/images/PB-walkaround-2.jpg | Bin .../pocketbeagle}/images/PB-walkaround-2.png | Bin .../pocketbeagle}/images/PB-walkaround-3.jpg | Bin .../pocketbeagle}/images/PB-walkaround.png | Bin .../pocketbeagle}/images/PB1-fullPC-3.jpg | Bin .../PocketBeagle-size-compare-small.jpg | Bin .../images/PocketBeagle_Back_BW.jpg | Bin .../images/PocketBeagle_Expansion_Headers.ods | Bin .../images/PocketBeagle_Front_BW-small.jpg | Bin 0 -> 195217 bytes .../images/PocketBeagle_Front_BW.jpg | Bin .../images/PocketBeagle_microUSB_bb.png | Bin .../images/PocketBeagle_microUSB_bb.svg | 0 .../images/PocketBeagle_microUSB_bb1.png | Bin .../images/PocketBeagle_pinout.pdf | Bin .../images/PocketBeagle_pinout.png | Bin .../pocketbeagle}/images/Power-button-sch.png | Bin .../images/SRM1_cloud9blinkPB.png | Bin .../images/SRM2_cloud9blinkPB.png | Bin .../images/SRM3_cloud9blinkPB.png | Bin .../images/SRM4_cloud9blinkPB.png | Bin .../pocketbeagle}/images/SiP-A-sch.png | Bin .../pocketbeagle}/images/SiP-B-sch.png | Bin .../pocketbeagle}/images/SiP-C-sch.png | Bin .../pocketbeagle}/images/SiP-D-sch.png | Bin .../pocketbeagle}/images/SiP-E-sch.png | Bin .../pocketbeagle}/images/SiP-F-sch.png | Bin .../pocketbeagle}/images/USB-sch.png | Bin .../pocketbeagle}/images/User-LEDs-sch.png | Bin .../images/fig-PB-Headerphoto.png | Bin .../pocketbeagle}/images/green_check.png | Bin .../images/mikrobus-socket-pinout.jpg | Bin .../pocketbeagle_package_small_size.jpg | Bin .../pocketbeagle}/images/usdconnector-sch.png | Bin .../pocketbeagle}/images/warning_tri.png | Bin .../pocketbeagle}/index.rst | 0 .../beaglebone-cookbook}/01basics/basics.rst | 0 .../01basics/figures/01GettingStarted.png | Bin .../01basics/figures/02GettingStarted.png | Bin .../01basics/figures/03GettingStarted.png | Bin .../01basics/figures/04GettingStarted.png | Bin .../01basics/figures/05GettingStarted.png | Bin .../figures/05GettingStartedVScode.png | Bin .../figures/BeagleBoard_described.jpg | Bin .../01basics/figures/BeagleBoard_xM.JPG | Bin .../01basics/figures/Beagle_Board_big.jpg | Bin .../01basics/figures/BeaglexM_details.jpg | Bin .../01basics/figures/X15_Beta_Front.jpg | Bin .../01basics/figures/beaglebone-white.jpg | Bin .../01basics/figures/bone-black-details.jpg | Bin .../01basics/figures/bone-black.jpg | Bin .../01basics/figures/bone-white.jpg | Bin .../01basics/figures/cloud9.png | Bin .../01basics/figures/cloud9Debugger.png | Bin .../01basics/figures/cloud9withBash.png | Bin .../01basics/figures/deb1.png | Bin .../01basics/figures/deb2.png | Bin .../01basics/figures/deb3.png | Bin .../01basics/figures/forkMe.png | Bin .../01basics/figures/pluggingIn.jpg | Bin .../01basics/figures/template.fzz | Bin .../01basics/figures/template_bb.png | Bin .../01basics/figures/vscBash.png | Bin .../02sensors/code/GPS.js | 0 .../02sensors/code/analogIn.js | 0 .../02sensors/code/analogIn.py | 0 .../02sensors/code/audio.asoundrc | 0 .../02sensors/code/audio.js | 0 .../02sensors/code/bone_eqep2b.dts | 0 .../02sensors/code/encoder.js | 0 .../02sensors/code/gpiod/.gitignore | 0 .../02sensors/code/gpiod/Makefile | 0 .../02sensors/code/gpiod/ReadMe.md | 0 .../02sensors/code/gpiod/aggregatorSetup.sh | 0 .../02sensors/code/gpiod/bulk_blink.py | 0 .../02sensors/code/gpiod/get.c | 0 .../02sensors/code/gpiod/get.py | 0 .../02sensors/code/gpiod/get.sh | 0 .../02sensors/code/gpiod/getset.c | 0 .../02sensors/code/gpiod/getset.py | 0 .../02sensors/code/gpiod/getsetEvent.c | 0 .../02sensors/code/gpiod/getsetEvent.py | 0 .../02sensors/code/gpiod/toggle1.c | 0 .../02sensors/code/gpiod/toggle1.py | 0 .../02sensors/code/gpiod/toggle1.sh | 0 .../02sensors/code/gpiod/toggle2.c | 0 .../02sensors/code/gpiod/toggle2.py | 0 .../02sensors/code/gpiod/toggleLED.c | 0 .../02sensors/code/gpiod/toggleLED.py | 0 .../02sensors/code/hc-sr04-ultraSonic.js | 0 .../02sensors/code/i2c-scan.js | 0 .../02sensors/code/i2c-test.js | 0 .../02sensors/code/i2cTemp.js | 0 .../02sensors/code/i2cTemp.py | 0 .../02sensors/code/i2ctmp101.py | 0 .../02sensors/code/pushbutton.js | 0 .../02sensors/code/pushbutton.py | 0 .../02sensors/code/pushbutton2.js | 0 .../02sensors/code/pushbuttonPullup.js | 0 .../02sensors/code/pushbutton_digitalRead.js | 0 .../02sensors/code/rotaryEncoder.js | 0 .../02sensors/code/rotaryEncoder.py | 0 .../02sensors/code/sensorTag.js | 0 .../02sensors/code/stop.js | 0 .../02sensors/code/testHC-SR04.js | 0 .../02sensors/code/ultrasonicRange.js | 0 .../02sensors/code/ultrasonicRange.py | 0 .../beaglebone-cookbook}/02sensors/code/w1.js | 0 .../beaglebone-cookbook}/02sensors/code/w1.py | 0 .../figures/Adafruit Xbee Adapter v1.1.fzpz | Bin .../figures/Adafruit Xbee Adapter v1.1.txt | 0 .../02sensors/figures/GPS.fzz | Bin .../02sensors/figures/GPS_bb.png | Bin .../02sensors/figures/P8P9.fzz | Bin .../02sensors/figures/P8P9_bb.png | Bin .../02sensors/figures/analogIn.fzz | Bin .../02sensors/figures/analogIn_bb.png | Bin .../02sensors/figures/audioDongle.jpg | Bin .../02sensors/figures/audioDongle.txt | 0 .../figures/black_hardware_details.png | Bin .../02sensors/figures/cape-headers-analog.png | Bin .../02sensors/figures/cape-headers-i2c.png | Bin .../02sensors/figures/cape-headers-serial.png | Bin .../02sensors/figures/cape-headers.png | Bin .../02sensors/figures/flexResistor.fzz | Bin .../02sensors/figures/flexResistor_bb.png | Bin .../02sensors/figures/hc-sr04-ultraSonic.fzz | Bin .../figures/hc-sr04-ultraSonic_bb.png | Bin .../02sensors/figures/hc-sr04.jpg | Bin .../02sensors/figures/i2cTemp.fzz | Bin .../02sensors/figures/i2cTemp.js.old | 0 .../02sensors/figures/i2cTemp_bb.png | Bin .../02sensors/figures/onewire.fzz | Bin .../02sensors/figures/onewire_bb.png | Bin .../02sensors/figures/onewire_setup.sh | 0 .../02sensors/figures/pot.fzz | Bin .../02sensors/figures/pot_schem.png | Bin .../02sensors/figures/pushbutton.fzz | Bin .../02sensors/figures/pushbuttonPullup.fzz | Bin .../02sensors/figures/pushbuttonPullup_bb.png | Bin .../02sensors/figures/pushbutton_bb.png | Bin .../02sensors/figures/rotaryEncoder.fzz | Bin .../02sensors/figures/rotaryEncoder.js.orig | 0 .../02sensors/figures/rotaryEncoder_bb.png | Bin .../02sensors/figures/sensorTag.jpg | Bin .../figures/testSerial-2014-04-11.zip | Bin .../02sensors/figures/ultrasonicRange.fzz | Bin .../02sensors/figures/ultrasonicRange_bb.png | Bin .../02sensors/figures/vsc-bash-tab.png | Bin .../02sensors/sensors.rst | 0 .../03displays/code/externLED.js | 0 .../03displays/code/externLED.py | 0 .../03displays/code/fadeLED.js | 0 .../03displays/code/fadeLED.py | 0 .../03displays/code/internLED.js | 0 .../03displays/code/internLED.py | 0 .../03displays/code/matrixLEDi2c.js | 0 .../03displays/code/matrixLEDi2c.py | 0 .../03displays/code/neoPixel.sh | 0 .../03displays/code/nokia5110.js | 0 .../03displays/code/nokia5110Test.js | 0 .../03displays/code/pwmTest.sh | 0 .../03displays/code/speak.js | 0 .../03displays/displays.rst | 0 .../03displays/figures/LEDstring.fzz | Bin .../03displays/figures/LEDstring_bb.png | Bin .../03displays/figures/P8P9.fzz | Bin .../03displays/figures/P8P9_bb.png | Bin .../03displays/figures/cape-headers-pwm.png | Bin .../03displays/figures/externLED.fzz | Bin .../03displays/figures/externLED_bb.png | Bin .../03displays/figures/i2cMatrix.fzz | Bin .../figures/i2cMatrixLevelTrans.fzz | Bin .../figures/i2cMatrixLevelTrans_bb.png | Bin .../03displays/figures/i2cMatrixOLD.fzz | Bin .../03displays/figures/i2cMatrix_bb.png | Bin .../03displays/figures/internLED.png | Bin .../03displays/figures/matrix16x24.fzz | Bin .../03displays/figures/matrix16x24_bb.png | Bin .../03displays/figures/neo.fzz | Bin .../03displays/figures/neoPixel.fzz | Bin .../03displays/figures/neoPixelMatrix.fzz | Bin .../03displays/figures/neoPixelMatrix_bb.png | Bin .../03displays/figures/neoPixel_bb.png | Bin .../03displays/figures/neo_bb.png | Bin .../03displays/figures/nokia5110.fzz | Bin .../03displays/figures/nokia5110_bb.png | Bin .../03displays/figures/old/USERLEDs.png | Bin .../03displays/figures/old/externalLED.png | Bin .../03displays/figures/old/p8p9headers.png | Bin .../03displays/figures/powerSwitch.fzz | Bin .../03displays/figures/powerSwitch_bb.png | Bin .../03displays/figures/ws2801.fzz | Bin .../03displays/figures/ws2801_bb.png | Bin .../04motors/code/bipolarStepperMotor.py | 0 .../04motors/code/dcMotor.js | 0 .../04motors/code/dcMotor.py | 0 .../04motors/code/h-bridgeMotor.js | 0 .../04motors/code/ring.js | 0 .../04motors/code/servoBird.js | 0 .../04motors/code/servoEncoder.py | 0 .../04motors/code/servoMotor.js | 0 .../04motors/code/servoMotor.py | 0 .../04motors/code/servoSense.js | 0 .../04motors/code/stop.js | 0 .../04motors/code/unipolarStepperMotor.js | 0 .../code/unipolarStepperMotor.js.diff | 0 .../04motors/code/unipolarStepperMotor.py | 0 .../code/unipolarStepperMotor.py.diff | 0 .../04motors/figures/H-bridge.ms13 | Bin .../04motors/figures/H-bridge.png | Bin .../04motors/figures/bipolarStepperMotor.fzz | Bin .../figures/bipolarStepperMotor_bb.png | Bin .../04motors/figures/dcMotor.fzz | Bin .../04motors/figures/dcMotor_bb.png | Bin .../04motors/figures/h-bridgeMotor.fzz | Bin .../04motors/figures/h-bridgeMotor5V.fzz | Bin .../04motors/figures/h-bridgeMotor5V_bb.png | Bin .../figures/h-bridgeMotorExternal.fzz | Bin .../figures/h-bridgeMotorExternal_bb.png | Bin .../04motors/figures/h-bridgeMotorOLD.fzz | Bin .../04motors/figures/h-bridgeMotor_bb.png | Bin .../04motors/figures/servoMotor.fzz | Bin .../04motors/figures/servoMotor5V.fzz | Bin .../04motors/figures/servoMotor5V_bb.png | Bin .../04motors/figures/servoMotor_bb.png | Bin .../04motors/figures/stepExternalSupply.fzz | Bin .../figures/stepExternalSupply_bb.png | Bin .../04motors/figures/unipolarStepperMotor.fzz | Bin .../figures/unipolarStepperMotor_bb.png | Bin .../beaglebone-cookbook}/04motors/motors.rst | 0 .../05tips/code/blinkLED.c | 0 .../05tips/code/blinkLED.py | 0 .../05tips/code/ipMasquerade.sh | 0 .../05tips/code/setDNS.sh | 0 .../05tips/figures/FTDIPins.png | Bin .../05tips/figures/FTDIcable.jpg | Bin .../05tips/figures/FTDIconnector.jpg | Bin .../05tips/figures/cape-headers-digital.png | Bin .../05tips/figures/gedit.png | Bin .../05tips/figures/hdmiConverter.jpg | Bin .../05tips/figures/internLED.png | Bin .../05tips/figures/latest-images.png | Bin .../05tips/figures/leafpad.png | Bin .../05tips/figures/nano.png | Bin .../05tips/figures/network.png | Bin .../05tips/figures/npm.png | Bin .../05tips/figures/vi.png | Bin .../05tips/figures/vnc1.png | Bin .../05tips/figures/vnc2.png | Bin .../05tips/figures/vnc3.png | Bin .../05tips/figures/wicd.png | Bin .../05tips/figures/wicdConfig.png | Bin .../05tips/figures/wicdConnected.png | Bin .../05tips/figures/wicdPassword.png | Bin .../05tips/figures/wicdPrefs.png | Bin .../05tips/figures/wicdSecure.png | Bin .../beaglebone-cookbook}/05tips/tips.rst | 0 .../06iot/code/GPIOserver.js | 0 .../06iot/code/analogInContinuous.py | 0 .../06iot/code/emailTest.py | 0 .../06iot/code/flask/app1.py | 0 .../06iot/code/flask/app2.py | 0 .../06iot/code/flask/app3.py | 0 .../06iot/code/flask/app4.py | 0 .../06iot/code/flask/app5.py | 0 .../06iot/code/flask/flask.service | 0 .../06iot/code/flask/helloWorld.py | 0 .../06iot/code/flask/install.sh | 0 .../06iot/code/flask/ngrok.yml | 0 .../06iot/code/flask/setup.sh | 0 .../06iot/code/flask/static/favicon.ico | Bin .../06iot/code/flask/static/style.css | 0 .../06iot/code/flask/templates/index1.html | 0 .../06iot/code/flask/templates/index2.html | 0 .../06iot/code/flask/templates/index3.html | 0 .../06iot/code/flask/templates/index4.html | 0 .../06iot/code/flask/templates/index5.html | 0 .../06iot/code/flotDemo.html | 0 .../06iot/code/flotDemo.js | 0 .../06iot/code/jQueryDemo.js | 0 .../06iot/code/jQueryInstall.sh | 0 .../06iot/code/launchPad.js | 0 .../06iot/code/launchPad/launchPad.ino | 0 .../06iot/code/nodemailer-install.sh | 0 .../06iot/code/nodemailer-test.js | 0 .../06iot/code/noderedExample.json | 0 .../06iot/code/processingDemo.js | 0 .../beaglebone-cookbook}/06iot/code/server.js | 0 .../beaglebone-cookbook}/06iot/code/test.html | 0 .../06iot/code/twilio-test.js | 0 .../06iot/code/twilioSetup.sh | 0 .../06iot/code/twilioTest.py | 0 .../06iot/code/twitterInstall.sh | 0 .../06iot/code/twitterKeys.sh | 0 .../06iot/code/twitterPushbutton.js | 0 .../06iot/code/twitterSearch.js | 0 .../06iot/code/twitterStream.js | 0 .../06iot/code/twitterTimeLine.js | 0 .../06iot/code/twitterUpload.js | 0 .../06iot/code/twitter_create_tweet.py | 0 .../06iot/code/twitter_delete_tweet.py | 0 .../06iot/code/twitter_recent_search.py | 0 .../06iot/code/twitter_user_tweets.py | 0 .../06iot/code/weather.py | 0 .../06iot/code/weatherSetup.sh | 0 .../beaglebone-cookbook}/06iot/code/xbee.js | 0 .../06iot/figures/GPIOWebPage.png | Bin .../06iot/figures/Sine1k.png | Bin .../06iot/figures/Tri10k.png | Bin .../06iot/figures/apacheIndex.png | Bin .../06iot/figures/apacheNoFiles.png | Bin .../06iot/figures/apacheTest.png | Bin .../06iot/figures/bone-usr3-led.png | Bin .../06iot/figures/cape-headers-serial.png | Bin .../06iot/figures/flaskServer.png | Bin .../06iot/figures/flaskapp1.png | Bin .../06iot/figures/flaskapp2.png | Bin .../06iot/figures/flaskapp3.png | Bin .../06iot/figures/flotDemo.png | Bin .../06iot/figures/jQueryDemo.html | 0 .../06iot/figures/jQueryFiddle.png | Bin .../06iot/figures/jsfiddleFrameworks.png | Bin .../06iot/figures/launchPad.fzz | Bin .../06iot/figures/launchPad_bb.png | Bin .../06iot/figures/nginxTest.png | Bin .../06iot/figures/node-disc-out-setup.png | Bin .../06iot/figures/node-disc-out.png | Bin .../06iot/figures/node-red.png | Bin .../06iot/figures/node-twitter-auth.png | Bin .../06iot/figures/node-twitter-auth2.png | Bin .../06iot/figures/node-twitter-auth3.png | Bin .../06iot/figures/node-twitter-beagle.png | Bin .../06iot/figures/node-twitter-debug.png | Bin .../06iot/figures/node-twitter.png | Bin .../06iot/figures/nodeServer.png | Bin .../06iot/figures/nodeTest.png | Bin .../06iot/figures/processingDemo.html | 0 .../06iot/figures/xbee.fzz | Bin .../06iot/figures/xbee_bb.png | Bin .../beaglebone-cookbook}/06iot/iot.rst | 0 .../07kernel/code/Makefile | 0 .../07kernel/code/Makefile.display | 0 .../07kernel/code/hello.c | 0 .../07kernel/code/hello.patch | 0 .../07kernel/code/helloWorld.c | 0 .../07kernel/figures/KernelConfig3.16.png | Bin .../figures/cape-headers-digitalGPIO7.png | Bin .../beaglebone-cookbook}/07kernel/kernel.rst | 0 .../08realtime/code/pushLED.c | 0 .../08realtime/code/pushLED.js | 0 .../08realtime/code/pushLED.py | 0 .../08realtime/code/pushLEDmmap.c | 0 .../08realtime/code/pushLEDmmap.h | 0 .../08realtime/code/rt/cyclictest.png | Bin .../08realtime/code/rt/hist.gen | 0 .../08realtime/code/rt/hist.plt | 0 .../08realtime/code/rt/install.sh | 0 .../08realtime/code/rt/setup.sh | 0 .../08realtime/figures/kernel_update.png | Bin .../08realtime/figures/pushLED.fzz | Bin .../08realtime/figures/pushLED_bb.png | Bin .../08realtime/figures/pushLEDmmap.fzz | Bin .../08realtime/figures/pushLEDmmap_bb.png | Bin .../08realtime/figures/pushLEDpru.fzz | Bin .../08realtime/figures/pushLEDpru_bb.png | Bin .../08realtime/old/pruSpeak.py | 0 .../08realtime/old/thumb.patch | 0 .../08realtime/old/xenomaiConfig.png | Bin .../08realtime/realtime.rst | 0 .../beaglebone-cookbook}/09capes/capes.rst | 0 .../09capes/code/quickBot_motor_test.js | 0 .../09capes/figures/BBB_GPS_Cape.fzz | Bin ..._pcb__cc4cbffa099dd2076377e89426324f3b.svg | 0 .../09capes/figures/Boris128.jpg | Bin .../09capes/figures/EagleLicense.png | Bin .../09capes/figures/Fritzing_Inspector.png | Bin .../09capes/figures/Fritzing_layers.png | Bin .../figures/Google ChromeScreenSnapz160.png | Bin .../figures/Google ChromeScreenSnapz161.png | Bin .../figures/Google ChromeScreenSnapz162.png | Bin .../figures/Google ChromeScreenSnapz163.png | Bin .../figures/Google ChromeScreenSnapz164.png | Bin .../figures/Google ChromeScreenSnapz166.png | Bin .../figures/Google ChromeScreenSnapz167.png | Bin .../figures/Google ChromeScreenSnapz168.png | Bin .../figures/Google ChromeScreenSnapz169.png | Bin .../figures/Google ChromeScreenSnapz170.png | Bin .../figures/Google ChromeScreenSnapz171.png | Bin .../figures/Google ChromeScreenSnapz172.png | Bin .../figures/Google ChromeScreenSnapz173.png | Bin .../figures/Google ChromeScreenSnapz174.png | Bin .../figures/Google ChromeScreenSnapz175.png | Bin .../beaglebone-cookbook}/09capes/figures/LCD | Bin .../09capes/figures/LCD.png | Bin .../09capes/figures/LCD7Desktop.png | Bin .../09capes/figures/LCD7back.png | Bin .../09capes/figures/MiniDisplay-A1.jpg | Bin .../09capes/figures/audioCape.png | Bin .../figures/beaglebone_cape_boardoutline.png | Bin .../figures/beaglebone_cape_boardoutline.svg | 0 .../09capes/figures/boneOutline.xml | 0 .../09capes/figures/breadboard.png | Bin .../figures/circuithub_part_matching.png | Bin .../09capes/figures/circuithub_quote.png | Bin .../figures/convert-fritzing-to-eagle.sh | 0 .../figures/convert-fritzing-to-kicad.sh | 0 .../09capes/figures/eagle3.png | Bin .../09capes/figures/eagle7.png | Bin .../09capes/figures/fritzing1.png | Bin .../09capes/figures/fritzing2.png | Bin .../09capes/figures/fritzing3.png | Bin .../09capes/figures/fritzing4.png | Bin .../09capes/figures/miniDisplay_Boris.png | Bin .../09capes/figures/miniDisplay_Cape_pcb.png | Bin .../figures/miniDisplay_Cape_schem.png | Bin .../09capes/figures/quickBot-cache-cache.lib | 0 .../09capes/figures/quickBot-eagle.sch | Bin .../09capes/figures/quickBot-eaglexml.sch | 0 .../09capes/figures/quickBot-schematic.json | 0 .../09capes/figures/quickBot-upverter.PNG | Bin .../09capes/figures/quickBot.fzz | Bin .../09capes/figures/quickBot.upv | 0 .../09capes/figures/quickBot5IR.fzz | Bin .../09capes/figures/quickBot_bb.png | Bin .../09capes/figures/quickBot_eaglexml.png | Bin .../figures/quickBot_fritzing_export.png | Bin .../09capes/figures/quickBot_gerbers.zip | Bin .../quickBot_gerbers/quickBot_contour.gm1 | 0 .../quickBot_copperBottom.gbl | 0 .../quickBot_gerbers/quickBot_copperTop.gtl | 0 .../quickBot_gerbers/quickBot_drill.txt | 0 .../quickBot_etch_copper_bottom.pdf | Bin .../quickBot_etch_copper_bottom_mirror.pdf | Bin .../quickBot_etch_copper_top.pdf | Bin .../quickBot_etch_copper_top_mirror.pdf | Bin .../quickBot_etch_mask_bottom.pdf | Bin .../quickBot_etch_mask_bottom_mirror.pdf | Bin .../quickBot_etch_mask_top.pdf | Bin .../quickBot_etch_mask_top_mirror.pdf | Bin .../quickBot_etch_paste_mask_bottom.pdf | Bin ...quickBot_etch_paste_mask_bottom_mirror.pdf | Bin .../quickBot_etch_paste_mask_top.pdf | Bin .../quickBot_etch_paste_mask_top_mirror.pdf | Bin .../quickBot_etch_silk_bottom.pdf | Bin .../quickBot_etch_silk_bottom_mirror.pdf | Bin .../quickBot_etch_silk_top.pdf | Bin .../quickBot_etch_silk_top_mirror.pdf | Bin .../quickBot_gerbers/quickBot_maskBottom.gbs | 0 .../quickBot_gerbers/quickBot_maskTop.gts | 0 .../figures/quickBot_gerbers/quickBot_pnp.txt | 0 .../quickBot_gerbers/quickBot_silkBottom.gbo | 0 .../quickBot_gerbers/quickBot_silkTop.gto | 0 .../09capes/figures/quickBot_kicad.sch | 0 .../figures/quickBot_motor_kickback.JPG | Bin .../figures/quickBot_motor_test_cloud9.png | Bin .../figures/quickBot_motor_test_scope.JPG | Bin .../09capes/figures/quickBot_motors.jpg | Bin .../09capes/figures/quickBot_on_OSHPark.png | Bin .../figures/quickBot_oshpark_share.png | Bin .../09capes/figures/quickBot_pcb.JPG | Bin .../09capes/figures/quickBot_pcb.png | Bin .../09capes/figures/quickBot_play.fzz | Bin .../09capes/figures/quickBot_schem.png | Bin .../09capes/figures/quickBot_schemRaw.png | Bin .../09capes/figures/quickBot_schemZoom.png | Bin .../09capes/figures/roboCape.fzz | Bin .../09capes/figures/srm_cape_dimensions.png | Bin .../09capes/figures/stacking_headers.JPG | Bin .../09capes/figures/urls.txt | 0 .../beaglebone-cookbook}/10parts/parts.rst | 0 .../beaglebone-cookbook}/index.rst | 0 books/index.rst | 22 ++++ .../pru-cookbook}/01case/case.rst | 0 .../pru-cookbook}/01case/code/blink.sim | 0 .../pru-cookbook}/01case/code/circle.py | 0 .../pru-cookbook}/01case/code/e1.31-test.py | 0 .../01case/code/encoder_setup.sh | 0 .../pru-cookbook}/01case/code/fire.fseq | Bin .../01case/code/logic_install.sh | 0 .../pru-cookbook}/01case/code/main_pru1.c | 0 .../pru-cookbook}/01case/code/my-config.json | 0 .../pru-cookbook}/01case/code/opc.py | 0 .../pru-cookbook}/01case/code/pru1-servo.asm | 0 .../pru-cookbook}/01case/code/servo-test.c | 0 .../pru-cookbook}/01case/code/servos_setup.sh | 0 .../pru-cookbook}/01case/figures/LEDblink.png | Bin .../01case/figures/beaglelogic_capture.png | Bin .../pru-cookbook}/01case/figures/blue.png | Bin .../01case/figures/fpp_channel_inputs.png | Bin .../01case/figures/fpp_channel_outputs.png | Bin .../figures/fpp_channel_outputs_menu.png | Bin .../figures/fpp_channel_outputs_strings.png | Bin .../01case/figures/fpp_display_testing.png | Bin .../01case/figures/fpp_display_testing2.png | Bin .../figures/fpp_display_testing_menu.png | Bin .../figures/fpp_display_testing_menu2.png | Bin .../01case/figures/fpp_file_manager.png | Bin .../01case/figures/fpp_inputs_setup.png | Bin .../01case/figures/fpp_inputs_setup2.png | Bin .../01case/figures/fpp_mode_bridge.png | Bin .../01case/figures/fpp_playlist.png | Bin .../01case/figures/fpp_playlist_status.png | Bin .../01case/figures/fpp_program_control.png | Bin .../01case/figures/fpp_status.png | Bin .../01case/figures/ledmatrix.jpg | Bin .../01case/figures/pocketscroller.jpg | Bin .../01case/figures/xlights_layout.png | Bin .../01case/figures/xlights_layout_details.png | Bin .../01case/figures/xlights_seq_drag.png | Bin .../01case/figures/xlights_seq_new.png | Bin .../01case/figures/xlights_setup.png | Bin .../01case/figures/xlights_setup_done.png | Bin .../01case/figures/xlights_setup_e1_31.png | Bin .../figures/xlights_setup_e1_31.png.orig | Bin .../01case/figures/xlights_test.png | Bin .../01case/figures/xlights_twinkle.jpg | Bin .../pru-cookbook}/02start/code/Makefile | 0 .../pru-cookbook}/02start/code/ai.notes | 0 .../pru-cookbook}/02start/code/hello.pru0.c | 0 .../pru-cookbook}/02start/code/hello.pru1_1.c | 0 .../pru-cookbook}/02start/code/hello2.pru0.c | 0 .../pru-cookbook}/02start/code/hello2.pru1.c | 0 .../02start/code/hello2.pru1_0.c | 0 .../02start/code/hello2.pru1_1.c | 0 .../02start/code/hello2.pru2_0.c | 0 .../02start/code/hello2.pru2_1.c | 0 .../pru-cookbook}/02start/code/setup.sh | 0 .../pru-cookbook}/02start/code/setup2.sh | 0 .../figures/BB_AI_BeautyAngle_800px.jpg | Bin .../PocketBeagle-size-compare-small.jpg | Bin .../02start/figures/beagle-blue.png | Bin .../pru-cookbook}/02start/figures/c9.png | Bin .../02start/figures/c9ShowHome.png | Bin .../pru-cookbook}/02start/figures/edumip.png | Bin .../pru-cookbook}/02start/figures/etcher.png | Bin .../02start/figures/latest-images.png | Bin .../figures/product_detail_black_sm.jpg | Bin .../pru-cookbook}/02start/start.rst | 0 .../pru-cookbook}/03details/code/Makefile | 0 .../03details/code/encoder_setup.sh | 0 .../03details/code/gpio_setup.sh | 0 .../03details/code/servos_setup.sh | 0 .../pru-cookbook}/03details/details.rst | 0 .../pru-cookbook}/04debug/code/Makefile | 0 .../pru-cookbook}/04debug/code/copyright.c | 0 .../04debug/code/resource_table_empty.h | 0 .../pru-cookbook}/04debug/code/uart1.pru0.c | 0 .../pru-cookbook}/04debug/code/uart1.pru1_0.c | 0 .../pru-cookbook}/04debug/code/uart2.pru0.c | 0 .../pru-cookbook}/04debug/code/uart2.pru1_0.c | 0 .../pru-cookbook}/04debug/code/uart_setup.sh | 0 .../pru-cookbook}/04debug/debug.rst | 0 .../04debug/figures/FTDIcable.jpg | Bin .../04debug/figures/FTDIconnector.jpg | Bin .../04debug/figures/FTDIhookup.fzz | Bin .../04debug/figures/FTDIhookup_bb.png | Bin .../pru-cookbook}/04debug/figures/LED.fzz | Bin .../pru-cookbook}/04debug/figures/LED_bb.png | Bin .../04debug/figures/uart1.pru0.png | Bin .../04debug/figures/uart2.pru0.png | Bin .../pru-cookbook}/05blocks/blocks.rst | 0 .../pru-cookbook}/05blocks/code/Makefile | 0 .../pru-cookbook}/05blocks/code/copyright.c | 0 .../pru-cookbook}/05blocks/code/input.pru0.c | 0 .../05blocks/code/input_setup.sh | 0 .../05blocks/code/module/.gitignore | 0 .../05blocks/code/module/Makefile | 0 .../05blocks/code/module/install.sh | 0 .../code/module/rpmsg_client_sample.c | 0 .../05blocks/code/module/rpmsg_pru.c | 0 .../05blocks/code/module/setup.sh | 0 .../pru-cookbook}/05blocks/code/neo-colors.py | 0 .../05blocks/code/neo-rainbow.py | 0 .../pru-cookbook}/05blocks/code/neo1.pru0.c | 0 .../pru-cookbook}/05blocks/code/neo1.pru1_1.c | 0 .../pru-cookbook}/05blocks/code/neo2.pru0.c | 0 .../pru-cookbook}/05blocks/code/neo2.pru1_1.c | 0 .../pru-cookbook}/05blocks/code/neo3.pru0.c | 0 .../pru-cookbook}/05blocks/code/neo3.pru1_1.c | 0 .../pru-cookbook}/05blocks/code/neo4.pru0.c | 0 .../pru-cookbook}/05blocks/code/neo4.pru1_1.c | 0 .../pru-cookbook}/05blocks/code/neo_setup.sh | 0 .../pru-cookbook}/05blocks/code/pwm-test.c | 0 .../pru-cookbook}/05blocks/code/pwm1.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm1.pru1_1.c | 0 .../pru-cookbook}/05blocks/code/pwm2.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm3.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm4.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm5.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm6.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm7-test.c | 0 .../pru-cookbook}/05blocks/code/pwm7.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm7.pru1.c | 0 .../pru-cookbook}/05blocks/code/pwm7_setup.sh | 0 .../pru-cookbook}/05blocks/code/pwm8.pru0.c | 0 .../pru-cookbook}/05blocks/code/pwm8.pru1.c | 0 .../pru-cookbook}/05blocks/code/pwm_setup.sh | 0 .../05blocks/code/resource_table_empty.h | 0 .../pru-cookbook}/05blocks/code/rgb1.pru0.c | 0 .../pru-cookbook}/05blocks/code/rgb2.pru0.c | 0 .../pru-cookbook}/05blocks/code/rgb3.pru0.c | 0 .../pru-cookbook}/05blocks/code/rgb4.pru0.c | 0 .../pru-cookbook}/05blocks/code/rgb_black.h | 0 .../pru-cookbook}/05blocks/code/rgb_pocket.h | 0 .../pru-cookbook}/05blocks/code/rgb_python.py | 0 .../05blocks/code/rgb_python_setup.sh | 0 .../pru-cookbook}/05blocks/code/rgb_setup.sh | 0 .../05blocks/code/rgb_white.pru0.c | 0 .../pru-cookbook}/05blocks/code/shared.pru0.c | 0 .../05blocks/code/shared_setup.sh | 0 .../pru-cookbook}/05blocks/code/sine.map | 0 .../pru-cookbook}/05blocks/code/sine.pru0.c | 0 .../05blocks/code/write_init_pins.sh | 0 .../05blocks/figures/blockDiagram.png | Bin .../05blocks/figures/blocks_plots.asv | 0 .../05blocks/figures/blocks_plots.m | 0 .../pru-cookbook}/05blocks/figures/filter.fzz | Bin .../05blocks/figures/filter_bb.png | Bin .../05blocks/figures/matrix_j1.jpg | Bin .../pru-cookbook}/05blocks/figures/neo.fzz | Bin .../pru-cookbook}/05blocks/figures/neo_bb.png | Bin .../05blocks/figures/neo_data_seq.png | Bin .../05blocks/figures/neo_scope.png | Bin .../05blocks/figures/neo_sequence.png | Bin .../pru-cookbook}/05blocks/figures/pwm1.png | Bin .../pru-cookbook}/05blocks/figures/pwm2.png | Bin .../pru-cookbook}/05blocks/figures/pwm3.png | Bin .../pru-cookbook}/05blocks/figures/pwm4.png | Bin .../05blocks/figures/pwm5_no_loop.png | Bin .../05blocks/figures/pwm5_zoomed.png | Bin .../05blocks/figures/pwm6_synced.png | Bin .../figures/pwm7_two_prus_running.png | Bin .../figures/pwm7_two_prus_stopped.png | Bin .../05blocks/figures/pwm8_prus_sycned.png | Bin .../05blocks/figures/rgb_fpp.png | Bin .../05blocks/figures/rgb_pru.jpg | Bin .../05blocks/figures/rgb_python.jpg | Bin .../05blocks/figures/rgb_waveforms.png | Bin .../05blocks/figures/ring_around.mp4 | Bin .../05blocks/figures/sawhighercutoff.png | Bin .../05blocks/figures/sawlowercutoff.png | Bin .../05blocks/figures/sawscope.png | Bin .../05blocks/figures/sawtoothsampled.png | Bin .../05blocks/figures/sawtoothsmooth.png | Bin .../05blocks/figures/sawunfiltered.png | Bin .../pru-cookbook}/05blocks/figures/sine.png | Bin .../05blocks/figures/triangle.png | Bin .../pru-cookbook}/06io/code/Makefile | 0 .../pru-cookbook}/06io/code/gpio.pru0.c | 0 .../pru-cookbook}/06io/code/setup.sh | 0 .../pru-cookbook}/06io/figures/gpio0delay.png | Bin .../pru-cookbook}/06io/figures/jitter.png | Bin .../06io/figures/pruIntegration.png | Bin .../pru-cookbook}/06io/io.html | 0 .../pru-cookbook}/06io/io.rst | 0 .../pru-cookbook}/07more/code/Makefile | 0 .../pru-cookbook}/07more/code/copyright.c | 0 .../pru-cookbook}/07more/code/cycle.pru0.c | 0 .../pru-cookbook}/07more/code/cycle.pru0.lst | 0 .../07more/code/delay-test.pru0.c | 0 .../07more/code/delay-test2.pru0.c | 0 .../pru-cookbook}/07more/code/delay.pru0.asm | 0 .../pru-cookbook}/07more/code/delay2.pru0.asm | 0 .../pru-cookbook}/07more/code/logic.c | 0 .../pru-cookbook}/07more/code/logic_setup.sh | 0 .../07more/code/resource_table_pru0.h | 0 .../pru-cookbook}/07more/code/setup.sh | 0 .../pru-cookbook}/07more/code/xin.pru1.c | 0 .../07more/code/xout-cycle.pru0.c | 0 .../pru-cookbook}/07more/code/xout.pru0.c | 0 .../pru-cookbook}/07more/code/xout_run.sh | 0 .../07more/figures/my_delay_cycles.png | Bin .../pru-cookbook}/07more/more.rst | 0 .../pru-cookbook}/08ai/ai.rst | 0 .../pru-cookbook}/08ai/code/Makefile | 0 .../pru-cookbook}/08ai/code/pwm1.pru2_1.c | 0 .../pru-cookbook}/common/Makefile | 0 .../pru-cookbook}/common/README.md | 0 .../pru-cookbook}/common/config-pin.sh | 0 .../pru-cookbook}/common/init_pins_empty.h | 0 .../pru-cookbook}/common/prugpio.h | 0 .../pru-cookbook}/common/resource_table_0.h | 0 .../pru-cookbook}/common/resource_table_1.h | 0 .../common/resource_table_empty.h | 0 .../pru-cookbook}/common/write_init_pins.sh | 0 .../pru-cookbook}/index.rst | 0 .../pru-cookbook}/projects.rst | 0 index-tex.rst | 14 +-- index.rst | 13 +-- .../contribution}/contribute.rst | 0 .../contribution}/git-usage.rst | 0 .../contribution}/index.rst | 0 .../support}/getting-started.rst | 0 {support => intro/support}/images/88x31.png | Bin .../support}/images/bad-to-the-bone.jpg | Bin .../support}/images/beagle_logo_326x60.png | Bin .../support}/images/beaglebone-cookbook.jpg | Bin {support => intro/support}/images/bone101.png | Bin .../support}/images/btn_step1.gif | Bin .../support}/images/btn_step2.gif | Bin .../support}/images/btn_step3.gif | Bin .../support}/images/download-etcher.png | Bin .../support}/images/download-latestimage.png | Bin .../support}/images/embedded-linux-primer.jpg | Bin .../support}/images/exploring-beaglebone.jpg | Bin .../support}/images/icon_facebook.png | Bin .../support}/images/icon_linkedin.png | Bin .../support}/images/icon_twitter.png | Bin .../support}/images/install-etcher.png | Bin .../support}/images/write-latestimage.png | Bin .../support}/images/youTube-icon.png | Bin .../overview.rst => intro/support/index.rst | 35 ++++-- projects/index.rst | 10 ++ {simppru => projects/simppru}/basics.rst | 0 {simppru => projects/simppru}/build.rst | 0 .../simppru}/examples/button_click_rpmsg.rst | 0 .../simppru}/examples/delay.rst | 0 .../simppru}/examples/digital_read.rst | 0 .../simppru}/examples/digital_write.rst | 0 .../examples/hcsr04_example_rpmsg.rst | 0 .../simppru}/examples/hcsr04_sensor.rst | 0 .../images/hcsr04_beagle_bone_black.png | Bin .../examples/images/hcsr04_pocket_beagle.png | Bin .../examples/images/led_beagle_bone_black.png | Bin .../images/led_button_beagle_bone_black.png | Bin .../images/led_button_pocket_beagle.png | Bin .../examples/images/led_pocket_beagle.png | Bin .../simppru}/examples/images/simpPRU.png | Bin .../simppru}/examples/index.rst | 0 .../simppru}/examples/led_blink.rst | 0 .../simppru}/examples/led_blink_button.rst | 0 .../simppru}/examples/led_blink_counter.rst | 0 .../simppru}/examples/led_blink_for.rst | 0 .../simppru}/examples/led_blink_while.rst | 0 .../simppru}/examples/read_counter.rst | 0 .../simppru}/examples/rpmsg_example.rst | 0 .../examples/rpmsg_pru_calculator.rst | 0 .../simppru}/images/main_screen.png | Bin .../simppru}/images/receive_counter.png | Bin .../simppru}/images/receive_counter_2.png | Bin .../simppru}/images/receive_screen.png | Bin .../simppru}/images/receive_screen_2.png | Bin .../simppru}/images/select_pru_id_screen.png | Bin .../simppru}/images/send_screen.png | Bin .../simppru}/images/simpPRU.png | Bin .../simppru}/images/stop_screen.png | Bin {simppru => projects/simppru}/index.rst | 0 {simppru => projects/simppru}/install.rst | 0 {simppru => projects/simppru}/io.rst | 0 {simppru => projects/simppru}/language.rst | 0 .../simppru}/usage-simppru-console.rst | 0 .../simppru}/usage-simppru.rst | 0 support/index.rst | 13 --- 1103 files changed, 247 insertions(+), 137 deletions(-) delete mode 100644 beagleconnect/ch02.rst create mode 100644 boards/beagleboard/index.rst rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch01.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch02.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch03.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch04.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch05.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch06.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch07.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch08.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch09.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch10.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/ch11.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/configuration_file.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/data_flows.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/datasheet.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/docker_environment.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/getting_started.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/TDA4VM-SK-SD-Boot.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/balena_etcher.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/board_connections_bbai_64.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/board_connections_tda4vm_evm.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/board_connections_tda4vm_sk.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/boot_wallpaper.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/csi_camera_connection.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edge_ai_demos.drawio (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edge_ai_demos_CPP_Demo_Data_Flow.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edge_ai_demos_Python_Demo_Data_Flow.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-image-classify.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-multi-input-multi-infer.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-object-detect.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-overview-image1.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-overview-image2.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-overview-image3.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-sdk-components.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-sdk-feature.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-sdk-overview.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-sdk-programming-env.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-sdk-roadmap.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai-single-input-multi-infer.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_human_pose.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_image_classification.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_imx390_camera_source.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_object_detection.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_ov5640_camera_source.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_rpi_camera_source.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_rtsp_source.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_semantic_segmentation.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_video_output.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/edgeai_video_source.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/favicon.ico (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/j721esk-ap.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/model_downloader.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/open-src-components.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/perf_plots.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/rpi_camera_connection.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/vs_code.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/images/wifi-oob-iw-command.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/index.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/inference_models.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/performance_visualizer.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/running_advance_demos.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/running_simple_demos.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/sdk_components.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/static/theme_overrides.css (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/test_report.rst (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/__init__.py (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/breadcrumbs.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/footer.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout_old.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/search.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/searchbox.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/badge_only.css (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/theme.css (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/FontAwesome.otf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Bold.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Regular.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Bold.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Regular.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Bold.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Regular.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.eot (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.ttf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.woff (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/img/ti_logo.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/modernizr.min.js (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/theme.js (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/theme.conf (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/edge_ai_apps/themes/sphinx_rtd_theme_ti/versions.html (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/45-back-heatsink.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/45-back.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/45-front.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/Desktop-Configuration.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/LED-Pattern.png (100%) create mode 100644 boards/beaglebone/ai-64/images/OSHW_mark_US002120.png create mode 100644 boards/beaglebone/ai-64/images/OSHW_mark_US002120.svg rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/Power-LED.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/USB-Connection.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/USB-Tethering.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/back-heatsink.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/back.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/by-sa.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/BBAI-64-to-monitor-cable.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/XFCE-Desktop.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/barrel-jack.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/barrel-jack.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/bbai64-in-box.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/desktop-configuration.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/display-adaptors.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/display-adaptors.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/ethernet-cable.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/ethernet-cable.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/led-pattern.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/leds.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/miniDP-connector.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/miniDP-connector.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/monitor-cable.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/mouse-keyboard.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/mouse-keyboard.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/ports.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/power-led.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/usb-a-connection.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/usb-c-connection.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/usb-tethering.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch03/xfce-desktop.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch04/components.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch04/components.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch05/board-block-diagram.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch05/soc-block-diagram.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch06/TPS6594-Q1.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch06/pmic-a.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch06/pmic-b.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch06/power.svg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/berg-stip-insertion.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/can-cape.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/cape-dimension.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/cape-placement.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/eeprom-write-protect.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/eeprom.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/expansion-connector.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/proto.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/single-expansion-connector.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch08/stealing-expansion-connector.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch09/board-dimensions.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch09/bottom-silkscreen.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch09/top-silkscreen.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/45-back-heatsink.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/45-back.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/45-front-hires.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/45-front.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/back-heatsink.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/back.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/feature.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/ch10/front.jpg (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/feature.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/images/front.png (100%) rename {beaglebone-ai-64 => boards/beaglebone/ai-64}/index.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/System-Reference-Manual.asciidoc (100%) rename {beaglebone-black => boards/beaglebone/black}/ch01.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch02.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch03.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch04.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch05.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch06.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch07.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch08.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch09.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch10.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/ch11.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/images/BBvsBBB.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/images/COMP_A5A.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/images/CONN_REVA5A.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/images/Features.jpg (100%) create mode 100644 boards/beaglebone/black/images/OSHW_mark_US000236.png rename {beaglebone-black => boards/beaglebone/black}/images/REV_A5A.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/index.rst (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image1.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image10.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image11.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image12.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image13.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image14.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image16.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image17.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image18.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image2.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image24.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image25.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image26.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image27.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image28.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image29.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image30.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image31.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image37.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image38.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image39.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image40.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image41.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image42.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image43.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image44.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image45.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image46.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image47.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image48.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image49.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image50.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image51.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image52.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image53.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image54.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image55.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image56.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image57.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image58.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image59.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image60.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image64.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image65.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image66.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image67.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image68.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image69.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image7.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image71.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image73.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image75.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image77.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image78.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image79.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image8.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image80.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image81.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image82.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image83.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image84.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image85.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image86.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image87.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image88.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image89.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image9.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image90.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image91.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image92.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image93.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image94.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image95.jpg (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image96.png (100%) rename {beaglebone-black => boards/beaglebone/black}/media/image97.png (100%) rename {beaglebone-blue => boards/beaglebone/blue}/accessories.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/code.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/faq.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/flashing-firmware.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/index.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/ip-settings.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/media/BeagleBone_Blue_pinouts.png (100%) create mode 100644 boards/beaglebone/blue/media/OSHW_mark_US000064.png rename {beaglebone-blue => boards/beaglebone/blue}/media/pinout.jpg (100%) rename {beaglebone-blue => boards/beaglebone/blue}/pinouts.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/rev-c-priorities.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/ssh.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/tests.rst (100%) rename {beaglebone-blue => boards/beaglebone/blue}/wifi.rst (100%) create mode 100644 boards/beaglebone/index.rst rename beagleconnect/ch01.rst => boards/beagleconnect/freedom/index.rst (66%) rename {beagleconnect => boards/beagleconnect/freedom}/media/bcf-c5-boards.jpg (100%) rename beagleconnect/ch03.rst => boards/beagleconnect/freedom/usage.rst (100%) rename beagleconnect/ch04.rst => boards/beagleconnect/freedom/zephyr.rst (100%) create mode 100644 boards/beagleconnect/index.rst rename {beagleconnect => boards/beagleconnect}/media/ProvStep1.jpg (100%) rename {beagleconnect => boards/beagleconnect}/media/ProvStep2.jpg (100%) rename {beagleconnect => boards/beagleconnect}/media/ProvStep3.jpg (100%) rename {beagleconnect => boards/beagleconnect}/media/SoftwareProp.jpg (100%) rename {beagleconnect => boards/beagleconnect}/media/bcf_block_diagram.svg (100%) rename {beagleconnect => boards/beagleconnect}/media/image1.jpg (100%) rename beagleconnect/ch05.rst => boards/beagleconnect/overview.rst (100%) rename beagleconnect/index.rst => boards/beagleconnect/story.rst (98%) rename {support => boards/capes}/cape-interface-spec.rst (100%) rename {support => boards/capes}/tables/BeagleBone cape interface spec.ods (100%) rename {support => boards/capes}/tables/BeagleBone-Cape-header-definition.csv (100%) rename {support => boards/capes}/tables/Bone-LEDs-Overlays.csv (100%) rename {support => boards/capes}/tables/Bone-LEDs.csv (100%) create mode 100644 boards/index.rst rename {pocketbeagle => boards/pocketbeagle}/System-Reference-Manual.wiki (100%) rename {pocketbeagle => boards/pocketbeagle}/ch01.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch02.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch03.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch04.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch05.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch06.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch07.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch08.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch09.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch10.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/ch11.rst (100%) rename {pocketbeagle => boards/pocketbeagle}/images/10fig-PB-SDcardinsert1.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/10fig-PB-SDcardinsert2.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/11fig-PB-microUSBattach1.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/12fig-PB-USBtoPC1.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/13fig-PB-PowerLED1.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/14fig-PB-UserLEDs1.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/15fig-PB-starthtmpage.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/16fig-PB-enablenetwork.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/17fig-PB-cloud9.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/18fig-PB-cloud9exs.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/19fig-PB-cloud9blink.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/1fig-PB-homepage.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/20fig-PB-powerbutton.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/21fig-PB-walkaround.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/22fig-PB-blockdiagram.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/24fig-PB-Headerphoto.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/25fig-PB-SDcard.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/26fig-PB-USB.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/27fig-PB-JTAGpads.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/28fig-PB-serialdebug.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/40fig-PB-PRU-block.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/41fig-PB-Headerback.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/46fig-PB-Mikro.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/5fig-PB-GetStarted.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/6fig-PB-DownloadSW.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/7fig-PB-Etcherdownload.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/8fig-PB-Etcherselectimage.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/9fig-PB-Etcherfinish.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/Bonescript-ex.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/Header-P1-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/Header-P2-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/Header-both-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/JTAG-pads-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/OSD335x-color-block.jpg (100%) create mode 100644 boards/pocketbeagle/images/OSHW_mark_US000083.png rename {pocketbeagle => boards/pocketbeagle}/images/PB-USB-photo.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-block-diag2.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-block-diag3.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-block-diagram.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-card-back-1.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-card-back.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-card-front-1.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-card-front.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-header-photo.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-microSDphoto-small.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-microSDphoto.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-powerLED-photo.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-powerbutton.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-tethered.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-tutorials.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-userLED-photo.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-walkaround-2.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-walkaround-2.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-walkaround-3.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB-walkaround.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PB1-fullPC-3.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle-size-compare-small.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_Back_BW.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_Expansion_Headers.ods (100%) create mode 100644 boards/pocketbeagle/images/PocketBeagle_Front_BW-small.jpg rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_Front_BW.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_microUSB_bb.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_microUSB_bb.svg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_microUSB_bb1.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_pinout.pdf (100%) rename {pocketbeagle => boards/pocketbeagle}/images/PocketBeagle_pinout.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/Power-button-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SRM1_cloud9blinkPB.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SRM2_cloud9blinkPB.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SRM3_cloud9blinkPB.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SRM4_cloud9blinkPB.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-A-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-B-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-C-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-D-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-E-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/SiP-F-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/USB-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/User-LEDs-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/fig-PB-Headerphoto.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/green_check.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/mikrobus-socket-pinout.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/pocketbeagle_package_small_size.jpg (100%) rename {pocketbeagle => boards/pocketbeagle}/images/usdconnector-sch.png (100%) rename {pocketbeagle => boards/pocketbeagle}/images/warning_tri.png (100%) rename {pocketbeagle => boards/pocketbeagle}/index.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/basics.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/01GettingStarted.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/02GettingStarted.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/03GettingStarted.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/04GettingStarted.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/05GettingStarted.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/05GettingStartedVScode.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/BeagleBoard_described.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/BeagleBoard_xM.JPG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/Beagle_Board_big.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/BeaglexM_details.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/X15_Beta_Front.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/beaglebone-white.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/bone-black-details.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/bone-black.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/bone-white.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/cloud9.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/cloud9Debugger.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/cloud9withBash.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/deb1.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/deb2.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/deb3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/forkMe.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/pluggingIn.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/template.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/template_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/01basics/figures/vscBash.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/GPS.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/analogIn.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/analogIn.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/audio.asoundrc (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/audio.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/bone_eqep2b.dts (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/encoder.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/.gitignore (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/Makefile (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/ReadMe.md (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/aggregatorSetup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/bulk_blink.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/get.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/get.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/get.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/getset.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/getset.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/getsetEvent.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/getsetEvent.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggle1.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggle1.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggle1.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggle2.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggle2.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggleLED.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/gpiod/toggleLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/hc-sr04-ultraSonic.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/i2c-scan.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/i2c-test.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/i2cTemp.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/i2cTemp.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/i2ctmp101.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/pushbutton.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/pushbutton.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/pushbutton2.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/pushbuttonPullup.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/pushbutton_digitalRead.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/rotaryEncoder.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/rotaryEncoder.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/sensorTag.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/stop.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/testHC-SR04.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/ultrasonicRange.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/ultrasonicRange.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/w1.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/code/w1.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/Adafruit Xbee Adapter v1.1.fzpz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/Adafruit Xbee Adapter v1.1.txt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/GPS.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/GPS_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/P8P9.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/P8P9_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/analogIn.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/analogIn_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/audioDongle.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/audioDongle.txt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/black_hardware_details.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/cape-headers-analog.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/cape-headers-i2c.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/cape-headers-serial.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/cape-headers.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/flexResistor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/flexResistor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/hc-sr04-ultraSonic.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/hc-sr04-ultraSonic_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/hc-sr04.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/i2cTemp.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/i2cTemp.js.old (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/i2cTemp_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/onewire.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/onewire_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/onewire_setup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pot.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pot_schem.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pushbutton.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pushbuttonPullup.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pushbuttonPullup_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/pushbutton_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/rotaryEncoder.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/rotaryEncoder.js.orig (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/rotaryEncoder_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/sensorTag.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/testSerial-2014-04-11.zip (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/ultrasonicRange.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/ultrasonicRange_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/figures/vsc-bash-tab.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/02sensors/sensors.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/externLED.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/externLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/fadeLED.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/fadeLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/internLED.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/internLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/matrixLEDi2c.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/matrixLEDi2c.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/neoPixel.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/nokia5110.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/nokia5110Test.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/pwmTest.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/code/speak.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/displays.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/LEDstring.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/LEDstring_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/P8P9.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/P8P9_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/cape-headers-pwm.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/externLED.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/externLED_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/i2cMatrix.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/i2cMatrixLevelTrans.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/i2cMatrixLevelTrans_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/i2cMatrixOLD.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/i2cMatrix_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/internLED.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/matrix16x24.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/matrix16x24_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neo.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neoPixel.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neoPixelMatrix.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neoPixelMatrix_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neoPixel_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/neo_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/nokia5110.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/nokia5110_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/old/USERLEDs.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/old/externalLED.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/old/p8p9headers.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/powerSwitch.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/powerSwitch_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/ws2801.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/03displays/figures/ws2801_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/bipolarStepperMotor.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/dcMotor.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/dcMotor.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/h-bridgeMotor.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/ring.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/servoBird.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/servoEncoder.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/servoMotor.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/servoMotor.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/servoSense.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/stop.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/unipolarStepperMotor.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/unipolarStepperMotor.js.diff (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/unipolarStepperMotor.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/code/unipolarStepperMotor.py.diff (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/H-bridge.ms13 (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/H-bridge.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/bipolarStepperMotor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/bipolarStepperMotor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/dcMotor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/dcMotor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotor5V.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotor5V_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotorExternal.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotorExternal_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotorOLD.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/h-bridgeMotor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/servoMotor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/servoMotor5V.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/servoMotor5V_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/servoMotor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/stepExternalSupply.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/stepExternalSupply_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/unipolarStepperMotor.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/figures/unipolarStepperMotor_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/04motors/motors.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/code/blinkLED.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/code/blinkLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/code/ipMasquerade.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/code/setDNS.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/FTDIPins.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/FTDIcable.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/FTDIconnector.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/cape-headers-digital.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/gedit.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/hdmiConverter.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/internLED.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/latest-images.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/leafpad.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/nano.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/network.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/npm.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/vi.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/vnc1.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/vnc2.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/vnc3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicd.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicdConfig.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicdConnected.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicdPassword.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicdPrefs.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/figures/wicdSecure.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/05tips/tips.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/GPIOserver.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/analogInContinuous.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/emailTest.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/app1.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/app2.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/app3.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/app4.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/app5.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/flask.service (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/helloWorld.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/install.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/ngrok.yml (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/setup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/static/favicon.ico (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/static/style.css (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/templates/index1.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/templates/index2.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/templates/index3.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/templates/index4.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flask/templates/index5.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flotDemo.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/flotDemo.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/jQueryDemo.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/jQueryInstall.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/launchPad.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/launchPad/launchPad.ino (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/nodemailer-install.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/nodemailer-test.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/noderedExample.json (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/processingDemo.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/server.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/test.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twilio-test.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twilioSetup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twilioTest.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterInstall.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterKeys.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterPushbutton.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterSearch.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterStream.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterTimeLine.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitterUpload.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitter_create_tweet.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitter_delete_tweet.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitter_recent_search.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/twitter_user_tweets.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/weather.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/weatherSetup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/code/xbee.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/GPIOWebPage.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/Sine1k.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/Tri10k.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/apacheIndex.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/apacheNoFiles.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/apacheTest.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/bone-usr3-led.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/cape-headers-serial.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/flaskServer.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/flaskapp1.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/flaskapp2.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/flaskapp3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/flotDemo.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/jQueryDemo.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/jQueryFiddle.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/jsfiddleFrameworks.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/launchPad.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/launchPad_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/nginxTest.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-disc-out-setup.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-disc-out.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-red.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter-auth.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter-auth2.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter-auth3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter-beagle.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter-debug.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/node-twitter.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/nodeServer.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/nodeTest.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/processingDemo.html (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/xbee.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/figures/xbee_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/06iot/iot.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/code/Makefile (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/code/Makefile.display (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/code/hello.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/code/hello.patch (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/code/helloWorld.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/figures/KernelConfig3.16.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/figures/cape-headers-digitalGPIO7.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/07kernel/kernel.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/pushLED.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/pushLED.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/pushLED.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/pushLEDmmap.c (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/pushLEDmmap.h (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/rt/cyclictest.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/rt/hist.gen (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/rt/hist.plt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/rt/install.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/code/rt/setup.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/kernel_update.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLED.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLED_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLEDmmap.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLEDmmap_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLEDpru.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/figures/pushLEDpru_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/old/pruSpeak.py (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/old/thumb.patch (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/old/xenomaiConfig.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/08realtime/realtime.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/capes.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/code/quickBot_motor_test.js (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/BBB_GPS_Cape.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/BeagleBone_Black_Cape__7fab878f3c590bbf730a21__pcb__cc4cbffa099dd2076377e89426324f3b.svg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Boris128.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/EagleLicense.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Fritzing_Inspector.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Fritzing_layers.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz160.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz161.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz162.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz163.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz164.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz166.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz167.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz168.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz169.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz170.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz171.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz172.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz173.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz174.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/Google ChromeScreenSnapz175.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/LCD (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/LCD.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/LCD7Desktop.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/LCD7back.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/MiniDisplay-A1.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/audioCape.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/beaglebone_cape_boardoutline.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/beaglebone_cape_boardoutline.svg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/boneOutline.xml (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/breadboard.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/circuithub_part_matching.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/circuithub_quote.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/convert-fritzing-to-eagle.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/convert-fritzing-to-kicad.sh (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/eagle3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/eagle7.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/fritzing1.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/fritzing2.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/fritzing3.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/fritzing4.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/miniDisplay_Boris.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/miniDisplay_Cape_pcb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/miniDisplay_Cape_schem.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot-cache-cache.lib (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot-eagle.sch (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot-eaglexml.sch (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot-schematic.json (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot-upverter.PNG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot.upv (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot5IR.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_bb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_eaglexml.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_fritzing_export.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers.zip (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_contour.gm1 (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_copperBottom.gbl (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_copperTop.gtl (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_drill.txt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top_mirror.pdf (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_maskBottom.gbs (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_maskTop.gts (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_pnp.txt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_silkBottom.gbo (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_gerbers/quickBot_silkTop.gto (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_kicad.sch (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_motor_kickback.JPG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_motor_test_cloud9.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_motor_test_scope.JPG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_motors.jpg (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_on_OSHPark.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_oshpark_share.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_pcb.JPG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_pcb.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_play.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_schem.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_schemRaw.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/quickBot_schemZoom.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/roboCape.fzz (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/srm_cape_dimensions.png (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/stacking_headers.JPG (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/09capes/figures/urls.txt (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/10parts/parts.rst (100%) rename {beaglebone-cookbook => books/beaglebone-cookbook}/index.rst (100%) create mode 100644 books/index.rst rename {pru-cookbook => books/pru-cookbook}/01case/case.rst (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/blink.sim (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/circle.py (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/e1.31-test.py (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/encoder_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/fire.fseq (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/logic_install.sh (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/main_pru1.c (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/my-config.json (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/opc.py (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/pru1-servo.asm (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/servo-test.c (100%) rename {pru-cookbook => books/pru-cookbook}/01case/code/servos_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/LEDblink.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/beaglelogic_capture.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/blue.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_channel_inputs.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_channel_outputs.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_channel_outputs_menu.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_channel_outputs_strings.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_display_testing.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_display_testing2.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_display_testing_menu.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_display_testing_menu2.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_file_manager.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_inputs_setup.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_inputs_setup2.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_mode_bridge.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_playlist.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_playlist_status.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_program_control.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/fpp_status.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/ledmatrix.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/pocketscroller.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_layout.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_layout_details.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_seq_drag.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_seq_new.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_setup.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_setup_done.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_setup_e1_31.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_setup_e1_31.png.orig (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_test.png (100%) rename {pru-cookbook => books/pru-cookbook}/01case/figures/xlights_twinkle.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/ai.notes (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru1.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru1_0.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru2_0.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/hello2.pru2_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/02start/code/setup2.sh (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/BB_AI_BeautyAngle_800px.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/PocketBeagle-size-compare-small.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/beagle-blue.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/c9.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/c9ShowHome.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/edumip.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/etcher.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/latest-images.png (100%) rename {pru-cookbook => books/pru-cookbook}/02start/figures/product_detail_black_sm.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/02start/start.rst (100%) rename {pru-cookbook => books/pru-cookbook}/03details/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/03details/code/encoder_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/03details/code/gpio_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/03details/code/servos_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/03details/details.rst (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/copyright.c (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/resource_table_empty.h (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/uart1.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/uart1.pru1_0.c (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/uart2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/uart2.pru1_0.c (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/code/uart_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/debug.rst (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/FTDIcable.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/FTDIconnector.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/FTDIhookup.fzz (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/FTDIhookup_bb.png (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/LED.fzz (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/LED_bb.png (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/uart1.pru0.png (100%) rename {pru-cookbook => books/pru-cookbook}/04debug/figures/uart2.pru0.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/blocks.rst (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/copyright.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/input.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/input_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/.gitignore (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/install.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/rpmsg_client_sample.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/rpmsg_pru.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/module/setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo-colors.py (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo-rainbow.py (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo1.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo1.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo2.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo3.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo3.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo4.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo4.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/neo_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm-test.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm1.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm1.pru1_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm3.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm4.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm5.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm6.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm7-test.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm7.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm7.pru1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm7_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm8.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm8.pru1.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/pwm_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/resource_table_empty.h (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb1.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb3.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb4.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_black.h (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_pocket.h (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_python.py (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_python_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/rgb_white.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/shared.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/shared_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/sine.map (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/sine.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/code/write_init_pins.sh (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/blockDiagram.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/blocks_plots.asv (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/blocks_plots.m (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/filter.fzz (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/filter_bb.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/matrix_j1.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/neo.fzz (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/neo_bb.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/neo_data_seq.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/neo_scope.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/neo_sequence.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm1.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm2.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm3.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm4.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm5_no_loop.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm5_zoomed.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm6_synced.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm7_two_prus_running.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm7_two_prus_stopped.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/pwm8_prus_sycned.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/rgb_fpp.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/rgb_pru.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/rgb_python.jpg (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/rgb_waveforms.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/ring_around.mp4 (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawhighercutoff.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawlowercutoff.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawscope.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawtoothsampled.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawtoothsmooth.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sawunfiltered.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/sine.png (100%) rename {pru-cookbook => books/pru-cookbook}/05blocks/figures/triangle.png (100%) rename {pru-cookbook => books/pru-cookbook}/06io/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/06io/code/gpio.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/06io/code/setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/06io/figures/gpio0delay.png (100%) rename {pru-cookbook => books/pru-cookbook}/06io/figures/jitter.png (100%) rename {pru-cookbook => books/pru-cookbook}/06io/figures/pruIntegration.png (100%) rename {pru-cookbook => books/pru-cookbook}/06io/io.html (100%) rename {pru-cookbook => books/pru-cookbook}/06io/io.rst (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/copyright.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/cycle.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/cycle.pru0.lst (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/delay-test.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/delay-test2.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/delay.pru0.asm (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/delay2.pru0.asm (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/logic.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/logic_setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/resource_table_pru0.h (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/setup.sh (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/xin.pru1.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/xout-cycle.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/xout.pru0.c (100%) rename {pru-cookbook => books/pru-cookbook}/07more/code/xout_run.sh (100%) rename {pru-cookbook => books/pru-cookbook}/07more/figures/my_delay_cycles.png (100%) rename {pru-cookbook => books/pru-cookbook}/07more/more.rst (100%) rename {pru-cookbook => books/pru-cookbook}/08ai/ai.rst (100%) rename {pru-cookbook => books/pru-cookbook}/08ai/code/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/08ai/code/pwm1.pru2_1.c (100%) rename {pru-cookbook => books/pru-cookbook}/common/Makefile (100%) rename {pru-cookbook => books/pru-cookbook}/common/README.md (100%) rename {pru-cookbook => books/pru-cookbook}/common/config-pin.sh (100%) rename {pru-cookbook => books/pru-cookbook}/common/init_pins_empty.h (100%) rename {pru-cookbook => books/pru-cookbook}/common/prugpio.h (100%) rename {pru-cookbook => books/pru-cookbook}/common/resource_table_0.h (100%) rename {pru-cookbook => books/pru-cookbook}/common/resource_table_1.h (100%) rename {pru-cookbook => books/pru-cookbook}/common/resource_table_empty.h (100%) rename {pru-cookbook => books/pru-cookbook}/common/write_init_pins.sh (100%) rename {pru-cookbook => books/pru-cookbook}/index.rst (100%) rename {pru-cookbook => books/pru-cookbook}/projects.rst (100%) rename {contribution => intro/contribution}/contribute.rst (100%) rename {contribution => intro/contribution}/git-usage.rst (100%) rename {contribution => intro/contribution}/index.rst (100%) rename {support => intro/support}/getting-started.rst (100%) rename {support => intro/support}/images/88x31.png (100%) rename {support => intro/support}/images/bad-to-the-bone.jpg (100%) rename {support => intro/support}/images/beagle_logo_326x60.png (100%) rename {support => intro/support}/images/beaglebone-cookbook.jpg (100%) rename {support => intro/support}/images/bone101.png (100%) rename {support => intro/support}/images/btn_step1.gif (100%) rename {support => intro/support}/images/btn_step2.gif (100%) rename {support => intro/support}/images/btn_step3.gif (100%) rename {support => intro/support}/images/download-etcher.png (100%) rename {support => intro/support}/images/download-latestimage.png (100%) rename {support => intro/support}/images/embedded-linux-primer.jpg (100%) rename {support => intro/support}/images/exploring-beaglebone.jpg (100%) rename {support => intro/support}/images/icon_facebook.png (100%) rename {support => intro/support}/images/icon_linkedin.png (100%) rename {support => intro/support}/images/icon_twitter.png (100%) rename {support => intro/support}/images/install-etcher.png (100%) rename {support => intro/support}/images/write-latestimage.png (100%) rename {support => intro/support}/images/youTube-icon.png (100%) rename support/overview.rst => intro/support/index.rst (83%) create mode 100644 projects/index.rst rename {simppru => projects/simppru}/basics.rst (100%) rename {simppru => projects/simppru}/build.rst (100%) rename {simppru => projects/simppru}/examples/button_click_rpmsg.rst (100%) rename {simppru => projects/simppru}/examples/delay.rst (100%) rename {simppru => projects/simppru}/examples/digital_read.rst (100%) rename {simppru => projects/simppru}/examples/digital_write.rst (100%) rename {simppru => projects/simppru}/examples/hcsr04_example_rpmsg.rst (100%) rename {simppru => projects/simppru}/examples/hcsr04_sensor.rst (100%) rename {simppru => projects/simppru}/examples/images/hcsr04_beagle_bone_black.png (100%) rename {simppru => projects/simppru}/examples/images/hcsr04_pocket_beagle.png (100%) rename {simppru => projects/simppru}/examples/images/led_beagle_bone_black.png (100%) rename {simppru => projects/simppru}/examples/images/led_button_beagle_bone_black.png (100%) rename {simppru => projects/simppru}/examples/images/led_button_pocket_beagle.png (100%) rename {simppru => projects/simppru}/examples/images/led_pocket_beagle.png (100%) rename {simppru => projects/simppru}/examples/images/simpPRU.png (100%) rename {simppru => projects/simppru}/examples/index.rst (100%) rename {simppru => projects/simppru}/examples/led_blink.rst (100%) rename {simppru => projects/simppru}/examples/led_blink_button.rst (100%) rename {simppru => projects/simppru}/examples/led_blink_counter.rst (100%) rename {simppru => projects/simppru}/examples/led_blink_for.rst (100%) rename {simppru => projects/simppru}/examples/led_blink_while.rst (100%) rename {simppru => projects/simppru}/examples/read_counter.rst (100%) rename {simppru => projects/simppru}/examples/rpmsg_example.rst (100%) rename {simppru => projects/simppru}/examples/rpmsg_pru_calculator.rst (100%) rename {simppru => projects/simppru}/images/main_screen.png (100%) rename {simppru => projects/simppru}/images/receive_counter.png (100%) rename {simppru => projects/simppru}/images/receive_counter_2.png (100%) rename {simppru => projects/simppru}/images/receive_screen.png (100%) rename {simppru => projects/simppru}/images/receive_screen_2.png (100%) rename {simppru => projects/simppru}/images/select_pru_id_screen.png (100%) rename {simppru => projects/simppru}/images/send_screen.png (100%) rename {simppru => projects/simppru}/images/simpPRU.png (100%) rename {simppru => projects/simppru}/images/stop_screen.png (100%) rename {simppru => projects/simppru}/index.rst (100%) rename {simppru => projects/simppru}/install.rst (100%) rename {simppru => projects/simppru}/io.rst (100%) rename {simppru => projects/simppru}/language.rst (100%) rename {simppru => projects/simppru}/usage-simppru-console.rst (100%) rename {simppru => projects/simppru}/usage-simppru.rst (100%) delete mode 100644 support/index.rst diff --git a/beagleconnect/ch02.rst b/beagleconnect/ch02.rst deleted file mode 100644 index 0c6aa20a..00000000 --- a/beagleconnect/ch02.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. _beagleconnect-Change-History: - -************** -Change History -************** diff --git a/boards/beagleboard/index.rst b/boards/beagleboard/index.rst new file mode 100644 index 00000000..f17a613c --- /dev/null +++ b/boards/beagleboard/index.rst @@ -0,0 +1,12 @@ +BeagleBoard +################### + +BeagleBoard boards are low-cost, ARM-based development boards suitable for rapid prototyping and +open-hardware to enable professionals to develop production systems. + +The latest PDF-formatted System Reference Manual for each BeagleBoard board is linked below. + +* `BeagleBoard <https://git.beagleboard.org/beagleboard/beagleboard/-/blob/master/BeagleBoard_revC5_SRM.pdf>`_ +* `BeagleBoard-xM <https://git.beagleboard.org/beagleboard/beagleboard-xm/-/blob/master/BeagleBoard-xM_SRM.pdf>`_ +* `BeagleBoard-X15 <https://git.beagleboard.org/beagleboard/beagleboard-x15/-/blob/master/BeagleBoard-X15_SRM.pdf>`_ + diff --git a/beaglebone-ai-64/ch01.rst b/boards/beaglebone/ai-64/ch01.rst similarity index 100% rename from beaglebone-ai-64/ch01.rst rename to boards/beaglebone/ai-64/ch01.rst diff --git a/beaglebone-ai-64/ch02.rst b/boards/beaglebone/ai-64/ch02.rst similarity index 100% rename from beaglebone-ai-64/ch02.rst rename to boards/beaglebone/ai-64/ch02.rst diff --git a/beaglebone-ai-64/ch03.rst b/boards/beaglebone/ai-64/ch03.rst similarity index 100% rename from beaglebone-ai-64/ch03.rst rename to boards/beaglebone/ai-64/ch03.rst diff --git a/beaglebone-ai-64/ch04.rst b/boards/beaglebone/ai-64/ch04.rst similarity index 100% rename from beaglebone-ai-64/ch04.rst rename to boards/beaglebone/ai-64/ch04.rst diff --git a/beaglebone-ai-64/ch05.rst b/boards/beaglebone/ai-64/ch05.rst similarity index 100% rename from beaglebone-ai-64/ch05.rst rename to boards/beaglebone/ai-64/ch05.rst diff --git a/beaglebone-ai-64/ch06.rst b/boards/beaglebone/ai-64/ch06.rst similarity index 100% rename from beaglebone-ai-64/ch06.rst rename to boards/beaglebone/ai-64/ch06.rst diff --git a/beaglebone-ai-64/ch07.rst b/boards/beaglebone/ai-64/ch07.rst similarity index 100% rename from beaglebone-ai-64/ch07.rst rename to boards/beaglebone/ai-64/ch07.rst diff --git a/beaglebone-ai-64/ch08.rst b/boards/beaglebone/ai-64/ch08.rst similarity index 100% rename from beaglebone-ai-64/ch08.rst rename to boards/beaglebone/ai-64/ch08.rst diff --git a/beaglebone-ai-64/ch09.rst b/boards/beaglebone/ai-64/ch09.rst similarity index 100% rename from beaglebone-ai-64/ch09.rst rename to boards/beaglebone/ai-64/ch09.rst diff --git a/beaglebone-ai-64/ch10.rst b/boards/beaglebone/ai-64/ch10.rst similarity index 100% rename from beaglebone-ai-64/ch10.rst rename to boards/beaglebone/ai-64/ch10.rst diff --git a/beaglebone-ai-64/ch11.rst b/boards/beaglebone/ai-64/ch11.rst similarity index 100% rename from beaglebone-ai-64/ch11.rst rename to boards/beaglebone/ai-64/ch11.rst diff --git a/beaglebone-ai-64/edge_ai_apps/configuration_file.rst b/boards/beaglebone/ai-64/edge_ai_apps/configuration_file.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/configuration_file.rst rename to boards/beaglebone/ai-64/edge_ai_apps/configuration_file.rst diff --git a/beaglebone-ai-64/edge_ai_apps/data_flows.rst b/boards/beaglebone/ai-64/edge_ai_apps/data_flows.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/data_flows.rst rename to boards/beaglebone/ai-64/edge_ai_apps/data_flows.rst diff --git a/beaglebone-ai-64/edge_ai_apps/datasheet.rst b/boards/beaglebone/ai-64/edge_ai_apps/datasheet.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/datasheet.rst rename to boards/beaglebone/ai-64/edge_ai_apps/datasheet.rst diff --git a/beaglebone-ai-64/edge_ai_apps/docker_environment.rst b/boards/beaglebone/ai-64/edge_ai_apps/docker_environment.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/docker_environment.rst rename to boards/beaglebone/ai-64/edge_ai_apps/docker_environment.rst diff --git a/beaglebone-ai-64/edge_ai_apps/getting_started.rst b/boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/getting_started.rst rename to boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst diff --git a/beaglebone-ai-64/edge_ai_apps/images/TDA4VM-SK-SD-Boot.png b/boards/beaglebone/ai-64/edge_ai_apps/images/TDA4VM-SK-SD-Boot.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/TDA4VM-SK-SD-Boot.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/TDA4VM-SK-SD-Boot.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/balena_etcher.png b/boards/beaglebone/ai-64/edge_ai_apps/images/balena_etcher.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/balena_etcher.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/balena_etcher.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/board_connections_bbai_64.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_bbai_64.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/board_connections_bbai_64.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_bbai_64.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/board_connections_tda4vm_evm.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_tda4vm_evm.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/board_connections_tda4vm_evm.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_tda4vm_evm.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/board_connections_tda4vm_sk.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_tda4vm_sk.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/board_connections_tda4vm_sk.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/board_connections_tda4vm_sk.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/boot_wallpaper.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/boot_wallpaper.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/boot_wallpaper.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/boot_wallpaper.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/csi_camera_connection.png b/boards/beaglebone/ai-64/edge_ai_apps/images/csi_camera_connection.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/csi_camera_connection.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/csi_camera_connection.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos.drawio b/boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos.drawio similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos.drawio rename to boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos.drawio diff --git a/beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos_CPP_Demo_Data_Flow.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos_CPP_Demo_Data_Flow.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos_CPP_Demo_Data_Flow.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos_CPP_Demo_Data_Flow.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos_Python_Demo_Data_Flow.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos_Python_Demo_Data_Flow.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edge_ai_demos_Python_Demo_Data_Flow.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edge_ai_demos_Python_Demo_Data_Flow.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-image-classify.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-image-classify.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-image-classify.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-image-classify.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-multi-input-multi-infer.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-multi-input-multi-infer.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-multi-input-multi-infer.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-multi-input-multi-infer.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-object-detect.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-object-detect.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-object-detect.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-object-detect.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image1.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image1.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image1.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image1.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image2.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image2.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image2.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image2.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image3.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image3.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-overview-image3.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-overview-image3.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-components.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-components.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-components.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-components.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-feature.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-feature.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-feature.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-feature.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-overview.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-overview.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-overview.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-overview.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-programming-env.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-programming-env.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-programming-env.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-programming-env.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-roadmap.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-roadmap.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-sdk-roadmap.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-sdk-roadmap.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai-single-input-multi-infer.jpg b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-single-input-multi-infer.jpg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai-single-input-multi-infer.jpg rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai-single-input-multi-infer.jpg diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_human_pose.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_human_pose.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_human_pose.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_human_pose.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_image_classification.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_image_classification.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_image_classification.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_image_classification.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_imx390_camera_source.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_imx390_camera_source.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_imx390_camera_source.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_imx390_camera_source.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_object_detection.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_object_detection.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_object_detection.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_object_detection.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_ov5640_camera_source.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_ov5640_camera_source.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_ov5640_camera_source.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_ov5640_camera_source.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_rpi_camera_source.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_rpi_camera_source.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_rpi_camera_source.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_rpi_camera_source.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_rtsp_source.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_rtsp_source.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_rtsp_source.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_rtsp_source.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_semantic_segmentation.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_semantic_segmentation.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_semantic_segmentation.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_semantic_segmentation.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_video_output.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_video_output.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_video_output.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_video_output.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/edgeai_video_source.png b/boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_video_source.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/edgeai_video_source.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/edgeai_video_source.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/favicon.ico b/boards/beaglebone/ai-64/edge_ai_apps/images/favicon.ico similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/favicon.ico rename to boards/beaglebone/ai-64/edge_ai_apps/images/favicon.ico diff --git a/beaglebone-ai-64/edge_ai_apps/images/j721esk-ap.png b/boards/beaglebone/ai-64/edge_ai_apps/images/j721esk-ap.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/j721esk-ap.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/j721esk-ap.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/model_downloader.png b/boards/beaglebone/ai-64/edge_ai_apps/images/model_downloader.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/model_downloader.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/model_downloader.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/open-src-components.png b/boards/beaglebone/ai-64/edge_ai_apps/images/open-src-components.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/open-src-components.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/open-src-components.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/perf_plots.png b/boards/beaglebone/ai-64/edge_ai_apps/images/perf_plots.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/perf_plots.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/perf_plots.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/rpi_camera_connection.png b/boards/beaglebone/ai-64/edge_ai_apps/images/rpi_camera_connection.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/rpi_camera_connection.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/rpi_camera_connection.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/vs_code.png b/boards/beaglebone/ai-64/edge_ai_apps/images/vs_code.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/vs_code.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/vs_code.png diff --git a/beaglebone-ai-64/edge_ai_apps/images/wifi-oob-iw-command.png b/boards/beaglebone/ai-64/edge_ai_apps/images/wifi-oob-iw-command.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/images/wifi-oob-iw-command.png rename to boards/beaglebone/ai-64/edge_ai_apps/images/wifi-oob-iw-command.png diff --git a/beaglebone-ai-64/edge_ai_apps/index.rst b/boards/beaglebone/ai-64/edge_ai_apps/index.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/index.rst rename to boards/beaglebone/ai-64/edge_ai_apps/index.rst diff --git a/beaglebone-ai-64/edge_ai_apps/inference_models.rst b/boards/beaglebone/ai-64/edge_ai_apps/inference_models.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/inference_models.rst rename to boards/beaglebone/ai-64/edge_ai_apps/inference_models.rst diff --git a/beaglebone-ai-64/edge_ai_apps/performance_visualizer.rst b/boards/beaglebone/ai-64/edge_ai_apps/performance_visualizer.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/performance_visualizer.rst rename to boards/beaglebone/ai-64/edge_ai_apps/performance_visualizer.rst diff --git a/beaglebone-ai-64/edge_ai_apps/running_advance_demos.rst b/boards/beaglebone/ai-64/edge_ai_apps/running_advance_demos.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/running_advance_demos.rst rename to boards/beaglebone/ai-64/edge_ai_apps/running_advance_demos.rst diff --git a/beaglebone-ai-64/edge_ai_apps/running_simple_demos.rst b/boards/beaglebone/ai-64/edge_ai_apps/running_simple_demos.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/running_simple_demos.rst rename to boards/beaglebone/ai-64/edge_ai_apps/running_simple_demos.rst diff --git a/beaglebone-ai-64/edge_ai_apps/sdk_components.rst b/boards/beaglebone/ai-64/edge_ai_apps/sdk_components.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/sdk_components.rst rename to boards/beaglebone/ai-64/edge_ai_apps/sdk_components.rst diff --git a/beaglebone-ai-64/edge_ai_apps/static/theme_overrides.css b/boards/beaglebone/ai-64/edge_ai_apps/static/theme_overrides.css similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/static/theme_overrides.css rename to boards/beaglebone/ai-64/edge_ai_apps/static/theme_overrides.css diff --git a/beaglebone-ai-64/edge_ai_apps/test_report.rst b/boards/beaglebone/ai-64/edge_ai_apps/test_report.rst similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/test_report.rst rename to boards/beaglebone/ai-64/edge_ai_apps/test_report.rst diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/__init__.py b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/__init__.py similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/__init__.py rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/__init__.py diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/breadcrumbs.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/breadcrumbs.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/breadcrumbs.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/breadcrumbs.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/footer.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/footer.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/footer.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/footer.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout_old.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout_old.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout_old.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/layout_old.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/search.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/search.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/search.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/search.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/searchbox.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/searchbox.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/searchbox.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/searchbox.html diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/badge_only.css b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/badge_only.css similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/badge_only.css rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/badge_only.css diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/theme.css b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/theme.css similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/theme.css rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/css/theme.css diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/FontAwesome.otf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/FontAwesome.otf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/FontAwesome.otf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/FontAwesome.otf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Bold.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Bold.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Bold.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Bold.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Regular.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Regular.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Regular.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Inconsolata-Regular.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Bold.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Bold.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Bold.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Bold.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Regular.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Regular.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Regular.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/Lato-Regular.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Bold.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Bold.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Bold.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Bold.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Regular.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Regular.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Regular.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/RobotoSlab-Regular.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.eot b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.eot similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.eot rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.eot diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.svg b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.svg similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.svg rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.svg diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.ttf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.ttf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.ttf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.ttf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.woff b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.woff similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.woff rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/fonts/fontawesome-webfont.woff diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/img/ti_logo.png b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/img/ti_logo.png similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/img/ti_logo.png rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/img/ti_logo.png diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/modernizr.min.js b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/modernizr.min.js similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/modernizr.min.js rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/modernizr.min.js diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/theme.js b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/theme.js similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/theme.js rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/static/js/theme.js diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/theme.conf b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/theme.conf similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/theme.conf rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/theme.conf diff --git a/beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/versions.html b/boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/versions.html similarity index 100% rename from beaglebone-ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/versions.html rename to boards/beaglebone/ai-64/edge_ai_apps/themes/sphinx_rtd_theme_ti/versions.html diff --git a/beaglebone-ai-64/images/45-back-heatsink.png b/boards/beaglebone/ai-64/images/45-back-heatsink.png similarity index 100% rename from beaglebone-ai-64/images/45-back-heatsink.png rename to boards/beaglebone/ai-64/images/45-back-heatsink.png diff --git a/beaglebone-ai-64/images/45-back.png b/boards/beaglebone/ai-64/images/45-back.png similarity index 100% rename from beaglebone-ai-64/images/45-back.png rename to boards/beaglebone/ai-64/images/45-back.png diff --git a/beaglebone-ai-64/images/45-front.png b/boards/beaglebone/ai-64/images/45-front.png similarity index 100% rename from beaglebone-ai-64/images/45-front.png rename to boards/beaglebone/ai-64/images/45-front.png diff --git a/beaglebone-ai-64/images/Desktop-Configuration.png b/boards/beaglebone/ai-64/images/Desktop-Configuration.png similarity index 100% rename from beaglebone-ai-64/images/Desktop-Configuration.png rename to boards/beaglebone/ai-64/images/Desktop-Configuration.png diff --git a/beaglebone-ai-64/images/LED-Pattern.png b/boards/beaglebone/ai-64/images/LED-Pattern.png similarity index 100% rename from beaglebone-ai-64/images/LED-Pattern.png rename to boards/beaglebone/ai-64/images/LED-Pattern.png diff --git a/boards/beaglebone/ai-64/images/OSHW_mark_US002120.png b/boards/beaglebone/ai-64/images/OSHW_mark_US002120.png new file mode 100644 index 0000000000000000000000000000000000000000..13945a6b86c02cf86bd66555ab47c4713d70e480 GIT binary patch literal 10781 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 OaMj2H-gwzP>Hh#IYm0XP literal 0 HcmV?d00001 diff --git a/boards/beaglebone/ai-64/images/OSHW_mark_US002120.svg b/boards/beaglebone/ai-64/images/OSHW_mark_US002120.svg new file mode 100644 index 00000000..69170c58 --- /dev/null +++ b/boards/beaglebone/ai-64/images/OSHW_mark_US002120.svg @@ -0,0 +1 @@ +<?xml version='1.0' encoding='UTF-8' standalone='no'?><svg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://www.w3.org/2000/svg' height='200' width='200' version='1.1' xmlns:cc='http://creativecommons.org/ns#' xmlns:dc='http://purl.org/dc/elements/1.1/'><g transform='translate(-614.09 -142.78)'><g fill='#333'><path style='color:#000000;text-indent:0;block-progression:tb;text-decoration-line:none;text-transform:none' d='m713.09 278.5v3 62.062 3h3 141.56 3v-3-65.062h-5.8712l-0.12879 62.062h-135.56v-56.062h115.34v-6h-118.34z' transform='translate(-72.786 -85.361)'/><path d='m747.71 313.26c-0.00002-5.1406-0.53127-8.8125-1.5938-11.016-1.0469-2.2031-2.7735-3.3047-5.1797-3.3047-2.3906 0.00003-4.1172 1.1016-5.1797 3.3047-1.0469 2.2032-1.5703 5.875-1.5703 11.016-0.00001 5.125 0.52343 8.7891 1.5703 10.992 1.0625 2.2031 2.789 3.3047 5.1797 3.3047 2.4062 0 4.1328-1.0938 5.1797-3.2812 1.0625-2.2031 1.5937-5.875 1.5938-11.016m4.9453 0c-0.00003 6.0938-0.96878 10.641-2.9062 13.641-1.9219 3-4.8594 4.5-8.8125 4.5s-6.8906-1.4922-8.8125-4.4766-2.8828-7.539-2.8828-13.664c0-6.1094 0.96093-10.664 2.8828-13.664 1.9375-3 4.875-4.5 8.8125-4.5 3.9531 0.00004 6.8906 1.5 8.8125 4.5 1.9375 3 2.9062 7.5547 2.9062 13.664' transform='translate(-72.786 -85.361)'/><path d='m779.1 296.93v4.8047c-1.4375-0.92184-2.8828-1.6172-4.3359-2.0859-1.4375-0.46871-2.8906-0.70309-4.3594-0.70312-2.2344 0.00003-4 0.52347-5.2969 1.5703-1.2969 1.0313-1.9453 2.4297-1.9453 4.1953-0.00001 1.5469 0.42187 2.7266 1.2656 3.5391 0.85936 0.81252 2.4531 1.4922 4.7812 2.0391l2.4844 0.5625c3.2812 0.76564 5.6718 1.9688 7.1719 3.6094 1.5 1.6406 2.25 3.875 2.25 6.7031-0.00003 3.3281-1.0313 5.8672-3.0938 7.6172s-5.0625 2.625-9 2.625c-1.6406 0-3.2891-0.17969-4.9453-0.53907-1.6562-0.34375-3.3203-0.86718-4.9922-1.5703v-5.0391c1.7969 1.1406 3.4922 1.9766 5.0859 2.5078 1.6094 0.53126 3.2266 0.79688 4.8516 0.79688 2.3906 0 4.25-0.53125 5.5781-1.5938 1.3281-1.0781 1.9922-2.5781 1.9922-4.5-0.00002-1.75-0.46096-3.0859-1.3828-4.0078-0.90627-0.92186-2.4922-1.6328-4.7578-2.1328l-2.5312-0.58594c-3.25-0.73435-5.6094-1.8437-7.0781-3.3281-1.4688-1.4844-2.2031-3.4765-2.2031-5.9766 0-3.125 1.0469-5.625 3.1406-7.5 2.1094-1.8906 4.9062-2.8359 8.3906-2.8359 1.3437 0.00004 2.7578 0.15629 4.2422 0.46875 1.4844 0.29691 3.0468 0.75003 4.6875 1.3594' transform='translate(-72.786 -85.361)'/><path d='m787.46 295.73h4.7578v14.344h12.961v-14.344h4.7578v34.992h-4.7578v-16.664h-12.961v16.664h-4.7578v-34.992' transform='translate(-72.786 -85.361)'/></g><path d='m813.13 295.73h4.6172l3.3516 28.406 3.9844-18.797h4.9453l4.0312 18.844 11.352-54.453h4.6172l-13.227 60.992h-4.4766l-4.7578-20.789-4.7344 20.789h-4.4766l-5.2266-34.992' transform='translate(-72.786 -85.361)' fill='#f44'/><text xml:space='preserve' fill='#333333' font-size='33.75px' y='300.14502' x='642.95532' font-family='DejaVu Sans Mono,Andale Mono,monospace'>US002120</text></g></svg> \ No newline at end of file diff --git a/beaglebone-ai-64/images/Power-LED.png b/boards/beaglebone/ai-64/images/Power-LED.png similarity index 100% rename from beaglebone-ai-64/images/Power-LED.png rename to boards/beaglebone/ai-64/images/Power-LED.png diff --git a/beaglebone-ai-64/images/USB-Connection.png b/boards/beaglebone/ai-64/images/USB-Connection.png similarity index 100% rename from beaglebone-ai-64/images/USB-Connection.png rename to boards/beaglebone/ai-64/images/USB-Connection.png diff --git a/beaglebone-ai-64/images/USB-Tethering.png b/boards/beaglebone/ai-64/images/USB-Tethering.png similarity index 100% rename from beaglebone-ai-64/images/USB-Tethering.png rename to boards/beaglebone/ai-64/images/USB-Tethering.png diff --git a/beaglebone-ai-64/images/back-heatsink.png b/boards/beaglebone/ai-64/images/back-heatsink.png similarity index 100% rename from beaglebone-ai-64/images/back-heatsink.png rename to boards/beaglebone/ai-64/images/back-heatsink.png diff --git a/beaglebone-ai-64/images/back.png b/boards/beaglebone/ai-64/images/back.png similarity index 100% rename from beaglebone-ai-64/images/back.png rename to boards/beaglebone/ai-64/images/back.png diff --git a/beaglebone-ai-64/images/by-sa.png b/boards/beaglebone/ai-64/images/by-sa.png similarity index 100% rename from beaglebone-ai-64/images/by-sa.png rename to boards/beaglebone/ai-64/images/by-sa.png diff --git a/beaglebone-ai-64/images/ch03/BBAI-64-to-monitor-cable.png b/boards/beaglebone/ai-64/images/ch03/BBAI-64-to-monitor-cable.png similarity index 100% rename from beaglebone-ai-64/images/ch03/BBAI-64-to-monitor-cable.png rename to boards/beaglebone/ai-64/images/ch03/BBAI-64-to-monitor-cable.png diff --git a/beaglebone-ai-64/images/ch03/XFCE-Desktop.png b/boards/beaglebone/ai-64/images/ch03/XFCE-Desktop.png similarity index 100% rename from beaglebone-ai-64/images/ch03/XFCE-Desktop.png rename to boards/beaglebone/ai-64/images/ch03/XFCE-Desktop.png diff --git a/beaglebone-ai-64/images/ch03/barrel-jack.jpg b/boards/beaglebone/ai-64/images/ch03/barrel-jack.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/barrel-jack.jpg rename to boards/beaglebone/ai-64/images/ch03/barrel-jack.jpg diff --git a/beaglebone-ai-64/images/ch03/barrel-jack.png b/boards/beaglebone/ai-64/images/ch03/barrel-jack.png similarity index 100% rename from beaglebone-ai-64/images/ch03/barrel-jack.png rename to boards/beaglebone/ai-64/images/ch03/barrel-jack.png diff --git a/beaglebone-ai-64/images/ch03/bbai64-in-box.jpg b/boards/beaglebone/ai-64/images/ch03/bbai64-in-box.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/bbai64-in-box.jpg rename to boards/beaglebone/ai-64/images/ch03/bbai64-in-box.jpg diff --git a/beaglebone-ai-64/images/ch03/desktop-configuration.jpg b/boards/beaglebone/ai-64/images/ch03/desktop-configuration.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/desktop-configuration.jpg rename to boards/beaglebone/ai-64/images/ch03/desktop-configuration.jpg diff --git a/beaglebone-ai-64/images/ch03/display-adaptors.jpg b/boards/beaglebone/ai-64/images/ch03/display-adaptors.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/display-adaptors.jpg rename to boards/beaglebone/ai-64/images/ch03/display-adaptors.jpg diff --git a/beaglebone-ai-64/images/ch03/display-adaptors.png b/boards/beaglebone/ai-64/images/ch03/display-adaptors.png similarity index 100% rename from beaglebone-ai-64/images/ch03/display-adaptors.png rename to boards/beaglebone/ai-64/images/ch03/display-adaptors.png diff --git a/beaglebone-ai-64/images/ch03/ethernet-cable.jpg b/boards/beaglebone/ai-64/images/ch03/ethernet-cable.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/ethernet-cable.jpg rename to boards/beaglebone/ai-64/images/ch03/ethernet-cable.jpg diff --git a/beaglebone-ai-64/images/ch03/ethernet-cable.png b/boards/beaglebone/ai-64/images/ch03/ethernet-cable.png similarity index 100% rename from beaglebone-ai-64/images/ch03/ethernet-cable.png rename to boards/beaglebone/ai-64/images/ch03/ethernet-cable.png diff --git a/beaglebone-ai-64/images/ch03/led-pattern.jpg b/boards/beaglebone/ai-64/images/ch03/led-pattern.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/led-pattern.jpg rename to boards/beaglebone/ai-64/images/ch03/led-pattern.jpg diff --git a/beaglebone-ai-64/images/ch03/leds.jpg b/boards/beaglebone/ai-64/images/ch03/leds.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/leds.jpg rename to boards/beaglebone/ai-64/images/ch03/leds.jpg diff --git a/beaglebone-ai-64/images/ch03/miniDP-connector.jpg b/boards/beaglebone/ai-64/images/ch03/miniDP-connector.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/miniDP-connector.jpg rename to boards/beaglebone/ai-64/images/ch03/miniDP-connector.jpg diff --git a/beaglebone-ai-64/images/ch03/miniDP-connector.png b/boards/beaglebone/ai-64/images/ch03/miniDP-connector.png similarity index 100% rename from beaglebone-ai-64/images/ch03/miniDP-connector.png rename to boards/beaglebone/ai-64/images/ch03/miniDP-connector.png diff --git a/beaglebone-ai-64/images/ch03/monitor-cable.jpg b/boards/beaglebone/ai-64/images/ch03/monitor-cable.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/monitor-cable.jpg rename to boards/beaglebone/ai-64/images/ch03/monitor-cable.jpg diff --git a/beaglebone-ai-64/images/ch03/mouse-keyboard.jpg b/boards/beaglebone/ai-64/images/ch03/mouse-keyboard.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/mouse-keyboard.jpg rename to boards/beaglebone/ai-64/images/ch03/mouse-keyboard.jpg diff --git a/beaglebone-ai-64/images/ch03/mouse-keyboard.png b/boards/beaglebone/ai-64/images/ch03/mouse-keyboard.png similarity index 100% rename from beaglebone-ai-64/images/ch03/mouse-keyboard.png rename to boards/beaglebone/ai-64/images/ch03/mouse-keyboard.png diff --git a/beaglebone-ai-64/images/ch03/ports.jpg b/boards/beaglebone/ai-64/images/ch03/ports.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/ports.jpg rename to boards/beaglebone/ai-64/images/ch03/ports.jpg diff --git a/beaglebone-ai-64/images/ch03/power-led.jpg b/boards/beaglebone/ai-64/images/ch03/power-led.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/power-led.jpg rename to boards/beaglebone/ai-64/images/ch03/power-led.jpg diff --git a/beaglebone-ai-64/images/ch03/usb-a-connection.jpg b/boards/beaglebone/ai-64/images/ch03/usb-a-connection.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/usb-a-connection.jpg rename to boards/beaglebone/ai-64/images/ch03/usb-a-connection.jpg diff --git a/beaglebone-ai-64/images/ch03/usb-c-connection.jpg b/boards/beaglebone/ai-64/images/ch03/usb-c-connection.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/usb-c-connection.jpg rename to boards/beaglebone/ai-64/images/ch03/usb-c-connection.jpg diff --git a/beaglebone-ai-64/images/ch03/usb-tethering.jpg b/boards/beaglebone/ai-64/images/ch03/usb-tethering.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/usb-tethering.jpg rename to boards/beaglebone/ai-64/images/ch03/usb-tethering.jpg diff --git a/beaglebone-ai-64/images/ch03/xfce-desktop.jpg b/boards/beaglebone/ai-64/images/ch03/xfce-desktop.jpg similarity index 100% rename from beaglebone-ai-64/images/ch03/xfce-desktop.jpg rename to boards/beaglebone/ai-64/images/ch03/xfce-desktop.jpg diff --git a/beaglebone-ai-64/images/ch04/components.png b/boards/beaglebone/ai-64/images/ch04/components.png similarity index 100% rename from beaglebone-ai-64/images/ch04/components.png rename to boards/beaglebone/ai-64/images/ch04/components.png diff --git a/beaglebone-ai-64/images/ch04/components.svg b/boards/beaglebone/ai-64/images/ch04/components.svg similarity index 100% rename from beaglebone-ai-64/images/ch04/components.svg rename to boards/beaglebone/ai-64/images/ch04/components.svg diff --git a/beaglebone-ai-64/images/ch05/board-block-diagram.svg b/boards/beaglebone/ai-64/images/ch05/board-block-diagram.svg similarity index 100% rename from beaglebone-ai-64/images/ch05/board-block-diagram.svg rename to boards/beaglebone/ai-64/images/ch05/board-block-diagram.svg diff --git a/beaglebone-ai-64/images/ch05/soc-block-diagram.svg b/boards/beaglebone/ai-64/images/ch05/soc-block-diagram.svg similarity index 100% rename from beaglebone-ai-64/images/ch05/soc-block-diagram.svg rename to boards/beaglebone/ai-64/images/ch05/soc-block-diagram.svg diff --git a/beaglebone-ai-64/images/ch06/TPS6594-Q1.svg b/boards/beaglebone/ai-64/images/ch06/TPS6594-Q1.svg similarity index 100% rename from beaglebone-ai-64/images/ch06/TPS6594-Q1.svg rename to boards/beaglebone/ai-64/images/ch06/TPS6594-Q1.svg diff --git a/beaglebone-ai-64/images/ch06/pmic-a.svg b/boards/beaglebone/ai-64/images/ch06/pmic-a.svg similarity index 100% rename from beaglebone-ai-64/images/ch06/pmic-a.svg rename to boards/beaglebone/ai-64/images/ch06/pmic-a.svg diff --git a/beaglebone-ai-64/images/ch06/pmic-b.svg b/boards/beaglebone/ai-64/images/ch06/pmic-b.svg similarity index 100% rename from beaglebone-ai-64/images/ch06/pmic-b.svg rename to boards/beaglebone/ai-64/images/ch06/pmic-b.svg diff --git a/beaglebone-ai-64/images/ch06/power.svg b/boards/beaglebone/ai-64/images/ch06/power.svg similarity index 100% rename from beaglebone-ai-64/images/ch06/power.svg rename to boards/beaglebone/ai-64/images/ch06/power.svg diff --git a/beaglebone-ai-64/images/ch08/berg-stip-insertion.jpg b/boards/beaglebone/ai-64/images/ch08/berg-stip-insertion.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/berg-stip-insertion.jpg rename to boards/beaglebone/ai-64/images/ch08/berg-stip-insertion.jpg diff --git a/beaglebone-ai-64/images/ch08/can-cape.jpg b/boards/beaglebone/ai-64/images/ch08/can-cape.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/can-cape.jpg rename to boards/beaglebone/ai-64/images/ch08/can-cape.jpg diff --git a/beaglebone-ai-64/images/ch08/cape-dimension.jpg b/boards/beaglebone/ai-64/images/ch08/cape-dimension.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/cape-dimension.jpg rename to boards/beaglebone/ai-64/images/ch08/cape-dimension.jpg diff --git a/beaglebone-ai-64/images/ch08/cape-placement.jpg b/boards/beaglebone/ai-64/images/ch08/cape-placement.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/cape-placement.jpg rename to boards/beaglebone/ai-64/images/ch08/cape-placement.jpg diff --git a/beaglebone-ai-64/images/ch08/eeprom-write-protect.png b/boards/beaglebone/ai-64/images/ch08/eeprom-write-protect.png similarity index 100% rename from beaglebone-ai-64/images/ch08/eeprom-write-protect.png rename to boards/beaglebone/ai-64/images/ch08/eeprom-write-protect.png diff --git a/beaglebone-ai-64/images/ch08/eeprom.png b/boards/beaglebone/ai-64/images/ch08/eeprom.png similarity index 100% rename from beaglebone-ai-64/images/ch08/eeprom.png rename to boards/beaglebone/ai-64/images/ch08/eeprom.png diff --git a/beaglebone-ai-64/images/ch08/expansion-connector.jpg b/boards/beaglebone/ai-64/images/ch08/expansion-connector.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/expansion-connector.jpg rename to boards/beaglebone/ai-64/images/ch08/expansion-connector.jpg diff --git a/beaglebone-ai-64/images/ch08/proto.jpg b/boards/beaglebone/ai-64/images/ch08/proto.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/proto.jpg rename to boards/beaglebone/ai-64/images/ch08/proto.jpg diff --git a/beaglebone-ai-64/images/ch08/single-expansion-connector.jpg b/boards/beaglebone/ai-64/images/ch08/single-expansion-connector.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/single-expansion-connector.jpg rename to boards/beaglebone/ai-64/images/ch08/single-expansion-connector.jpg diff --git a/beaglebone-ai-64/images/ch08/stealing-expansion-connector.jpg b/boards/beaglebone/ai-64/images/ch08/stealing-expansion-connector.jpg similarity index 100% rename from beaglebone-ai-64/images/ch08/stealing-expansion-connector.jpg rename to boards/beaglebone/ai-64/images/ch08/stealing-expansion-connector.jpg diff --git a/beaglebone-ai-64/images/ch09/board-dimensions.jpg b/boards/beaglebone/ai-64/images/ch09/board-dimensions.jpg similarity index 100% rename from beaglebone-ai-64/images/ch09/board-dimensions.jpg rename to boards/beaglebone/ai-64/images/ch09/board-dimensions.jpg diff --git a/beaglebone-ai-64/images/ch09/bottom-silkscreen.png b/boards/beaglebone/ai-64/images/ch09/bottom-silkscreen.png similarity index 100% rename from beaglebone-ai-64/images/ch09/bottom-silkscreen.png rename to boards/beaglebone/ai-64/images/ch09/bottom-silkscreen.png diff --git a/beaglebone-ai-64/images/ch09/top-silkscreen.png b/boards/beaglebone/ai-64/images/ch09/top-silkscreen.png similarity index 100% rename from beaglebone-ai-64/images/ch09/top-silkscreen.png rename to boards/beaglebone/ai-64/images/ch09/top-silkscreen.png diff --git a/beaglebone-ai-64/images/ch10/45-back-heatsink.jpg b/boards/beaglebone/ai-64/images/ch10/45-back-heatsink.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/45-back-heatsink.jpg rename to boards/beaglebone/ai-64/images/ch10/45-back-heatsink.jpg diff --git a/beaglebone-ai-64/images/ch10/45-back.jpg b/boards/beaglebone/ai-64/images/ch10/45-back.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/45-back.jpg rename to boards/beaglebone/ai-64/images/ch10/45-back.jpg diff --git a/beaglebone-ai-64/images/ch10/45-front-hires.jpg b/boards/beaglebone/ai-64/images/ch10/45-front-hires.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/45-front-hires.jpg rename to boards/beaglebone/ai-64/images/ch10/45-front-hires.jpg diff --git a/beaglebone-ai-64/images/ch10/45-front.jpg b/boards/beaglebone/ai-64/images/ch10/45-front.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/45-front.jpg rename to boards/beaglebone/ai-64/images/ch10/45-front.jpg diff --git a/beaglebone-ai-64/images/ch10/back-heatsink.jpg b/boards/beaglebone/ai-64/images/ch10/back-heatsink.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/back-heatsink.jpg rename to boards/beaglebone/ai-64/images/ch10/back-heatsink.jpg diff --git a/beaglebone-ai-64/images/ch10/back.jpg b/boards/beaglebone/ai-64/images/ch10/back.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/back.jpg rename to boards/beaglebone/ai-64/images/ch10/back.jpg diff --git a/beaglebone-ai-64/images/ch10/feature.jpg b/boards/beaglebone/ai-64/images/ch10/feature.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/feature.jpg rename to boards/beaglebone/ai-64/images/ch10/feature.jpg diff --git a/beaglebone-ai-64/images/ch10/front.jpg b/boards/beaglebone/ai-64/images/ch10/front.jpg similarity index 100% rename from beaglebone-ai-64/images/ch10/front.jpg rename to boards/beaglebone/ai-64/images/ch10/front.jpg diff --git a/beaglebone-ai-64/images/feature.png b/boards/beaglebone/ai-64/images/feature.png similarity index 100% rename from beaglebone-ai-64/images/feature.png rename to boards/beaglebone/ai-64/images/feature.png diff --git a/beaglebone-ai-64/images/front.png b/boards/beaglebone/ai-64/images/front.png similarity index 100% rename from beaglebone-ai-64/images/front.png rename to boards/beaglebone/ai-64/images/front.png diff --git a/beaglebone-ai-64/index.rst b/boards/beaglebone/ai-64/index.rst similarity index 100% rename from beaglebone-ai-64/index.rst rename to boards/beaglebone/ai-64/index.rst diff --git a/beaglebone-black/System-Reference-Manual.asciidoc b/boards/beaglebone/black/System-Reference-Manual.asciidoc similarity index 100% rename from beaglebone-black/System-Reference-Manual.asciidoc rename to boards/beaglebone/black/System-Reference-Manual.asciidoc diff --git a/beaglebone-black/ch01.rst b/boards/beaglebone/black/ch01.rst similarity index 100% rename from beaglebone-black/ch01.rst rename to boards/beaglebone/black/ch01.rst diff --git a/beaglebone-black/ch02.rst b/boards/beaglebone/black/ch02.rst similarity index 100% rename from beaglebone-black/ch02.rst rename to boards/beaglebone/black/ch02.rst diff --git a/beaglebone-black/ch03.rst b/boards/beaglebone/black/ch03.rst similarity index 100% rename from beaglebone-black/ch03.rst rename to boards/beaglebone/black/ch03.rst diff --git a/beaglebone-black/ch04.rst b/boards/beaglebone/black/ch04.rst similarity index 100% rename from beaglebone-black/ch04.rst rename to boards/beaglebone/black/ch04.rst diff --git a/beaglebone-black/ch05.rst b/boards/beaglebone/black/ch05.rst similarity index 100% rename from beaglebone-black/ch05.rst rename to boards/beaglebone/black/ch05.rst diff --git a/beaglebone-black/ch06.rst b/boards/beaglebone/black/ch06.rst similarity index 100% rename from beaglebone-black/ch06.rst rename to boards/beaglebone/black/ch06.rst diff --git a/beaglebone-black/ch07.rst b/boards/beaglebone/black/ch07.rst similarity index 100% rename from beaglebone-black/ch07.rst rename to boards/beaglebone/black/ch07.rst diff --git a/beaglebone-black/ch08.rst b/boards/beaglebone/black/ch08.rst similarity index 100% rename from beaglebone-black/ch08.rst rename to boards/beaglebone/black/ch08.rst diff --git a/beaglebone-black/ch09.rst b/boards/beaglebone/black/ch09.rst similarity index 100% rename from beaglebone-black/ch09.rst rename to boards/beaglebone/black/ch09.rst diff --git a/beaglebone-black/ch10.rst b/boards/beaglebone/black/ch10.rst similarity index 100% rename from beaglebone-black/ch10.rst rename to boards/beaglebone/black/ch10.rst diff --git a/beaglebone-black/ch11.rst b/boards/beaglebone/black/ch11.rst similarity index 100% rename from beaglebone-black/ch11.rst rename to boards/beaglebone/black/ch11.rst diff --git a/beaglebone-black/images/BBvsBBB.jpg b/boards/beaglebone/black/images/BBvsBBB.jpg similarity index 100% rename from beaglebone-black/images/BBvsBBB.jpg rename to boards/beaglebone/black/images/BBvsBBB.jpg diff --git a/beaglebone-black/images/COMP_A5A.jpg b/boards/beaglebone/black/images/COMP_A5A.jpg similarity index 100% rename from beaglebone-black/images/COMP_A5A.jpg rename to boards/beaglebone/black/images/COMP_A5A.jpg diff --git a/beaglebone-black/images/CONN_REVA5A.jpg b/boards/beaglebone/black/images/CONN_REVA5A.jpg similarity index 100% rename from beaglebone-black/images/CONN_REVA5A.jpg rename to boards/beaglebone/black/images/CONN_REVA5A.jpg diff --git a/beaglebone-black/images/Features.jpg b/boards/beaglebone/black/images/Features.jpg similarity index 100% rename from beaglebone-black/images/Features.jpg rename to boards/beaglebone/black/images/Features.jpg diff --git a/boards/beaglebone/black/images/OSHW_mark_US000236.png b/boards/beaglebone/black/images/OSHW_mark_US000236.png new file mode 100644 index 0000000000000000000000000000000000000000..1876074fcc68cb322f6a6948ea15062e61c8bc26 GIT binary patch literal 22845 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 YYp!@pBXsBZzaL&1-8Q>Lgu6uiAF#A{@&Et; literal 0 HcmV?d00001 diff --git a/beaglebone-black/images/REV_A5A.jpg b/boards/beaglebone/black/images/REV_A5A.jpg similarity index 100% rename from beaglebone-black/images/REV_A5A.jpg rename to boards/beaglebone/black/images/REV_A5A.jpg diff --git a/beaglebone-black/index.rst b/boards/beaglebone/black/index.rst similarity index 100% rename from beaglebone-black/index.rst rename to boards/beaglebone/black/index.rst diff --git a/beaglebone-black/media/image1.jpg b/boards/beaglebone/black/media/image1.jpg similarity index 100% rename from beaglebone-black/media/image1.jpg rename to boards/beaglebone/black/media/image1.jpg diff --git a/beaglebone-black/media/image10.jpg b/boards/beaglebone/black/media/image10.jpg similarity index 100% rename from beaglebone-black/media/image10.jpg rename to boards/beaglebone/black/media/image10.jpg diff --git a/beaglebone-black/media/image11.jpg b/boards/beaglebone/black/media/image11.jpg similarity index 100% rename from beaglebone-black/media/image11.jpg rename to boards/beaglebone/black/media/image11.jpg diff --git a/beaglebone-black/media/image12.jpg b/boards/beaglebone/black/media/image12.jpg similarity index 100% rename from beaglebone-black/media/image12.jpg rename to boards/beaglebone/black/media/image12.jpg diff --git a/beaglebone-black/media/image13.jpg b/boards/beaglebone/black/media/image13.jpg similarity index 100% rename from beaglebone-black/media/image13.jpg rename to boards/beaglebone/black/media/image13.jpg diff --git a/beaglebone-black/media/image14.jpg b/boards/beaglebone/black/media/image14.jpg similarity index 100% rename from beaglebone-black/media/image14.jpg rename to boards/beaglebone/black/media/image14.jpg diff --git a/beaglebone-black/media/image16.jpg b/boards/beaglebone/black/media/image16.jpg similarity index 100% rename from beaglebone-black/media/image16.jpg rename to boards/beaglebone/black/media/image16.jpg diff --git a/beaglebone-black/media/image17.jpg b/boards/beaglebone/black/media/image17.jpg similarity index 100% rename from beaglebone-black/media/image17.jpg rename to boards/beaglebone/black/media/image17.jpg diff --git a/beaglebone-black/media/image18.jpg b/boards/beaglebone/black/media/image18.jpg similarity index 100% rename from beaglebone-black/media/image18.jpg rename to boards/beaglebone/black/media/image18.jpg diff --git a/beaglebone-black/media/image2.jpg b/boards/beaglebone/black/media/image2.jpg similarity index 100% rename from beaglebone-black/media/image2.jpg rename to boards/beaglebone/black/media/image2.jpg diff --git a/beaglebone-black/media/image24.jpg b/boards/beaglebone/black/media/image24.jpg similarity index 100% rename from beaglebone-black/media/image24.jpg rename to boards/beaglebone/black/media/image24.jpg diff --git a/beaglebone-black/media/image25.jpg b/boards/beaglebone/black/media/image25.jpg similarity index 100% rename from beaglebone-black/media/image25.jpg rename to boards/beaglebone/black/media/image25.jpg diff --git a/beaglebone-black/media/image26.jpg b/boards/beaglebone/black/media/image26.jpg similarity index 100% rename from beaglebone-black/media/image26.jpg rename to boards/beaglebone/black/media/image26.jpg diff --git a/beaglebone-black/media/image27.jpg b/boards/beaglebone/black/media/image27.jpg similarity index 100% rename from beaglebone-black/media/image27.jpg rename to boards/beaglebone/black/media/image27.jpg diff --git a/beaglebone-black/media/image28.jpg b/boards/beaglebone/black/media/image28.jpg similarity index 100% rename from beaglebone-black/media/image28.jpg rename to boards/beaglebone/black/media/image28.jpg diff --git a/beaglebone-black/media/image29.jpg b/boards/beaglebone/black/media/image29.jpg similarity index 100% rename from beaglebone-black/media/image29.jpg rename to boards/beaglebone/black/media/image29.jpg diff --git a/beaglebone-black/media/image30.jpg b/boards/beaglebone/black/media/image30.jpg similarity index 100% rename from beaglebone-black/media/image30.jpg rename to boards/beaglebone/black/media/image30.jpg diff --git a/beaglebone-black/media/image31.png b/boards/beaglebone/black/media/image31.png similarity index 100% rename from beaglebone-black/media/image31.png rename to boards/beaglebone/black/media/image31.png diff --git a/beaglebone-black/media/image37.png b/boards/beaglebone/black/media/image37.png similarity index 100% rename from beaglebone-black/media/image37.png rename to boards/beaglebone/black/media/image37.png diff --git a/beaglebone-black/media/image38.png b/boards/beaglebone/black/media/image38.png similarity index 100% rename from beaglebone-black/media/image38.png rename to boards/beaglebone/black/media/image38.png diff --git a/beaglebone-black/media/image39.jpg b/boards/beaglebone/black/media/image39.jpg similarity index 100% rename from beaglebone-black/media/image39.jpg rename to boards/beaglebone/black/media/image39.jpg diff --git a/beaglebone-black/media/image40.png b/boards/beaglebone/black/media/image40.png similarity index 100% rename from beaglebone-black/media/image40.png rename to boards/beaglebone/black/media/image40.png diff --git a/beaglebone-black/media/image41.png b/boards/beaglebone/black/media/image41.png similarity index 100% rename from beaglebone-black/media/image41.png rename to boards/beaglebone/black/media/image41.png diff --git a/beaglebone-black/media/image42.jpg b/boards/beaglebone/black/media/image42.jpg similarity index 100% rename from beaglebone-black/media/image42.jpg rename to boards/beaglebone/black/media/image42.jpg diff --git a/beaglebone-black/media/image43.png b/boards/beaglebone/black/media/image43.png similarity index 100% rename from beaglebone-black/media/image43.png rename to boards/beaglebone/black/media/image43.png diff --git a/beaglebone-black/media/image44.png b/boards/beaglebone/black/media/image44.png similarity index 100% rename from beaglebone-black/media/image44.png rename to boards/beaglebone/black/media/image44.png diff --git a/beaglebone-black/media/image45.png b/boards/beaglebone/black/media/image45.png similarity index 100% rename from beaglebone-black/media/image45.png rename to boards/beaglebone/black/media/image45.png diff --git a/beaglebone-black/media/image46.png b/boards/beaglebone/black/media/image46.png similarity index 100% rename from beaglebone-black/media/image46.png rename to boards/beaglebone/black/media/image46.png diff --git a/beaglebone-black/media/image47.jpg b/boards/beaglebone/black/media/image47.jpg similarity index 100% rename from beaglebone-black/media/image47.jpg rename to boards/beaglebone/black/media/image47.jpg diff --git a/beaglebone-black/media/image48.png b/boards/beaglebone/black/media/image48.png similarity index 100% rename from beaglebone-black/media/image48.png rename to boards/beaglebone/black/media/image48.png diff --git a/beaglebone-black/media/image49.png b/boards/beaglebone/black/media/image49.png similarity index 100% rename from beaglebone-black/media/image49.png rename to boards/beaglebone/black/media/image49.png diff --git a/beaglebone-black/media/image50.png b/boards/beaglebone/black/media/image50.png similarity index 100% rename from beaglebone-black/media/image50.png rename to boards/beaglebone/black/media/image50.png diff --git a/beaglebone-black/media/image51.png b/boards/beaglebone/black/media/image51.png similarity index 100% rename from beaglebone-black/media/image51.png rename to boards/beaglebone/black/media/image51.png diff --git a/beaglebone-black/media/image52.png b/boards/beaglebone/black/media/image52.png similarity index 100% rename from beaglebone-black/media/image52.png rename to boards/beaglebone/black/media/image52.png diff --git a/beaglebone-black/media/image53.png b/boards/beaglebone/black/media/image53.png similarity index 100% rename from beaglebone-black/media/image53.png rename to boards/beaglebone/black/media/image53.png diff --git a/beaglebone-black/media/image54.jpg b/boards/beaglebone/black/media/image54.jpg similarity index 100% rename from beaglebone-black/media/image54.jpg rename to boards/beaglebone/black/media/image54.jpg diff --git a/beaglebone-black/media/image55.png b/boards/beaglebone/black/media/image55.png similarity index 100% rename from beaglebone-black/media/image55.png rename to boards/beaglebone/black/media/image55.png diff --git a/beaglebone-black/media/image56.png b/boards/beaglebone/black/media/image56.png similarity index 100% rename from beaglebone-black/media/image56.png rename to boards/beaglebone/black/media/image56.png diff --git a/beaglebone-black/media/image57.png b/boards/beaglebone/black/media/image57.png similarity index 100% rename from beaglebone-black/media/image57.png rename to boards/beaglebone/black/media/image57.png diff --git a/beaglebone-black/media/image58.png b/boards/beaglebone/black/media/image58.png similarity index 100% rename from beaglebone-black/media/image58.png rename to boards/beaglebone/black/media/image58.png diff --git a/beaglebone-black/media/image59.png b/boards/beaglebone/black/media/image59.png similarity index 100% rename from beaglebone-black/media/image59.png rename to boards/beaglebone/black/media/image59.png diff --git a/beaglebone-black/media/image60.png b/boards/beaglebone/black/media/image60.png similarity index 100% rename from beaglebone-black/media/image60.png rename to boards/beaglebone/black/media/image60.png diff --git a/beaglebone-black/media/image64.png b/boards/beaglebone/black/media/image64.png similarity index 100% rename from beaglebone-black/media/image64.png rename to boards/beaglebone/black/media/image64.png diff --git a/beaglebone-black/media/image65.png b/boards/beaglebone/black/media/image65.png similarity index 100% rename from beaglebone-black/media/image65.png rename to boards/beaglebone/black/media/image65.png diff --git a/beaglebone-black/media/image66.png b/boards/beaglebone/black/media/image66.png similarity index 100% rename from beaglebone-black/media/image66.png rename to boards/beaglebone/black/media/image66.png diff --git a/beaglebone-black/media/image67.png b/boards/beaglebone/black/media/image67.png similarity index 100% rename from beaglebone-black/media/image67.png rename to boards/beaglebone/black/media/image67.png diff --git a/beaglebone-black/media/image68.jpg b/boards/beaglebone/black/media/image68.jpg similarity index 100% rename from beaglebone-black/media/image68.jpg rename to boards/beaglebone/black/media/image68.jpg diff --git a/beaglebone-black/media/image69.jpg b/boards/beaglebone/black/media/image69.jpg similarity index 100% rename from beaglebone-black/media/image69.jpg rename to boards/beaglebone/black/media/image69.jpg diff --git a/beaglebone-black/media/image7.jpg b/boards/beaglebone/black/media/image7.jpg similarity index 100% rename from beaglebone-black/media/image7.jpg rename to boards/beaglebone/black/media/image7.jpg diff --git a/beaglebone-black/media/image71.jpg b/boards/beaglebone/black/media/image71.jpg similarity index 100% rename from beaglebone-black/media/image71.jpg rename to boards/beaglebone/black/media/image71.jpg diff --git a/beaglebone-black/media/image73.jpg b/boards/beaglebone/black/media/image73.jpg similarity index 100% rename from beaglebone-black/media/image73.jpg rename to boards/beaglebone/black/media/image73.jpg diff --git a/beaglebone-black/media/image75.jpg b/boards/beaglebone/black/media/image75.jpg similarity index 100% rename from beaglebone-black/media/image75.jpg rename to boards/beaglebone/black/media/image75.jpg diff --git a/beaglebone-black/media/image77.jpg b/boards/beaglebone/black/media/image77.jpg similarity index 100% rename from beaglebone-black/media/image77.jpg rename to boards/beaglebone/black/media/image77.jpg diff --git a/beaglebone-black/media/image78.png b/boards/beaglebone/black/media/image78.png similarity index 100% rename from beaglebone-black/media/image78.png rename to boards/beaglebone/black/media/image78.png diff --git a/beaglebone-black/media/image79.png b/boards/beaglebone/black/media/image79.png similarity index 100% rename from beaglebone-black/media/image79.png rename to boards/beaglebone/black/media/image79.png diff --git a/beaglebone-black/media/image8.jpg b/boards/beaglebone/black/media/image8.jpg similarity index 100% rename from beaglebone-black/media/image8.jpg rename to boards/beaglebone/black/media/image8.jpg diff --git a/beaglebone-black/media/image80.png b/boards/beaglebone/black/media/image80.png similarity index 100% rename from beaglebone-black/media/image80.png rename to boards/beaglebone/black/media/image80.png diff --git a/beaglebone-black/media/image81.jpg b/boards/beaglebone/black/media/image81.jpg similarity index 100% rename from beaglebone-black/media/image81.jpg rename to boards/beaglebone/black/media/image81.jpg diff --git a/beaglebone-black/media/image82.jpg b/boards/beaglebone/black/media/image82.jpg similarity index 100% rename from beaglebone-black/media/image82.jpg rename to boards/beaglebone/black/media/image82.jpg diff --git a/beaglebone-black/media/image83.jpg b/boards/beaglebone/black/media/image83.jpg similarity index 100% rename from beaglebone-black/media/image83.jpg rename to boards/beaglebone/black/media/image83.jpg diff --git a/beaglebone-black/media/image84.jpg b/boards/beaglebone/black/media/image84.jpg similarity index 100% rename from beaglebone-black/media/image84.jpg rename to boards/beaglebone/black/media/image84.jpg diff --git a/beaglebone-black/media/image85.jpg b/boards/beaglebone/black/media/image85.jpg similarity index 100% rename from beaglebone-black/media/image85.jpg rename to boards/beaglebone/black/media/image85.jpg diff --git a/beaglebone-black/media/image86.jpg b/boards/beaglebone/black/media/image86.jpg similarity index 100% rename from beaglebone-black/media/image86.jpg rename to boards/beaglebone/black/media/image86.jpg diff --git a/beaglebone-black/media/image87.jpg b/boards/beaglebone/black/media/image87.jpg similarity index 100% rename from beaglebone-black/media/image87.jpg rename to boards/beaglebone/black/media/image87.jpg diff --git a/beaglebone-black/media/image88.jpg b/boards/beaglebone/black/media/image88.jpg similarity index 100% rename from beaglebone-black/media/image88.jpg rename to boards/beaglebone/black/media/image88.jpg diff --git a/beaglebone-black/media/image89.jpg b/boards/beaglebone/black/media/image89.jpg similarity index 100% rename from beaglebone-black/media/image89.jpg rename to boards/beaglebone/black/media/image89.jpg diff --git a/beaglebone-black/media/image9.jpg b/boards/beaglebone/black/media/image9.jpg similarity index 100% rename from beaglebone-black/media/image9.jpg rename to boards/beaglebone/black/media/image9.jpg diff --git a/beaglebone-black/media/image90.jpg b/boards/beaglebone/black/media/image90.jpg similarity index 100% rename from beaglebone-black/media/image90.jpg rename to boards/beaglebone/black/media/image90.jpg diff --git a/beaglebone-black/media/image91.jpg b/boards/beaglebone/black/media/image91.jpg similarity index 100% rename from beaglebone-black/media/image91.jpg rename to boards/beaglebone/black/media/image91.jpg diff --git a/beaglebone-black/media/image92.jpg b/boards/beaglebone/black/media/image92.jpg similarity index 100% rename from beaglebone-black/media/image92.jpg rename to boards/beaglebone/black/media/image92.jpg diff --git a/beaglebone-black/media/image93.jpg b/boards/beaglebone/black/media/image93.jpg similarity index 100% rename from beaglebone-black/media/image93.jpg rename to boards/beaglebone/black/media/image93.jpg diff --git a/beaglebone-black/media/image94.jpg b/boards/beaglebone/black/media/image94.jpg similarity index 100% rename from beaglebone-black/media/image94.jpg rename to boards/beaglebone/black/media/image94.jpg diff --git a/beaglebone-black/media/image95.jpg b/boards/beaglebone/black/media/image95.jpg similarity index 100% rename from beaglebone-black/media/image95.jpg rename to boards/beaglebone/black/media/image95.jpg diff --git a/beaglebone-black/media/image96.png b/boards/beaglebone/black/media/image96.png similarity index 100% rename from beaglebone-black/media/image96.png rename to boards/beaglebone/black/media/image96.png diff --git a/beaglebone-black/media/image97.png b/boards/beaglebone/black/media/image97.png similarity index 100% rename from beaglebone-black/media/image97.png rename to boards/beaglebone/black/media/image97.png diff --git a/beaglebone-blue/accessories.rst b/boards/beaglebone/blue/accessories.rst similarity index 100% rename from beaglebone-blue/accessories.rst rename to boards/beaglebone/blue/accessories.rst diff --git a/beaglebone-blue/code.rst b/boards/beaglebone/blue/code.rst similarity index 100% rename from beaglebone-blue/code.rst rename to boards/beaglebone/blue/code.rst diff --git a/beaglebone-blue/faq.rst b/boards/beaglebone/blue/faq.rst similarity index 100% rename from beaglebone-blue/faq.rst rename to boards/beaglebone/blue/faq.rst diff --git a/beaglebone-blue/flashing-firmware.rst b/boards/beaglebone/blue/flashing-firmware.rst similarity index 100% rename from beaglebone-blue/flashing-firmware.rst rename to boards/beaglebone/blue/flashing-firmware.rst diff --git a/beaglebone-blue/index.rst b/boards/beaglebone/blue/index.rst similarity index 100% rename from beaglebone-blue/index.rst rename to boards/beaglebone/blue/index.rst diff --git a/beaglebone-blue/ip-settings.rst b/boards/beaglebone/blue/ip-settings.rst similarity index 100% rename from beaglebone-blue/ip-settings.rst rename to boards/beaglebone/blue/ip-settings.rst diff --git a/beaglebone-blue/media/BeagleBone_Blue_pinouts.png b/boards/beaglebone/blue/media/BeagleBone_Blue_pinouts.png similarity index 100% rename from beaglebone-blue/media/BeagleBone_Blue_pinouts.png rename to boards/beaglebone/blue/media/BeagleBone_Blue_pinouts.png diff --git a/boards/beaglebone/blue/media/OSHW_mark_US000064.png b/boards/beaglebone/blue/media/OSHW_mark_US000064.png new file mode 100644 index 0000000000000000000000000000000000000000..235654af9ae1d059e59c04f010497dec1cb80570 GIT binary patch literal 30025 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 literal 0 HcmV?d00001 diff --git a/beaglebone-blue/media/pinout.jpg b/boards/beaglebone/blue/media/pinout.jpg similarity index 100% rename from beaglebone-blue/media/pinout.jpg rename to boards/beaglebone/blue/media/pinout.jpg diff --git a/beaglebone-blue/pinouts.rst b/boards/beaglebone/blue/pinouts.rst similarity index 100% rename from beaglebone-blue/pinouts.rst rename to boards/beaglebone/blue/pinouts.rst diff --git a/beaglebone-blue/rev-c-priorities.rst b/boards/beaglebone/blue/rev-c-priorities.rst similarity index 100% rename from beaglebone-blue/rev-c-priorities.rst rename to boards/beaglebone/blue/rev-c-priorities.rst diff --git a/beaglebone-blue/ssh.rst b/boards/beaglebone/blue/ssh.rst similarity index 100% rename from beaglebone-blue/ssh.rst rename to boards/beaglebone/blue/ssh.rst diff --git a/beaglebone-blue/tests.rst b/boards/beaglebone/blue/tests.rst similarity index 100% rename from beaglebone-blue/tests.rst rename to boards/beaglebone/blue/tests.rst diff --git a/beaglebone-blue/wifi.rst b/boards/beaglebone/blue/wifi.rst similarity index 100% rename from beaglebone-blue/wifi.rst rename to boards/beaglebone/blue/wifi.rst diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst new file mode 100644 index 00000000..4ab89c9f --- /dev/null +++ b/boards/beaglebone/index.rst @@ -0,0 +1,32 @@ +BeagleBone +################### + +BeagleBone boards are intended to be bare-bones, with a balance of features to enable +rapid prototyping and provide a solid reference for building end products. + +The most popular design is BeagleBone Black, a staple reference for an open hardware +embedded Linux single board computer. + +BeagleBone AI-64 is our most powerful design with tremendous machine learning inference +performance and + +For simplicity of developing small, mobile robotics, check out BeagleBone Blue, a highly +integrated board with motor drivers, battery support, altimeter, gyroscope, accelerometer, +and much more to get started developing quickly. + +The System Reference Manual for each BeagleBone board is below. Older boards are supported +with links to their latest PDF-formatted System Reference Manual and the latest boards are +included both here and in the downloadable beagleboard-docs.pdf linked on the bottom-left +of your screen. + +* `BeagleBone (original) <https://git.beagleboard.org/beagleboard/beaglebone/-/blob/master/BeagleBone_SRM_A6_0_1.pdf>`_ + + +.. toctree:: + :maxdepth: 1 + :caption: Boards + + black/index.rst + ai-64/index.rst + blue/index.rst + diff --git a/beagleconnect/ch01.rst b/boards/beagleconnect/freedom/index.rst similarity index 66% rename from beagleconnect/ch01.rst rename to boards/beagleconnect/freedom/index.rst index c3f20dba..f42ded22 100644 --- a/beagleconnect/ch01.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -1,94 +1,5 @@ -*************************** -BeagleConnectâ„¢ Introduction -*************************** - - - -BeagleConnectâ„¢ is a revolutionary technology virtually eliminating low-level -software development for `IoT <https://en.wikipedia.org/wiki/Internet_of_things>`_ -and `IIoT <https://en.wikipedia.org/wiki/Industrial_internet_of_things>`_ -applications, such as building automation, factory automation, home automation, -and scientific data acquisition. While numerous IoT and IIoT solutions -available today provide massive software libraries for microcontrollers -supporting a limited body of `sensors <https://en.wikipedia.org/wiki/Sensor>`_, -`actuators <https://en.wikipedia.org/wiki/Actuator>`_ and `indicators <https://en.wikipedia.org/wiki/Indicator_(distance_amplifying_instrument)>`_ -as well as libraries for communicating over various networks, BeagleConnect -simply eliminates the need for these libraries by shifting the burden into the -most massive and collaborative software project of all time, the `Linux kernel <https://en.wikipedia.org/wiki/Linux_kernel>`_. - -.. image:: media/bcf-c5-boards.jpg - :width: 600 - :align: center - :height: 400 - :alt: BeagleConnect Freedom C5 Boards - -These are the tools used to automate things in -`scientific data collection <https://en.wikipedia.org/wiki/Data_collection_system>`_, -`data science <https://en.wikipedia.org/wiki/Data_science>`_, -`mechatronics <https://en.wikipedia.org/wiki/Mechatronics>`_, -and `IoT <https://en.wikipedia.org/wiki/Internet_of_things>`_. - -BeagleConnectâ„¢ technology solves: - -* The need to write software to add a large set of diverse devices to your - system, -* The need to maintain the software with security updates, -* The need to rapidly prototype using off-the-shelf software and hardware - without wiring, -* The need to connect to devices using long-range, low-power wireless, and -* The need to produce high-volume custom hardware cost-optimized for your - requirements. - -BeagleConnectâ„¢ Experience -######################### - -BeagleConnectâ„¢ provides a scalable experience for interacting with the physical -world. - -Note: The term BeagleConnectâ„¢ refers to a technology comprising of a family of -boards, a collection of Linux kernel drivers, microcontroller firmware, a -communication protocol, and system-level integration to automation software -tools. More specific terms will be applied in the architecture details. The -term is also used here to represent the experience introduced to users through -the initial BeagleConnectâ„¢ Freedom product consisting of a board and case which -ships programmed and ready to be used. - - - -For scientists, we are integrating `Jupyter Notebook <https://jupyter.org/>`_ -with the data streams from any of hundreds of sensor options, including -`vibration <https://www.mikroe.com/click/sensors/force>`_, -`gas detection <https://www.mikroe.com/click/sensors/gas>`_, -`biometrics <https://www.mikroe.com/click/sensors/biometrics>`_ and -`more <https://www.mikroe.com/click/sensors>`_. These data streams can be -stored in simple `data files <https://en.wikipedia.org/wiki/Comma-separated_values>` -or processed and visualized. - -#TODO: provide images demonstrating Jupyter Notebook visualization - -For embedded systems developers, data is easily extracted using the standard IIO -interface provided by the Linux kernel running on the gateway using any of -hundreds of programming languages and environments, without writing a line of -microcontroller firmware. The Linux environment provides opportunities for -high-level remote management using tools like Balena with applications deployed -in Docker containers. - -#TODO: provide image illustrating remote management - -The hardware and software are fully open source, providing for scalability and -a lack of vendor lock-in. - -For DevOps… - -For home automaters, integration into WebThings… - -#TODO: think a bit more about this section with some feedback from Cathy. - -BeagleConnectâ„¢ hardware -####################### - BeagleConnectâ„¢ Freedom -********************** +###################### .. image:: media/image1.jpg :width: 600 diff --git a/beagleconnect/media/bcf-c5-boards.jpg b/boards/beagleconnect/freedom/media/bcf-c5-boards.jpg similarity index 100% rename from beagleconnect/media/bcf-c5-boards.jpg rename to boards/beagleconnect/freedom/media/bcf-c5-boards.jpg diff --git a/beagleconnect/ch03.rst b/boards/beagleconnect/freedom/usage.rst similarity index 100% rename from beagleconnect/ch03.rst rename to boards/beagleconnect/freedom/usage.rst diff --git a/beagleconnect/ch04.rst b/boards/beagleconnect/freedom/zephyr.rst similarity index 100% rename from beagleconnect/ch04.rst rename to boards/beagleconnect/freedom/zephyr.rst diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst new file mode 100644 index 00000000..e4565c52 --- /dev/null +++ b/boards/beagleconnect/index.rst @@ -0,0 +1,105 @@ +.. _beagleconnect-home: + +************** +BeagleConnectâ„¢ +************** + +BeagleConnectâ„¢ is a revolutionary technology virtually eliminating low-level +software development for `IoT <https://en.wikipedia.org/wiki/Internet_of_things>`_ +and `IIoT <https://en.wikipedia.org/wiki/Industrial_internet_of_things>`_ +applications, such as building automation, factory automation, home automation, +and scientific data acquisition. While numerous IoT and IIoT solutions +available today provide massive software libraries for microcontrollers +supporting a limited body of `sensors <https://en.wikipedia.org/wiki/Sensor>`_, +`actuators <https://en.wikipedia.org/wiki/Actuator>`_ and `indicators <https://en.wikipedia.org/wiki/Indicator_(distance_amplifying_instrument)>`_ +as well as libraries for communicating over various networks, BeagleConnect +simply eliminates the need for these libraries by shifting the burden into the +most massive and collaborative software project of all time, the `Linux kernel <https://en.wikipedia.org/wiki/Linux_kernel>`_. + +.. image:: freedom/media/bcf-c5-boards.jpg + :width: 600 + :align: center + :height: 400 + :alt: BeagleConnect Freedom C5 Boards + +These are the tools used to automate things in +`scientific data collection <https://en.wikipedia.org/wiki/Data_collection_system>`_, +`data science <https://en.wikipedia.org/wiki/Data_science>`_, +`mechatronics <https://en.wikipedia.org/wiki/Mechatronics>`_, +and `IoT <https://en.wikipedia.org/wiki/Internet_of_things>`_. + +BeagleConnectâ„¢ technology solves: + +* The need to write software to add a large set of diverse devices to your + system, +* The need to maintain the software with security updates, +* The need to rapidly prototype using off-the-shelf software and hardware + without wiring, +* The need to connect to devices using long-range, low-power wireless, and +* The need to produce high-volume custom hardware cost-optimized for your + requirements. + +BeagleConnectâ„¢ Experience +######################### + +BeagleConnectâ„¢ provides a scalable experience for interacting with the physical +world. + +Note: The term BeagleConnectâ„¢ refers to a technology comprising of a family of +boards, a collection of Linux kernel drivers, microcontroller firmware, a +communication protocol, and system-level integration to automation software +tools. More specific terms will be applied in the architecture details. The +term is also used here to represent the experience introduced to users through +the initial BeagleConnectâ„¢ Freedom product consisting of a board and case which +ships programmed and ready to be used. + +For scientists, we are integrating `Jupyter Notebook <https://jupyter.org/>`_ +with the data streams from any of hundreds of sensor options, including +`vibration <https://www.mikroe.com/click/sensors/force>`_, +`gas detection <https://www.mikroe.com/click/sensors/gas>`_, +`biometrics <https://www.mikroe.com/click/sensors/biometrics>`_ and +`more <https://www.mikroe.com/click/sensors>`_. These data streams can be +stored in simple `data files <https://en.wikipedia.org/wiki/Comma-separated_values>` +or processed and visualized. + +#TODO: provide images demonstrating Jupyter Notebook visualization + +For embedded systems developers, data is easily extracted using the standard IIO +interface provided by the Linux kernel running on the gateway using any of +hundreds of programming languages and environments, without writing a line of +microcontroller firmware. The Linux environment provides opportunities for +high-level remote management using tools like Balena with applications deployed +in Docker containers. + +#TODO: provide image illustrating remote management + +The hardware and software are fully open source, providing for scalability and +a lack of vendor lock-in. + +For DevOps… + +For home automaters, integration into WebThings… + +#TODO: think a bit more about this section with some feedback from Cathy. + +.. image:: media/image1.jpg + :width: 598 + :align: center + :height: 400 + :alt: BeagleConnect + +.. _beagleconnect-Change-History: + +************** +Change History +************** + +.. toctree:: + :maxdepth: 1 + + story.rst + overview.rst + freedom/index.rst + freedom/usage.rst + freedom/zephyr.rst + diff --git a/beagleconnect/media/ProvStep1.jpg b/boards/beagleconnect/media/ProvStep1.jpg similarity index 100% rename from beagleconnect/media/ProvStep1.jpg rename to boards/beagleconnect/media/ProvStep1.jpg diff --git a/beagleconnect/media/ProvStep2.jpg b/boards/beagleconnect/media/ProvStep2.jpg similarity index 100% rename from beagleconnect/media/ProvStep2.jpg rename to boards/beagleconnect/media/ProvStep2.jpg diff --git a/beagleconnect/media/ProvStep3.jpg b/boards/beagleconnect/media/ProvStep3.jpg similarity index 100% rename from beagleconnect/media/ProvStep3.jpg rename to boards/beagleconnect/media/ProvStep3.jpg diff --git a/beagleconnect/media/SoftwareProp.jpg b/boards/beagleconnect/media/SoftwareProp.jpg similarity index 100% rename from beagleconnect/media/SoftwareProp.jpg rename to boards/beagleconnect/media/SoftwareProp.jpg diff --git a/beagleconnect/media/bcf_block_diagram.svg b/boards/beagleconnect/media/bcf_block_diagram.svg similarity index 100% rename from beagleconnect/media/bcf_block_diagram.svg rename to boards/beagleconnect/media/bcf_block_diagram.svg diff --git a/beagleconnect/media/image1.jpg b/boards/beagleconnect/media/image1.jpg similarity index 100% rename from beagleconnect/media/image1.jpg rename to boards/beagleconnect/media/image1.jpg diff --git a/beagleconnect/ch05.rst b/boards/beagleconnect/overview.rst similarity index 100% rename from beagleconnect/ch05.rst rename to boards/beagleconnect/overview.rst diff --git a/beagleconnect/index.rst b/boards/beagleconnect/story.rst similarity index 98% rename from beagleconnect/index.rst rename to boards/beagleconnect/story.rst index 298b65d7..99d700ea 100644 --- a/beagleconnect/index.rst +++ b/boards/beagleconnect/story.rst @@ -41,7 +41,7 @@ computer users without any thoughtful provisions for what already worked? .. toctree:: :maxdepth: 1 - ch01.rst + intro.rst ch02.rst ch03.rst ch04.rst @@ -52,4 +52,5 @@ computer users without any thoughtful provisions for what already worked? ch09.rst ch10.rst ch11.rst + freedom/index.rst diff --git a/support/cape-interface-spec.rst b/boards/capes/cape-interface-spec.rst similarity index 100% rename from support/cape-interface-spec.rst rename to boards/capes/cape-interface-spec.rst diff --git a/support/tables/BeagleBone cape interface spec.ods b/boards/capes/tables/BeagleBone cape interface spec.ods similarity index 100% rename from support/tables/BeagleBone cape interface spec.ods rename to boards/capes/tables/BeagleBone cape interface spec.ods diff --git a/support/tables/BeagleBone-Cape-header-definition.csv b/boards/capes/tables/BeagleBone-Cape-header-definition.csv similarity index 100% rename from support/tables/BeagleBone-Cape-header-definition.csv rename to boards/capes/tables/BeagleBone-Cape-header-definition.csv diff --git a/support/tables/Bone-LEDs-Overlays.csv b/boards/capes/tables/Bone-LEDs-Overlays.csv similarity index 100% rename from support/tables/Bone-LEDs-Overlays.csv rename to boards/capes/tables/Bone-LEDs-Overlays.csv diff --git a/support/tables/Bone-LEDs.csv b/boards/capes/tables/Bone-LEDs.csv similarity index 100% rename from support/tables/Bone-LEDs.csv rename to boards/capes/tables/Bone-LEDs.csv diff --git a/boards/index.rst b/boards/index.rst new file mode 100644 index 00000000..10382195 --- /dev/null +++ b/boards/index.rst @@ -0,0 +1,28 @@ +Boards +######### + +`BeagleBone <beaglebone>`__ is a family of ARM-based, Linux-capable boards intended to be +bare-bones, with a balance of features to enable rapid prototyping and provide a solid +reference for building end products. + +`PocketBeagle <pocketbeagle>`__ boards are ultra-tiny ARM-based, Linux-capable boards intended to be +very low cost, with minimal features suitable for beginners and attractive to professionals +looking for a more minimal starting point. + +`BeagleBone and PocketBeagle Capes <capes>`__ are add-on boards for BeagleBone and PocketBeagle boards. + +`BeagleConnect <beagleconnect>`__ boards are ARM microcontroller-based, Zephyr-capable boards meant +to act as ultra low cost smart peripherals to their Linux-capable counterparts, with connectivity +options that enable almost endless sensing and actuation expansion. + +`BeagleBoard <beagleboard>`__ is a family of ARM-based, Linux-capable boards where this project +started. + +.. toctree:: + :maxdepth: 1 + beaglebone/index.rst + capes/index.rst + pocketbeagle/index.rst + beagleconnect/index.rst + beagleboard/index.rst + diff --git a/pocketbeagle/System-Reference-Manual.wiki b/boards/pocketbeagle/System-Reference-Manual.wiki similarity index 100% rename from pocketbeagle/System-Reference-Manual.wiki rename to boards/pocketbeagle/System-Reference-Manual.wiki diff --git a/pocketbeagle/ch01.rst b/boards/pocketbeagle/ch01.rst similarity index 100% rename from pocketbeagle/ch01.rst rename to boards/pocketbeagle/ch01.rst diff --git a/pocketbeagle/ch02.rst b/boards/pocketbeagle/ch02.rst similarity index 100% rename from pocketbeagle/ch02.rst rename to boards/pocketbeagle/ch02.rst diff --git a/pocketbeagle/ch03.rst b/boards/pocketbeagle/ch03.rst similarity index 100% rename from pocketbeagle/ch03.rst rename to boards/pocketbeagle/ch03.rst diff --git a/pocketbeagle/ch04.rst b/boards/pocketbeagle/ch04.rst similarity index 100% rename from pocketbeagle/ch04.rst rename to boards/pocketbeagle/ch04.rst diff --git a/pocketbeagle/ch05.rst b/boards/pocketbeagle/ch05.rst similarity index 100% rename from pocketbeagle/ch05.rst rename to boards/pocketbeagle/ch05.rst diff --git a/pocketbeagle/ch06.rst b/boards/pocketbeagle/ch06.rst similarity index 100% rename from pocketbeagle/ch06.rst rename to boards/pocketbeagle/ch06.rst diff --git a/pocketbeagle/ch07.rst b/boards/pocketbeagle/ch07.rst similarity index 100% rename from pocketbeagle/ch07.rst rename to boards/pocketbeagle/ch07.rst diff --git a/pocketbeagle/ch08.rst b/boards/pocketbeagle/ch08.rst similarity index 100% rename from pocketbeagle/ch08.rst rename to boards/pocketbeagle/ch08.rst diff --git a/pocketbeagle/ch09.rst b/boards/pocketbeagle/ch09.rst similarity index 100% rename from pocketbeagle/ch09.rst rename to boards/pocketbeagle/ch09.rst diff --git a/pocketbeagle/ch10.rst b/boards/pocketbeagle/ch10.rst similarity index 100% rename from pocketbeagle/ch10.rst rename to boards/pocketbeagle/ch10.rst diff --git a/pocketbeagle/ch11.rst b/boards/pocketbeagle/ch11.rst similarity index 100% rename from pocketbeagle/ch11.rst rename to boards/pocketbeagle/ch11.rst diff --git a/pocketbeagle/images/10fig-PB-SDcardinsert1.jpg b/boards/pocketbeagle/images/10fig-PB-SDcardinsert1.jpg similarity index 100% rename from pocketbeagle/images/10fig-PB-SDcardinsert1.jpg rename to boards/pocketbeagle/images/10fig-PB-SDcardinsert1.jpg diff --git a/pocketbeagle/images/10fig-PB-SDcardinsert2.jpg b/boards/pocketbeagle/images/10fig-PB-SDcardinsert2.jpg similarity index 100% rename from pocketbeagle/images/10fig-PB-SDcardinsert2.jpg rename to boards/pocketbeagle/images/10fig-PB-SDcardinsert2.jpg diff --git a/pocketbeagle/images/11fig-PB-microUSBattach1.jpg b/boards/pocketbeagle/images/11fig-PB-microUSBattach1.jpg similarity index 100% rename from pocketbeagle/images/11fig-PB-microUSBattach1.jpg rename to boards/pocketbeagle/images/11fig-PB-microUSBattach1.jpg diff --git a/pocketbeagle/images/12fig-PB-USBtoPC1.jpg b/boards/pocketbeagle/images/12fig-PB-USBtoPC1.jpg similarity index 100% rename from pocketbeagle/images/12fig-PB-USBtoPC1.jpg rename to boards/pocketbeagle/images/12fig-PB-USBtoPC1.jpg diff --git a/pocketbeagle/images/13fig-PB-PowerLED1.png b/boards/pocketbeagle/images/13fig-PB-PowerLED1.png similarity index 100% rename from pocketbeagle/images/13fig-PB-PowerLED1.png rename to boards/pocketbeagle/images/13fig-PB-PowerLED1.png diff --git a/pocketbeagle/images/14fig-PB-UserLEDs1.png b/boards/pocketbeagle/images/14fig-PB-UserLEDs1.png similarity index 100% rename from pocketbeagle/images/14fig-PB-UserLEDs1.png rename to boards/pocketbeagle/images/14fig-PB-UserLEDs1.png diff --git a/pocketbeagle/images/15fig-PB-starthtmpage.png b/boards/pocketbeagle/images/15fig-PB-starthtmpage.png similarity index 100% rename from pocketbeagle/images/15fig-PB-starthtmpage.png rename to boards/pocketbeagle/images/15fig-PB-starthtmpage.png diff --git a/pocketbeagle/images/16fig-PB-enablenetwork.png b/boards/pocketbeagle/images/16fig-PB-enablenetwork.png similarity index 100% rename from pocketbeagle/images/16fig-PB-enablenetwork.png rename to boards/pocketbeagle/images/16fig-PB-enablenetwork.png diff --git a/pocketbeagle/images/17fig-PB-cloud9.png b/boards/pocketbeagle/images/17fig-PB-cloud9.png similarity index 100% rename from pocketbeagle/images/17fig-PB-cloud9.png rename to boards/pocketbeagle/images/17fig-PB-cloud9.png diff --git a/pocketbeagle/images/18fig-PB-cloud9exs.png b/boards/pocketbeagle/images/18fig-PB-cloud9exs.png similarity index 100% rename from pocketbeagle/images/18fig-PB-cloud9exs.png rename to boards/pocketbeagle/images/18fig-PB-cloud9exs.png diff --git a/pocketbeagle/images/19fig-PB-cloud9blink.png b/boards/pocketbeagle/images/19fig-PB-cloud9blink.png similarity index 100% rename from pocketbeagle/images/19fig-PB-cloud9blink.png rename to boards/pocketbeagle/images/19fig-PB-cloud9blink.png diff --git a/pocketbeagle/images/1fig-PB-homepage.png b/boards/pocketbeagle/images/1fig-PB-homepage.png similarity index 100% rename from pocketbeagle/images/1fig-PB-homepage.png rename to boards/pocketbeagle/images/1fig-PB-homepage.png diff --git a/pocketbeagle/images/20fig-PB-powerbutton.png b/boards/pocketbeagle/images/20fig-PB-powerbutton.png similarity index 100% rename from pocketbeagle/images/20fig-PB-powerbutton.png rename to boards/pocketbeagle/images/20fig-PB-powerbutton.png diff --git a/pocketbeagle/images/21fig-PB-walkaround.png b/boards/pocketbeagle/images/21fig-PB-walkaround.png similarity index 100% rename from pocketbeagle/images/21fig-PB-walkaround.png rename to boards/pocketbeagle/images/21fig-PB-walkaround.png diff --git a/pocketbeagle/images/22fig-PB-blockdiagram.png b/boards/pocketbeagle/images/22fig-PB-blockdiagram.png similarity index 100% rename from pocketbeagle/images/22fig-PB-blockdiagram.png rename to boards/pocketbeagle/images/22fig-PB-blockdiagram.png diff --git a/pocketbeagle/images/24fig-PB-Headerphoto.png b/boards/pocketbeagle/images/24fig-PB-Headerphoto.png similarity index 100% rename from pocketbeagle/images/24fig-PB-Headerphoto.png rename to boards/pocketbeagle/images/24fig-PB-Headerphoto.png diff --git a/pocketbeagle/images/25fig-PB-SDcard.png b/boards/pocketbeagle/images/25fig-PB-SDcard.png similarity index 100% rename from pocketbeagle/images/25fig-PB-SDcard.png rename to boards/pocketbeagle/images/25fig-PB-SDcard.png diff --git a/pocketbeagle/images/26fig-PB-USB.png b/boards/pocketbeagle/images/26fig-PB-USB.png similarity index 100% rename from pocketbeagle/images/26fig-PB-USB.png rename to boards/pocketbeagle/images/26fig-PB-USB.png diff --git a/pocketbeagle/images/27fig-PB-JTAGpads.png b/boards/pocketbeagle/images/27fig-PB-JTAGpads.png similarity index 100% rename from pocketbeagle/images/27fig-PB-JTAGpads.png rename to boards/pocketbeagle/images/27fig-PB-JTAGpads.png diff --git a/pocketbeagle/images/28fig-PB-serialdebug.png b/boards/pocketbeagle/images/28fig-PB-serialdebug.png similarity index 100% rename from pocketbeagle/images/28fig-PB-serialdebug.png rename to boards/pocketbeagle/images/28fig-PB-serialdebug.png diff --git a/pocketbeagle/images/40fig-PB-PRU-block.png b/boards/pocketbeagle/images/40fig-PB-PRU-block.png similarity index 100% rename from pocketbeagle/images/40fig-PB-PRU-block.png rename to boards/pocketbeagle/images/40fig-PB-PRU-block.png diff --git a/pocketbeagle/images/41fig-PB-Headerback.png b/boards/pocketbeagle/images/41fig-PB-Headerback.png similarity index 100% rename from pocketbeagle/images/41fig-PB-Headerback.png rename to boards/pocketbeagle/images/41fig-PB-Headerback.png diff --git a/pocketbeagle/images/46fig-PB-Mikro.png b/boards/pocketbeagle/images/46fig-PB-Mikro.png similarity index 100% rename from pocketbeagle/images/46fig-PB-Mikro.png rename to boards/pocketbeagle/images/46fig-PB-Mikro.png diff --git a/pocketbeagle/images/5fig-PB-GetStarted.png b/boards/pocketbeagle/images/5fig-PB-GetStarted.png similarity index 100% rename from pocketbeagle/images/5fig-PB-GetStarted.png rename to boards/pocketbeagle/images/5fig-PB-GetStarted.png diff --git a/pocketbeagle/images/6fig-PB-DownloadSW.png b/boards/pocketbeagle/images/6fig-PB-DownloadSW.png similarity index 100% rename from pocketbeagle/images/6fig-PB-DownloadSW.png rename to boards/pocketbeagle/images/6fig-PB-DownloadSW.png diff --git a/pocketbeagle/images/7fig-PB-Etcherdownload.png b/boards/pocketbeagle/images/7fig-PB-Etcherdownload.png similarity index 100% rename from pocketbeagle/images/7fig-PB-Etcherdownload.png rename to boards/pocketbeagle/images/7fig-PB-Etcherdownload.png diff --git a/pocketbeagle/images/8fig-PB-Etcherselectimage.png b/boards/pocketbeagle/images/8fig-PB-Etcherselectimage.png similarity index 100% rename from pocketbeagle/images/8fig-PB-Etcherselectimage.png rename to boards/pocketbeagle/images/8fig-PB-Etcherselectimage.png diff --git a/pocketbeagle/images/9fig-PB-Etcherfinish.png b/boards/pocketbeagle/images/9fig-PB-Etcherfinish.png similarity index 100% rename from pocketbeagle/images/9fig-PB-Etcherfinish.png rename to boards/pocketbeagle/images/9fig-PB-Etcherfinish.png diff --git a/pocketbeagle/images/Bonescript-ex.png b/boards/pocketbeagle/images/Bonescript-ex.png similarity index 100% rename from pocketbeagle/images/Bonescript-ex.png rename to boards/pocketbeagle/images/Bonescript-ex.png diff --git a/pocketbeagle/images/Header-P1-sch.png b/boards/pocketbeagle/images/Header-P1-sch.png similarity index 100% rename from pocketbeagle/images/Header-P1-sch.png rename to boards/pocketbeagle/images/Header-P1-sch.png diff --git a/pocketbeagle/images/Header-P2-sch.png b/boards/pocketbeagle/images/Header-P2-sch.png similarity index 100% rename from pocketbeagle/images/Header-P2-sch.png rename to boards/pocketbeagle/images/Header-P2-sch.png diff --git a/pocketbeagle/images/Header-both-sch.png b/boards/pocketbeagle/images/Header-both-sch.png similarity index 100% rename from pocketbeagle/images/Header-both-sch.png rename to boards/pocketbeagle/images/Header-both-sch.png diff --git a/pocketbeagle/images/JTAG-pads-sch.png b/boards/pocketbeagle/images/JTAG-pads-sch.png similarity index 100% rename from pocketbeagle/images/JTAG-pads-sch.png rename to boards/pocketbeagle/images/JTAG-pads-sch.png diff --git a/pocketbeagle/images/OSD335x-color-block.jpg b/boards/pocketbeagle/images/OSD335x-color-block.jpg similarity index 100% rename from pocketbeagle/images/OSD335x-color-block.jpg rename to boards/pocketbeagle/images/OSD335x-color-block.jpg diff --git a/boards/pocketbeagle/images/OSHW_mark_US000083.png b/boards/pocketbeagle/images/OSHW_mark_US000083.png new file mode 100644 index 0000000000000000000000000000000000000000..879c30c39df97bee6c752feddbadf04fb70331df GIT binary patch literal 30833 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≥qbU4vwNpg!h+iVQobnN^npn!wf zz50rn`L(8QIij;V1(EcjvvQnh$3XW0QhR-#<A>=YMzs3fpb9>0B_kapvXz_L>17ld z#vD~Dm=}g4@QK+KqMzgD55{#fmnkjeRRox`Af*Q-HBi{63PRx>LT@e8ImU+Ly*MpM zWw;?0Qs1Y~oJ7&8JPS)X*82<V4ZY4l4q{GdP4@ac`y?$F88|0W;>^ado^m|kRZ^Qf z5-fnxo}VJg9HZIJsOap=#L5dsNY9<0@cleG=&Z${4fJ?8xQnRH=d<;k`d3c5aWVKe zZT|3w6Ar<bXZPa7HMpg`RZGo2u1*f?3q98+h+}CSU)9u#zbJ+^!$AOUZ5Ip2e!}VV zR(zwVs`kNI5Sg2SJ7`e%J`nA=#)~X>!FMyDwv(B$P_J2>xm-&dXQg4?SsK33-<SmH zLjQ&Ub4Z(qF!>p-x&jF#!iLSyD8(F6TCj|_9k#J)r2FuU4auY`6ZCPMT(0_8fu4sR zI{M64g!W%EO63XpjaKWI9EIVhs@pa4->wABYvfb=+chd(h`<$73)Joidx#Tgz~#4p zW{bVSJ~}PsOWD`?S5l>RsyvJtE2_nES*-5CM=GlYozlX52G$be;a{-Ao-f9`3I4&_ zSU+*T<_qkjq5UsI)$a58oNM2D?7e%zWSnM3lKC=o_}izLp?<?v&cLTitETK-be+Z8 zCM$Q8Zwht<^A5Jk&0&R^s)~%o?Vf3etjh-Nr$VErmjb0dMrtA@ez@?Wq#^>i5CaZE zBu_pTY!xMp8pss&dZ2-ue90@R`N=5O<tl`Nn@O07Xq;r5<jcFR6<LmpwldpM3xzk+ zumO=H`J6CueQ}ERZ?wJ9Z-&ah^j!~|%S2-U7`7%@xOL3$N#GX#gAok`XMv20_kBc_ zPDu8)>gx|ja+jb8fhc$U{TIO$Oc4WlcOA@XUL^L5FG!xWPa*3)v$F?!te+HB?YGCE z7z!QH=^F&NUr%o47BVo(qHhu9_M;Ux+OcLxz>?svAPTwvlAF}_6dNCp6D%kP1yYe> zPKmc)kA!Rl^xuEH70x`|P>ghs1BFrM35t7$2HU;X8=Oie{K8FZlvLF}-R|(?DS@wS zVUzMz;{k01`%&j9=>x6yncK4lG{2!U=vaS?vj@Vm!z3*-qU+^1X}wX~|NQy`&6Pc6 z8a}kR%SRYlAvw_6s52Yj;*^a=VA#<eBcj<)D>nkVlsV2WMhCfFu;7#IWhPGxd>%Y` zP9(a`QQ2HS4Zdd<kGuV46FP}nhBtPR@ngB}9{B)!hO$}^a4Do<lwO*u_KHzQjH1Cq z)SGv(|M~rOXgn$<o)2}HW8i4q%CipMU=ztIq881w;9yQ9EA$aKDSc1WJO-46exB&N zq`k_s>^^V0?I?<)y^YEKGQy8`#my-vnge?5hhxnWr`R1ch2P$pB^ehyN<GFsB&L1@ zbsF^;i7>p$e`0LX7Isg35mKgC>Co7Olx#b|y-B`>61Ijy_Wg&hUIkW4yoP}0E-B(q zB#^LBO9EAPh%gG2kJ?!Tf#&a~<2p}_+8R;!wkfvOds#K0SWGblV4790X-qq=VA9h- zF7Yclp#{KLb#CEasI>)?WlVlS+;Un`se(OFEM6=Qv{?iU4)`cOBC1*3tR+W-<2npP zpR*l&ns%+<v*&iek)aNQyVe61)&jPr3{26{iIy24j9Ndd>yeYNkR)tH0Y0>e`pNpq zpR*rXM3OLbC`9=E-uQhumh2%RbK?GIvoOi0yq3)O65AEMVNKn%)KTT1)Fb_U&RHP- zoRM{4(LK>n%Ge>nah;d05SESA_u4tKk=DSA``W`_$+~Jb3SW`Tcw%SSEurP=noP_@ zkvFt^5hc{^;Aqw2Sj$-}$vW$kh7Irj(~tD>OG4hK8^hI&>s#>|g2DRC(*xhZ<tGco ztftY=CT4dJ+&so!H7Gb`7&{sKZJIl$?Fka`;S1#p1^7}tnb6A*Sp=8+w<m`8ECEL? zM=iKZPRi{;fSdZel8=C~e^*l<%_Ci4<8w;i31MKVqFE2(Wq&cJPkee6$WSTo=tAtP zj+v+FzXn;aUN&j_6|nQO{&1<)cXh2UW}H<qq;7OvMCq0ST+#tz=-1D;)A+%pM{A=# zQBtD9emv7<Mvx$On|ML{S0Z<___e70HKV$=iiu<xkumS0L(`%gL%FW@_iCmW4oVBz z4V3Xp!XoEa>N5)#u4%&tD?P=$A}z;^sCp*Mb{tv`y!K%tY&mJ8A(P}~+?uwzo{vlS zzLyce;FH^okY(dH&E4lQZemR|2Dm%CyPyv1vT@Dgij}*GQ?*egq{D!v`{rA*3b-!h zJ3{WrnZWqIe1!2dNXzNc6$IVR9udy+4c;Uj<VZDxX(mmYbNAs4f<o%htO@?Sf=%?5 zd{BA5s-0!#9zPlMODCch+e)lCHtiVyEs~0uI>7N36HkKS-B-;TeEqUYjcIZJoEwpI z|6H?{_;Z1&f<nWBo{-Lw?h&MRtF%#8xSXQ_Q|bKnyWg7ce_x(SBdgTm`&IsNRVE}u zZ_jA<W)rw$zR^N-vffuERCbhSM|gZ>sNjQ07U`zgKxUMxbCjoCZ|K1#I;@1-=J);s z-H!~PY5iole%RPe&Y<4}EM1<q=KS&$4ZJ+{6b)I@I4t!<`ta({TXM^g2EEyegYe{a z#$L7fUo}Q)_e}>{+RI-4>*sMD_ldW(mlDQ@b|B2KU+57;*dZIv{p%ll#kPWmpr24+ z!d2N?qakZmSIiIa=ka`|Jn)!J)5i3V`uX;k^^40MqHa{P-samM+V!{ITteg{t;>F^ zKOSlvmwFMoiPO7v>R;@pf&+hg54g3gmIgxtGu~d?t632pKa%X}=M{~Y`&*Oz>7BlA zsty(rYrn41HUExk&ab1G8X|NF@{}1b+Wq5}cq%u-#@_}LI}P4K8WzjMrSFQ$mrotQ zXva^j-r(`?4j<zyE-8;6b<f!snKqdjGm(hELK;OFMNk?BL=ai*S?mF!8y`Y@e`1mW z3oOY-@xUB%_Ec@appuou0VD8Avax_@!D#i{fEf|IDyNDXc9(E0ieM>sHP5GC8&6?? z4Xc)`#(@9Pw$^|89J&aUge>VlF{$Ut>csdQ2_eKR1tK?XJsG1fP?E~Q+-WJgOkL6& z5-i-4ev<xJ0M1AF<Y$+l44_(szCmy??DMAGMv5fI<EFDg3~dYpeR4Ihq!{8$cTUV7 ziWY?NS7d4`nq8p3{?}HRe~my~4P;Z?Zp_g4cJ|>&1+bq$t8;8cryn4sFze^`g;*tQ zrJ!K)%J8yP7=?3}$pf_9C|N-6Q`wNlRxqm}NmUH*{-}NCJYPM>3z3v7^))r8^S;UF zS_$pf*4xEdImjfh4AZ?#=-!%3fy8}6&X9MpV1fD|3b$H!keIg)h^)E;`I)R{z{z-i zW@^vUla=}j$FIw(q|exSjO_rf8b|YGnZeh($m;Ut>8QDGDow!4&DekhKe<*U<21W8 zOkBU`S5nroj%{NBw6L)%G08Aj1*@PoQ39^r^cVDynLYb+AV@LjaU+!QmBjl}`6~N3 z8zIyK-I?#zwh)PI@{@_g;&$(_Q}k`3qw(?_%X=;iRiP)a#!`JS&D%%dO^3rE%|Gy| zj4IiSI{{o!!0zZyTr9)HKR>`2UH``3zZB0Vlw3vqV&Xx_Eq0%DngiSL{3$a*eU!Pz z-(5@CEb$o4R8d-2`Uick`S(^Fk7N6%Cab;duNYt33Lie+V3Zs_A-rCQ%Cn@WI}Y{| zYX-p86+|!=;+SsJ)3Sc26aJjj>l{qGAS7a#lFy&hACGKH2uvJf!;@P!uGQZCTQ4)x za^GdWa{oLLB&LUKPgaLyGg>NKcEJ*DgO>RasO5`7SQWWx)2LgC+^FD?G(W^VhYzj| zY6Y%~?o<QNDAq}PsTMBJ($cB4Ejcr0X^IDTT?DGrS`Jz&44moE8r4}-<T$1|njM9t zz2gz8-D=&SW1hcB$hwvTs!FgX!-0Rd3zv}Oz^XgnqBqd-bY$i8<I)7E_QbamXfC!Y z3Pd?Vpq@8vw0|4W$7!Gf7;^MQ8r9u|NWsiEp>`FScpOU9;<iW5ygxRZhR@eOaw)kN z!E+ckY;bO~saPFOWJOlt#<LAo8BaM7^gQ23rA4McPQM(#tcxiZ$A1S3E_I9$yGXh> z7hRES-H>zbA-!$A@c(-&9%s+}V{!&r*l_1qJb@(FeRC>BPYXH27!=_|to&VbQdh&a zqc~2~{?6JgGM$=3)Kr9`&FgOMIL4`Fpr47p40hFe<iC1Lv-vf-ST#F1*c<5-eJkir zKH!z;ue%pV$c{(IkyYK(Yql#$hAT+2RKQjI;nhDL$3+VkGqRNg(Ffza+A*D-_V3}g zSkvUnoOPD(hn3&&k4@!OK<m!zc4z+(P*gmDJI9(Wv=}`ea`5Bmv^bu(PTm^3c5g)w z6O9q=p}W^>{A4F1j}dyJtjS!K^2TXIWs1QzncMij<@|DLIV9ja=$v|;C2syn2h;Qu zefw@V9>2pY-5XtmhAFoSG)Z3?z%*$_ovTPvDYD0=#|8*$LGXn%_%!*XZpkBdBX=V- z7<sl~Cz7R+q0qDv8a+t$s`V5DOy?C7B<-)eD@vjzRWg@E<7U<>7Nm!4)xm{Bu?{65 z1}^fs_wNhxly5cv>V0?Y_<mqJJ6*Fnk*)UsD!c2bsK4-E^mLaZ-6|r|-7R9$-Hmj2 zGlbGA2uQ04(%s$N-Q8US3<GzM-`~CKob$(7>(0xybRh#HFysF0=Xu`STmB$0;z-Zu zXw^HGm)G*+sA4xr2jHoD_Q>V=w&E}{Yo}&p2{|f(y>R``@w4j2qnpM(n4+uRgsa+= zlyA%p?S)u|`TK#yA6(0Vy^e8fsCe`D{+e{<;vap9a#d1yC0%_1vGc;EI=`cv*yZm4 z#+TH`BC>8ldkaPGO^Y-?T}Ns^(zN48P>~AYIZ<u$_uFFCNFgW+7CPvz2-3$XO1GGY z4?Id{Hq`hCU=ds+C_3tQc#>>M6{`Ux<35d>XME{l0g(V+@tabhb}8@nUb9vkXgwAP zZQ{Dc-(Je`|8*A?K%BDN4rYV$0<g$HrIh|EdD%Xw30Zq2T%GX98#m{H;*$)F_cWZY z&Ev?1qSgSe&k)qdU#D%=>e(fRH>3f1|KIJcOyJUsCN-pQ^76vi8PF-Rjy2a`bM};# z8R!9B$T6r$>SqO;WUc{AsnHkiXwNX7q4+rMe0zs<b9BCh{3u(MRZ9J9JktEn`JYJn zO=Wk5yq*4%U>V@4o%TH&WOclnF;r>HIn+L2s0bUUMX3-OKUAzkCD-S!H}$|iHR$)} zx|i*y`6lwr9dG;F`J0=k#m7|u=G<lFf$bdRLnwfu`R`@jXi*rRSI}1a=W2iGCg=iv z4_DTmMWVmx53He9cHyU8VC$0*Ih+{DKzo2=U1tk`_yqt+pF)3Te#H7N!s@Phh%~2E z`O8KwaDph0L0zVKmnE+#zY*mm%|oFcGv9<}kM_<iVsEv!nn3OETeT~b7vjVnA?fct zQl~uOD|;19hW;&g(r?(^K7xwn-J3R&e8Uciq9N!RCXh@OcHO<TZNsDvvr08dMXfpr z_G@MGhas!96<z=EXJrh@`LJYQA?z$?^y1!*SLR9~d-|c~e#x{+N!R|F^4A9grp)i{ zhVC8X6d6^q`Cyfa`l-o+0*;Lh??>O8bDvfE-^T}z3=eavq$olVoBG4?g`y}m&UAsY zMgJmEXdcMmaV1u5y82_iyH@xw<O4tIF=GBD{`OPK196mue?cjZaxaNL@OGP=CXWBV zVJdPZ4C`2Of<a)f^k0<9C&zEe^X)cRbYDm^H~)K^Qg9EE`4?HznEvqp87rrheF-uz zy8BK`eS&e$?x6UYe<S5nR|6(%$FuCTBK}RfV~&2WEJs&*H~z4KbBh)pbG9T9%$FmD zuL#S7Pu#^$KPizjCM@3nI5SfEq+4Jk`E;O^^e=b_N}-RoI42XPfUsMxYm?Ki#BWRY zQ`bXO(km=JAsoN25t_pS=`j4ru}B+Oy|m6zJauUky85)Uz*pndjM0l}Hi<a8UP6Wg z<Jpe#h|N>`NaIIliOE+|hzIfECGiLvo*X{F;OBmOc(ou&=rs)a`SZnC?|&bGLRps| zSI4FVeMHZNY(XlL#H3@oloYy*cnp!U=sX=Jt6V43wyw8`C<$KP;nn}iqjCKI@@USE z<|z3#T1B1{_Cn}cdc#YN|NE+VxO^Gm)_#Q=q1C@ys_qQE-NVcLw}LgCnJCRO(-;=o zrFM<}7sny9HX_@jTpGu!xTp-gu;z1*iS3B1h!tVHu{odFE_2}7Fz+3BL^SeP`(;AK zi+}MqWMhLV>2-jJYQ9d1U5CHY>R12N|6*^3pMT)Bp!ok2lk<N|+&L?HSMmx4`)R<e zqHPX8+C{mSwiy1jQ5em?p-tQ2f0u>LE`NC7;+@_RRUWvJo}Hp5wA~yV38(Mq6Lg)V zEPs_N%_5pz^Y+o_9oi1=IL4~y0qRj41p2?y$|1jTVmHzO!v7}9^9Qw3%Y-r6iS?e< zzDKJHwZmVa3|b@VVu+TJwD?svG9y}FB-hykx?(82xi3xk1Fy<XEY^mkH!u44lBNO? z{S$%;u4%iXB=vM>e*G{m2k{M`-s?w(%>gSbI}<L}wMU_?2O)E~RWeRv>wkJaFm#9k zG*18erKD7eNM52BTiZ-c7jk(_BLu*phf8(-gzA?Fg!<Vxe*xxo>OP_G&Um9VV*rD# z^6c;OH?dIZMO;sgfE13czH9RayQzi3Iz7x7G=$>6b}9>hgqMSf<q7>8=}19N%SSxE zP)Zr2mOWg3gJa>~3S4WlNrIOWBMRrJQ_i64d8mboY^nOHQ`RB<P<#O{j%Vbww?5fZ zV07tRmYxi!{;j5vm!?j$j#4AZ9w2N*QxS~=k)XXjS&orPD(F`?UxEvw58(VD;f0vk z(|N<D=Zbl(EhYz9tFHz+?AiTL|9(M;Z4&kOymLa#<u?BemBo*sG@Ki)%(8vw;O+zj zHQxkYpzg^mFzt#fL9uh1itZY3VDuRuB$EU94X-OUroI~_EJB^EPYZggp0#!6L@81I zqIc2Rt{k={LPQ!ka!56*0K|+J47RN{Kyy`%z4OxMaH&yWC>xb@!kC`CyAXckh3_70 zl4D^h`j5_-Z<VRuU~P&k#iiPehM55gmL<g~_isksB{$!>3)|QkzA|fbjpw(G$FSC; zz@n@0qJF}h!6hO8ty>y2IfUjhdr^4jn7w44SHW&YE+zpFwYgw_wYzV~5UIG%6{~J{ zL##IgS*u;h0!|&e#@C{!25&-h41W53zCr)$i$D)un0I$x3Tb5yQNhVZqMB~TC>AyJ zY(7O2v~!wYuf|4^M#$)>CEe4`hw$sn+1Qqm)C+sK9`7D6`!f+H`|E}C$%r6$tZh@t zEeYbl3>NQC?-Hcms42&*9xrY-40u!d+z&v(_#nROwpyk}h(1(YKhhtNs4u;Z-zZ`Y z3+}*<ASQ+6=7i@qe}kk`->w@b3Ylz1Ch<sCDFdg2uo$@bC2ac0$S?1@V6!SH)`+1^ zI#lZNX8&SlPwG*)v=UhM1`2q769`<R-V#&<bJ$2;W66t>&yq}oe3TI7$<&`JE;!X) zbwHc<uSKeh#pfQzN5tOg)86+>U7wlcMIBeM6O}w)ZBWFolpX>ErXn-)m8e!K$+Pr4 zrlI{vF5AO_4iDv9u?5>12m-swt{>A`vHmUj-T9Dw!Np~4<U?i)8Ghr(W7(biXx@b% zhfQmpcT_O@{jj1spM{M*c8B7lmPSmN^nb%GlEI%jA7G4XgK1tv;^b+x*H0gAzqb&E zbU#XZObkk729ub3Ym;3CF*3M%08PF4)kRAYA;vxK9oa3%e8b>zQEL;<J<cn9T0W0) z!%r-c09w)$XH$YtX2waH7{;ZEtj|zEbbyq3@B1X|R`qEdoicsI_y@gvkDe3RcJ3Y^ zbAdWRs49UZ1H(JuDJSGjpY+i_v!ve-Y4E^ena3PxI*J^oai5p+Q~`)x>~|N(8?b9L z5i-igwRTyhB8k`9tCh)*Xckv!hPC$cT_-cBegaN&)f{{JlMQ%+YmsNE?o{3^m+Jd$ zSL+oD`mlAr>BI^yYZKCS&rKj`HSg+0qoL=_Y3YX9vE{~CZ#Kzzik7qaK$7CU3w-QC zK_&`xP>d%ciL3eKUa2A{;~@}9gwu7z&>JLxIV}b=zuw!p>)1(_0*zT;QS!v<tNjiO z4sqOXa|(76HDbEq4UfE;N&jo_ey;R3?jgGP)iNqCvyJlfZ=xUhcBQpFR>u@uJcAb0 z&&lF&d(ny5LI0s7q9KQwb4C!rN|4i|b@f!;f&2XX_CB$5ncuD+;q;tYH~W^*LR%!J z?_J+~T)*Pkc9s#T)cM?``R^B%C)uySxF}rdLQbl#+|BY}G-KhfTlQ>f&`r^Vf5Dyg zGH<_S;uxo5CkrU$7<TiTQgRzXsp^)d;TZ1=MQRS$Yl-L{0!~n`DBMVZ-rxQ1@OFW| zs>jxe>eCnF-{jc;vw&dIK{ysa^qq$Zs(NLOvc&5LA_|s@EoVQsWQQUQcgz6veIr6| zN%=1->yN6352UMb7YtXei4BskDED<L?PnUzvY;Z&)_1NtzwX^|wjK>Kr=Tu%_><l1 ziBb!BtS^6oWC$|LhZA#tlEMp`6|;usFA#f0?+F!d3FdegAGXwDwlK~B6s&2b9=)r~ zoTlX5coeaYjB9T@NvcmaqXg{hvBO|AhwjyM)QBsUVM;r`hKX}^m1WQ%=zVlk7B$mp z^MrM}$?!f1PDJqlK<>pc3n@i$*>D9i`#RXk>U4weFky82{zN`)2m!dd%P8|d+^rW2 zJd5{lO85E-+sygPD3)~^H*`LEFt28PN-%6O!KKwXCinSz^JbUnui=sTk-0yiMez^2 z56~rsx!%fBwtVt3<Nk0ihupcpcG<N_bOCCqxhk%TB86_c2ZH3a*4u@dbs2;C!ezVt zC_1<Z&4d!S^#A6X=>{>=2u10z&b|-nh}#RL?D-Z#YZfy^iU2|;8-?k#;*j_PjY|C) z%0<n~&QgKzf!iElD&L)6G*%L&<t_s*1%oL18DD?iV3O9Gsx5TY%Y1cBxnUiLDItR3 zptn)m>q??IRa$7Khr2CB=p}hMvj1yFZpCS$PmMz(1V7#W%BOA1!T9KN1Jfl+m{7mb z>l@*nz28ME$reqXm&q0k)z%JE%Y}+YCLvKI{EP6T_4FWfEIMwB(ZS!TZy>SrfUe>n z=CL?SdXXOaQsVOZ=~Lsrh~vVwy67X}Aom<#+m<FV#WCFe(X;m!GbBUmqB<w6<v#Tr zYix93+qZzv^wm{omw-3{yM0~#!Rckgo`m4RayevdxjX5JMRW@C##g5|HE2$8)Qoac z$tSj*RTPB3x*}<Lyzr*OW&n6e`f8KGE4k=sY8vbseS~6@;b<uljKI@EfStP0^J;S? z*<rgslP7GjnMXnFY@A2IvX*ZlD^CP0ntG<c6}zu4e)eWUfq=PiMOcpSxcG8et3}8V z4!MD+&&El7=BqwRHtTXU?a{B_{r87xz4rtE@MbYDo4RldQ>+}s+ZXwGGqxXmntM=% zdKGGag>f0V#N#*Q;c<6+wv{eH*a-K9!4?A<&c)Y#yJ1A{Clvsh=H-AEWJn8h7l8Ru z!Fv`Jv{+tG!4VxCM3P9zlK<M`@{ML!EW@&CLJzp+Oe(tq4&N;#)N(M?8+bGw`xTe1 z4MvNIv`S)dA0PTZyC(-1Td~-_Jm&+$0t|T?>P7kb8DQ&@CA$Ug2<=*+3)4t$oIRiT zv%Jt(mjLy(F$#yQW(aDY2J{{`uLQQCwg`>_4-pY=B1c6IPAluJJ;m^(gCQG#3>-=l z-WMOy!YhmmG$G!h0LFRQk;T%`U6H*_Q&(oZ3`>~$aFg^s4xFX=GX;}*N+Po5+GuB1 z6y$asP@QgcfsG!#TlpNogp!7Z)b|?UL)D);7Z<tyh(t0j!iR`Hz<k`+SJPNjiU#UH z=w{iEAuDm*Tqbpe{Isik7))%!U2RFtmyB1zHf>gvWO7hX#Qi{5k(4<iPB!*RepTf2 zQFGLpz~GV~VdK@RHzr&-OAtVeA8j3)!5It1biJ!D1CSRmUFe2s<RgW-cH5u7u6PTe zXz5ITuUIji`lhGg7SbqobGbc-n%{u%R;gQNb;<qJ6-U;xWJ_QWsssFNFWumt8tX|U zr(#}?+V~5iaqb*5#dlcjbh_fzK07f*FP}eni>65mEQTQSJ~)%=$K;}uoE|cg2!rE+ z>u&Z!$Zo!H-k@TP*Eni!T8`Jx-OqJLO;&BW_<8)nUIr7e+(nIy*}ThKu}?g!k%FjX z@&<ywE4=M!oq*MUKfq>Iz2k9z4X=8RzpXG4#lK`!!j9|dH8tZ_rBF1Jj7Q!q8>o{l zCq8&7l9Qq*ROeJV(<P-!Jn@om7&-z3uD|Mu`bxFndrydS{~jSnGs`$WT&<tQlp&Z1 z<ssEG{`WRmH6+d~o9e9A70_t#67Ue+8F!PkKcv4eDS?LrHBYnSMJ%EgK~CL31GIpY zMvVe}HtP!i_0x_%G7f{_@gWrn1vqu^<42hRqw1icCj^54pPEuIU_<A-y;h?u6s}`e z3??m+DWCGcwu!}hYnD~2Oc7k>Ksp%f#dl$~t5&`0(6JH@0n1^%+S(l%x*H@gj$nCN z%S*vJM-C*`O~Jfv1m-}Y7_V2+EQfnslwij68~#fosdjjbinb;tEB<$kVtDuElew4x zj_a=+fzLop0l5_w0C9{5)U@&%+`$v5SW!ud8QY$-Ml0gPxSpJl;$KrtP>?(BBAZ85 ze#hOHy|SXAMsX@U8hn8H<V9Jktq6$iL94>EqnJN!3}f){I6hupF&rEElm0<s8SFQp zc&QbEe+2*C?3MKzA6W5?PUzXW)y!;|LngHID%7nJbKCUf?g)}zb?0t72Zsjkwe|o9 zxjO}r<f`Lqb5SzUwM?=`vZjWEQB~e;m$1NINAsKat!3OOR&Yo$5h*=YUuP+opxDZJ z@EEb-*yNvr4|ApJ-bWuTf(fyyKy~72wPqcl;`FJ2SLw&|56fN^dlQ8kkYdCrkzKQi zXs3x88ztu}$|q4@h~SRrT_bc5)>!mXq~G$pzX_<lgwI{JvGoh;wLL3p?@#J)yf2`; zgakDRv0I4%R%vZMd!9`H8dpr0sNJHKN^2bFhQeSXVjUzhV*9flRw5TdOXAhcmu@XS z<r8pso-L8mCz#;Kj*2se3n2PrI(jz-FMiZ_3^As@6HY)omATHm9ZpI7b^G=7T`xx< zeHDFGhI03NHSOR->;>Xl%%6VYH_W?CM8q90xgM-@3cV+Q%;H*e<Tnsevy14uRqIY# z9nlOBi9gL(*D5I0M(4vra5$cBF~N)pBxiW_=|SuwZ-b?mN+Jmli@7>pq?g$^%P;*v zjCWM5w#DQ1vM0sNS0&3`L39j!FM!_qi4MQZGCJy1gl4XB;1T(tL+BFBBRZQ}K`0HS zizQlvx=3>L=Wp3J5t6E86SA(aJy|zO;<_>nby_NeYz-sWDiP}mv0eTZp)Tj>Eou<N zR7F<TfK_&CzA?~?+SV7EfX~tPC0b6Hb_c5t?gl%!gj~8E9L&xkBO-(ZXvml_rsFGE ztTjlf2LyjO@}j=P9FcNCTHr_6*3PnyFH~#JtJJV9nuUsUK;IpX%>Sy9GdkLB$b%M! zUgvEV{b<6$nIy~S&?MwWM6n#(ZqD^rQMl}nl_+$H-|ndtTZSGpjQx3&{LJ=8^B+P1 z-|8Ki*To+I^#6L8$*A;fTuL59rgQqWUSS_69&#<12!C8`^n`65WOi;)CRpoYq)&+F z`Km*HB?DB?TizBw)V=Y-eTW0l&j|q(?YdkV{pdn!^6@Gy;^V-h{8!ph<&@W5Ll(Au zv)?Q5+3g$ZFHY4J>q+c8sB(L(N`Iiip!-W@{zLPNUOz8h?tM0tX!Q$*W5u>@I0&VD zz3Sahn-MGXmiE&H=9lIZ5l=gjVYqiKMIEqW4ozOLcMCIE=Qt(9PIBhiG9L`tVaYB^ zX?)mP6l{Rqgu=FHeWD)$ZGJKg#C{cASV!-{{YusxNQ@~@Er`5_SwL6rM`YTVd~LT` zXIRte6tzL=ad})8mM(@TChZ-3iG_aJ!_-uM=fwawz3Dms<{-G{(7A#)?Em*(`JPcR zbyqd4)hT2Hr%y`yBk(-Mdu^U-YcT*<i>#F0RO%43hHl*tsWdI0X)h4^;ONPs+_LM@ zRD%IDba!OpSDsu#+F~gp4J9epO06Onrzqdw49>E*l1F23aAk$LZn_0P3PS*N(}mvJ zcvoEMQ3S)I?uIAOXf#CXFq8H1=Sv`T*|!B21eID4a@`tFMZMskm{YYUzN)zaf@EbQ z!bzbk16lS(0O57=nZTAk#w+fxUz#72mSE+J=(txN;*sLBQfl&Y`m_7$-PE4Dauz_# z7stHX7A?KA4^lCHMtyuTE15iE`>Kip-^3y&Rm_cFutNlZ$QA>fnj%^NGHAKcEz`)@ z=`{CfJq}*MzT=h(K<t7r)%wRQIMr>q^{rg^6+yil=v3e4B3eZ!C2H<^E)-g$6zqMx z)>N+iI-xv`p#Kn7cvx4<F|AQnWNv`}i6NA{TYdlt+0UB+ZwtyQ0NBvx(1Dh+ymUSI zzSXvPC2ac8q{S}*&JNRqdb?jgDY?<~&8KZlJnKl|*pxKa1jx-T#2~z{QFAD)LVqCJ z7~$$jUMm9+MYBES&r&d=y7*|PJg7yR)~^|dI09#NtnB|bpgU)*H&KJvARBoQz&7k_ z2d!Dy3L4-_HsS9w9J!X=B1;YHw*4~qxGGSTW2o<Jvlvr_eI#;{qJT$RX12WC(sGPG z-&J$3c(Pd5?u*V-5B@Wo%^AEO(e}cPJ02c(htAIF$+&!}R>Bi5D2}qa4>S&S3x$<w z{zjv<St1xx%}rxC{YZJ19Vi<M5IsL)0g@%iemnq>MHbv^k6bV>a=p|Va6l#_md!y) zMb{+l@ObH8GnIGSujPbM-l}EgDwDAKRbI`kTAcYLrJds=N-SdJbOPdbKDuKCJB<<x z{vkc|Zg~6T(_BO^!92rG@onoVZXbtae=?VSXFawSap^PD4*~sJNoCv?N~^9fq+fo* zLgvzYPd3&96FY*|FG0w-4Z3|8h=s{TfR;Non8pEJMnZKyJxe#vrZLS;6axL_XJ2Ew zPlZ48wsBge1hFuQP}`BXkmB^;a%7RIdKDm2U?9<hG^rxOGEvrig%i~nV7&Ro9V$pu z-sIDMrHNNYZq9{QtGn%#*@u3$d#kb4Buv=GM3^q>!#z%`?yY%XWGFG<_XEy*_AS{l z1VCqGrhlJAdzBb-P5zL8k@~G5+Fn)RQmr3Lq^Dp1nMqohT67+@hEPyr7|@lv7Z-14 zrbR*CN))Q7d>Afz+KtLz`X!1!G#n)DT|57sP|3?y$839#KqS}xz!9ze18B!Zli@*l zU68IVadEke42sKwL~<QUj_3T)(^XZPQ|9Y99~@KE8A<+O#2&5!l&)|sxBf*@>j;J% z6}2sr2|=U~=O$9WHjni{J|B@7hnN1js3G<{O%$*!_FucjkBecW(-9~2(SQ|R>fy^{ zBS?zOjttreHff(v{464Ex$<1wib}`KPLsH}{kz4?wVV~T!&>2~c~-n>G@Sb?kFvl@ zGB3VBy;2+d!=6CFQn@%<HYNaBcwP6!?MX}VJU|^S;duLbO`*BY^Judn88dz2CV$eR zg5J(?9z>dE6;<UA;~8n42^XCStLkbx8g+zlPWu+a4BfB1CZ_Tl_0h{Nhh`<LB_b=S zZG~nZ3KJfRR-YN>@c)@jv@&UCm;<QBp%XwLU%nCk_Nj|!t>|lIFb#oj9`i%Y>hk$j z$5q4$*%SBu{ESC0Lf$ew&qQQ%%&(GG^}9}uoAPOW!0>!Y`$eulJug{bputYqBh(WJ zybA!3wh4EDz#*mdU*d9^ep5Gkd+vPx@?hYT0%e!vBHRo8rL2;YDw>_sx8%)~{QDtX zMZ|M}c%jKcp+;=uG7duMEZ%?3i5V>*x_Im%)9uf2A9739JTwLn>vQ-t9A8K$mU#{C z3gxZT*)G|_?5J3E%N<5qWjUGb<rh;#$sdS6_IW9Ib+-zOIO2%qk+AR^^bwrCG@OIj z8cDYYf5Lv?K))v085k)t<(Yleum=SNT+SKqQmCnYBC|zr(nE6}-nCy8bS?S#W&HiK zNN1G;bNu#H{Z~evggkx$@?^q#+b+oYCItY4we#d={=jixfC0uWH<Ebj-Ojl}woI!E zwgTh43{Imz<$Ys;l1dV>imtwv%B*lWE_QOb7RVF855PbSUp)#Ceo6C_Ah4e&$%1=G za(pJIOvz$p_*+<-==oC{`<jN0%kK`(Ljxe%C16z1GKV+#w(Q#CY^Zhg+dBnzF-vwG zFnp|fM<rDI2EkCPqcq%%WZ6uA(<}p(W*g}S9l;QbCzztO8HXi5Kp3)zSI9&DY?}!% zO77!Nuw~Dn$^y_+U%2Lu|9v=~qxs7?YHpA-YNYd{3GX92)_Kk9FJHYZ5f#wp+$1%g zJafa7kPb3Z1H-|roSjLRC5RodK=P7}Uzw24*`mOa?-}jW=-1R=1X0?}9JO>qmu*|- zf~s1&79<Yu9Nlxi7(8j}JdkJm<Mgp(<M;asUMr;tZOOJ|e0%<SY+?lkQLz)=mxa-~ zG&Pi~57&Sd>x3e`Mz_GXM;cyDqcBAyr;r|!X9=zF-+~aelC#_-!ys%7T-IWw{63w8 zDt1CUnt9=B*8t(Oz5XH|x)-)Z<qe~5n&g$7Hb&%+Fc6wo&f9jv#*BJCGctWo3E<l5 zOrdfnaB&5)lJ*W5PL6njJ1$CdUh(BBU1FRFrL74a3cGJL{Os4*WI1a=C)4F@`jKKb z+ffl=O@=uZCQm2q`<(iErJGRB56LW%`#lAQV<STG)@|CE_u#$1%*Tp3tEvgRV%#bK zQ%FiamiReySiFF^z0ab@usuS?)8vLvq$7_hwMoifd{jeXBPbUfUTwCWQcAI0hi?0i zB2ptx)B3#GkA#+e7q@(4jkw>31}<RN5xX%p@BW^6llKj=JcjS^m-wDscFd8rMRf>} zE@|SuCCmyNMP-#iSngQiAn<n-94FT?v56|VZ)#dnnJOwY(39|RT!`4y*TqcN@;8Sk z@sWp804*2wd!AEghFz01I_@?h8Xh4Uhkl95ZC;-)i1rwU1+wksm#C}9mz5#!@acbR zzpjY2+T<D5OLnuJt-!A3+nvnOd6FYdk{g$K=)JL2#U~tP`5x6QgIkf}(=}eJk1S5F zZ4p#LMi!2RwhEez{Mwb>nCs&7ZkLz_G384V^q1G0djh{1UCpmJhYg{}pwr@tk_JS6 zRpQ1mMRYVeupjF#*GN9M(Vea?J~42&{xzG!|3c8-ZE?SzV*8aqZ6F9N46lg2Fq#b0 zqLaR3x=vsBKV_oPG>PJSuD}97jI%VE)&0fv7n|z?Jy99F{Vs3!ujwa0@fqU}N9doU zY&}OPZUpV$H{TKKD*xKE$}QWWIRYm2bWLAlzHUW|7cv9#;*B&uB3Et!uWTtREXPA( ze|G-<$^MasvgF#h=Q9<U!nD=nNsrmr;>1aPe{ogR<sWieb-L8s6!yp^E9&6m+(_lG zm7N_01%I#F8JL<Nj@$|s^MLY?EMAE7yFoUgs^9q&iz1-#_niF`?kbArt<_0hM^T)I zWjuNA)32{lDA?P~JecvSzoqV@u{(Z#mk1@d0o`t_{8~1p(`c&!g7gIQTbfy~<3rUb z)h)5qpc)GXt`a$cRvDC7Aj~hq<~8?Iim!OFJe(GWgG=KICBi1Iox6B(RO)t`HAeJ9 zy=AAYpT4dB7Q~)GEyXk?<lOpRZ!oI=)|>f&vHM37ACL93Piw2yf_8V}4P+i1$NEU> zJo)CD1ONSp>ux^RUzudfAkGJnfCBqVUgR2u!*8&RdFPEZ7ASRfrK|0pHV$*Ut{&o+ zIUnxC(pykn5NpRX@}3t`t?pQ`sx7tossBOJlSBXd(VwkTB#ni~eA93%Xx>6mvxQHm z#U||S`NnqNh_-oBSlH=j0DJnNWX_~2?5mgqF(Q)SPe4Aib?*;<pL;tcJ#dAIZW<gJ z`#{oKdyLYd85y(qLj{1&^(yj#Nw1e%zowZM5ZDE!UGnxJEUf@d_7IPE^^A)_L0{0H z;Jykn3IRHnT*^OxunBr=pmvixs_`$m6!Uv&Tvn`Y5`fKBV65Fy9<*zlS5@FgClI+U zKH~cmCP^T)j)Z8uAp}v3e|}3zIsx2_gpdC{g}2$SelAA@ab!rcDdMUwe^^}q5X;e% zu>Q_aZwN7fIIK3JHWJ^Omfm3+(L?&J<)-|?a&L@Ypf}3tmk_an6fEcx{U9^rgH&=5 ze_YB&JYVlO1p3>MrejP*_$~dIS?&9<dPdK8r{4_+%hy2Dm|4LMdtp&N`aIhoHlnTC zLD$qh<yE!E+Mm^bl8_tlG@AS1;}ntUbJY9YuaO+Sm{+UD#T%kX;}OODS@Drg8*)s# z*h-b+?|L_JtwAK;`sNm*jQ3YyB6;`2^Lky6nq%$^xft5%LAOdsd=ntCJ?~;yE7EPN zS)n}fR*fZa;c49)w{HOjHfAi_7JEQj$QHY(`$`RL$~SW%#Eon=(60%QVAL;m^F&ZA zaIEN@pj`6w|5s+nw9WvKdS9FU=6+b+N>Uh*`1IN5H?h8)FvCl!=jF`6^*tOefun~& zzqON+?VN^j^7l&B2S<1PF`3lN9~+g*z<*mLOo*Sd#~TH4RmzJ&w;|WKXJjZUiLH;E zZ!-_%=Ta+0uBRv@i4mvCU>~s}D5^hai6a3Klsr^UI$M>4w)j1CjQ(-A56~XG9QKX; z<|B0NbZXWOdwdj8&++_Zmv@4UB|#mGqt4Q}xTNmsVnU)?It@`tA*>i$ct6`Y<N0^w zMq_@{1yYgNsa7i?2WJ&O`o4*zQw2&o^Hu>1e0A1tQ+NLUEx18sXdD6I*(_;=9+d17 z&eutOLyAt7&hvNGa7XXg7YImIrog($RC1}PnP;z)V97~)CoxrEe7-4Tj=(t8F8;C3 zT2-e#KH3CU?gQ1eK^UUh;hrF@ih9w>16Oxd4`4V{oX@P5p<g6Bihwd)PE2c<7=#4( zV#gD|NM@;CV)@LDK(t2+U>KK^v%N}Q3)Zu%o_DB0CQuL--8p^=iZR$wu4P~2@I2A) zZmb8Il#gz;kF8sZGJ>Boyv2G>_X3c<Cf-npYYMyhdjIIol|`C3K3hFa+w;XVK{1V? zNWfPweNTxkcnXwfpRUBe{qBLG&%#yh$wl4KQU;|e1P6wCiMdZ0AQ}c>(t};k7Q3<q z^SS{=PuUHUc#V0funrw+9e%r+YO^OcS1xVYRN^7~?SOZV2RvasTl~VPYncY(ju(1N zy293~6Yw?n_lv)h@3coB=8CAf=N_W*+t1b8o?YG_P1=^tnO6-Ai)MOCpP>;2K2}5v z`kMcgrHAOw<7#asrtL7aj_T0P16t}%H}C5JmBJ##29P(tJH4wxH;yHLiXjyd&!%3f ziCxH|r%_v2f98kSb!lol`Mvh0>zm^B>y0PzF^PF*iS=s4a0DZZ<WyU?%9X`;Ek}l! zBJ{s4UysH9iA_ug2;X96K}L~(r=NfGQ@mKqrPF|uQyVz?be!1FzrxKWRb|V;(Qwya z@N{KbrvkZsg!Ih!BXrSs4(FKDi=N(F2dT_65#I?$rGx{{u(loyKFLsjUy!JMpK+?> z-q$oqq@J$t>vgfC$k$}$H{qk0@V9T=jGq1TyVZv_l*N|Ke~^oJXViuYy-1y!2H^bA zx%(x1d0l`ypSr}Uz4t-!&iEgdWck3?MA(m!5yOtI4^+<zH}wXna^b26*;Wz@HHTn* zPW<>;b9SwQYx?f;0i!*Kr#H5ZU1iP8rg^Mk0)UA)QsywD%{gU_+O)qvF^P*<eOm)q zsVi!N-P9GeC=LMlzhln7h%e7JR|Hz4euNwC5$gDRK+hKMUcsmi>;s07(vihcB?rHQ zdCOtKQ6PwsgU!>j=beMiT1iwFKccv`EU}YAoVtxB2c=u^cadP#Yjn9D-N?AtzOT5m zjy>vuu6r-njky0hdi7DDe&N^+s#G8eu4nFe-Y@>OU9>;*ONO@GeTTEbbm(E=pdi9- zd?&~}5=*-7^?EOpQQ3w0-oRvr|GWF|cLepq`1p8$p><ioKqWtf<U(WIK#6Ys?9}sG zw40z5vX4YCf^a;ZlD#R)huLni%5ySf08Ms%zNa|Jkf`hGG|{8BvM}r}vxFbQ)(O1& zltjlPVJ`kCnvGgV@cUP`-KJJmewGF)M1y>B=22)P)lF;MrOK>=C1Fpksb1-zF26jR zD(-~z$HwgIv`y~}C&P{A-azP`H?y@19hu6c^dTuCrad1PxPV-T>V~=OklmI_;2tF1 z2fRC@>+Qi|VoAwI+M-Oi_9^6g%BrB5R!nW&*YQ1q4O64aV8PE-WWT7oY4t9=*yCum zAp+X^hmha5cn7sx;;aADd#vu-(!zXP`MeZ$p@JZ#lV7WH9WoWD69lStxb`Ez8s$J^ zZtLGC+0iM&C{_9PT1%y&!%3MuG8V0YbOg5!%b0>yJM({>lj%?2uE%$?5RD1_aei;{ zX`5(-;U{X!x2<&{Y!ScdleTC&!;wx|Dl*&P0ed??=d<M4IgTm=I|*<kLn6{!`>d)_ zDzB+sy*zieZJW87$}+a+ci~M=WZpN2&I?<$L+ERg2!dZ+AMd>+?M^=ZQ;(fAh~RLW zu+~I<kFLC#-LH^DSVQd0v?(7<1+m9#<Ra&%o_BC)lhRDA=kzq<ZWjP$-lgso?!MF7 z4cERsPC;vj$z|4$3#G1olWfQaJ|_*Zr3kR%goFG&FF?Bf1Awn9?r`0_flB{9Jj<AQ zU26kq;o348>`GZd)W~qVD|>*zbAhp?_x{AjjWO5ao8E%g2R-%*ez<+RY<X4rw7078 z>|F`9FuW!}g2?wJ-3aFIsPZrT!xN2pz8c;hcY9k+es|WxVnyEi&|8DO0dL`>o%(De z+o=k@DYp=nG5HT7eE8BVA?i2<Xx={1tHYBJlOtMh=yaWf(PW4gnR&}bVjow6$+Gcs zM{`7=1M8LMaf#vdtf%!>L8{Rk2qXS?-hilh0rf>qiczOA;J>~z$VkVwu}fe^n^YKt zpe^y2Np!RjPMU#--^z8z!oB<*^R4v|)(26ovz{LclfmsRpCQDUZSE#bRImlj?qQ2< zo^wUP1_!Sd7s1ohF9|XAcyffaVjk!8+n0NQ%EPdaDYgK9Y4ZNFx+MJIAHSddeY32* zm{tGIlU&*Qbpb;~#szUf`bT*C!d?YlDS*Q65QrQ1JDA&)q7+YyXomzqe=zX)hb%8@ zhun#hkEBp$ilTf#_XDBFn5IlKZ`@E!#1ITIcoL1+w|++}%H=$1o*e^-(<;0scePkN zgw{496L=)2l&6&4IpSNHxIVubK2sf15mS&#aRvBp>#w&4B<wLDO)X2ygow~vrpPcx zngkc!(Fd&JWmo;HJZ~$_@ju`J0iOLPw8u0{Cp6oCb^+<4cKy!{4>RRbX<fa>kts)G zy{F%fA-2BI_OvF;@-145P1>UIMKEdxoRhcs!(#avY^7%d7)D}0z7C%EtT}VqYPlqx z)3LEfuKVi7c<>gbZ}NKqn~sX|t2axUz;p_gre#sN#w-NP`*-tXi2MXlY=<hurY@=R z7WiG}hHVWi7Ofg4ZbXPu-m%yGclHBgk}X~<JsyfNSr>b>9$uA={mf!1I`i+?)|9r1 z^3}LkmT{ePt$L@jjop}LWu;m(cquD*7LpaJY-;avMoJM~1x7aTl8dg%uwIQ927i6X z-rU~*#nO7Og<E3~DTlD^aK5tLHgY^BBGGU*CgNZRt2x-Jl(CDSe^H|*DVCR}He~E} z#@9hd>MfF_{B_0*K`QlwEC0j{8r<qKZ>H!Ouk}*CZ`maxrt9tc!d_$&B@dtZi~adV zXV~C@gU9@eV_28e%hv#wX?@y>SLdGL)#P!(icTyTy<NAC6P$~cCDoD?>Qy4Z0!tpn z%@@w`HHKRVNb#7ew2GccE{GGru!pL})-EHdrf0!z@r_ZX$kVB30LG-7)|{CwnPze& zzpX80dne)+WRwcfY;p_!xh|9w+YLm-O>6p~Y^3&yB)Es_$3VU6r`CplX~md}{Rm8L zN^M#|J(fm%)9<7EFOv3nrrJXFsN8I)(W$y@sjD2R=T+@q2#`F#Ek7P>Rgk)j_cb#x zq=QYnCm*VVytYqK#=oYqCcE-uwCGU%cR1jTE(@cs@21#>`7*7gr_dbo_cdoqPE+?- zKB^DrXHev){o9o*zW)WMJGjUCY5WUd_+|X6BQiWg;wONz%XsnC3;Q)gNZg$Mhn^8V z#}1NqkyV-#0?p_uYI`AYy2X{t$qtIbp|{f#xH8mO()abg2ssVwr30yE=l)D)9sZp} zcWEiRLKDupGSm6RT1I8d^CnxgB2e;|gpsu5Vno~qy*|umj2Vwf{$k13rML+lpfpYR z<-yfu4%RASro;*OFvqDCosp)C%E1^cnLO%!!fL$XVaq(E29sgaqyHpv%>jO~S7hK% z^H>jo{$!$EgV-P>KMr`r$;t<y=jo_d<=X{DlmR@d`vxWc9e0Xwr;EM`4w(rlHB2=c zG<lWOKf)h223fu>K5?q2=ID|+zuCSR*;|>m?$Q^zq|{CFFk6lP9BUO1p!5EG5Y=p( zKc`t$qF9ijEmeW?QMBS@yi+B!wHT-E1s;z*jo8P3jd5AiJ#3CPtJCcz4vVmQsHc53 z2o%ih3!^_QsqR{(g`{i<^*Mi6Ddl$7+$`=lqPS9p{ykKo$%ShkbXiGA9}H9oOfBN2 zF(5R9Ca!DobCNC1fr=qOKqKT+e>f17bEgFVbtBW-9{d@bn4!Vj3wnO2SX^)D+2Vva z)vSb;`kBysr$n@k(C<{*cF$Ek8+!ND^uvBYtO#<2uzY5(%1<m&-->0WDIc}m%hU4T zYsp+`bk{f)rr=uDQx<iqd`)`ATok9#3n71w5grH?d%v?I#tP1e$RN!@w?gI&<%&cG z^V69EQ)WCJO7OMgR$LCwLVn;+JN=#)0;2avYw|JQg4tlx2lp3$e+Pl1)q3<ZCRMF- z`M8!8TH_rUsoNixyku=jk!{L<KG<PZ8xyCB%*;-lrK?iNJSFMF)<|k_k9sa{N-Ol= zIkB0JBKNb$*oYQ*{HRexn&kg+F6{rU;r)L*V)nMEL6`^}jEh9HZZFo&_@Ma*7P2NW z1CsS)G{X<UNco?M0{9-F6hD(jntX}%zy2lL2H#-O>{8PjxG$rNtfq^pk&BtIiIW-l z4T+nRONfmV{NhpN;uGc*5=Q))SD2G?RdZPNf4hUNy{V<S=l^*JL18|g|Lzd0p?nMO tK!f-U&TbaME|xAfW=Qn^%k909r<oHy*Zw$$FL+0!H?s0C3#AQ%{vQPtz3%`3 literal 0 HcmV?d00001 diff --git a/pocketbeagle/images/PB-USB-photo.png b/boards/pocketbeagle/images/PB-USB-photo.png similarity index 100% rename from pocketbeagle/images/PB-USB-photo.png rename to boards/pocketbeagle/images/PB-USB-photo.png diff --git a/pocketbeagle/images/PB-block-diag2.jpg b/boards/pocketbeagle/images/PB-block-diag2.jpg similarity index 100% rename from pocketbeagle/images/PB-block-diag2.jpg rename to boards/pocketbeagle/images/PB-block-diag2.jpg diff --git a/pocketbeagle/images/PB-block-diag3.png b/boards/pocketbeagle/images/PB-block-diag3.png similarity index 100% rename from pocketbeagle/images/PB-block-diag3.png rename to boards/pocketbeagle/images/PB-block-diag3.png diff --git a/pocketbeagle/images/PB-block-diagram.png b/boards/pocketbeagle/images/PB-block-diagram.png similarity index 100% rename from pocketbeagle/images/PB-block-diagram.png rename to boards/pocketbeagle/images/PB-block-diagram.png diff --git a/pocketbeagle/images/PB-card-back-1.jpg b/boards/pocketbeagle/images/PB-card-back-1.jpg similarity index 100% rename from pocketbeagle/images/PB-card-back-1.jpg rename to boards/pocketbeagle/images/PB-card-back-1.jpg diff --git a/pocketbeagle/images/PB-card-back.jpg b/boards/pocketbeagle/images/PB-card-back.jpg similarity index 100% rename from pocketbeagle/images/PB-card-back.jpg rename to boards/pocketbeagle/images/PB-card-back.jpg diff --git a/pocketbeagle/images/PB-card-front-1.jpg b/boards/pocketbeagle/images/PB-card-front-1.jpg similarity index 100% rename from pocketbeagle/images/PB-card-front-1.jpg rename to boards/pocketbeagle/images/PB-card-front-1.jpg diff --git a/pocketbeagle/images/PB-card-front.jpg b/boards/pocketbeagle/images/PB-card-front.jpg similarity index 100% rename from pocketbeagle/images/PB-card-front.jpg rename to boards/pocketbeagle/images/PB-card-front.jpg diff --git a/pocketbeagle/images/PB-header-photo.png b/boards/pocketbeagle/images/PB-header-photo.png similarity index 100% rename from pocketbeagle/images/PB-header-photo.png rename to boards/pocketbeagle/images/PB-header-photo.png diff --git a/pocketbeagle/images/PB-microSDphoto-small.jpg b/boards/pocketbeagle/images/PB-microSDphoto-small.jpg similarity index 100% rename from pocketbeagle/images/PB-microSDphoto-small.jpg rename to boards/pocketbeagle/images/PB-microSDphoto-small.jpg diff --git a/pocketbeagle/images/PB-microSDphoto.jpg b/boards/pocketbeagle/images/PB-microSDphoto.jpg similarity index 100% rename from pocketbeagle/images/PB-microSDphoto.jpg rename to boards/pocketbeagle/images/PB-microSDphoto.jpg diff --git a/pocketbeagle/images/PB-powerLED-photo.png b/boards/pocketbeagle/images/PB-powerLED-photo.png similarity index 100% rename from pocketbeagle/images/PB-powerLED-photo.png rename to boards/pocketbeagle/images/PB-powerLED-photo.png diff --git a/pocketbeagle/images/PB-powerbutton.png b/boards/pocketbeagle/images/PB-powerbutton.png similarity index 100% rename from pocketbeagle/images/PB-powerbutton.png rename to boards/pocketbeagle/images/PB-powerbutton.png diff --git a/pocketbeagle/images/PB-tethered.png b/boards/pocketbeagle/images/PB-tethered.png similarity index 100% rename from pocketbeagle/images/PB-tethered.png rename to boards/pocketbeagle/images/PB-tethered.png diff --git a/pocketbeagle/images/PB-tutorials.png b/boards/pocketbeagle/images/PB-tutorials.png similarity index 100% rename from pocketbeagle/images/PB-tutorials.png rename to boards/pocketbeagle/images/PB-tutorials.png diff --git a/pocketbeagle/images/PB-userLED-photo.png b/boards/pocketbeagle/images/PB-userLED-photo.png similarity index 100% rename from pocketbeagle/images/PB-userLED-photo.png rename to boards/pocketbeagle/images/PB-userLED-photo.png diff --git a/pocketbeagle/images/PB-walkaround-2.jpg b/boards/pocketbeagle/images/PB-walkaround-2.jpg similarity index 100% rename from pocketbeagle/images/PB-walkaround-2.jpg rename to boards/pocketbeagle/images/PB-walkaround-2.jpg diff --git a/pocketbeagle/images/PB-walkaround-2.png b/boards/pocketbeagle/images/PB-walkaround-2.png similarity index 100% rename from pocketbeagle/images/PB-walkaround-2.png rename to boards/pocketbeagle/images/PB-walkaround-2.png diff --git a/pocketbeagle/images/PB-walkaround-3.jpg b/boards/pocketbeagle/images/PB-walkaround-3.jpg similarity index 100% rename from pocketbeagle/images/PB-walkaround-3.jpg rename to boards/pocketbeagle/images/PB-walkaround-3.jpg diff --git a/pocketbeagle/images/PB-walkaround.png b/boards/pocketbeagle/images/PB-walkaround.png similarity index 100% rename from pocketbeagle/images/PB-walkaround.png rename to boards/pocketbeagle/images/PB-walkaround.png diff --git a/pocketbeagle/images/PB1-fullPC-3.jpg b/boards/pocketbeagle/images/PB1-fullPC-3.jpg similarity index 100% rename from pocketbeagle/images/PB1-fullPC-3.jpg rename to boards/pocketbeagle/images/PB1-fullPC-3.jpg diff --git a/pocketbeagle/images/PocketBeagle-size-compare-small.jpg b/boards/pocketbeagle/images/PocketBeagle-size-compare-small.jpg similarity index 100% rename from pocketbeagle/images/PocketBeagle-size-compare-small.jpg rename to boards/pocketbeagle/images/PocketBeagle-size-compare-small.jpg diff --git a/pocketbeagle/images/PocketBeagle_Back_BW.jpg b/boards/pocketbeagle/images/PocketBeagle_Back_BW.jpg similarity index 100% rename from pocketbeagle/images/PocketBeagle_Back_BW.jpg rename to boards/pocketbeagle/images/PocketBeagle_Back_BW.jpg diff --git a/pocketbeagle/images/PocketBeagle_Expansion_Headers.ods b/boards/pocketbeagle/images/PocketBeagle_Expansion_Headers.ods similarity index 100% rename from pocketbeagle/images/PocketBeagle_Expansion_Headers.ods rename to boards/pocketbeagle/images/PocketBeagle_Expansion_Headers.ods diff --git a/boards/pocketbeagle/images/PocketBeagle_Front_BW-small.jpg b/boards/pocketbeagle/images/PocketBeagle_Front_BW-small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6ac2aa4e6c520833d68727631a40c0df7b43e26 GIT binary patch literal 195217 zcmeFZcR*B6lPG#-hA2p85E+8xj1rX0C>bOTK{7}N$vHcih?0ZkoK&)sK@^ZMWKcl? z$w@?V67Zctf4}eh_U^rJ_w9ZA*A`57RdsiDpFY*q)nVq>_^%m&OhrLi0f0atz$@?% z`1KtS)wFZ*bn&orab*(XzY2)nQdYyk0nXtZXFEs9#^|FaVt{I#RW#wV^}}1izh;3b zd0%@Q08mo{xWPOG04{_AfPokU`~x7D0o-#O08}7!f8!_!=bt=K00^}Qur-0X0YmVE z1+Y!$^zRs!1Nn!<9Oz%UiIF+5zi|Aw*kZrF0J4A>2ag~RtC%3aAW}+9PA|qpPeVhm zBIuD_%wX;3kC@u-j)h;pel6_$+VAKFk>4=&7Xrqh5Qr2Ksi&$}Vq#MAYrT8@pA!G0 zXd6IIfd7^l34<^LP;v;29P+CJxC}lN4BPAf00<O@gNp~I-68{^PzV$UhKGZL2Zcfb zd;kI^hh4dbLvd4!Qt&P=6|<0A2ueFHmzqWRmaK()Ue#Mx%LnnpvzuFTB03(`pbV;i z5q(|>mP`K675?Ua28dx0uwgKAKnB=F|D!$sgZ)nr{7(=3PY?WOdVu+pCk`5b^7+7< za#+dxnsWOYzU@J8B8E5KX!T)PSQ;^Wq6#wai1IBmj`_x(xSb*^dFEudy7mxT*p#*k zN&beEH4Wi_iZMbQ55>mQTlVWi6#toa{CDOha98!Y^~seLTPN9PqpI`gyw`}pG(vB} zn{v;|zNU&X?1La<?{tLD$E-;z1&f~L=u>Z9Ih;R^p<s-bDS_ik8sC2!oZs1XI7EXh z>3IJsDIMcH(wJ(??MztlY0OrRFkbL=nfIapE*f?aWfr*))3p9^=?%@g)I81HDSC{S zp9PG;q@b@Wcx_$NZU^^s4l>RO%=EQ``?(A|F-@ny_@$o%(m!??cA}5Z(2m4G%Zxt9 zr2bvsjv<v-4@$gau^+mJAm_7LE@?!lQl&U#@Q2$8Z@}bzB3KUMY>)9>S4-FCzhxi% z&F(vVJ;GRTZ1@fTIAnyxEZ`Twu_3i{l3h=aTs(NQ9Xvn%3+VY7GDhNZo+LZ>RVjGJ z3zjhbb;hjZpze@n4PReO>iZe)aZJGdkl-AzhY8b*AXjR`EClkAM8-dTLN3O?X9eF* z^z<8tU1;aRcQOe`=MMuZnVZ-EDRJ|hxW!1FFuDt?M=<QAjP8;~V5S5r>1TFM=lPDp zV<_XK)=4&9e}2@^7z%e2vwHq*1>aY4z+SH=WlgN`u<$r!^&zGqm@7E%>s-njehH~i znpyZ+VY9-n(-6bs@)g4kzk%!D$xYgJyI)T+I2KGNulgtDNU2*-kyuX!7pL@clA=C& z^7$yH-n9D;S%VGuxy$^xU$W&MEEb&O&$QEQoE>deir6{P*n^GWrw<Br`~tMjLrp0r zzh*2SvHh=!GGLbTL@Xb%eSh)~IkNE!K+y#m!A9{@N?>F7DOTeQsqp0W9Y@Hj2mcEA zzoS$sB@H$!Kh?*qbZG+c55$g1p=|PKl8o28q5ysCL1fb@ev1VtNj41f<%fRLo1v7> zbMi@N$ixrdii#DDmbuq&R^0R}C0f4G_#9IoH2b`IBOBdD|044Jhi@R=9ZZXO(Dn@* zlLm#(#=QsD55_?}Fm&b|$MOR~em4N-IRo(+kgr5vHCKfRh#9MEwm31X0o!u66}c7M z7w}%7>!%PJ^7V%(sNssubJ(Umf=vAo1)COtRbWvh{WMmg@tf!WPW$<0D74e^yTH&K z9N(n{iv)~GDE%R>{LufYx+{vN&-$aQHBtKighM9&(sI$Zb9VPZ{TbXH5I^0Jc^nfE zGi%EPtC*fY)DJXV#Xrt?(6)9k_?I$g<d9SZp6mIKlkA3GU=6G13jtqFi1x(L^rrj2 z0O+aGxoUd=;z8ffs6o|EnN_?BE1v#3D;F^NQ*IgX3>f=i7vrC8moY;U6Oe6({a{g$ z6Ngo6Spe^B4^(IdY;YBD`CH$y2|FN<W!l~J+wQfWv3S!vDO<rE<s2Md$Cu&`U@m@` z!#7q&)7AdLp)!-%^_PDRn05YSs*idTxqt0v<ldhQip^Fhw=o+6V;2Jhv!BK=a?IP9 zxgEgFK*X}E=WrsaeD0I0$kul7^*bHe;Gob}2Wep}tr3&3Rl{S_Sw3Sww{YTqs<g%a z3urVeRW<2;J$VtXT(JS#_ehy8fw6&4?tDHlGa8Qhlr;v&n4gQssUH0EsXj0b3UGK8 zc=Y@NJWf^4S<sWgCXOtSTNH??UovTXBl(8%R1q6s)6=Bd-UtO$^A-zkXb5iLzBDkk zp7h|KG3~C-_*TCh<0@d$3+Br7f$sAbODc+EBXPtE(Rg*niboDMF?Rsn63I0XDh~aq zmbfgN3CYWdpE@fzOfXVDD>7cmvO9oTXLHP3r%)z&X{_JvYXbYJ&@KKOm5H0%H+XB* zJS)j!$6S!%alX>RquTiU9{qqndWWi@HbEh7POxI*O$q(XLJS=2ha0;hp_I`^t!5>3 z(5fCnKdbD?%Ky$8>)+Hx;KbJ!YqMi%Hre{#eJ-!L6tv{show^S3Mh=23p;**y>l;y zm!&zbZE6Gf9;hJl;Z2odr(%JT7(g!&8N~bs#Yin3&XP5Zz|_;Va<HtWjK?stoXwN? z9w4@0w&^Tq`??G1XGg(Brpye?>v+*>8()|wG|0WNM8<F11sX7+Et<P?{B8Dq$92bX z){^q$F_c3Wc@46|S0pu%!c{iG964K3z({B6Vb;TrU6?A|cFvy^%mTsYP#g#2u%D#l z`>>l0AcC7zj<zG7R`Znejk<U<C9Er~ZOkA>qB>9kF9*|M*<tQL+^irre)*vQd9*jk z%970tDG^+@JP%`+V=q7C_ah(VpK&DiTb%R&p9{ud?}OOh0H@J3lP+QO=eG$NVM{5l z*YPArHoAm1+Qu*Ks5a5?uU`y#iWxI*L5@G<NhzsY!|R|mZc*%91Ix|rF;Y8&`M#}* z?7>jCg9Ws<{6k9FWoSxD{X@zga;IS962VgcXajGU5!@OhpoL))skFv$47qn-44yl^ z9Um0R12fu#H>J8)^|pOHl`mg1j%T~M4?7=L#jIfqv6nw@fZV_+_p8FMCk;2W<Kntc zfss#c_Zrld{Yey8@G_<gJop#I7(K-pb7+>p5xP>$vJv{^XO2K$Q?&IYmIz%#zY*LJ zOL5Q0DtU}Q1p!CYZ^GR_hkqe?9b4XLEtKOq^aLD-G1zSG_fsLkUXvc>i(*om3ufV1 zBHH(WB`%m%k@*B^l*PK!QOtZIn-t8%H%LAZ;a<_9!42{=NqmzQ&BENfwjj>F(VnRM zNu7WYXHO0BJua;cHN|@PvT1=w9=B9?$pQ4_+gP;Mctoh%<^j}iXxSu{nq)3_Dn#;I z<+4dwi4Qf&I^nWOsQ9|PY}4O3H~sjTSqUk*H{x66%i#Q(J;)q?d&e##W{(lSgnZ7Q z5>%nZ<H)WxSjR3)$L_`UJd4>0^p+IimJ~q>vzMH)1jL1MNHR0d)Xp0*w2p&Sy`ZqA zn7jQ9Z5rq5#*!xU$V0J`a!$IvBPdk(KEYDVEM!i)+c(NXaWmTPjEsS07yM_*45kvB zKh&h0les0SxFYsxRu<&o97e^EACq_;DvF<Q;)iufAiizp4!pSl8355=z@lvSFt8lE zY?(bwa$gRX8SMu~k{WWbEZHpCj-c2rMyucGE|wy(_m8$GB|j#mMlYq5G#tlQV}^W3 zcA@;Hd5dcrVO<ezks#YYVGd+h|KUbnnd>GvY>~%|WmCv@#FB6M$3%{0!(}^CTv_J! zs0C1g%H(sZ^%t<Z8SUr8Cf4$jpw!!<a3bYp=ChYcHP9sfK6gwFN1Cd)VmSYdnDv^N zm7-)*w9h2rV(emyh1lXGh!eSEDi=~LnnyOovR(Ol_}k;<{j%Nqeug+Jlal<es0)eg zc?Oqy8vO+^R@7H)*83#4ecgAtT$<n@elh0aF;(59KF#LWoXxMEs0n!6XnWAmLeOw# zmAU=waqevE%D`7Q$BU9OJ6C3Z0jad(mBO39fWFYsGb>y3i;^OTu?u?&<`>0i=49K= z!fD50>hfNeptjlojSucmYA~PtNsN~X>w^^Y-X}*?oyY?;i!pOp1UJM##!U;$DDmM) zmg;M}?B2dbqJPG6759i{PHy{tDlJ-|XAK-ydC9y)^}_NZlaDzjlj6{|U<VYIy|ykV z%^@G?(cTE<^%oSAxXL#Wj?ySqB&05?Lpl;W<>`#mT~?G<;zo^*EgMMW`HjM=B`wcZ z&Yld<T~qz}V$JW9Rmd89R=-RxM+&WIlUhY?vuJ5oKMLvnkibndIeLEYx|)dn_<!?~ z31VOs71$3k_ZW;&#V|Hq&9Wc#3r2fmSS^?06$G&pOHF(mooZP3zSpjxySw*Pb+oeA zm4$WOb%TU-tLr~QUc{TI9Af)Be1dxG(j!DBy=FVrYoxnJ>)gbbnfA)fyW=E$iaZj{ zqTU?sq2{8TS`(7w@xxj@35cB45b8DI4IMOJv3oGZLvP$Oa-}aMM0Z#UEhARYvxO58 zCaF_B4Bc7!`$)fI|G3<*yqfVv(USGnPp4Nd*zr*VhI48iInYn!ZrngiS7rS^C-Azf z>IOq6KvN$XV}T~xQ9Nh95e^{wLoWRln?wMh^(3(#&jBrB<&sH6EN(-Jg<pzA0VMdo zoLCCB^f9y8DY+(YLkr>ZE~gTFc~>@j2+ThHFrySO%Z&EcjOEBo==(|R>XGCraW~?c z5u~%9zhknA{-kO>lsAA$@@LB3zCqb!sW|1iM<2)9=Cmz4;>6sVof~OGoV}?gG;xn6 z5bGt-$shI0)=2o0m4_ezUk(DNCLM^gy$?&8NjG4Wd0?4&zzx(1UC?MiS(Ft{5^=Ea zR!$}_JM(Hi@}{jSy}4R~kQ_K*Nj)IF1!UPy8f_q<P6;jzV8c@pgAD-T5>_G-3JzaK zG|ra|zE~jLV!YUh40@_O_AvM|Vx+DbTGc7$82PhSw#qKNQncj@(}82Cb%MFyPN%4I z)EB86<;#rZp-DT6=2ziJh}8r@SY-vUk^%8puY{0^kcr~YW-|cLS-j<1+f~ro;gKTt z>MbEY9gzvc2oTSdNhsbma6s>%<4a$!At}w#I1c~{0<iG8V`C2B#M(bLmBXvAzxPoA z6WTRC?5IThvsJpit!um`5*icw{#dI&9romfj(6;b9LctO*^I0$w6W)f|D6DOxYZn^ z_JmV1zC6^EDW?>2Y4bgih2Y(&<cQR=So~~JQE_XMlkvp)H8&N0{%6#{mnWgZ-`CM^ zNS~Z>v6Ra5#Ts5QSATe`d22((8&}XG>f`4O?T3#_v%;eT9o&N2W+CXmYkh$H8~ry3 zMc5w(1P6^n0Yef%kst#k05oelw-ROF&xAR_9HO1_QcBk#;x?L+)&kLeZykNg=e$MT zs10Fr12r!``}MxnSiH`BG5JX&g$qtJ+9t^Lu1=XBch;iAtRL;iOLqLQF>Kp|yp0LV z5dXX<?zVL`>lZ+@2Qvrj`fmVR$)P73UvnQF7VSn<Xo?rIQM-FuO0)A|UWl==Pt`d- zY5VB6%s0i~-CrGTPvysm6mfi!rl3{}G^MZT)*e_HTnu4)0MtI{Me|u1;Dmg5S4JnU z9!%5i4DEd8M(I`%?Lq;r&-sWXe*qNt!(Iug2;9k`?@;G<E4qUi`}nwRXM5f?$&=H^ zjSLm?t}U@__|rqE%Jh<?q;_(#!#Li%-d+{%iJk=Ef?ZGa`jSbH8iS8yQ}u8UXG_}; z3Kf;qEW~rWAri!R16$F1#oRQ>AzOg#|GnEFOrD$J+8bVoN#;X?5gY>qrXhxs<I?Kb z;!;rCu6DILv4OGG>!A(99G>J0Zgw;ArNV=9vjZ=9V9YlIeWw*w&4utCeeDX%3tPT2 znu|idZXEukwV54x+P(`*gbpcVG?}~Eo>yo)>Ld32nXa;K#E?Gq<eQm4Ve%UzRealZ zsJU5nMuneY|IoPPt2DuO9km+b(52%kWM!8}hKD1Ua{H>}auZWl(fFaC#+^JE;QjL@ z=OX6md=dnC@tTE4FxrOnmZ*7hXTz04O$H~}$U^9>JUBk)R<&Vhc%re@C^zs0kHN>q z!gUtqJ<#1LkAlKQ3w7LW-_33C$i9LsW(G1J8u4_z6$rO8d$bK1((};N!yqP6p6I&f zwr0Wi0Yd0j;iC_b6>`?JB6u6A46C2bu&gP^QVkPMNnN$g;nkhM+utIT?a(_7Y=;KY zh&M!1WcbfUjq*rk`9(xOAcVm27NQA2F^H_5w9O%uQ%#i}KK?_QcU_NV-VNUB3|SH$ zEh>4~B+VvLv`m!{S)4-#;kv#GD7Qquq`d#x>uyIr^*wEKQ5w>O%1yyw%GS=1w=-7j zww(2i@kRdLcRS@p&2;d|-;gGia<-&~1e#rgtl(D~5jx_h3kV&@-ah%UhJ>P=MhLHu zDB2*nFYmz!HYXTw1%0{lnU_SstJ@khB6hn`+w%r2Yxr42>Leton!gnXuUV!~K_Nrp z%mLOMj!EX*XDxENhFQU98N7awQ`7HN!-OA<Xk``=6IGiS!;@5LcAS%_k4YRLqq;{- zk)7+zNSRPqHJ-#ImV$qFcO!dA9F3@+<+5i<({l41yxlI%;C0VcG=xvP$UcNa3aN;* zP#(32kB?F;NPZ%zAZ=$j1?d1(rqO0_j=0sT;f?2YW1~1?ZZ8beAj{ZRY6o*ot6cq~ z<3<R?qEhLHcYJiPK>aZmrFtgf#pG*AH%fhbL~^6*gYD~Vo^2flIbI~Lp3^pRa8N`_ zPVnmuSCGct9OcQr{j!f#w)3fTwBy9ltLUjdfYPR3P+5&<IF-#-gEZ7$i6oEVZKJ#` zzy254LuSzO>!eECUq^y<6F_eQgxFc*d=C~1#GV^RCPI*d#)(w|(~;){NdE>xeen2= zkO^RYpadub5LT?CM5Y8F&-0<#1bgo^+(N!)mluS3;;b8}#q~AjDzCRS##<){+UFDu z(UW0B{j9!KjmAW143r)txP2O|+V)u3*zAkKCCB^UP8unyOLIxFzxV(dAy88`^bY@1 z@Bcs11r6T2OaA*})ov8Yafh1pv_cA(oqw{Vv-@cb`_o?6?cr;yx>(pG<l$n0Hd$Cd zH<WOk2em*tG5U9la2^oCDjrXyKXaYdb`|q&8SeAk3dny303^|ub-Bd{5DcC^p3nx# zsGaHM+=T8ysSTX>>iolvbDkd%Z5IWtJ-%9A1t@OXb@q(F)GwdNzQT~O;jTI0X!H(> z8`U%kCz=nCG5rS~9^Z^`(e~!xJAucUfQMTUiDlDujySu$s|N-LFx*BdM6jGk`(uYY z9JwEKN(e-KV=@MoT&)8q^ucXQ_W~cw2aizlqIP4vV}x+abnf>p>i2y!LndzyhK4P9 zv6YVC3y?olx69}%_>e!Cc#kEfgzj!k_=V)26)(2ll5)=Nx6EzIaF6A_xg*Plm>B69 zAK1gLo=M*ciICB3=BUeS1IFsr%+=276OM)pVGN<SF4qrB5yA*ux1!3{oG<h`aDRas ziPoobS&im8Hp}|UwR_`My&cerUiSsZ0_O2k_5n1GKIfKEs|_AHtSd=(g2_6aBJFj< zyAR@0*IjLut<8->d(_h<C|~)7`jAT7ebT|}xPe@rD;Ps*xC+e)dWaiccFodrrw?R# z)war<FhwCB!hjIy4cCmAAhDj*r_e(!MmokfSoY(gXEHJhCW?rSH>TgKY3DaVRW6`M zt|_B%Vn2i+R=wCHxVLUL*;VV5Lf8$eN;?lku7oVTRu2<Mzg^9VSMTmF<t?6{EKoWa ziZ5PQHH;urHRr8XY_PiXF4SUG6P6v;QAoqqD1KqEw{53n{cX6y^#d`>9h$LSmP!gx z-6nWv`)_c)_Gc15(f8q_<#HSpUYWH<mCtz7+8&`q1P8YZ@F7=sDoSy4my!NF7Hn1E zr;@?5d2sEf;Eqfwk*oNjqfSHWh;5`23zB<^Ig-~XUxliPi69o}3hU}8T8pL}&Q8km znEb6%kRsBwsQ#;gWBC3&$&y2M)vTmq^J&3)aIQDsZS#Px(2iM}fEtuauL@T!p0Vmn z$Hh((KP|_JKt<KN?W=K+FP92R;a4c|JQ9o)I#{RIo`PZ#fjSfp3Zjb`9&ypS%>wt3 zRryJ6wik*wh~hu-h$CnEW8zJt-dv1H(>tc8b@NRc%FsU%K^lkmDDYJqU^=bpx?5-N ziis&#=ls!o2~iCm(ScT)?zUAN7T%*k5pYjv?jY5h%}uaHll~Doem_+YEHv!sW%no; z^Z_dG#C-!vjtY+<lG2wC3%o8y^eXe1(<wW+E%z?1Ittl%c+p28vBJr)CJc;m&`j}! zP^{G>U`6Ag!5Bb-A0+^QLYN3}&>;Q?7*SZ`hX!JS2S~605?c~Xf`VB=fG{D!4}@Ed z*-5Gw&E7<jF0Wk4Up(0|{r<}JT38V+8@`*Tm&KgUl!k)eS`a2jO4HS1kk{Y2NvMWF zf5A{H0OE?3^M4;??RlKz1{1=kWcOfx16S{`dsxjGzlx4LxR#jiJ(cLL>dHH{q1(e8 zpB_MEZqVNn0WMFNyZ@yfgiNvGhb~tdLN6|g0}FEpieg{VX~OEpx~2;7Ma88)nqc^; zr(a%h9d@?8tAF#Ro&JS|ZJ|M1GxGR+6LrwY;Q%UXjYx_*rS-RwaYmDO+k4A49D$cb zd1c`}@<yW73!pnBxUj{T3tG?r4JiK;AM)Xy<3N7;<Lyi)+{BDA-5LQuG(B8C<7|)N zy~i9Pi4Pc+_H4bh;r{f1faHXck49*AYF;77bxYu=NYRY^F=j4$`9`R8mHD;64u2xc z1UxQ}FFMg}EV*xG(!MoJ?<(Sa-ZI*QH8SX^@;sd+ca=Q(DyU$q=XkNFm%A?zk^MO2 znee82FkBLgrWP?iivZU!X?cgi7O)maWg-h?xQU(X;<9^SPv(NkwfG|R&dpY5`YwHk zrc017?SVCx*^lpEqz53xy{3FCuV8m=7zfrPG}!f>(JM}Djx!j3$EOLB)yYp+Y=HGy zuSn5>a`KfSdI352t^1z`Y9z<UW|4l&W(2M90ekt*QSo{+Cc2Chok@F+h9O(<y_7oR z(|{iK;da0BJ?qnvpkZIv0YSA&apv!M*NI7ppI7(L8_Qr6uiN_3DV*@8uzA69$Sx7V zt+p0ilvflVrfh}0P6B(i)??AY?OVUyJ5*wwxm>nzx^Vl`0mF4Gug&r~d^wa#9Mco% zI~(^-_LE&hGPh|x+}^?7v&Rvb-nN;T^bMabE58HO8|@~l#Jn`<56gix2PdInt^{It zmwedZ_1QBEkpua|$oaOaUT_~66Lxfa3?tJUi@@Cq?6~9YIrDCG$=tInEF~!!Nh)Zl z{J7y$N+_z1p0;~5vIsvnrZ@7L>jYK4iB=^MOR5ivWN$=3b3moQKvSOBC(k=mxkfeV z*Eyc9e1{YT_Q-ciI4=HCA4mo14tX3HkkNOOJQfsxXs#jYTn4|r<5cHUI{Z*(zni3n zgq^Ql)~WpiWa;wEQCJoWBkS%&YUg&3belgXb(aWdQDlg+nxgle_n{t&ms&o=&9-mm zaLu<j7`TzC1_(%M#+U23F2t}-A~PBol#Mt6_@f4^)USjd@<IdRzK+?S+r9yi+wqH$ zw%J@_*C&QMt!ndHm;Z7H0a(rBkNC6`@BH-X@de<uwpy6Zb@U<uAcZiM(=TF7jtpt< zs935IE*lY<3%)1Ne)C3OTPrc)J-&gb4*=Sp%mLJ*^6*DsCs6DRE*oi-KPuFZ%PE2M zn*n=(30&nXK|#C6iZx@Pqelq+?fwzqfFuqYWPwa&to1twko{Ky&|>1C0kjf$;p{Is zACjQa#7d&bB&r7BY|3R3<1qbxsa*kD;ZgNy_u+J;|E2me?)#-9X%3^W{8a8#l}lE? z-}U!~4ddz8C^CQNf1mT0y#GrvGfGQu3Y?;a6ySA1QSMtLhKlmP0QQR^fvJUY-|8%{ z_o~=CYSkV<M|#HdgF0hzCV*!*`$wP@F4oo`X<I{0B~^&VhDZqSX6U}M@mDhxtC^{Y zVDk9q)=}JK@^WpW=a3;<yaBzLbvxq1L`ri9Nvub}SOBSijJY^*^^&IUSg*0#dbFQ% z&ld=nn1mHLRiNsWpn9wH&s<Ah1SGXTd2Ne?R>w!wa<EZ5&SR4LkAeQA{!g+@|6J8S za1A6j;k>v1V$vJ4_pORvU06tNq7UXZY=ZG~op2$FQi})qt}B>>xmYjy1~x}$^?g?# zUZR^Dm@TM<y`oi=ygXSK&aguCAd5BN+2S09F1<cw_6_dBhWB(%UjWa|qx-Kj71J^u zU1GxSDMQAIlkG$rT;TLWG*#A;N(VO=V?1$1pOsp=RP}`34*Mc)^@&$K2)&!!p<?`e zz%fvsJI;9G=mQ^m<%ut*G<S(^eh#6lswu(Hh3A<cSKz4{9>brW5ucFYw1HdI|4uJ@ z-9tOVHp7fT@!~UvFtPcL&N5Gd`S$wD6UK>i>%~t=mJDi&o-=t!joYDtX7;)7RDi$e zQZd!A<zUwh{M@=0`%3aow!TzJ-sc~l4LG~k>hX1chK;Z;#89g07)|HlD~X*hu}oXw z?RzZutK>J_&X9G;Glx{)<)CFx)x^(@c2HF?-m&DMvCkw2eRIf1-X&ul|D3~;kaCC3 zMcXW=6dCctyla4cBukfo>{a}H!cv~wRm%$Q59@2JI~qSgCM*Ut{J{g|6@1-948Oh* zey9JX1q^TcI_|}*i@slTpTUNs5|fJbcV^=?C(_E<_F<KXVa$zJv_rMf+rBYLEZQX8 zy3tJ`7<`mk=4Sjo*#QCK_$Pg&x88QtrzZRmT*tSx#k0v$7#5u4U>olyvP^$eMqgiD zTA_`8*3<df++R;E<Jug1i)z4F6XcVv4Amz#+E#WG^2DO0@0Hj~rRQLTXs`hvH=nks zOo*S|-m+lNmN~)bIvsdp6~I?V9B+58E@_l5#TT>Hn7ec;t0?n_idN#)S2z26iqFO= z+YL%4ex3+f)vp;euz6FTO~>IXkzQE(HqH2mPEM6|u?btzvsMFkB&-hZ+oL_1(V%15 zT1)_rGb4AW>OYMDqk9hpSUy=Y;opCHd2(Sep(87u<thN+D-f^oBrA;cQ`6Nvg4iqf zs@2>U^J8ebgqHYdCtZ>aml|G1OEJQwhO{HsV#GUJXZ(%7H6%L@YuQWKQn#-EmX8KK zIx>I)dA=ltfI}trH~KsE-wAQBi`d_Q2C&}TKLaQQySWOm0b~@JG*QQbVJRlSg!l)c zVjAjE_SRw?tKq!(0LWTV+N<vre&ai;bi=FT-#e4VEbl3PfaLtMsQ((y;xynmDL;9) z&Q%1HCVFaS8Sjxe)sy5{P!tPyt`kc9^2MU;%UC2JAIU@r_Ow%b?=}BtXes=7F6X<_ zSH8Aa4LY{+I=c*!Ou8>cSYdiQ?r;~_rZYc6&ZVTr($$&&qjlh_9^dTZ;*G1bX78Nw zZ@~A()U){3|JXhVmr;S&%)9&-lU<?80~4Ro@s|LPrLK4vwWyZqpy(NV(k3g8scQNH zeTKlTUIr`8UBN<53CV-{f5`toVuV_WwQ3<iO;qw)1R9$Y4iNn=z=}SP$)>26%#EpP z`3|5n#X|75dM-yJ=*+-`Zxi$*@;t}y0DNcv9*Fze6+30Te^xCCcEw&UJ5ks}qxhY- zd~L&xiX?#<JEK-c{5~RD!<W$iQku;f4SPXDT$fc?y}7j*`1~2dT=!ox{D%p$zs)x| zfq+W}P(eWeLka>wi3!5=00|gfZV)J;>1rQv*q3D|ylJ}fJ)(fUoR?IXl1(iS0OUiM z48UCoUVRFJDmy|PLpVBCKKEWd1;HymAMoPbWAL(|ogq{SL;yqPAqs+}TSIUr!wp42 z@H%0)AvW+}0<Rc`p405lD8TCf24x&H0I;v1@v1U6Oa<M1Xl}Q?vNe=K?{3-}P)o6a zQ)pLWwvM;?9My9n{{vXT-v$3mNVu}Rk*7Al?$diOR-$jGvfXgmg-+B+rtvXbOcAOi z7oiejDY<s#A#ea}9Tv=}#1@h2lIku)>yM~dl%C1Uqj+%z)oy~z2(<ydfr<I3kHymJ zj7i4&h?(;Oe+2@>(WJ8Z)4Ki{XrhJgrSFM<5{MMQU72A9HocNX!0Tt9^1-tVbCN;7 z5a}%#_7WG_hSVJW0297~DNCx3y6a!k{tqz)5}fJ}a|eZ^58uk$MVrzLc!k`qL_HK` zSkBwG%?9^2!Clqg0M!Br4Vi!AvO_oI>1uK69G|^EAeTp{g_Z0xLHHDQZ{?4pai2?J zNgz@C4n;c6l^5esZ{@7MMsFPSdD-~i68_hafc2b*17X6(50Kap0BAZYm^tkqF6Bsk zeEaAUgSV~$Yl}*9?+@12LL@dF`dcB-wG&H&uHX4t(O+)iIqzQsoEu14PrdQUW{buU z)u7HAm6*Gm`!ETMiQ@M0Kq)l#T=~=N3G@6RvUj|0^5gut@%;-ho}kXwrB96S_+=hL zp0>_?^|%*tHtcr7N$hk0?=K6cQWOO7*O$|F1m1yH6wny0(hBkQhbeh5K82!;=`as} zCZRD0`~H=1?R%B9+Eo31r({dJNbB3$BFnpSJN``9iaa;%#hQ$$mUiVgdv=~9ePZ8@ zhkxaP_4k(>-0={%8A(u!8{CC)TclRV40*gk3KnstHPk9fz{D+5i?1%h#4VHdg_kU! z5g(aZ_?cOpOy{SMU2t!0PudsgUlTh;7W1r&f$X#V?7!H9f3X=YCePX1s@PNf6Yx^j zaR?%QU5sr!>%P|D8m=GPxVv;`LyO{#66%GNyFL7!4X3|x3qM8+zf(n-64Hww>h@XU zqFqpar^uL#`wWQi<vql7&Yift>jM4OhEVNl6-NUJ=uI5ZF~?4JH<_?6MTrUY>EX%% z5r@%b1?7AS?Hq|sHxe1*{S7bdOvP~9_P%yLp3l?Kk5cF#xOdq^OXWZFVhjG4pzFFd zuBrif_6>n{`d`4zf{P|Q%H4;<aX@>KGSjY3(44NN>lOjj5&fr@%QM|MdxC(^%i)di zEz2neHzt2+)_}yGWNrcNC#Oif@8f?r=YM0)|4#q+5&c&H5gZ`5I+sJYIXEw&&QCYs z9iqGr?!*o%7zqs||5(ET%krb4d_+hk=Al<O5BPpt#3w7sEBW3yH>~5qfe4NVx}3}q zCIEP{5^aTx2ITSss3+2><15L1_E?Mhs{f2a-ClGhPydQo3sA`u{NNM}twNa4IA{O_ zBxvE4am2jgKOsz!L62M8l-Zp2;U8Cspp=z=#ugKV6`TqPTq-FD4j(HK;^>5S;D+4k z3s(otIP3Xl9cK0@jPxdWLP9o;_B#^p5hz7X&<~iQ&`Qj0fNt%s+~@{QNbg#A@gyP6 zosuG)2b6H!5I7%LBRFOJ^@y>2K3AH?332a@rJ1zF$_sRG>CGtd6uWDewN)|?Eg_Xy zQc0|E9*D*MjW&aG2CsaQ^F9^&b)+0>kE#WkeruSjMOGQYn)pRWLlC@sE{NzRf}Ur* zuydskr%wI`U9t+A&9I7{jX8%e(mLKu&nV>;n;BB5mM_iMy&^?mD4WDAg-H-3MU`Ff zB3@;+>5bQN0^r;Z;8r;T@Xks=zY@484}U()6NE0$*LK0ben!bLwG*s=$wB1CLEzV9 zsjoK{L(u&5>S;x~&%t#mNfzOW6QWCla2ZxF6+$siD!|^rw#RK4?6Ze;PAQU{J!PL@ zI7?BgV<Zk1(G{MUX_->#)#Q`mQ{+Ms=eL8~;Zm0OwRxY}#`NppF(o&VVP72<aG=Vn zFQA-S!;zthpM>HctXiLb2=)XEi5X06RGH1o#dyaU55wZ0iCedi)GwfRuY%X}bD6M3 z0p3(i+%%plt|w^yF;@Es#E&~#Yi&h&sY8{sCq4L~B-w~(h}}-1;<mSj19HCl45LXQ zgU=_KkC^B7KG3e?hTxz<ArK}29O7ssTp=!Vr7s*-L2@VBG*fGemh1f-IHEa*GcUO} zqc*ZuNRiZ!66XqO>?(o(0>ILx{SVF0UfK?xR{pF>ZcFZ4mJSQo$m0aA$^uAmAAu0; z6Hq=}zN*3QEyjt)m8VoZjaO=$c^dz$1MhOA%^4U=;{8arZ*8;4c2}~W5>cc60C7c) z*W$jt=}7b-xiiF76XH(CRch5(dHJd8dz$4GuDs6hUx4o=2lb+968;8SX*lEiws+4o z8s0p}FncT!l=@h@@hU5o6(mQ9mFU4ENG@Cx5&+kXWovzxPIyn%L+Pd4&X<%N+R@7g z*JB=RjJ>R5zc3Lps8L@$`Q;bD_$pFTe;E$W1N>1Wo<9@rzL;{*12r1FkMxR<3NY<V z1WbosffD5$rXR7IlDm5`HbGynarxYc=%iLhOc!Q9s(p`MD!gNn;t}k4XFCbL+<Bx# zVz}O;(J(6MyQ8pKZcv^%U{j&k2z4T{(m@M=ZWbr-1{@mTWfgExX+nanRO44{RFLX( zadutl2KH1=#1Y~O<Q1A?yO;elvp9}ej>+dx+g-b`<djk>uYiv71{SlM@z?t4qI7H; zePGGo-2GzxS9U?u?-wW8odbLE*hh+F^x>nU(qjfRRpxe0zx#)*jOLfyg-iD}IZ{b1 za)>-Gj7$*PJ2sk4@ij6rXU|%^=@A(EEVfLoTqcFzyzt{EBqH*JbeAK=jP;G|osI=n z#h+yLFH4Wmy$Pc_r%JVT;)cezy|ub)gZdEnYgLLGA*Oc+bf23Od4SSk-iDkC*Y!bN zxcH=d!U$4Zp{*oe=N`k0TDzsflV;en-bA*@<(F=L+e~OXMax7h&56dt3#svBnWl&C zUT%V#c%psUEmV_QzFx9jN&i@*5{b_0D6i^6l<&4ZTU{wgK#_o4(wesAE!LM8cCPhx z0~%MCtN@PGYP}d;mr9iuqZPZ9Cr$llZKjgfZOS-5jq%gnIJ&PbZ6C}o-@1M==#$Ww zls$%Tslkk6nAEcLQ>6wUb3@nU8<=?EW7@UoD39fs&~%;s6idn2WDbl}qsSQXQ7WP@ zxuk@$uS*EP7ve~b1w5|xwLu(>?lP~5k4)llua%pSKc6iw9N_LYu7B|&pqh=x%Q?Bt z?$CfwQfY!G)c#vCo`YE_>0EHmy^a1~z*8bYOtkOk<)Ws%7>_{pyx9bOnQ;<(?k^U6 zX^Zc-FpB;7H9~d-wZAV00eq3>pdCcVUNo@E8lIHDK4wu?b4P#lfe-&nqV^~6=Q3&> zBoRC(Hdd{TPujk;y)9d^Y8Dk=vctrw(nzhZ<|XC7K7by%ZnJR?X3_toRrVI{x<TmV z7LYgL<{qeNMs$i^9)sUgl}FNTX5Y|;-M;v;s(i-ZoP3B>=th6aSgvE1Uyw=&PEJya zavg@gEv&O=yUW9OzAYb>n9)K!nMlLS&|+W&D^z^q(0Zk(-328!dYn+fNyqkX55>i+ znbdr7wb91MM9!A8cW&jvk3H_;Vb<!dtjlW7QO`e>&_1xkS|$h(uSphXl^$3%`3zfu z`-lTk^5xc-L|t#+mx8xK4O}QMo+Nr0IC&Pdtu43hzl%5=r#vEPPu5+uwx2G|xsmcX zb&RElKdXpOgx`QqX(FAwufa6INP5QOHL^KDBUx2P>p8X_E`73_OayF9aaOMjUzk%k zZFd^kY`VUCp15#eEtbrN!Qb+-7O1D^2~&RF#W)nux!Ob5`koB6G{Tp>S#7c%@)A6p z{1$!LpImaQJ4ISJf9g`Nkf~MgkNk1M3^7LEmQ;o4W(QJ6o{zj;{5PH!Om*(T$ZjW* zVRsgY<h>x&hLsC+JoOhRe2YFu>Gs4?eOKUK7?i~)Lbxtvw6fz%^58{e9JjuI5fR_T zlhQS;l|tErmq^o5CwPzbvx6|cv2SVpjeE0`&*xdE8(B#4*<?^LaCvX^YEL!?bGEQG zd_N!FkUtn>+qiD&<ZMQjmS!KKS7A}CaNGXG^=Cf3LI)R#?Qd`*O0jlAmq+ULzj~KE z$PwJZ-O;pgzbgI18eWXF;_15Nk@L}n{#-__PK#<egYHW-_|=6uE8Yg9R&RsNZB=Ch zWd*G%JG{uFst+fs6&^G+ffeq<PL58TUAzIR`LLwtOvBHeR23qmfQR`HcQTe0@pph9 za;g?e$!&ffJ8w!+qa*IeNq_<OB%4AwuiJ7~O#sscp36(|4N@r<6|B?S))`+OqEx;# z@i8zs8Mjie;W;(!$c#na4?iouH9P+y^Z`T8UGR$ll&7i+YW92<Ka*2PMh^XH3yu=4 zi*nSJ+}B=53fZkb<r1Ch+!gAHN&5Vem-wd5@0|o7v9Xe9>?2v>oRy)cNyin{tb6K_ z4HOCKb^9jhaCPk@@Ea4ygu_LW6y0Sf*ETROubPY_wv*z9);4p;UslS0&$-n3x~gEV zm}>5fzmts+`O0+a60NY#Y7ef+J>^Rxf34`Cn}?ayD*adA_8NatkU}=Q%{wf!w@4&q zRLDK&v66344Vv(E-AVsW-2{!BVqc}~OUU<%M0g*z7)Vx~FnL@zCCRM0Lm>Ucy&dz? z3%aGsV)ssK(aE{#(dXT}QeIz5s2sv?znbse*bpd9AJycAdIJ<BFE61E3ri5+5Yxj} zhe9VDIb;l;RlO2<#f6-u+_of+f$_UAK|*#icTe;qdxS^)Yq;m!>^!~oi|Z4RWfgvj zyy0vGmyS;YrQP^8h(SbCaihdM8{0k0?njM6#dx+)zrEC_p9y=-nl=&tTao@hgiCWm z+^#WGQAc%Aj2|-kL-5=)R~{|<Gox|i%pq8LOtCl=1mICBgzhPZbGnHY%Doqin*5ej z@M=Z3chysFTTBY5Ufle?f$GnH%xB=NRE{?PYEk;?yST0FgCGLmGUNM5KGm?NWr6~e z%kdwI8+?t8bVfzoqJ516za7Bh@-DJwj_UOOZh9h`ZLHDwMVgtFin1aYqSSi6KoJd@ z)mxq{czX)N@9NAg*}n{xmu4ErnGm=}!qWIk*)xTTSp)5g;<bMP@$v5tq6<8PD{Rm` z<uUHXvgKC{3*&;9)J#^@AV>fTE?8K>;U?cecuyf)z{%<tU=FWxdfBuu^ijQM(dnQ@ zX>O%$;Ci^vhfMNEcW#X}F^O?zIK9_<Wh?v0>=wi2!@M$x7*ma68h25h$$(9x)WEaG zqB_b4y&3rhAHUTj9?>}bXarqatc{7~BWMsu-nLj+4KB*);a55xf2xzu5Q(Z%dlRbH z_CX+IO;<N1inoQW8pc6A9!lq<&;dy|el?%ZC(8SkO1Qhu1mhd{P3<S`iI#VnFy6)B zLiL7D+ZbU_FlE5zjV9J}27i2@jn$O<Lkn|wl*>w;1?si3T`jaGAqiDd_F%G(wU{-& zLfg(F3R&2|rfPna{(<fkK&+|pMJgEGD}AAyn00;Lb#(}5riLdvl}3G8`dF%;axGKv zM~b9#d~e+zEH&0-twjrYW7fo4G0)Xi+4t$5MBB@gm)na?$5{oSJF^J7Gu(zeFUB7? z6zF!Pnd(+=K(DEJs5(z|J2g3~tdElL+li@+`TK{&*HwePo4%^B6%o!C@~~Ynn&N3~ zbgoI;a#W(_$9~pN<kX|w69<&-ed$lWd3t;~29g>?*lw3;4d0X0T}_sdUP1+a{9MW; z1VHk(AHX}%S1NUV%+-4_-?zk<R+<Rj#V6JUFf)4NNUuM8kJ`>R*4K^+mng2@a7cnA z`ua&tQEb}hi&WxER`s%Sn5f5Bzbne-k2gF;R<x&Gp!5>>9``6`o`Z0em44kJt%pSU zC?y$bo@s|6+k4G76y2r-T<D?Z2d`0A>wHY^4$m{aj0(1`q(}+<7I)Su(7K*HRqJ`T z6N4LnZ$24Q4P$$vHaavSDXF(UhUS`4%;)0eb1JRPA+g?E=`R-wWmjvI?mS{inDv*A zTJ}yy8Ls2H-_l>i$kYfqM2BHg-8FQF_pdpWNuxEfFBy8rm7Qx!-pHmp=E3s~r+X{6 znpFgT7L<1<yzZN-<e}ygSDAQuRmEt<B^26;E9STOles@6ZFVMWUGiEBZGfXTjP~xK zr(x<^rqBx%gGh?T#!4Fok(a_QH)*zRn?e)Hw?S%iJ6-#eS3`BY+hTluE81N}vSO$- zU$-B=Ki-FJ1H`Iag~$8W^$7i{ce>90A>tPG@6rQmZnUtK3g}ID=@F~KWhhjZ`BJR# zuD<0^SAPoU<WDxK2BMX8SyB4hW<(-I@|uWp!H0TJXXDHFOzwE7>&iSaQTLnoUFK{> zD;OKU$Y!Yg1w4c|=KJ<{eo}1Y;w<E1t3wKk%qA@=C^QSbeBQPjdl$cw!PG2Op!C*J zuvKfJWj!U;zEQF}c&h6YP~GqDx~AICp@1|bOIGH5Yh-(CHvhts_i@_HgSSt90j>UZ z6J&cpqF#6AF;kufCoKkHRhv&c@A}Ep^YtzMtmi`r-;>p{i`DbX>TYH<x|24YvsP+; z*3Vh8OfFq|eQzwcR?VGbvS$Ok!UEtbyN1>9rMN>^b=7`P95K$ot6yL6Txt-GuiaI8 zSoi2b*VDy&b15l91Thy8!S^F{D{{S5t>|hsILWPq3mf@*Wp(hh-(^)@yF>fRYh61m z^erOJ$gVA4mDj;gBY(quR3q6a@B4Fh=Oelgl~>mY!4m<XR_g0esU0S%ZUq-fK*ai` zup$4YL;j1kp0~x}{LjUy>XfC?EHqr4oyMu35M&*tC)#UWMAR{qJ*OkXlueMJ$MN7} zQ`hi5)7di=vZW9~y0dS!8t^@3iBlHsF*aLwN+V*&=RVAHS1_(ygRvscy{M88UmsT} z*m5{tKm#<UsK@h_RBHwt)q1^qH{S9ahkM57h}S#1bw*|x_9XQ4#xELOyPjyN-qXJM z-hjr0j8f9Ks!nC`L(TOb?{{I;m8rof1hSy&z1uw-_W@F>4{OmaskTq8yEymCfTgI? z9l5AjQ{SLZ78HxO1eAk-0hQMqIyKvQIoK{Y<ebpE<kS5Nu)MU<T9o?5j}`s=;}`!- z{i_OBw*<?~k}ho?9&L9@CBIzl;rH|Rgd)<pP2|#`$-@4E{nXE4yw6H+kPdaFj%;|} z9KAYMb!gx@v4(48Ao*D}H^C78bf<WYtr^|7GRwF_;*tOOD2!xRu9h|25kDot;7ut( zMwZXs6)%|lro2^r?MX?#v-+2@QNc4)f!s^8{i0n>u;M2jxiOvH<tL>ni5Z#Iqdwe5 zd}K-&97F`<G^u$c-MU}%4-=613Xrl{$u}$2ev(yZ=bDc?E~D**YL%kK`_l%020y_b z`+@KYq1&Kpw=1Mjc_b#?CRecZ{WPwEC^So5dt33oHbbamFydOow-*pGF=<R5bE;K% zj!;pEcf>0kk$c*R`pICns%rlHL0Z{HSj66>vaw6)MeTdf+0XFs93PCV=wNFgx+OWH zwb5_$eY<$GE05>lQu`WXn(BuTN73oq&v{ylZItg@QOjT2d_!z=+;R~G%_z_o$wgY1 zTJ_i!^$}#T@u9|+>^2^LK%Csx5o}z;bG!d}-^S(nx~ar-9=-(}MGGY(3f#Qa%xBwO zDISkv#kbwK?CF&{GY51PF69n#+d50SMGQkc(jzA5IRq#+lp&9pmbn$3dBH>e3R2ul zU-cYult*gPImq^7);wQjEs0%KQ27`|q73>3R?H(0Ba3th1qeNDtU@LpO1xkF2KV7` z7+$z_Cm+0Rcan|swS9OW_6qx)|9NPab~bw=?Q+Nm9>sayC+`@?>nr9NrWEs3Fej)) z{zD#_Eb9~8t*$H;srQQRZqeO!q(%CPF7pX{(D7@&3B`5VxdpF`n6Czk(tYCt_dE%e z2=a8xw7^$I>-O?lv(hSCLnp1MgnH`A>{RFa@Y^)WRMtj)I7TF%TNkxv$&BefE7U*V z>T-E-L9MR(jsm_0>FF;3c`YNO&~Y@hYv3q5St3<Rz1h$_>W+y%PSO-=C7cS0*Q4|- zuLq+4+51jJM+02n@j&5~DVHkM%umSDJ;rcxyH;h7vFGWN1+SbaPs1*>bhB-M4+Yi2 z$q{+qa93>4h}Ot?{UhV(!f|S+k!g;n#bepbjeYr#kBc_qCzx}fwG`E>5L47}eG}g; z^kCS7n2uT-GMB93Pw`(#K3OKvsp#!Pg=CgYKUy7J9~kX%8-Kfj?K22nA*Nl7?S+>O z=fp2S;msJHZ(;A^TFF``DJjJX3N-!6*FNyCe|KKo9U>S<_e4NBvrwxSpb>MUa?4K@ zQ=OQ{RE;MkOr9aGk0r=y4D_VEU^aEBq(y_WDZ<zwFL&Fc8>doFFS-XtnYq^|Ek*>j ztu1bDy{C7WAbvGf+j|u^@s|7usK@VTS%>|v<XoNG;&n&GBpYU|85Y$^)F%ZpyX1>f z6yad{nV-b?(T0q^6?j@xKQr^i;PT4ACiv|E$x`RD;uqN1FMEtIM%%HsYVOz|Vj_Ln z4AXuV%SG@qLCeJ8)Ab~IKg&F^LzncRxSBD7wcEOnUN$1d6uIsqwE`(n3J6mX;@aBe zl2yB6+Hzu-5=30nP`F<K{M(vb^9U3T2pd6Z5@VTOT`T?U9LCO{V1B#MNv{XROui+k zKtF+(A@Q>37&01H?qI5$$4z?;Nx>V(MS(8E-F)@w*4r{*dERY%5fw3_(&tt1Nwy;L z&O<se^RgkDj4PbYaZWcHuRXuvnKQC(4*IF87LTVpfusV1TCbNfBT;vf(wC-b4#}uH z83N-XKkrF!@Y~moTDi}7C9FHQIU8OhmmeaR6E*;Z95VAn>%a2LpJKEXBDQ2kW!LaI zOfC%eGg~e(o7zL3Vc$28%}pK~yc31-7n{W7+P!%rFKUG<lFlAX@~29-d0M3ir*kL8 zAMjB@<kDDUxrYsl@8#xmw{=BDycTZme#gH`FKN4b*jmhbV+<#|i-kq`XaW2=F0j#M zskItO4^P>7N=L;H9L4V;?@;+IrKpar_3)(R4I>Wet*$4}P*kt6%EKXYT2?^5yy$D+ z+=TMJ4~cWavoy!(x#|hYA1hidj;~I@6@ZY)+j6A}Z5C4+<8D$psRyLylFeVQo1s`5 z!~(aE<LKK)nagQtj#G^tmZ_&wdQSOyPHvaeoQ$6$zxRMkNBkGO=rk%N=qo*?2I330 zpB|yU(IQYOHa<39ZwEgNw<YHonoaC-9tdY`9n-e7q4}qCz{?9pX)>!uzW}ieA7OBT zYjFQ1@$gE^l}o!yJ1Me5)0{Y3{#W2o&In#4mE9|v>%6hM#2GHhVvKen%To046in#Y zp!Yq#D^DQ_lMk$$n842Fe4t4;^BPg+9GBMM(0|pg`WH|zAVo(1;<jdt)om@J-pCxB zAwZtm?saTi2KQwC6oZG(=XHNk&xD}3WhtZJ9HT(@<HR`Y?XTeWEHnqe{n$y=WzIFW zI!oa<JGQju>H4we?J?vH<)!!cQoQ$tlVhXwdJq#ui*c&jp5Gx{a5?5S&L`p3ycd+= z@7C<DJ-&Yp(%(^jyPq$r3OvL68c}MKux?FXxC`T0lvkDEK3~4z&W^4{E*)(jCx&X2 z1|HkSUfwLvXniuQfDqFAnMpv%9>z+LR|Y30{umW4a$kUQ&FE*uR<-gisaV8txm_F| zB3zl{@|s*-ENv!&qhD+wnsO;*IxM*(54?YE41P<6MoUKGIBf42Qf`(Mx?)D6$aRaq zm7&NlSRI_RO{~J`OR97XAgoY8FvfjfcLT=Udf7}nqE5m$oO5$c%4$ILg*jU@I3;`B z&a&PW3JAffAKT^jg@vEAEXMaaIL0r4U!oI<I7VFa&wN(sinIfuFeF4Vw}|vv)Pf;t zvS7jrdcJ3e&7@t;(mP_RNjTkw&T0G-CKvT*4!-CbI36UsgIRk|noe4hP^#=-DefBh zrlEAO9itHa2q%XCYLF3`l-wq#;+DA07Ig7inR+nW&Z3h9Qp;{7Ut`WXzj5frXC;E@ zjyU>oz(Bqwj$osmy1Nw81<ouI*Q~WiONH8L<A}*0zWN?gI+!J1<cT<1$T!ox9-64) zz&$}0@210nD{`A4+OB8B=85L)JbsWGa%nEVFr(Ovnhm4KM5e?<#G<6K8<0wA?r+TR zY~90AAzQG0m*<Pe@a*<s<)^+n*!e02+d2PXfTp_hy0*3usi<((Rf`Jt59pnNPR^Iw z@2La2dF-eHOaBlyeJfBL6L_l|`?VHAa83OH3C_6TkaFsi?!<d@_faP@{o%?-i+ixZ zV5JnU$EGs5t}La#iTvm)RzM(fi6tfiRISYVS4-JeeiLl{T+(G|Q^h?laANI_rN%Z@ z+}GvDF?cXVnx8#H%=xWr(M&dF!*k9Dr>)ZP2{Y~puPz)ggKr;Gaiq!;FC0Hd`qhB% z%HW9nPLSe$MG4sfQ>rua&(s;Zdqh057qKVObt<h*&}i<%pBqPy3c6%&$XU%p(M<^F zMf1OYEA+%rs80Aql3U8){T?)aMQg(}ATNplYzu_P!{?M4{FR&slV5)Ut1?HB49S&m zMhNBM33~H1?`P0qp0R3ZckDAL?Y%SAJ!=I6&Uvjh^kUzOpy?&|ouH@elXYAPgZnV1 zOQ19rrbN7nH%0#sW$zu=#MXw3CZU5M9jPL{mjKc+Tj`z9J3=U-ccn={L@81d0@8c$ zMXD4<gb<J}AfSMNfQZsm5ZGtp-rxCs=l;&U=iK$j%)qS7nzG8f-uHQ)_3E<XzT**t zWY(FTqlGJrfs}HYxu|PLte4q{ZA`FLjTmvd)6*4h-h_}>QPwXbI8}W0yx86==iyyX zAg)`k)O>xytTFu*M<&}G9Gv$b-)AbsUR)JEEu1}Z-;BO98qr@x-<`X4djCN@`O>Y? z!DEQDnqATy=hfmj<pyfQA$E+lTCETsd&UF=5X2mG5}QZ~N#%I3m2NkEY}1NKz^`xm z__PqobpvAtNv+;&7GQmYNRviU4rU+*=IP+S9NaKPVvY=#o;(4Y0bWQ^p?u{%GVg?x z*OEzWXdC)=$OsxluS9p({7VZY&l^3Q!g)`TXS<&P^BO-s-3GNpg6l$(7oYi5DlNo) z1#^RVY#AlR6TzaR<439ie}jsziD$RlTPR8n!lac(QsM)JO^uqD7(XW<Y(pR>2oq+Q z6-oo;s_-UL%>PSQgx-1tZ_-VzEZ(eb2$QSpR=SiWUsfPt%0N%31r}qmcsJ6;AA^^% zQo1c?SL*e+gazA>*%dQwWcT3PWojys2fs7*sbbr;Ni{yiv^3~S2SsoT4?FVlWTvm= zEx&jkQia2AV0?P5V!QZAT<bR6kRn?c0BjB<;^FG4TRYz`Xo7=<0VN)Gn?oB9%Hg$~ z2u|fzY!7xN|Ni?t*(33R7O_MICo9w)Cxh&Omd!!(d$YY&4M^`4m8Wm*##b%}Ohm<R z$()flAg7mV_XPPq3$zo-_%gjSWzeTQ)R0&W*OuZM2+RI6x9(DW;BtmFe8!Hr!~o-8 zhNBq9o?0>&^7yB)HD>whZOI(rl99o<oM@uxJ7Iz>24F7|6K+=Gn|$XA%WXtzP#u?e zwVqb&6-=1G<_+SFov4pa0)AE(S3YdDq623}vDRq>;}&AE^&E)ANS?5YkMmqoxJ2l@ zcS77-%epDI9iS`D_I*)N5blTFC%b!-pUslfWhxDodxgnKM}Ow~uP}|U3i}4DBRzHh zE!?{9hZWG+w1X8>oZY6L;kV|nQStKYVgMjY*ms0~cM&LxLLH<ebs7|1Hmb_%VU%Uw zYBmy3UNI2jlqD;-?U`a{&B$i|p>8ij>19PPD2bS!_@>4-R}b^%hR%fHfP3ZxF0!ey zb=e8*+wi@1VaCrAR{O+rF1}|OS$FJGRBC7!{Ur8=dYoV&@cljG?gh#a`L&NnYsXT% z4iY)Y85mLy*-<XzZMv11wU`~GX&m}oG*x#q+KkNEwXUR^A0M7s(E-u+W^yukGVTJ$ zd}!l$$&!@2W@z`5v2WGllSE^7Nx}~Qw%-+9w4UYcuuL+0ynJ**OwwUV87>W|AZZ}x zRHN#O=t4<TK77YpY_G)_m5VO}d^@C~V3@R0>naw>`t@TI=S^*Yq|L9=6<Tn*i)D*z zX`+GcRCtW`X;;C>20nd)H%f`^K(TZ)ekID#XMyGMP<oVh=Aq=Fi*A8d&mQ6<OvLZi zt*xn;e)2{kE+ClS48-$AfJpughFdCqW!!SOgS$gE(;g+keQ|Hhk45DSECxcI3srpB z1OlA#Vu8=kI2XDC%T{-OfbO_{P;C6l`zrVH9SMVgbf8=MOWmz$EqR95BHs^umalZ? z<(<kddRS1+z@N<N4JKwDMsSN_bjp5~3U-P20RF`);G2SoeV#U6<qPjk*3qX(st9%} z{L#wRenZ0AgUr)4(Rr*Q!>y*f)b;7}fC|)ji&)QK`tb!`>v06Gj8s@rH{FoGvq9sh z9KPV%0}juR7D28VZqu>%=9-|A{8py>Bf8SQ@X&M}9B#P}-$W<zNCQPEQZmJ^H7SZ! z<`f;pE~7s!uFCcCJIO%@OW$WRhsO*CUXwG-?kq-DF|+KFOji;VbiAe>#~U@VE?zZt zguIy6VaoJYz?l3hBMI!M;_7)`qOhE6cE*CgMQ`ypD6q+Hx?|I}Nsz-fazZ_MX{vAY z(4fOs!#g>*op{(81~F)I+x+F)j3SygHSm25-4A>BZmht4C1yTL#kp;cfZlHZ3*_^d z0OhSwbm8y%j3z4`>&f1jxK{r)&*FCrsBP=BD1w$i7a$;!4BzIlhVhlP@20?~uu`f| z3=CDK7Mee=j<4a*8-se4El@z!`u~%zC?vOaIiKv3+G$z}j<#!3Pq)}gXVk|~FLBcj zp#EHm7T~b*p@<28)Fm-x4j><uqs8|OwdEAm;&rCV5ILI>;7Epzk;c)VN}m(6WC5ZL zUmhp>>Uw#Sju)-i9R1VzhuJp4qc51+CK+2S8sakUzDN!Xpz@BcVqOml92`u!FoYt$ zS?JU2;A)EmJ>~<^%b7rgi;(<c1Csm1b4nqmkm;o4oM;zc7Csj>YwxoR16>j5Zy806 zH)dqT81~efeYZB(`wygF1|lp{o(wa)24JOR^mApuD;uy*WL?kErjTAgteCyqBAWFi zxh)pSaftD=A84x_!|vayr>z0Lj5!KHD3Keq#DPv;{gGuV3|#wF6g7jXUCVDN`8DXB z&54E&@m<oo*9|`x%*0ja-&dGtEKLVwzO13|?DZbwTQ^-WY(}TKVECl&zNX(zp^D79 ztxTli&3taTb-{`BGgfPJad8aasf*-SCkwct<z%rKicls$+bf+<_dkrkcjK!dZkws> zntFvWDdanE`~fx4G3(eKeJ+IeK^;S#y{vY7vMXF4CKiZaAL1I;ofzD-ITxc`<Sm3) z<RY(atn*%L(5T%deevb`5N|<HkWaR*ui?gCK{&*&HjwXYm+Bkyns8H1pFfr{aS4d6 z+Tj+Bt$l?%-%MqZ&9)a-o;;+ymdKDn%;o$=>S~1Au=;_*7ft|H7UHF4boGrM<!08< z^<P8?Tnj#NZL2}IaPm=M{AM^x29I?~NnMBHUOyKZF4=eby89C>u;jCkOWK@kET-zA zK7rVE^e)0c+pB#p?qP#3!xooG+&A5^0En}I5TPIdEhuK>;GI=^_^BUIfjO|RP22dd z$jj?5F?N1GqzqKAFUIEt4;=G9>Q7?dN|HfV)_4qFWxz0}hxW)62kgwNNl|20T&R`v z4~vHdG~Owc2;00TsMi8HZRP(yxc}B)-!!}drP6plWIMBq%oNsX+aH60K+|ew#F1q& zBo?`u>?k-=s9$99$Bl|?c8?!o1$iw?rF*2yH=}9nF!SseDZ>dmK`x<%cg6!e&G2`` z4mw8O6Lp~V?l)l~1YA>7bIgS*eq$t*{5;A?8|3PM$ZO!|v9i;<o8Oiv1gsI!4BkcH z$eytNRqq|Yzd_*X1){xJvsiT$2u!~)HqSe==LS}i$QOCw_)ExvC6uI`jK#?J(XYq} z#*=qfgQ3rbhAOZ~O*68p(p2cykaz^s{fchK$)it-cSg70sW`Y+DsXx-obwrIakZk) zcr)z`t!siBi<5IBdWiHF3k;ak_Ylt)%)4zf`^-K8h#X0**}dJ7j3x6a+K=jg9E@Ng z6v=G0+KLJC<;#X~8&RfeK$s#O-i@B5c$s5W?&VvxpE#Ty<bsu-JQBg~CnV>E29uQ? z7zFnhi*o$tF!?0IZ#REJ|4Bw}tFed^>OcH|uYEfZ@%Hd$W_mAOMy{VFLfjrKyHsY~ z3m7vudPQ!9n)IRATYv@tm=!=U+OtE*L3($fPrItB?HJu(d~NGsTqjr{Fu5e7!<JF6 zX7;Kcv%cMJpL3|j3zmx(11@LRPlbGuEgo0zyvnlC4C7KU@eS-)<S-pa8(Bl2F3lUu zjb~aj`Eb3_QB+bF4d)r(!E>@$E)${kGL=K3MsKongZnAJhyacIfhW=ARi}pw{~$NU z`UoKlV}8#IJ;c-7GP}nJO;zhK1BF1GqZ8DiB1gF?AmLmQ+whsmVJVHQ{yLc;+DtD+ z_GBcL|K@Z3Ao)(N6#ZY#m1_;idkU>?nMk|-J2zkRd=_!Mw?ORtXEzPk33QoObqs7U z%e%3;`y1;!5I^$gMSxuwsy&KiE56_SX;}Aq&IoI<b1baW_o2vV@W6EN`!}w!uPMIQ zdD>5{H=pa<gLk|9cN}l+yGw{(QAyu&&kqI7-wfNtc2v43481jrbKcs$)#&`Stm{Sx z@Z3l(^wqW9-`VZ#+<(dfQRufhZX0KiO#d$VbvVJeFE)N_GQJ<CdhOuZ)^30!{BUBh zbaX)g=wY9}DYYuC9>$0rDreLcB?2*U4aIKT99>=Mjrfl%5*s&5xwL&QruX4SB@0C1 z@CCwHPgS4D;$TJsx#~|+a&{v3FwqVlMC<^)fPEPp3f!pX*Sh^l3LgvzY2q`xU%!AV z^n~NQ$;w)sFz@@SdT{X~`+~&3aJsT<jK52{f>+uG_VI6S?@9;C92Dc3$QwLoH{mY| zZ0(cY0{8I9;cLwOUzsx@6&ERC+dDL&Sixd71gTSI6^ihr#1$|iBWOeK=!}thGewR~ zK*h;E>9e4X*KL{kDUXJ=eiyrwNY{h6)zl~=r4(BZ6ruLr_UZ8@g-%Sq=^ihScubAW zIT1gj5`!$307wuV9@##YREf~#Hv9M}1Z!zZR2p}R3MX-G_KnkXQmH=uI9rVbCb}ZT zl^U3-4?`4&sLa}JeS!7kV8zCrg~Yvq-Bgww3VXR-qyEjk6#MWNwtJmy0EtH+MSpx- zBRnf9+5EJ83T#e>l(#^pYw%^(hd_One3qP{^Ts#Q>}waw2~Pz~LJ|0CabZ!Y*fX{X zQM9ed9-yiT*O|Mf6n-L3!W8*_oAmNDv$_Q{j`p&ak*sCA2eCp{9jVeu2N-_nd*m)C z=(pDczCY{yb>&zF9jY<YvQvQ?V-ENyd;@U;2hW&|yU=)xzpLI)3ErM&<!77@mlCHC zlKr@c<T#~A>SClCs~W4=x(xlsMonjHd{o6UPu^V)*nje~hNoIs1ht{fNm>|kGvMI_ zlc-6+p#AnTNhb^8*7+bX6v3z=B*GTV9SeKGZ^L;mV0&p-(0f&3o?{14Bnuy?5KH1? z%)Bu1C*=IUOtkNH04=C4x8_%8#|pMS?H|fpHp2L$lvoYTP<5M=W9WJm_dl1SB}RcD z01OjIe}YFORDuAYOH-%8+Gi?VcKt*~e<tVC=m|_cEVsN1sggd`p%EHdP}UKC^F2%p zko;ucY<vG?Di|~$c#z@3Tsk}6(ow~X7O_|6F{wBH<Fx>wQ#r!I64p`K>B2GM3f*^g z+kF_u%b~J>q93N0?{&q-34&_Ii95$~nRbEgNGl8IoMbXQYJ$fZ+DM(+N^Slzg>(@h z**=d${NAXk;WPbQZ_1@!iY?48?)Go6^ogkDvB1z-j5P9=y7ff1rQsW&w0tnsyqRRC z&BCOyi1yF(K}=<n;HhGTQ`z*-m^YC#Q~{pP!_$94e6h4&FCHbGfU*KzMD9)6dD*r+ zjkzb`V{K6thp#tgB<`Fd{9a?a4D6v|Ak2j6O^hi+o<qO1Qk#}kV;&TV#907<{v`W> z%;zoea_=Pj;hP!YzTbrVrb)TF#rc_xyg%EW;EgCS17sG$TMzq-H&s8*0#iKw-ii#z z#q79&)+B?}W{P4jKy=&Ygc((MO3}G@!ZSjo{*@^s9BY^aP!XjZO!kba-q=&IvLpil z)|?OoHB8mSzRmUFEF^kKyj$({VfXWDgErS@Ja!vpx-Dx1J;06T=+I4+2NsEFTyk2A zm(`>@7D0?b+JK*m_82TF3|q-eY`P&Tu`6`5BzdVxV6V;9#=LT}Sa_0o$xUrL<?a}f z!^XwP7RMNcjZc3d`*b=rVQLCgSYQIz=He{fUyM|O@tx}0_T1<JIY1k-B8qmuG72m( z{AAkINO2>6my2mB|0(Ki3nKiEP|cZ>{VX8TyFUcrC5Y+NMi<d0mikPin&m1Y4g9!| zRQ`utY;yie+Qt%O?u6zRydB`^8BEtd@wNtjO?^K)C;6#=<ZH6BhYR8liSYOaohWse z@ZP6Tm%5hTy1H_h`lb!9)JhX^h2DIynH6(Ux-H12mr7vP3*iRJ1jZO*g7F93gE8Gx zjNom<L|;(G2*^4rp?upI9DYXIHw0sI)GIUTdkq4JeDnnM1{fa-1OjxvK;1|>R~XCl z+sDgA5ZmeQe{0pjVM%=YVUf%((F%}HEQkO3E&-y;(Q6GO`5KP(MuDDnpV5M*yV5nQ zpN#g!=jedb_-nX9KmrS=fu0w8H5-%EQ;C3{1A$I<7Q<1JB9;KzwOnh<YW2OP_{0Nm znpyRB*C!F+O{1~Pas#MjicN^HQ4=ji<$@_Fp8@DGrC|mQuN{jSLC;fshdhiyLOEcT zsZ7sNW}u#M$9}cuKu2(kPzCC>0?ZMTzkIDjd9gnrV3o$E3dm53g`ySBT^DSklVUbd zA!k6;3~&usHj!MTJL;!ttg&xpM}Wx}2t<N{EHr^^nF+@oU|*5}!oi;e{=)<Rb4ZNN zR~FIcj8ya05xnR%`b*g&m5aV2oI}9D<52b8Krrf`U;JNeIbImr{$ep0Z<#<-pKSYg z_!-~mhGMo5Z|&*q(`ZN0BOow<A<-QeVb0^=gckjCMHt_oJ&!HDdOHx90){;ZP;DsM z#ZW+PrO%hq?$K1Q)TbI{suA+cL5nK9t923rz5-C4!GKbQK`e*?0Rm+J)V1o0#8J6s zv+XI_N!HluRA(SEOAOHf6DKkfLp&0lz_J6hAc$$H`plo}>B=?UuBfi&K|l3G0RulV zn45rVC!pLQrn4y0njBG~DYKoNebfk%wul9>rd*e`UWq{9cH%#G4KyWU6mYn``ti-w zhp=;zuF^@Eg@Z*{ARx!G3&{A0?+*~p6YyX_MMM$TlY_iiJnBm4m<*o+eIyJG>dv~Y zkJq%n27DcELb*WF27b^gW)TrXXMt}=i>3x(ikN&C01?4oVZf<>6PO!CQpzqsXvK1j z;65|Am0oQi(|;uhO#IqO1X$`R&|nR22*aViD@|7|2vygLmRixdgQJ;93TYxxyh{q3 zE?vYJ?+uJ#9IQfJGC7~IvN;{q?AtW|a9v$v6}+}f7I>rkFJ*N-Gcr=^bEB@LP+O5Y zv{4uAKcx|;X#;a@kbuZ0Oy4COBW&>+cUUU^6WsZ427pxh=ZLZi6bt+3W&F=GAky^1 z?403I6mI`dGyI>|1e`kD;0Ck?Uv*l!;~fJwB5pl1804>i&r^WF#HbrGk<iG|4(ZYd z)Y0;LWZ?vAm)M<!tE%Hmy!k&h0>7Yv_69?a{Vq{VH0625X3Y$L1P})P*<{Q9273wY zy^SBRZYbBQ^iVi~@QO@jnKo3ws3VO`*2A+wvIMqOg%j0LI6%Py)F{JK2%41PNkX7j z`@~Frxdi~JLc9%<P3~br-}9~sK9)5EY8|3F?LQ9z?8PUk{ADB3fWQJ!xBi>}=sy2R z5N(h(``wZC86z{NBtgT0AJXH7lzP=JkK^!o3Cp&W)&FGtKkTm^uqwKY7Svsl+4v05 zsVTZOatXc=PHl|rFwH$Jb$^Xuq9+fhzLzf2tqryiC2??+rTnTfW29fCCzE7scbA?U z@=h`S??QlxEr8qouYUm=IY6`d%1Zp+$;PBUF{j#U>X?Y$K$xzGk$dL0ECki}5GF(| z%ZwUh^N@wavF&WL8TeGO(&v*_q2%DV=Zn*bY#rikj%7ezW4+{UZh*XU5n(&|XET+J zVS%xgP|Itu6#?(5Qh!c%DnYny05BqsMZB1EWO6EihKVAWTYnNCxaP2w!F3bnIy)C; zf?1vmGiFsC;X?r@3E>+mVnT(JcLGnnQp*0||NTMeJ+O6{^(KDova%Xb;`+B;(gGqr zgzv&f3t}4{O@8XKNhIGz+&cm^z)^cv7b(&>MvxsVN|qE66R4fk0t11V3bvcA_fam( zM!|-viwrB^|9V3p$iY*rZB8%mF@)Vj)2IDw+DeZTa2x-Xs9wp}F0_?v-x+b2lmUmH za1%&LC|&$^+O$w<C>VFlF@_@khvXph=TPla_D^oG%0yQO^#S5nGIgidfiYL&LcH#k ztCFHG&=1O~Hq6m_vqk@wp#yNtP(V-8rZS}Gas>9y<po?x1a|#@5+85?_W1J`Fg5`C zMtmp`J&Yc}$Ads}saRIvHK4}#{{d?J$@NcGQ^4a=QCO|?fYBNBetu2eW-l4V_I~e4 zzdGSN-gN^cfgfd~WSbuVGPLDqJZ4!41ZXLDie*UfExI)CV_YMHvGUAh-O^^Tl`87! zgH{yz=Le6V=eQ_caHH}ujStY&w$5mP7oPVDPz4U633UU_<czkNd)O;OdYIuY{A}D5 z9<fuQ{Iq|<x&JCNakqq;f!(@G$}{R@0gOA9%W}1cFC+phF7XIPxNorfBrOF%SptD< zi<nnE$U$Ik;Fvp&n;wJ$4*ruM+I-YEL?(|rkwJGY0KD30Yb((Fl>D@cI9LCZ=l^pL z=#3=#6~9DB9{S`Sm|hP3RJ5I>+`x)xddPb}E@Hb|D0ZUEV89j7$FU6XTUv#;jDv9p zrM7w5?h^u&oKh34x=)SNB=Yl(Czzi@URd7Am{&8rSMdh+--VKAzD^fM6)_q}aWm)} z(^70YKcl6n5RL)mAP)NmV2lHVQ3j~ZKoUsUgcNlM0h<B~7~~);5Jk<_^3=owUn-z` zS>#6Xj|BrFIlV5vO#=4)YZNdn98E?c(30P!Jb-hS-pp)XGf@s^hNdul#xmS0iW#$E zhqf*QogMvOvc!-%fD#2E7uV}7Unb{%9_k9C2fW3WK;5bQUIdNEX%vC(dR<gqDcGR@ z$qn2Nzo=`q_yQxzuIk9IC>YAR>KFm{(j@td4;aG8j7Y!m+P^(|_|S38`x~V7uoeHn z{X|s<@Dcp6vO&aU#E{@UT>VWaW0uCl=D$HhF)&-L?K?0S2wWCf;g)_Fle<h)1QY`T z3GP~J8hOb7fS_guai`w*!)}RRqTHxe6zB0-+vfGi8c6vkQK3m9*zHhldU!<1kb5^c zHB@l&PN)D-dq4th5ODX)Ox;hZfWYLf&6u}3{XOpIO}_x1A(?{YAIVB{Lf=$BRd!xC z?u%4?#`>pN5TzJ4ytUZ>w4Ae~(Fe9wA++<;?!@x?Y($0c!3Auqgr+}ayrJnrzvY$H zM+xn+Gg*LH_yhzZ(hk$r8^aHeChCO(@>mvNQP&^p-iaMf>@8rqDbE4ZJ>efpcVBfd z0%DL+2|v~Qho5k~Xl$xn`0`Wx+o#tNCFj3laQY7;7hE4(%$A&$GIs-a2dL;qk88i4 zC#o(|<zW?yC(F*-(%Uuu;}!y*k$8q*BFVys<Jzg8fUo5uI8~IRZs)sy^yQrk^6&TW zT`FIIK5rsSwJaYFUPfF{B3_krHBY=wT)qO9v^OyZhA-yF*-YYBrI>LoGLjes(D{M6 zGrGkG5(TqnKU_P|h*mQE&2#=jpukBnEJ{nVdd`mLT>VyXZ#gU|@GQL<V9B{3@}2gm zRj|L0C=vk^OdUc3u>X^~eHD{d0p}Z=f>XgnZ1zJEpN*0RCBHlFY9$RmxN`yfT)rGw zKD%vw-{#(<bm8yQX3d@dFnvmKA`!u^Y@olm333Y4YNj&Ur^bvCX?n{5j5M*{^8%E( zFAQKe1BC1jMg0)opPxn}V5?O>ow1zz#=7SU>FZhz3YRGV*@(0`&gJi3>u=ERH|^|l z>YdMG5=e6P%s|93Aiy-!21W}Clj#NB=kA&u(JOMtu)BICi1|~;?a;1%qsjZJ<quE+ zfq#RrkC{7?lq0SED!0{JJL|oUiQ*fbY3kCgEoFnVd_ODO|AZ8QNS8$}ou%d1)I2yh z^qftA(3S)c+Tv~luq0-HvAR!OzT9?KSTdd(LtgW_5bNEO^|P*e`xL&&ExNjK-p<TX zn29?$dT>+gg`4BL6c>#V-j$#1x~z@t&*YC!Q|UHlc>5g&oad;M-bzRm)Rv0OfrS^T z>6#IHlv(hW20k#7r+lW(e0u-|g1~R^>id5VJ&s*L4O1ALOSL^^xtjHz{s_J~{C$XS zeWPc~Nvmh`oOh-50sVwnj%@|MVx_J@Ox}0b*e<O*BCYq|-isV>Xjfk?>pHlYyhfib zZqsH=)n=A~^Pt3VjtD5nKt=SQ0A?ph7yl`)lK+}0;<iNKX3Ez5T7&kjT1eEq<oySw zD}fJ$F3Zhq4Hj*Y`=kY5(;H=P!5iao072JYRC7;Y&Xd?s_7qWFdb4WBD?id`|E@x3 zx0A6r&hv?Fj6X2wgGl5j3oI97K(g;vLBxlBW0bMW=yS0`n&?L{#%x}}|7ARYbnYv; zQozEO)r=U}_B-TM_E{wPX10$3(Zm09s@ueoNerd<ibQBcS#ca;G5~P8SZZ<Tj&;%; zO5}t;4b1Mcw*1`H|4z<>$DU@WA^#~JJ7_(1-g^E`Yh|K|Oht`3W-EcY{CWXSKC(g~ zKnC03euALt71V#1O(&kfV+%^`)(b_h{><Sex!>H3ZMbJY(DCqZP&31-))Cz!l>B$5 z$k!@N;hUO5xjvRoa`#I<j;pJf=$@Oo;v3>r2Ns=Ew@N;+H7Y62NL0Mb2elm>ikh|x zc!_KVk3FOPr!>QtJO=<z(-8rowa8oHHM&am!FvcdY5|}&X4dX{=|H(uM9(!5xwdo| z%cy~+l{ElTk|i<rMz7SIzsssSv|gs1|F!0q)1;q78L@{pZF90_U=MtkG3iqq8PBAl z4{`dG5E!kt7{<|<!Xn>*_e#KNeSa}cbHh<|vw8Re+uxv1{B2ME1`Y3)xnZ}pM2Q^F zeW%4&*Kt&@K0>$0gr0RUm*q>{s6T^N>ghfCmy{B99Dy=S@-=?e4Vr^e?I)^UV@Vlu z?~-0f@FjuqbCb96Z0wLQukajtN^d@1iSc+Lee@R&Gx6{+JL@l_CbnPCSbp)oetBxc zdf4~ca+Z2CmCMTEdc59mN7MWUcYB>KfgImY&8>P$Td9Ls-=3IpbvC_q-#I9Xnt5cL zE!u<iMD}vleYRhngq#xwfj42Z;{570d<UMDT_%OvyT%1u&75WU9@}Wp6|w&w^F0?z z4R^#aFfqSNzxzr@If=;p^|_-6AI@chJ$7TH`<_%$F1+mo!q%%)QfVM@!!CHV!+wmd zm#vyxhyoPsAC6E?;kvp7sO#`Nun036n}7p5zffQWQW(7ix&evgO6rnMJkrx{T&|6L zdj_t%U#+G6M($Xmv+Km<f(DTr&a06aWy}spLrG4ihUM?z&sbjsYL^<Q8nf$mKAn!& z=y1DhxNK9Auoces{_S%DIff{|hP$W7Q@6}KhUC+xkb|1B@GKc&GN*0Bl5A!vdpSap z90t$m8=3h4H5b&BFxY)%XjoE59ra1_lgkI02RCoORO_byt`h?4O#YbM0bS=cEl>CU zovllsvR%_Q5TAod#>$%4D9Mgxxa~$SNo<KL^jV8|P-Z2ynbe3=4*({15@2Z)%R5IA z%QHZV7@DY`(i>NbBYym)p%J9&I>qE?>*Ue0aqgYU7X9?H+=apj-(0gc=OqeBmC(BQ zcEbDm&%!wc#13P1O`T^k9^<aRp#5b%tcEo70fkGm`E4Z!IU_Gra)Yy+q&#AelH$5t zf4JHJWNDo+YxMH8g9WJ*@VLZ{%aY4e{7)T@qML{_<d33X(ij~;+a0dCr~j}YXp{lg z%Q6`w5E2dMsY!agvtl{Lu89APt}cTLbV0pX=9}pUKGn=l_)Ie6D4el=ECA~UkpH&i zJ9&7KXn2*qvW{!)N{l!yFayrW+-nOJ`3b_dERj6NVrGd#Zxf%1+k&z*dSp)nkY4ir z#n&a?9Y&lnRm?=8p59|dre0|gU1T37mFp`CB&uH<{-vw;xNX^rbsdi@!@k^4z@?@O zzdUlu0@St@_LJ6eIIsJ?ldR8YA9^pGstNTxyhwfzsd%A!zh>-dr%zy!Dm~Zhv>!xc z0EqBJ$Wd}EYqki2HxOC65$=mDWB79G7pU-2d+V2N(|dkZhR@~VDGZjTz$p*!v?xdq zmuLP_LZ|c4d1c8E=6~?Oo;B`Z^r{)jCW%7Vr{4{4;2O>2FW<}JnQo<A4<=I(d-n*2 zzPrU+EPVu)**1RhLjwe|Mz*gq=X#FIzUdi1*|XdvbP)Eo`vbXtp%!nS`PYk%?);EV zzQIXPl)5*Rf5J6V*L>Svh(<fC?!Ae1W)8rxLuX5MdOp`sd`A0jXM4)jM@FmN=u{>u zXO<G84f%^0MGWH0X{>VWiujKGCjT3BY70D+jGt`;`aQ-hzkm75@T<B2IKHm%#}A@( zP52_q{YrEEgG#p~SM>$1h~&&2tg1NIA8x>>QX-WQl}OBQwKqWzA8uwXVy-_r#NTnp z3mxKpQ=2&IO-M0>|L>X*G%2WgH)Ui~Gp>AC&FZxABrd}kTs}4wvuiBSvuxS3<>Kpd zR|>4}VN(rhy3va)ski^o?pdk_bjTLJ!MRDE=t(u#Zb|Q4BDsd&ETQkP_NLSVn$1O0 z<B!vW1dEgGO+I=)uTgAu+5A;n2gn_@VLi<#2t7N$$TDv!jY5Bl-Zm;(p}#L0;k^=n zB5>^#lhKxX9;4@N*28wQTSVQ8^|{FV5#Rd$$ywQgRTq}=+Nopltm{we!}>R}Z$GzX z3{$j!fO39UAEH5%z>fu}l+mWl^<dKnEL+#u{rly>+rc;Xa0K%u+~7htbA+HEWK5r4 z#+~!IAl+7CLsO({a}(Gr9^pQ$usAW~7Bn6UT&q-tm#^gdFEC<o>5){f%ZnZ2ZT6_o zKOY<lu3#KoJP~_jd`)k;s!CQCm)$Xx1+|)_{*{#Be}ks-)<2cb-D6zc*|*k_!;7Pa ziX2QT^-Cc;?}d(COPlGJDN^D5ovCoHRS2w4A*gT4wn;qodcqD<kGNtG|FxRL3mi@) zAXzjsY4z2{*KJf?Kv%imuD!EfkhSh{VwuG=#{27|c!tY&9tJTuexZGRe!Qrbp01wR z-K^`p&s)J+Y+eP|gPrDbgxfIcc<k(YU)2>ojfH%NICbI<x@Elp&H?RM1dO<Dn)Y*+ z$nTbPi)q`|;5D+fzTCc5BiXxL`d)@D`!<vkD%Ez`1@eJq4L`JO5(jClP7C&~ykLuF zxUm*fF0Fs1fV{V!b%L>UHzm%BM!VHOpvGt$hkyLLbh5nSm`G7$Xf{!mwYNI*s>2wr z@lj<rD28q!jc@zq!(3~QFG2n6c8RF&IQSF~GE~!a;+n_8aE?qcs_o#7o=eL8Wmm1R z_~3deK^mbUdru#|79KUTYxI<M-8>ka!rved8XjqXpFE92*NhL{5<?)M4*#1V+Wg@A zO74||h|j|YyQxB7)}V*u4ilPWMgPh1|GJ0p^IvN}<BHta6!>UbnpluXwfoj$2V9_4 z&$OUweTDo6h|H48=BE<Zusl_dQU}pPUSIE>wcLQ&1pl2L+2N-yHUNR=3Eq)XNk7mD zelI-c^=KCx;^9N&vlx}JAeqQWzA{W;t$-c7k&e|hK&)ZBcgZG5`|bT%fq6L~@~BKb z1(%0}J!`kQw!Bfw($&_fMdAw!TH+X+=i&-8&)r-#lU5Y&1#Q5^EHkTmAi!)pZJ_UJ zE`668qOWW%B$E&EF7PbI%tqSJIpD92oP;U<Yv<C7;Jg6w#Ru9yDCmg;OByLNmvZ<F zz&IfVRqd7hMd`YQTnCRlNlg;KWZQ<TSDdn1g9$H)xa_Y6p=v#c#DOQ}OyiO*LQ8q| z7{wzKZ>!UfCClW=whQkSGVY1BEi&v92bQ<o&=3r^wE$RzFH~@y-xl6N{X<%{bj`lf zy>^BVuMdZGvMNn1A{@Jt?721^U*{}O2Y%KyZ#0Gy;{!o$Dz75Q!{P?2xHCx5HQyF` zytw+8{{}e+gt@ELy2#gp8}|BCd~JH;ZiF9i`(j04jJ!-GfMU2V%o3~i$n|lq)whND z4D9zFSU|-miE*~hx~VN2gW!GS(7Ii%SonUButJYMW#2>~HB=2LXwxd+$(-_9FMysO z*blk>vB-$oG@`vjyvy$0OdT9l3<2U<?-MsuSFnGveTvUK+aqEYeWy8_nQ&Dd<Y7Jp z-Q_!siEHk41yn0)lQS}tztkWb9x2p$%AwV)eMtl|UB}u0TJo64WqJOaoNc{(@?QSZ zvbKz3?J%?cJJ1VIEqSalb6i-VNBv@$?2eXpeL}eZ<cX^i$fjHK*FjZncndF$V|5M0 zHxtG0iYAgL{;3InJvXYV#3`%!c3{0fK}X50F-z8ViRa^Nf#B6g$`00^$)=T2uy~9^ zZD2h5NJdKO{w-yKN%r>bDuJof<vU?2NB}GE4`d+8D-U!cMSsd@F3Ju*3cpFh(N)kB zO8YRcm)KHv*3z_`pOYSZtx81C#3j&$mOH*N$cCdR$cQ=X`sDCV*NR=e42|gZ$Jlq% zb6}d*VSA`V@0hj6DVFwpjFKfaqxk+QtkRfk6)Y4p6;tP8V$I*7ZUOgMk{dq+7U?P* z7ZfPz@FrDI?7ve(XAB@HO3QR$@{D+)%uS-3$?owh!^cWFqGsQkIP|CFGAW_a^oJuI ztf`rvUdURhJ!07(QN$Ek1?uWljM>huU}{`CE&Vnzul6uj80Yyz#=*ib3zu}k?Y884 z;PUyNc;XugIDvu$@W5dj{OwQDur0gX@JBMb)ZmA2D!#Y{jY>cRB1)f^szE7>)1w0` zNNLe|Dk{0rUVCnHHw$k^MClZcr7`Z>IKcDu@NOhv;twbYas4wkejJJ5i+16zhG>E7 z#~H%_KPWYn^ck>H34CF@FX^thtSxaJ`D~6WS^!m1RdyhJcGE}0hUigE@VlyZ#j-rX zy6by>ZwA-nHQF*Oh3G#S)OHIYC6&)uWA5((7<gsIh$eB)#9q9XGutjPuX>ksb#!pM zP<PJese)Sa6~mP4SLJkVB;x5(RWd9swTeX?DHlD6<)^%F8(<jixrIlCOLcD)K{L$e zWU~0U6gzvT-cK2ds4Uz_2i5{1lZBejo6j+MmQ62IhlTYGxOojm&LX^G-l-29KZzg) z0MB76hi7RW;smFRxi4wDU8jR#{j`jn*WVzv>$`4dOAV_b-#b}&@#)AmlhP=viM3>> z_QVo;2)%a!d?Zb#gf9at>uFM?2wlJb9-u+eMOogd6$|@ieJ`mkK%HVFOQ~LLeBTRm z|Kdu)>R-~!u`Zp=1tY~sCII}LW}XtXo6oDT@7Z60yDTGpQ1@l^Kxk+yr~g$TS6tgL zxi}ia9_Z6lqN`Cwc^F^SO9wNJVjVA}O8o5LP-&`uc(jTmdp~frhTL|PQ?m|<$lkO5 zl5)#f=wEUIu<+Dfy&RuLF&|dXlZf2azd<Y)WJ(J(Z^_uI-OzpZyeBt(aP6aaXX0aj z=ZK>K&XEvho284c$Rz9L>lPQEu+kbu(}izCNAyvKVzpUfrMnOxJbPb!P`zk##EU?g z%n`r=$)+{xhP*Ds7?E>V*V-vZCL-7W+v&n2yOtfMA&2dgE*yaSXId-Dj21l2H%5N) zRfXwvjbP~*wdvFqvZ%pW6ORUWqiS&`8!2fV*|>cN9dbRxueg!v`$o6zH4TBX3((N1 z$?b2We{f|KsTcXJNFCm%(Tg)Vc3ljRld)M#3#7bXrZTSz+z<fNsiRWhVR|584Ug$3 z9+VY#Uk{?gz2{1Sg>CeR`QHs}y_&}Mj^f9mPG9(t4rN9YQZj(c2N~0G<qJ0f(%iyh z3*MY~ds)Wg{yA&*$v(*;^6~ZMGD}&Y?rCNN<e@H(TN6(>kEV+Vm4GTjjM#+H3MDj0 zY+cd|!zVoY3*o34xcCw4NOkK@jKBg*^!u?7d+$8E^b7VVo@B1`>G=!rsp8aC2LKY0 zs6d7GyX&IdBw7ediE9mYpJLnVzV3l<sG~$RY-Dc~2_<ZrCK-j)+}IwM4x8j)2wiz} zxM65x?Rr8HEuep;yaljs5WJlfbey<!x@C%V;t>=;eYvx%e}b2+8a%ptA`pEu+W6)g z{pY~w_iaj|wa_)JMlKkVL`%ZP>v9_n(|4%6MMtCmRJ@>KyOH&x5T;oAId!(~#mrgG zZHXC~tOA%h{cS$5t3aE6733f(uj<R-qdS&exD>k<{rzD;e|Vs4;`OaWp>4&^@>Zhz zdr2IfM`hIs2a>;yIW06l(@!YR?!7rJdB$;W$d?6GGz2Jj;(6S#|1wD^B+2xPg=4;~ z7ODyL^~l^wip3dW{{{uT|F1m%yTkZtgWhxj4zpcK(NMCRIzi+3t`x1w9yfz!)YEi0 zViW}ew_nLa&+c0DoaI3lxE?F*D}Gu&`ufxPqrWOm$ns-_@~)SDoj!d<j<U0x#jz4U zL^<bYueva)NQX>LM9Aqj0dPnA3Q{{=J%;_TZ$Xpm4@^Gy4g_<9<W~!iE{A>ncojM& zcj=b0@Z5^uJJ^(<Iuq;$J6dAMD4Nvou7HD4M;IQO1kHKhvPTYt(C<KgnQtaohi#sS zKm4p-cZujL@*6ZWE1xg++&8_NHie>~wFe6`z%odhkxKgk0md6+Q;S!X&hnOnE+dGT zHe3<9hb?vFgjXTIHaF_HBc-I^C)+<wrpjrBbv{WSO?ly<9V2YapN4AD*nWa0o{H2x zE&Ab69C=G-k1SW=5I5X<{e6=Ay&Ok)BZ9=W3qHM!5~qIsTAqG^lD>l*+sVFu%Bo+w zlC$nOGV0tx)KIOp%^c%(Mhf<{=i#vjF@l&I9$e>(@Jv;Dt|}HS$$PA_`wM0C`@tiw zEsRa6d?y3vlgy3R3BCYQo&S%O0a4D4z7YHy#CvVux9}1;;Fj47o;KPG3ekek8?*Dk zMSe=4G7_|TVDSm)tu?non9Y~RBMV&Ncl)=Z5;5X}KOo613$@EFhcSlb??#G40PO(+ zwQ1rkGTOodV622^^`Co0jk-jSJ>k>|VQ<ofOlc&R43HxhEe2AA9jRF6Wa9SMgV$Vk z-_p__LF3UY*)dZu`?qB8<#AjebN8nMOoa}Dn8|tF5x?DARGbfHW9{r(X=Fby*(CYe zWylZBHvm)cthBU<eBYiaAsCbcA}7#xIgF}9O`pzi37ss{Xzv5OU8(>{8OS5REn^=B zD+TX^7^c#cq?BYLU)<W^eSA9A7x($}e)O~{RoxSs66ZVOv=Rv-2@q=wcAkMomPYEQ zKinx-IG4RPU#6%!R8p>hp+_T662cbgAVUbNI@Gfep4&VyElt17FW1ZTna4ifOdt9} z%S-k)VfLq@v=W~AZI_>uz8*FOP|d$~0~MaJZvH*}INeM5jnZHWr$bS|i8_9QN2yp+ z1yu>3aPHMpMHK@elVAh`K;)p?7`%)bjNG^&quY3S8QYofnncuKi+&Q33A4($%||4H zbM>Y?2-#ow8lqsmIII*e6gvB9m!y2l&2{s$D~RAAaV^~x`3ad?s9niS8FE-<G4=k) zOE&eap<>Z|bs)=)MCyDY%5c6e<=VN7!LfVj@j&+ix~j#=w%Fq36(WtGXpLJZ%rfg6 zrGuKBh&>uoq@?@;K;;3*-M!;~07}3Hb!>9g+2qPqd4dz9X1Se!s5S3o!=Kqj@4ERP z4euf)x7RM)5pBqr?Oud6>l?c%0~UQM280zDAvMy(FS+U3H=NtN?Vcq_C2<rSHb#a2 zt@em(bMvDAcB()3vwdJ(rpO%9({nD;zbETBV|1ZC?(6YqOeWzu(TZB(3RiB%=g>Vs zc_fG=S<!36f-((N8JCta>apYesqtCsnJ9neXo*|!@<Q}2V`1?T0oyb}TO~ce^{and z%9b6l2G{=v6}?ghe|+@e8XK@qO5q@W;ln^D&j1xT-N{fc%w#Y}XDfHd-KFqxis_dY zl^-PYcyzsqPOv!RDc_=XFd;&bepm`bQedUa^N%k}NR5IVuAe;ttLW<5SX7)VzYv`q zeqym?*`>m};&1`l)ktJ+;zNO;&#P}r*J6)hrb*Fkz!H@6j0xiskxzfzi0m>2*2w%C zNpXgixU>->+%8F$QT1E_3vcGFA0b;^$Z6DFUGX918B;{SD#jY^SI%h*cGg|wCTG@& zxf-a@VReIRAJ6aodHqm$Txc(iG46p-k0}3ve!JWOPeWG)soM+raZSy0!EvHVfLpzw ziaI=u#6@YVZ=9n4aH}OphJNxA)m3NWF4QDzp*G4yQ~DS&_*SeNfGUU|$Q8ZeVlm(z z`GWVGpcaSkxI$juv`&~wh86S3*Vnjxr0OREFIW1;zP@%ujL_pQ;0Vn2>C{?3y<PtN zMbhMz_4gj%lG+M`Vp9sZ3<jsblaz}$K~y{g2`t0q9aD_q-J%7N&rTWUVkQ)aDl1<v zQbdbrP}4tP%q3#=j=LuiMV_+Cr+!aBUCUoUoq-25b9L<TtkD*JS5sJMBgv~eGO<$d zi<94=qi9HFP*5u4vbmT3uHnFQK;Paw0dkFecdWC^!NKuW)uI{iI4?R7?o)Q+q|a3y z3eC#VSo72|Z)pqzo9U3J@rwqBIu9~&n&)XbUd@>oT_$zlIzbJ_8e`jo7n(>pGy-?M zgsW=3*YTJF2UPI-5EJJUe2kvezUkxfixwr*CPkN5qbI>BRSo9qi`IaOZH)eYb8FnZ zn!`Ok7jACCm;E;p$AQ?^3dPdDXzH54ZDocGvv<A&YVr658q|NX{BQR}k5#%3<$ow0 z;xX**L=a4H@~7qO9)v0ni8T=5`!^94TlFVI=`j*5!S(3RI1V0o?FXpwg!3J1xaRm( zaYo*8U}z89YsCrnv@A~roDkj6$SYIaAk7oqe4D$lhgUf4HM&(`kJt3+g?(h(DlIX; zV%WoxqN_AC<;ZMcnwd;#8`y52k+R*hOwOa8Hqd|dsKinb=n&ek=hH*OKF(50sZP~O zy_$8)zc5_<1W(LVHNKXqVZ#p&)-l7`#6;?S0_esH2|-&KneRfjaBH9ZZChhvJWg4! zU^ftYMNE7sVgM7QGxh3p^AeLcLp&?!=T>#4JKxIj)m^j%RCcZ9m$lqs?=^NPU4y=X zglnBO))cbcB9x#{#qw}tSg~)2zC%;R!te2`q$yuA*<7E#jlV&jB1sMd=KC-wipS5g znGEx@f+tzg9ROsJ`ullah0qMM#<jPS$Pl49kAa=xItKpi@7ZR8IJximA4)B20dt-` zMKT%~85?GOs>Lfekdg33uy@P%PCsi7(ZJJ|7p;9s2sc#rX?pH*hg^@yz_YZU0t6FN znNA!B%=-Pw-`|?*Ke@)M{kHjqpW7a}_wK{3Sa;EnfU{6!Si)K~uHQ*kED7;?eu&fg ztmFw*g;+htNe>YKxB3-A)3RLPF}R)$tR=v=<hM;?LVrY69A(AinmI&O4-6$=oFAQm zZ<}28N3Hw~GDzJW6*T-!BKbJIR}wbK>19^vpZv?NIrZ=`%weMW#euF;y~_$neNi3P zBzF5(j`mXr0Jd*ctoIgBVGw<@0r#YPFDNY8n+9=kGtT9v{$(4Ma`gD&QEMl#G~0yq z{)8bAVnH9>sv`EoI9#VXF3nexh0kDnmB17;`d^T6<ohT?T|im9tCaWv;Yby(HegSm zUG`nB?m84Y=UYWpWDZ?!srAhA7of_q+3QgFm0TcTt(K(jm8+EK|9B<uX^d!~?K^ea zV+hsosPT))B9nchWe~sj2susO`?Xi!e(Pg&Di`98D?5x}1AC5)jG1E@F0ZyWB3mt= ze%lUFx!KjM=Fuebj3;MBmH}c*Yd2llVKVyROw#m9*RBNZ;{HG-KujK8*>2O+E4ILE zlwFF$R5vV?F(NjC2rYjx3wtW2H1Y)UeZD$!Tbaml1!v^PLB~5J#fa%Muqv>Qvb9w8 zaK&dTGq1tT`;`&HHAK}=li+5zc}BEf@l_h_-o|ZWTD*|a_ZC4Ks}8iT8p=Xx_lHeh zSIhluj_zRbTzR=SO6s4T98^ahAmy5=?CGf6YK!P*TNkmqi%4%00Ia$_!Y_3b&o5?$ z+^fzo%t1I-<m=>x+3cOb?r8)$f3^()7UiM|a}HNkD(w^Ha=pKzRz<ncGC`w#++R$^ z@i&N^$y@U|X3<lBy}1@A*^JATm+@3mr*s`TG{Bt*&su}@?g@;dKV-z(!`ecHe!AwC zpd6H$BK{Z+bY&am57}(r?2WX9)ci)hGjgc(yK=4#gzf{k14bo8pgZCwQhCidU5Ol` z9v@cWWb1>^=9sm@Agx%(CBA`bi*Xg!Ge+Fnx+PktZ-nx_O-G5s(dI#*V(=pK#A}sq zemvJ3kO52E#{2h)qyrBfSRKp|UW4beWF=3Wq*TWGp^os{z(oS{88)Y*!jW%Q&l-no z@afni)1s2SB;7ey;;b|<RoU42Xm)RHy%;T`*s)K7lU%K6U@*8!8a2s!Q^|IbIcGS@ z`t6ruT;Y=g+0;R<0ZTPYv_q0Q0)r{<;kDRqe=pesneocz`-b&J{N(R@f+8Lcq)2^6 zQ81)u<Xi;kiD6yxZZTINDu||XR&k>{y{!3;vrkQlrak-eUn&0b6-^H`urnN~lR4DC zGUC1T@^6sZBf-_Rckq6gC{y@e=I84S=|=qGnXf;u^QTWwtER^qblb*A8^U!(mSk~` zSC|`=TiA{5ngGq(@#ig|KTseLNOo9F^P^@pHp9-VLsKKuXszNH5}@<)C}i)R%OxVL zxG`kmD5nDXShiVreVb+jCrTrEW&VgsMneM7l#kvg^}(3smF-Au7$v?;9qGyjo<7rh zX{iZNolg*PFmFa1blWsxe9?0`k>z+!x1Uj{>~iw^$mN2TV;M}-iil$<FtMjFOww`& z)Ww**+xYSP{M|x7DPopbheiB;DApLGy#je9EXO+byr=UKDPMxg%x+~f`3S#zl@ng0 zaIT*uD6<{>=@Zi-E=U69FycM``qfE5iHf&$IJYQAU{=Zg=;mlim$PebV#dDI!W+A3 zui7Hfv5gB`*?uba*mr>+C*$9VGk4uu#dV+cE>Otn{0misn7nXb=V$45tbS`Pb@S03 z!693Z;Fs0nj+2{41#*?p-LX%?FTXW$?n8CoPYSrx$Y)A#z56L^=ScJOX%s3RmkfM~ z{K54maTj)}@i(I;n~9q+WTBXU<uzr@$H}!Ggs#O>M9ab_VI4S;RX?SO(bx}7pPk*G zl38n*-H)cUr00@j0GmwBi7WQTp6-pke{e%^yenWmVIey^qaO;t-_b$-#_G5477QSh z1o`TByYrj$c(&er4ON-<c(#$jIW$8wg{+?uH8^&&`gN*d2A~r^w#kNoWK&r2Q7qMk zbZCVv3HiW?XNdKdjSpr$yrcv2-ZLC<!=S_ZtibdnAGz6ip3P*R-EMGR#Zq9FeL8F< zu8tyse)%~teS<jPSq4TN2-O?2y<%=;>AlHkZUH*tb!84YzWSx*jon233@KJNQ}wtF z^v)SqFu+;zO?eU!6kA66Rp%Hn%=l6FEc^G~7lgZ-C?Dos8mA(M)b0H({|z)c$PZrM zr7R$|^~J=tiH9yIygP9vGh<&#DR%K5PoM#OTJ$H>cOYBYSvd_0h}tL6aSn#!0CVjx zC^tkF{@iHKP1ngwv17ERYKGb7m%|&~JY;_{lfeR4?8AVznH#U7ALZRY)UmPjbMxbp z;WNKkI7@8-tg(5acc{g-mD{nfmBpG~W3TV7j9nsf;N{JzuF*r>H5f(D@{6HsXR~$q zK5;r)gD^UQLto~y`$ob6xKvddh@=SQ(P|)$J2<=t1=*Npbc6!S`HHo?71cBbH>Rp> z@+<1ybJZcN_4dCcu+Z*mOW=mi-m#)dWZ)*+DT2E}G3XU^Kk0wT_W$@Jen)<R##h8* zHo`MVXIc_%H{(a}fl&I6<j!JCyla7ChV0Ogg#*Pi-U>jDa_iZ8DPuxL#yv>E6=hb$ z+S%(5GVsMrqC^#yf-?pTnMm8)K^k5jlk!duClI6##G96K`v;6M;D(2Xh3+%T7QX7N z__4a5kVnN`B&DU0>4mYm-Q@R0lGgy1_hg-GIXx&|haU3lL9jONb2Qxld;wcn;AqV2 z63L<7Y-v8nv9Z9FQ^0}O(ob;GLza$rhck!q&1c6f3B6$-XGOd%WsARfYbh`kBVlN` z)KUa?-9$hwu~;X<Q~xDIOWKU~%Crr3<!52OEjKLN$GY3|gUIlDQs%ArXvSNsyDwNR zWf9ndQ0?cEhL22(R0U)BJw1~**9OBDhsJj6r>;;R23$3#W(lGsz5toiE_kB=pqvs2 zfU3x;S8B95nX85@bbDH|bZENG5f8K)N@UMGBwXB)(J(~R4j}K|sAQ?)N=+C<tjydP zrUVcMci!@YmsC2P3MF3$Zj2n>y8R@JxdTG_H|RD}Zc979TY$utyCt<+f^K_2%eiH_ zE!Z|~ItuorW!##hudKXc)gsn4$EccVm$-83vTR1bKDgz3ZX&V=<}(;TKUDgTGo_H7 z)CgJ;wo_l{SjD+-r*ye>7n6|qJmpqs(1%iW;x1hq+#+@S=-df-_fDvu&Iw0tEd+3s zq?j+aC-{;^>D8Ms_Qcgz(N2-(Fm2io#Nh>}(nos|?FXI*yDi+WdxlQU5$$@^Q1+gv zH$X)tYnTn8cZ-@6n<v~*hJ=L}CHkr~J>|`AKXE>0c^+f&JIz*)C##Byq?*!x;A5O4 zyF2pbL%sm{(D93X)o1JgvqF0R?eLIBqcEPIy|<2%K3nz?H^17`Z3B3PMY?c3YMv(Y z*^8E$Rwb9=iar&0n%F&><vj1;?`w_K6IoAiSvso9yyE1OL<r_dK6I04Gsz{r$j$#j z+*`**wY6cxGo*-sbPb4fgMh%mfTMJ$AdS+3bcYTq(jYm~-6D-NNO!9sh|~ZgA{_>P z3-FxhJm-DCKfmW&zu#W7_pG(oUY+-SUAQVeceQx)(FcKXvs6cZ<Xb?Lv{_acS?o*Q zJs!KV6X&9({L)QfE0a8cYA&e4I$eOZr3)5!Th<WiB@_KwysW}t`@?k_R+nNrPpsV` zM7qs^u;qshQLI+Aj?v0o`Gj%`K8C)D3hqY8)e<%(jtYLyP1MM}zG+0?X3(pU3#XcM zu$rl|DJ;7H0{i#K^n_b`P+IZzGzQWo*H^V}yLP&2-=R%)gJmizYj?To8{-_p_oz_e zOf^~VxSmt2(;jS7ZoW`@=E!NkJ?b^oV6wo&$KNt3F%~h2fWzj3mhA+K_G7>6c@!(e zhEU4MYBtWsaJy_?BkXL1qt&}!e`~u(9yE8#*>&R6`fBx3*vfN9DM?0aDhAu0hB^iV zzODS1I{eGM<$S%9p2A*M#~%sJwUex<G=x>%1O>RbER?=6M0|b=;Nu@af&zG(fRNv~ zm2NWZ9d5cqnNO9NQ-Fae@5Ko|6Wnktx_}E9r!4z>Q>6Vv-nW0gwJi_^+>vR}wa>G` z`-l^thwO07(F@W<K1=i@AlWfXI%IB((u?8l5vIba@!h{DQ2L$p-V{|t0YeHKrtc_8 zg$k#34r7}_h4Yr%tcXY|mWuZR#v&oHRzVmGF!bC@3%@JK?#KMB-h7gUW3m^_0yMG& zOb)q~%|%BO*c*b2DA#a*8r;~lqIdG-8BI1pu`YkUKTw-lZ~nD;8Sn{8jDJsXQbzKE zmJETM5iznus6Oi7qRUJp_ti)8SWa^{;|d^oYylvroRQ`D9-G7rlK%@?;TP$$3MHl6 z0*zOz69mpU@~FZdB=aiqpf~a4ma_RXGZK^ZfXw|(0apm!Ej7ugm3wV#vD<uIZ#To_ zwV#Et>9%z44s1h(QkQ?`!iS3U;h2Z_d_FB=g(rVye=ss|(bTIoD<$sHtc=I&b?E1J zpIkE`45yI<2Ix&1SB)K`H!YRTVOCRN0ZEPzyev{Cu^khb8xHt})_cSXsUj%!MQYHp zw^B1_nw6&^cK%&-+2lY$3TgeIy>%t2Mh5m1UIbmwX6(AQtP`29x{^aRgFQU7Yqig* z3OHc_q+=QcH?Em+5TG2$#hJ@VcTP5vgW6UwRjJ~$_j$H79H}AP=<B)1CdOx=!pDFr znLXXf12>^kiprg@`G_;sv^fviHL`#>F>9so^etp#7#h8IwOf|sR$F{-s9p2LsTHiT zs8;e^L$}k>*lKq8{XP0}qG^IVhKb70FJ`m;!0QD7)h66GZEu&8St)^}D+|y9l#`+t z>ZtKg?g}3%E6h#gzh~bzE!D~Zv`z}FXkG!6X_d90S~4u~SqK3H1?*D=9k8LIczO%s zf;zQ<AuGJV8<vRlHKr&dH%S`z`AIQpjSe6|o;m(sEhw6l-&o_lj1D>s-I+5*>_#gY zCz4WF#a2gP8_V67__7e|sO27~*_AZtTrK=4aZiG(Q~9D%ruf$DMO$#Vsz7n?EAzZf zqJNCTV%&onDZDtt)Z_BpQfNQ+DXCjEp!6}MYDDo!4H$B9I1qN+tD3EqN+O@V2!S+N z8kERe0qorSN#5%r>C1AXRLn-ima6)axu{#}d`j+Q{zJ8q)I_l_`?catRGc}~JJh>) z?@*WB%rc_FEg20n31K1(2z76uU?nWbqf7(}kmm-c4Xf`%wshxZ+(1p-kkcXU%mAf3 z+(V$XlSZvON+DPJZdpkSqIAO*MOacvUrDvx+;+w#ruJBb75DpdMI@3H@IF9d37802 z)(O4`0<kPI36erW9P&|!5*Fln+YiW|?5Xa~sUfL{LYW{C!PEOT2n|FE0=a;Ngot7n z0$dl!1x?5ch;$YNdkr{`0vVJGfXDT`=zuGP7zM>S3m%DuyrKyxz9B%|9L$`skb*av zz#G5-RwckpeTNmric-9+bm|)jyF5SDqqqQpumWjv#mmrB9a0e5V?_u76BxufQTXbQ zJ}<ha!GA*v0{d~!S<x!bWUfww{Fi|;xo?$+d+{Z{?BJa<fIF1QIt3O`Gp<K@(4l#& zu_{*7ml`Cjbh-;}`z1+4#rO}U^h+~x-u%`G*c2?OeEY_17y9_J+Xm_VYR%d;8ZaBE zHaf5f=5Y~*0R0KpzcMQJpPwbqgp7%d!NTih*U~+~5p$zb7TZwMjPQy@TA-uiA#gDD zgukF#HtAvB)K3D6zB{j$cV1z9f`zesw1`>Vgmh7l32Us7kGH3?yf<)7H>yQ>_@=!b zaIG5IC8@i@JNq;&Y8IpUSn<>NdifG`KX8Jt|A|4u)0Zv1xLSG}qPHM1R$10dhTNP} zc>U+DP<P;woN_ik6#SlN>|-RTT~H=KC&UE#x53GT%upoT&3#CJY0@RV8cB7aP|~52 za&d2z2>EZne?ODl;H}U9R5X)lTsI?5L%Zy&C711x)EGnNkx9t}w1U$lnO>Bbdsr+| z>WFM->rm0;Iq8@x9$>YIC`6L|jM)fg^@C<ak|XLT)L4LEkGw&7PvR&{$TxwHZJPnX zC~fcIKy0c%9Yl4Yy1x`gq;r38jt%bv_7DcWVAaH%5tvq!l{b#`nIqO{8@lGa6L&PB zxY@`C9pY!;{K?sEEUGZNcfs7JEV#e5+8h1|TMC~k&)jE(O0J1EpI7??lQn(aMHuO3 z-J@N&ZnH4*P~I0I%{esNz@W}ujM_>y^v#c&BO{Ri9@E{Wz^t@p*YUF&ujdLaL#`)m z)+Pqp3B9JS{`^8$-}vn3XoCDQ9rY{t%&+T5!D^1ahnv&GC0ut{69@HoZUNQU(*ig* zfEb&SH>|Cek#@wuHtNOJ(ffnsjW89~yN%HKCHwv;ha-g85K%);KAeRwNyt873PvYl z7yNAXD0fdd%#_E3cQaB>^KzZP{STQpk!9R$%V8hm2#QM7+m?qqcBE~;0(4$qZG9@A z@v(BI(=WPXtAGX!nZ|)!?t^eX26~|_OXgRcA(vI4DB#R=>IDLsg@P6dfq;$;7<}Y) zV56AZz+d>9Ku`Fzt%3@K1MbcZ1q3<@-ojpoJVp`)YeL*9L?K8^6ca#zLt=sT5d_8h z7)YC*8K&nD{Bp<zHYjMt&+(DqjmL_t7g$eYa@x9>PSprc+t^be_YC;1P;7rb2NalD z0iiwQlUQ%)p!>?Bqis0qJVdgaOy@WMZ4)p(=Zo@xx&Cx}V5LiOiE5N#JpF<IW=ZJ~ z4j3zSYaIG#)}7irQrKEh?&fc3<P2+_kl|QJ_^xFi!Dspq1|s&NRD>R*!Vp8!%qfYu zG@B_GbQQwg2EFwHq9z2vvemo{$%G^`K`1nMHgK@)VvwL~1KrnYgtL$r*n^;u8dA{p z0===!Q*CHS3{ur<v`Vj8b%+Inbu~(7Cx5#5O$@h-#1?Bsu?Tjca}r|%`Q|ZGQBG5d zxmCwKXSL?(>RLkc1MHziX?vmTr`De|D(kiDnXo>;oIn{@!C}cnK&AXxSH_&4iPi90 zE%auk523PgSc!HzYcoWAOviRICqNZLcd9pgs><(MK{IVmT?EEm@Qib+hY0Hp54cQ) zYgeI-)fOJ02`K0YP=9qU;FbTFcwZRK&#_jW5d{r=Y2!Y<@6gYv|G56^Zgmlp9ojqh zY*wbJY_x;D&9cT)Y2Cm!Ngk9UD90<87mJbsaW@P_+|}9nj%-!WS;4K9tdNQKZU(b* z;>tIRV4?etZQZ68t<z&i^nk@PYvUVQppZf6v2Q7DM2=)$(HMtfh!=KD{%f{%`%XYb zt(yQ%9!oCBO4+63Lq&N^mLw!(ym;{zqC3rVYfQ1q5UPN&=5de2VBmTF{k7QHuqmtJ z>L1kGJ{cC$UTn4PA7+Ui1qPD}2$zKyKh`C0%^}6$-r!(0%JG{21!5LQ+Aa;9%hlL# z)d1~qrAiu)6mB`J$zlp4;oVhiBlxf6pAMU#F0fH+<rUJVY=s{O`Q&(Hy(TX9gH9eG zPOi?$`{Lu1lB`HzQ+)7DqxQ*vYhbEB<=WDA(<9kKPe0Zqn6=DYVC6?zDgw@=gHJL* zpSUu#lS$^Dw9-8NHbXRlv4978^M*ErT$X$i#Y&uivfBC3Y!lT+{{u~W{HTHP@5hY) z>tn{wZ-_e{<kM_j^uVvtLw=UCXNH?&oBj&(zsCOcI>+qMsW;gCr`g>Tv(4c8?JMXX znSyxdAN~9B%ag?$0*5l^o@xGy(_hY0?qY}1XWx+;2>IFi5gLqi0$;<NtofbA5gP&? z<$wc;+i5UJbE02o{{Hhga{3zi`8&kU|9aW|JQS8cU%x0Jb>^M)-1{Y(e}7z?IQr~6 ze?=Gj(VxfD6r$QZ{`P+s4D<=!3Fb71|4Plj($2K@Cv6(%c>@m>`;)2X(SQcxE1bDx z{fQ5>_0Oa6X$}y(I(#~h_#y9a$a&sk&dTUdUZMUD?mX{KgL46ekhOXC{w1omzurI3 zVmvCMUuO~jEBDSy_CI+I9sR55|M<sYI4|?yvtTpfeSd%OPx}8(;hzKzEC21|JWBtL zB6$9*xNm?DUjixqXN><l11?EicK184xo6poYBTsNgM5BNPHO{5z*$nyePQGLl|I+= z%JR4Kf9lddsumV;^qD`I^ZE{(U;FRU8CFXH?dJUzP`syc%!I!=Z3w5?brvUV@cy6L zan@dFupj*i?z~+rr=0uaI1m0m&S$>=@wM}u8va*kAnE6=^gQXSf0yl96#ic`?r+!A z*7#Swy6~so(_%W}h`eJ;W;BIyP)u0J8U7}O!Jx;o*-`H+Y5HW*xlA{#-6u~|4K&YG zv$2q%1G@~ae;6<@U&cWp$pGZX#G3{Oj7V3^QgQ%fZ`h%P*VXtzj)NOmn;KtipVje8 z%;W{@ubo`m>8>v875|u-LfFa+m!m4JhILD)_L6}EZ11h-ad}*#CR^7GU$Z+!DN|<A z3V%@~Ml>Pr5-2Gfdci+T?KR!06It?f>%QhQ>En*A>VGkwJU+efmE%RhZVasyaVzC5 zKp$v1Li<V+@vc^E!P_HwHa#RY>KeK|vA`OqVo?`tD{azz@pQ&?RxHOmj!SW*$w}HS z4RDIi=(P>tvBk7lfA*BP+AeS8rayTvvdgtp%tqH$p0pqnHa?$4={P7nA8~D0u9@}| z@3tS!a;&}O+rZWSGPSTYT5h4-7<DIEyjzhz&8K|FmQGPLO>FS|8DCaelRoy>BGEmG zdCJv_ggwDsoFBqliv*r^w$`MTYen4Fj9)6o9vF!djQ7!th@d&%(b0?QYkym8Uu@}I zQCH7eDtO(PQQ|EuRS!3u)zDCQY@0dZwSu(q^SIhLUHs&C1z8<ibr{?s2HOrI6^Tgh zW|CV%m>NC^W>MV1IlS<`vsBDy7x=x!@wbc*K42FR!<=9~*|R`z_fS#c2X8v#mA)?N z-Z=xn5j}tqpRegm-gLEz&@&6twzn8hmz^Jx3^Ako4t*kUg_{#-M&r#&Khy`udsDed z7^&%3h}f`MlA8^BE+djD?w^_K#goMA@`~a`v0vjkT4{fz7t30Ki|mcg%(00BQI1Z@ z{=smKL2%#$W{6yOl&AAJ11S|>=H1h7CMCFYIRRZPo2N3Fn_*7$Jcvq>z>q3j*g<Zh zoG<1#L@)@y(U2aL#;az9CsOrjPKwT&1P6T%8S6yxoq~O9GS9X`2-LQxgfv?3&Ywz3 zop<>olxU37FBZLSz=KsYO|Dww1<|XfxC14;sq`%qqV=jX|4uOdj5FlvcOm52TZ*8P z|7YbxAkxKe9OIND%r2lQl~-J;x}}nG=}K1SpAY=|=KxnoqKCZ^+9l@dG&#VsX0mP- z^93mblpGU#!8=&K&(%g5#LGD-mhI;|DiWoyvc^XuyuGmIE>ZP1j1J5(DKyCvMR<o4 z(637^;=!vv<l-ZmdLC6ZRU*E;w(-LIDPAx2f?-!L0^z9STB<mZvQSg;lrGMJh>e58 zp~+J?N3rbbMX7-j7nV5fZC%t*S0#n*)OB;qG%B@9AAC-VjQAnZ^fWc=G@3y1of>Ha zzAHLPPHS#fXg*t=p15%)4YK{v*M!UP%Io}kF%#{rfxnPIv=hv6h#v}I0z09vNuq=k zGvzPL$@&u5>Ip`8%C%t@=Rc_Nz_|`=inU$B)yJ`ia4T8!$GQKNHIGjxzDI8>5^A<0 z9FrWj9&nZFYhH^mPI}w^ns%qRpO`ev?#tABde4=;@#hQ?n4u_jy@ceYzQITc<{5#M z<=Wc?U3+VT%0h)nV!d^B4*5$?KCmORU7x)Axnx@cp~2jxtsE8hwt45+kF*{(IT9|O zKI0!zOc_N0ej~aNdk#V6*Y>YC{r~VtOmhEG(BW@LPSftMk`wArC#VG+2v}8rQQqpJ z>#~i=+F7(`K;^45!cAVQmeqG`3%l|`(e;ZzRR?Ym^)cE?D(DLdEedsue`vk~1C#Jr zZ3hMI@rebaKv=HG?OH?rHk1m}KhyR1E(i`8ZWjFJPyR@1%IBTX)@Dn_ed*pd=*!CG zzU<bDl!(Mgk>O2xYIaF`J@G=0$d*D9#QOY=LNkDTfs=PBw6GRG@7Ly&_WaF3mQL*k z#+}3vA`I?@aUR94)fJA;0Mwl3igBJkaZZtbI)B>eVaV4(>{tQ!NTvk)O2O@fX2Kp3 zAG+y4JM$G!y*rD=A_!mIWFFq)cMXBw#ktk8%fX@{xk5c@M*NlCAC;hH_zA{g%gW+2 z4LM2}4f#RgffT|B52sAnL~kAsbH6gbgpvsJekMOuNy?V6+fGRu@HQ>xC5*Vg3#Oa> zvXHufmq!;i9XR=QpSxlt#iTJI%KLrS_r$}H+eTPEloK3uTVEB5;;Xu~k7V7th2EQs zByw<g%5-KICHSlAjoc~=(U>Icf!$?et&y*4ikV#54u8db{nZ*FFF~oYUyImihEKF> zx<t8HWcNkVY05h(P8G?EWR)kom)Y8rRackDw8P~qhf_uegwpT3=skx;H2LSz*-Z$X z@3UU+LBt;E&rUl}7~0|^URz~VjMuU6#}`Ud_Q>%dEy6DP#Lj+A<lGroG;gmcIa!?? z+rUSk?&&<}^nZ5`6mER!)6(SJY*b_dMSR&!F4K^wr2wx6be!?^5A)dg+t~PnZt0oG zqYE!5T%H!PLSpq@MBa)s5;_qnEG5<?i%Z0)xW>j}1?4beiabGhr)za^;fTrdZv+EI z6V^L;I9OiSpW!VH#VV8TV>1(H{JgV?5zt0=^o_5C&|bFZ)qlyF+kELWirNSZnH%@1 zhyZPyquU0gr_MW1=+#ChC=&`ifmV-vtc4S}wng6LC>2#Ta^PRW3J6G0r%wN;!DeK8 z$Gtfe<;bI#5I9tM&A0c1le`6kC60z`5T;&}2?TeqG#7V!$<5cny(c)#aNUeT_Z~RZ zyj{-nCfI_vj?!4oB2maa$r;gSSFhl(zBr$tL?h>6E^9Hl=ChcY{jQtLJxuVrPuYX8 z9^UM)!eEVZDBb(IWn?So1$5$D)kbj3@<x>JC`tkx0GGy)MD#YW(D)b_IO3iBh^u5g zMvtyQ+@%G0OfLF$tFQG!z2Is;RU<<nhGYH)>2Sm8B#30d=JkpZG*9oZODHl`%f+vk zA)lkEzUZ3GElsDI6ZdrWR0(I0eaJ0bg{ZtY&3vrwWC;PV2pc`Dt%LwZ4&WoCD?OwF z_%FbQvmM=`#H|PRGJ3&WmkQVxv1R}~!Kfo+!2(<Wf@N#<h-Rzc=ne($96ax(fhov1 zu#SIlsk*QeIx$3ad^<i}<2NKGG#}T8GEjUWsWB|ayC-B%g1Ly?+)bl9>|F$d(ofH! z-R0N)5&pE-GcPYty&^H~U~~vyFpR-Dt~Xt^rs3>)fb8Sl`KWbcIJ#(DW|Ek<-c?LP zhPr+_gP}zHlOYy?;WJQ}Pd*_SNWA~gQvF~516}>0^HZSp7h~X?uNqq|zae}0r*#}6 z!Nvh2$eya=U@$PKdr7KhWOKcsoPl;%w3s+%7$eZxel-xW^HcTNH&+m2s%Ojn#~(d- zs8!!8r15zeK^3Buj0`Em-lo*46~_aJQ>`(m9@61-C;D%LgF3sttO!vKkITL3FNEn$ znIewxr@OxbkZI-KEbWUvjZesKbNi7mpl#7%p}zLE`ZdpD$2OCIZba43q5vYt!P6he zLKg{{ox2pxEy3FqK2tV*G19?VwE3lih@X`wmgpiCj#IhELaG(C%LqRPNj~@^${L9^ zyR!+OSwH1C@6)k@P;WDk4sR4<ePK~uTd-b5n}#e`<vjL?`30E?f1JqvJ?ELUrRO$W z`$?GRbk7wbEDYNUubvSg{J`an+RrHy>qn0+E>sq(m=HHrX;2i+p`77D0Mw9R#R8BK zrr&h{pjgEBAmCI9+z<jhtiiAICpzC#Im`&I!_+_C$Mx=IV`H1_rl($XeHoWmDIC@2 zOG9?&EnWIU*d|$#kNR5Q^&G5D(U7<!gEu2wVh=X)v(qvU;Nr&7oz6}&Ma_`ix{Tz( zNVmq`K@?d+EYM{G!<}L-#*aXGPgcPM!e$-nTBaErJ(-&~2AG7I$tpR=_;0U6xlQw| z_@DNh04&PNNU|KmN+e1V3(9l>ta6^8mCj=%*h*9}ze+8qf2)^}(lYMCuA0Ck;mwyW zE55HQxnk8Fr|o{Kt2LBHv=th<vq~62v|Yd!jO(iYTX$i0;$*CWdS>O^9wbxA%$jkT z^Hm2NPu2_IlnM)pIt%~Y0+eb%*`V(gvvdPv*3vzXM1jcz<Uid1aSQX8Eo0e}B);@& zN2z7rB4$ln%D^E=KmKARfh80OWp5vk-5T9xlESSNTr>@(@97UorFfU=V(~ytYqplN zTuxFR<>nGTuORVC*Ox59vRHZ8VM_OQC$W;FZqg}5&8eZ2>F-x@Jvy)gYJE)L87C0( z90wfDsIm;PHl}U8xzJ;d*wHnbHYgy)C0KKJE?1_WCHCl84j?#mNQ;@{C6VwhAQ8H* z5qAluSGsB6b$y|V9rP*?HcXoK*deoUhG?a%MMVDI<OhV<qWQgD_0Lj-yp`i0Bv?9b zl5ZY;Gl!e{m@rkTIeJLbGknfGlzq#NFEOan$32##&|degNTEYzqiqC0L@XkV!#y32 z?2X2}owrp?kSp7(v);!yNZ-}nahH8XPk%Bhp6H)E8)~p>`ar$ljogNg*u_bGUe66Y z0Z|32lxv^pzN2IPuIuX2-3&k~;9x2RHj|`?3zb9)n*%%esabEY4H}k?Xr({89NWKk zDYDMWN1!4UD1R~UV>hi1Bz$6?o$cVqhwrlE-8r%8^pxk0U<oWJsx3DZ6dH_o<&aCX zE!?z-V~Mjtd~6oQ&Rc!(xuS)(zI(ds34O||U<a1oLW1PFsu91cM%MB0$%QlCD0c{n z_m;+a$A~XR+0}vLH;|3(Gc2gj9xJ}<r%YNC=_dV)<OaKOle%n5?MGIR`2!2z)dcP_ zxph3@rMify?9a_)p-Kwj=ww>6-w-O_qdNaPx;{*$kK7DT@-w~3pV{)H+E9MX4+pej z;zvTM$2o)b`lXEB4w^%e?e`~sMPJlP=Z#bn9~Rid_I8=xRw|OTm(TT_KZt@?7i_g` zq>_-(KhsVZf0?2*-dZ%0F<q&?C2eJ-^u^rQF27V#HeG<EYk6UHfX78W)lBAnS0daz z58sv$1!~g&*1#Aie?thr{e~#`y!ooO9q=2nMuIqP*K4Ud3lk0QZraK*wJKYrAviL# z24_(t(6+xvpygy`ZkDd**e_-ch^wwwC@sc|A+7(O9G`mps~^V!6Bm31l9Uer%AK@| z<k;$soq?WC)7wlEb@h1{n+>|GW?jWxBf>NpeoD*n-k-~Lfs=K=cMCH7aMG@>G4#lp zshW+AHIDm1`{K5+zLmMv4PmDBX#6<V<*%$}vv=P!!B|r;3pPY8Y-`%$Ldr^<>urM! z_Na_QHFnt}+Ae=Sl~H1C!X{UZ{vj9VBq4>A{$^wwgY*(Q=l1LXJHe6%TdTP+(>P55 z+_jsp%FK1-2)Rm7UF~k_?P{?r7t?=Czkw_3-}~5N1!=2ogys?uyle-!V*)OXO$U>l z!17~j@oB_@2@>y5+WDf5@$?%Ni8bxxg8L#T^!IpRaQ4q~Qxy1SbsCAY2?s)b9hQ$B zOMRgsd<%e#-CishH&%IhQWMs;j>e90m=H{)?N$>HMA}CO_r*+Fd{5!W<^c2ECt0<o zbl!9C8gl@p2Ecq4APP&2YLl6rpi+{v?du4_IAu#%w7>B(x8moj+j*BSxbD@1$J$i* zN}Z9UzbLR{Z~=&1oa}NbSSUJ&Hm0!qi&$I<MvCWuohC34zRi94W1vTtlJd#ZzA;@e z^PMi`{8~@o8Xw=l#I8M?t*5MK%7b3V>At?t!{xpXCc_Zw2s<P8Yk3aOna*m&KdhJG zl+Vd(`NQ~wP{OJ_2GV1~R$C3pCVN<=Yq$IMnGKbmw^i9bV@|Q`o5<uQxXWY5pJ@W} zVGp<RcvAnMm>UwA#2YoQEt$wHX#fJhz>4}S@IQBzvj^szqyb|~EbkVQ6E6TrsJ}e? z*DsXB+Gi;3*u6&}tF3K-WimKdn{1ar3X%oJ6@a3r3X#~hxvhPDo8=>;cexY^nba5w zFSX9Ieo_4VO1XV`_)c-IbN-JiId?qQkIxNNv@;=WP)NhmJWRM%6YaYgPrSQ)YI>K- zeu|pXaPy5kY_p+M%>7t7fd*KSWC<HJZ0#!EfjHE6Rz7l0`#2wGmjX^KRy3WSF5yxS zSA&A8_w{#j-Uhj!(=y%sQvE8W#-*mmr_IQu+VZ6t1-<HvZi~Op;l-z>X<;3XqQ|fh zUt5nn3UFZpGKm!qE6)tnKaO7?Va*=v&QpF)H^k+W3r90YZroemaD%=jW)_U(jP|Z| zovOvxZ;JL&;EOZ&@axXoUiDmCs5OMMF;ruZZKuozC%~jd)t3>m_RbP>4?F$Z#g9YE zB?DHCIOhCdVrv>=nG7xaatmF>N6|M@MuEuHM7n10CTB;7e~l%VKo;U{9Ywv2wNr<6 zeBJ=N1?R35L6=KE>RZ*5kmHwMHDrQAykY{AUX#3%y=UKXV<l4xYH1qGZ@lwN*$6si zl`u(9Q~5HcT3vDXW+viTsU>gguFsXMJMBBJ>CeOq<ycX-E?$h~NxXl}VRVF@bNMz8 zc9hzHr&gNAvk1M&)YAJn<fW(OeHe{%h=M?9wqdH`-m|aQ!ZE!S7H)nly*;$sO=<&< zEg?jp@`lB2ozNtnFu?8MGhhlRzL-O)M1|cmu<^58t!Gho%ip0~rK5l5*@tiB?-8Hu zocjc*2-oqmlkG&lN+q+-ADDU}T)Q|N>5V@BhI~00-onrLs!H(2I_#~TfUYl&GPjFM zZ1r0~gehUDzqE;ctZv?K$nwDmp(w`_*782~8Fir<00H*?{i|TFD)A_9gwWi@iOtqu z(AU)MJ)yyJF%E#CF5U4`y}0V8kea=AxKvg62ZT^xBqlnYa3AT>e&1O;yn2AqtV%o# z9mJ6{wSSuO|Ec+}LE_H>;Iwf<L^Jk!uBRDLpK$f#ka22aX+IcOYrVylhJbM(qT|%A zn_Dc5Y^m%q0&NDIR+;H8nwr^HcDcve*gf%90Lkxr%9g#SeOD{Ses<-VK5jPlsPJIi zld6=t)oDsJDV*CK_Y)CUNoRdy!lA>b#DV$6%3Hd{DUx%lp+-|AVjrt+A35}Exp=Ut z9<s1*@A@*D(S76gGsJ#@2Z1Cc_fREH(PG<#>Lpsf1+zZT@Ili@o*oi{ZOxKc#iFrx zo?d))*tMq~dPB8LJp!aK$JgeLR*1_fwXL@VR}C2WhEOAnG#0usXzB|`UWPeY4GJXW zDQP=BmiX}L4b0E!8!{0a2ks?OUPvcIG+nH{o(1o=I(qhNUkcsWy0c|_f!l{Ex}$Pu z<^4*F*o#WLe3z_(e?u6me-^NelH4-BwesNFrR|lYq~2_x@+(xSF6I~bA&=^{TtOl? zfg7VcTmLuLqlx6iWH0Qho~YTb+{t>6W@73nEj_Jz_I-0-&De;PmZweCrTtOTWF#V( zAr38BOqUNg(I~@1=6KWB)`(lCIKhO^X5(kn96}c-Egq{(k|3)6dzCb!lc0desb0wu zhh<{nHzYfFa+hi~r+rA81YH_fCJ{l_tlU&==teQ{3>I0`Vi8&-_cm}%1pv`MDKg7i z9bsL3&*LsDWSKhYlb-2I!W^|T3+JF#T}Va?za7(u%S(uvd%X+7NPMYS@t(dx&VQUr z?&{gL8KwK_g_Pxp^sMRf>EGDn;h2cV=R0~)@^`j(ol97kXOjj>TSJHsCc-8$ONg=W z^v+{Focwmu7Sa;ja0`u0nAJjsj4IO0c^lImu73aGw4m9=Yl}^VM0XQ~3`I;w_{^ly zUZZ>F$zkOpLPOGu)Q&M7aV&jezN~n{UOem!is_3CNDY@$HEk^GJzXsx0qLhQgSg{b zr)!*cjaw+fF6~;)@eN#X3iDSByHJTdzXc*3dTe9qgAG`UtWa8NvCb9@X+SNk0&R#T z!d{}apptj3?|MTfOMd>;z04*9fxYZ<E$#PufcDpH4O%<nRQMb67=m~E^OYjW1ji3Z z<*CzPvA~s5dHw+c;s#Jr!67zd2G+OW?-B?=yX|*kj4os_Klku2TWFEt-opaY_gy~J zlgs9o@4NM^TI)*8HUD_SkpfEJAu5_8PkG^-4OX8zq6WF!rr9{B<Co-LEY44Cs^89} zIVF3ZT3(2zd$zIm)cAJay3I4#cuxT77}_0G5H2}pYttnrzE+eNSCEycH%kLczw{$( zUZp{#R<2wiJUIEjQdSC;+{>gfWiGa<e0}HlnWXIv?~5inEw$U17=|yXb^9`iFHfw@ z5_5GGmZ<mZD40>Eq!r(mr^2(VYcxum@(yB+b03B)6klaOP$f~S9($9rB4Ozrr(7EE z8|bfX&pf&3Br_lyP0B`x<^9@Kac$wDwzw78o&UCQqK!?=*WxRW*Q9e|f6WL2dH!cX z3W1Qyq9Bk<Ok}x`$DM+tmT!LA4zEqn8?U#0HG&zOSV)rV0stWc5%YVe`$<&Zxj936 zjoBy<em2+dsi$z4R$3xB9V}0(-KBXJW_04A9x+9`49<%zY$f^5D5)z{S3*gsq{db? ze<3&flDQmRTJm%zs~|UT+yZi<m$0Ok+N8E1l&SGd%ioz0-|SZEd9@zt6igra^Afa* z)Yznj34|_PpKg@OEz$(lOotb~-7hufj33;gZhV8PM#+q~tR{U}HKq$64zx7V6{@fH zbv8_wutY4fr3fVLXy4~rtNsl+4xC1RaE|x_gDuUiO^{RzE{Cl?gryYwo~$yOxf^pY zn=v>|E@Hns$Y=CdVZAq-)$A#r7o`#$Odh8Dvr=m!;p>n6@88oN4y9Jz?F;AVqRB;% z%{?<64i=zB!#+<Mo7og&*CKQSMtUAd80LMdSXE$Dzrni$XEWj$^W^Jv_VM<(LA)AT z0wBx!zZj*)#OGih1VGYUtj4}j`PB*W*5&Z89q&#Yn3_GiGxOdZKl@*`_y6-pXTP&e zD?o5kbED(OZ^$SN2QX$3VB57W^LL9n#eKJkC)^Fd7aJXf7KjxUk8pC<X}{{Z=Iw#> zTv}`r^P5{%2zMReFlvsHii%>Snf1wA!7dR=G-XsO_OMCx)v;ShY|vU&&}71^f!GE8 zhKNd-7Uab~V8_%r_&9s8{$LEd@2u3^mJb_`XOw;hGxTgGTvR6C<#s58EiEb}%q5S) z2C-Ge0iY{XeB7`(Y(yk?Z;XC~FiJEIzP*$vKZ&eG>}V^iFB;lEnrd9ojw;h}@J4g5 zOcIlk$Z!x5D9EWUq#Cm>9wN`q|IYJseLi``zNp{bxs)q#)_MCfI_wjVU0P>gPx~!p zwHgI;h?|R}e**n`x2OBVrW_PLu*67cry+Sf+Yq&CA$B(HOssZp`08LiS?ItOAwDTo z)gs429k<e^<;O}0gZM5V`C6EDpX&pMei={ML#&rAh$snnD*~gyu{dVuefVr??ZAMA zpg=Tl#V4K;-JxqM^#y!`gfh+&Lfe$A3pv7l$p(nQ-0zfFMzt&}vg8bHU<fkKeT_wQ zZ6*D>mM<+zf~C{2zQlHbbtY~4GGL>ItSrCXV-|8rC{RV=tGd3@&zpXl=doret*f<( zL${P(l43a3TP=olY~xzDFC-ux1Q~}{%EQ9UNbVJ@_oD=0u}|t6*bQK5uN?-TUzlL* z9UN!Wl;ZRurDe)5N}Z}J%p2h29NQLL+aS6db=gpk>YA~-bR|h>usmM3K?N5drC?n| zfTiqFh+b6NLT|CItVCSQ>`R$K(yP&)?AJDNMzSvNl7m6S83^77<yC01KUR<zzk4UH zZ^-pSxB?@=1A+h}Z1kqa?8Y6zfB@dyrH)cKn=P?fy~xmS$aYB|^QXS3QO{;%_QH-Q z-{!O=rMhceff>-#gx!AmehoL^6Nd$DSGS{pyA$s*TVq+4QTNZS2Zz`f_bJ!ix$dgJ z6MOiwa;s7Uv)+a&(>jz~=vYil=J?Rt7tJX4O5}Ye?1poSf<+WQ!_~6Mr2u5*TQXVy zTokA(Py_xfD(?5XxG!UirjU2Q4l9HV#Q?dC7iwQez;8l7`BGn7yV-#E!fCYvBE_da z|1t4ie(*0M&S?)v9t}T2N?rbs%Rla5KXrC;V$zIFx8ZkaOQ+=x9Q#k<jZO`q%q+V{ zdXLU8u+n%NbJZf1zHU0zdhx;1he;frIXR(T6#)zOuj@EeksjQNjA$Y@Y8-$X!abet z6p~+&cVA0F&qsXch9G%teMDvJlXV?_1?p|BxS_#90=$O;ncD%7Z;p!@SxN$!TGv-> zZ}HO|ulquxQ@^#hCN6)6(X4;1%J$b_g)zTIx>@!Oabyup-(+Z;BVBR#kcqum4PQLA zuy%Fw#5+D_Klnv#C&w;pz46X|p<JY+qg#0{ub{oFELdLuY2UAxU$6&KjoDN;7h1Fh z7vFa#wUX>Shc)RBTid=5IUelA*9J2M01bkoH-{3|TbAbHkQpr5MH3@+AJ0~DbUdfb zCd#6w*yvjaQvobmRw-1T5#JRdo+>^PA?!*?SbcShL{3Ft#)_cGLY1qM(L}M0sTrQ~ zBxU;DGGVO}Y=3WrlI>?Ym1hwaFJJX7yg!i$a7Ze@cBuG}-4G!v-uO0|9bj0OTcqf< z-WmyNuf}+)n)O^M@=v$^W-iXAnG!8KRH4F9z&ZWQOp;m1+`dbNqEewF((9UEqSi{^ z0XHZnP%qB5+Mr!u5lt`ZsdgkasKZkh#b4d78OJV}_AVx2`I5Cp(SaLHaj$`S{<Lg; z=H3Q((7sAZEg=c-koV4>&2mXL`j#UlEy2h^#QJ)6;lR{X^&5lT^&e%wA<ys$Y;Wm! zT&S1sGx&y}F?z80#L06p^ck<S*Cm(m%>-yPZiios<b&Nleygbg>fex$RgZFhL*C4A zamw|p$Lftp2KMp(^fZ1YlIrXJp>>`_u|oj=iAWw-&mvlPx(>S^UFF8566=Bqn0f2F zW+z}X%%uWbx8r%Wnhn{dChgoBuIx$XFeMhCdO%*}X}uE`n;)mZ_z+9zs6yHR`hi6F z3S~+Vn%#ZYFZ~%J=JdcAX?&W<|CO0PC^#~E^j&iJ&pCIdIB2>!fwg9zWBNTTPm*An z;DAu~W*Kn>B4fD4a1HlfeQvy7f%*lG=-cYODwkY~EUM$yooJW((v|ufeFL9)3`DDy z>7<*cFeW-OlEBcSHMTo#V7XMkCdX|i^O&xWV|M>OtT=YY8Bu>D^7AB|y;gpcG+pVw zK0kvaX&%ztW6MZ!Wf=fhW(ai55+{~wB_a@!b^B}gQ51dmMS-&3HH=!}h7qrE<`=gS z?fZ6fwfIFg9JE9fV-rO8QiK+3+S}&;lY4BUX{Ego_m1#b-M5K{BRi=m;#U9P5YE4D z&7Ka3UEbkVjtK!R#9~Em$3aip(ulpy8iF<YF?3U1I#<J)QyH+<(WzKl+wn!Tk&|4* z>2YQcxR{u6E0c(YBB54~P)o`RX_S7odtbJYgDA9zE-w75x#bw{N)0D&)?}!os>CU# zHpK1<x3G204j_={i+0Uhs3X|pG!3|T7F7|z8j`HgkIMO&7#$B(d;Bx?j4H>bUcP3R zgp$oxOC%&>vL-KpwT0|!b_QhV9?c>7<ynG^TNSg_-$?;lYB3*kA#u7<Pw1LHB14SV zJwk5sT1y9W!9F%y8IY`KH`tbX$ojcehF9EFNjhZX8C#^TZ=koccXkVx(RcJ6Z|{R& zs>k+40*q*LGc?v(s6CM_dd;$;b|YOLocF)v|H|y+>?v>jGF=ZBoGfGuC&KO@GZ3qJ zT_mZajAE_zG>cQ-gd1}4M!qS@6g<++Gs;QY7>fV=`H<N=)xz$Bxy==BRzAu<r2+;8 zcw;OVq?v#PT|P;8r?U13vCR}ANlCUe#~OeZWUDc|_(+?=NzXugA`|O6pocnt5v2qH zech=!+hc>^q?wK!|AtsR|2&`OLW(_k?(1JRbfBv>jAs<%N56VpDVUOrXK#Hw(MX7f z;xB(!zsf$xwWVU?!KyYCpIIAzDSq2HW;8n%5FouNU9^77n46tkEbi73(=c`E-p6FP zhz-MlAdl$GBme{iVHip&$D*3t@9FImOfy+4&n7WvddRuSF^~7S2rulgeoiZr%R~&z zV+P25<c*8Dj3nNP7r3kOx4AkW*}%|j3g%q!!V+^gmy{ewun!k4szGKNY(@w=`QsCZ zh=G;kO3u@W;)p6=eTsvEBz|&*C$Fp7dCEX?*DB-D+PQ%*Suq4gLhM2qH7_R6bT7ry z(C&jip8HVXypK;hv5;7*80hrx##3<}x6+HGimS!<x&-D1`Z;7%%Ux+p-3xjtm2+E- z(D7Q<RbyE#>0QP_qIa=o+Q(LEsZOCL<UIWBI%~LYk||a?JnVDJxj6MYYzg+dMs+w~ zhX$*SaeF>}i^e6X2}ZQ<%kpHpE_J6V+ESrf7%}}$e4}-F&s$ZRn5L&pQ}i?`fbUkH zsxhat$6I{u3t)(Oa3IyucaSe_+;3;c*R~%LpL3yJsW9(t1H3sS0kd$sc=_mIb(E<X zzv@qgMvI*fh8_=Fk+e29Y;Cr-?ZPB#--DxtwLQVbXR!O1b<vxG3q6lvbxS6n^!G*1 zJ|}aZdnQ+Dc{^#f(|XIr#Kdlr=qOz*IM&5wbzl6*q26WLiNeSvYVOMP=;NkVibhX~ zJl;DNWxSd+J>j`cw&G^`730bGC#rp5PBc}o6a|9o3#z=)wBFjjQmFsoMj0`Q-EYXb zAkzFn{?XYHIY=K8+M@9}N~ieI1S}KmW#eY8a2xXRjZ(+w81l)p9>;Nh$<8q*bq%)z z;0$gzKgs$8+aR{Onui4erxuCO_w-o(sJJzskj+j|%l$I1=`0U^rCV9d&grk%d<}OU zIIjGj@Zfqmv0F~iI~%Ti-e~$!5+&?pgs!~_q2HinV0~|SL8s*OeN$syvI(6u>)5_Q z{H#iNT~nw+jAQ>m*pa(o>Udn->$<-ua0H6UfD`A#MWiNGt{f8+`7IPmi2_2m^ahb) z+nDl-u&E6bokZPNF|ny+KT^cFw!HrwX30<%Xcobb|8w5811t&@Z0ZZYGE0r5_&__A zXEzSnj;5tCS327;iGzb*{n^$qnTMQvDcB*^ViLdl9tzE^QWnRRi?5DmecZHb4U?57 zaF4@Iq>tkSP$lo{$LqLHRt%iKO0})(ggrywql$}v?Z@ztjEk381Dv1Jj?Es4{D#yA zy^(qO0``1e_E6G{fD+^2m&&+f?o8(SBmM?CZyhg~g2zhhS|3U_kMqdxF|I~8Vn3}$ z^w`udZT20i+7Ec*Q+%hC{54K8ICY2!n1VsRo&FpmOf#J?O8y$5E<8j$%yibu^)I-$ zaLuDuW+7`r79aa`FxWKa=P&L>6A>pv+km=f)Y?{ELkZbJ#hxxc4j2p6*S4m<1IT7k z=`hqTrXHNjC<OI1>Z#T_1W-cXNOg+YxO*FWZS(LRIe27)jqp8Y$+YbSm){W2ybPl7 zTw4+eS-xmF=c&Z)s*JD>n9E8O>h@-WVQEyV&$VH#CqZ)=GB8JOr<D7ntt2WOH_XMN zt`pQyDo$+JEOPK$6<baIf+YKm@r%|}7VGsr(!5f5Q^==!^nxw1P5BBWggD^2>mFp- z%Xr*`=wnN;@FQ4TyE3<9dQi%VdWu2ntLbe0Ag^*Ed{chL>rQ$P7A$^pl87@#2SsmX z{nx$BRwiQJSDNC+MMiL8598-7bO0|M=YPY%-{8U?X5B-GKcqOl@Y6{YI)WEuVy^^2 zSHq-;761NQ=JaoHA$>X-(ZM9`!Qeve-dsC!1{4#-r``d>+rp7ny74s^_d?>!D!RQ` zitNd2Kxmqu&k<FK)6K6QTMl{ad`ve@;Jh2wfPGozc0Fi`O0D?6WG@lb=^M*RXZp6C z^*#T##J!_aST3dO<bWfL)jkYXc)#{Q8P~Z2&AH#lM@?&m>S=+W74E6JSZk}8s5ubW za8SATEAgrGPOPFcX*lFIfn31U0#|DggnQBbM|DqQA9MgYy=3ps6598!&0OhS9gqH? zRNn~`oILyU^vfdyIYZC8Rah8fKeDt~JU{xSMJq}T9WMSZ<d?&)DZfvat`LdluLsw_ z(is5xK_rjN;-j!zgN_x69X^Sg=?ERS0F)ibb7iGwgGWRUnS^nVZwv+ppIG8T9}#^t zAPW{S!ph4Y_dMWMq(<}BL`4kczs7rB&uxzs7JxaLJ`3ZLA~jGqx(%gep;=4MJ58s| z6d0wN2V@4rDuI}Uq(wy^7@j<OEaGkqnrn$P+^Lx=1hX+OSuEQN1fu|IrojLw(9wP^ zbX|)YivS181i`Q9T;3{IHnErKkqjt_TZoXJzq|3%l-~<}Ke3?P#ZTxW;)a;s@aTD_ z;tNz?J4zMFxU=p7Ytr+e?V;otse_r0EFw5pBG(r&6bIEwk1X4FmeV$hTUr7BWg@KZ z=vn@U=q{@D^$CTnjl|};`};aG8>r2*0HLZ4_tHEOG?s~orfm<_k<9yVg}au-eeU+} z9hnZ|)cxGiT}F@5D7$7P13Z5e-Yl<iRc=JAt9wG#>**3SB0jMi|K)kq{ulN?wyDIr zfGF$f6dwY4aN~27MLrle+Q7JhS0^|ia(q?4C0{Oc*2-=IX^#%-3;n5k@@$qL?y97( zLtvfqajGlXrEf5O-UHJCw@3_5_q*snra!e~vzqY09Pm5kIqYpO-Y2cCMRb17nRpV{ zor+rQ3)3Fp7VeAEOc1snU%YNTbk8}?RSh7|K6|XTCopJ6UY{w_(LPu8i#RBp&Q#Vc zD|JVnzMTDzOP@Zs0&ktcu0LJQD<N&YBy;%PH=nm#M+c;@5Pa~AIvD2XVUDlYN5b3A za**hnO!|GX`ed<%7GLaQ7!}t8cH6p30n@2g2p@XuFCuZqGlDF$&fiaRPObcPrT0Yw z=5V$*^JcT}XS=q33Y{E0NGh>6iQ;<Goq-g+<L%VNw6*mqOxL^sr)Z{fOVcI6XhIgZ z;0Xzj_wpV*<|QTTj~rHf>q{{%%KH)&G0Ptv3@npBsFLWl+b(x;sX1APk#FK11iff- z-Rudv(b+a#NiMXNXH<#c0)vkqmBoU}_O*q9ZNcj+w+8*GKgP|scDB9i$`QalbVvw2 z#Fk@K%V7&WWCVev4%AiKEcnJP2nyJ`@vl52-)AH*!B)4L1rPSrlNq>s<^0Qy;TlB> zK{4|!8$@uls}I^ufbeb5v&0P|7}{m9G09u3Ic{EJ7PvVtHzx54fVTp(V>jVww;TBD z2$DiNw^vJPUcy__x!yc=bi1$C+<F>>wxkqLcuimG4J^YxCTu;-d4n`ilg?FP)z_w? zV7!84Q<Kg%U~Y(+KVT%uq>fnp9xVPU4{>=b&_lc>YnaQ?x;z@UT*QF+;O;O_QAXn! z$pyNXF@8eEiw!yHG_O?AoE!suqu}i7r{c=uPPY~&yw)s*a4qB^z9pWDKGi`EZxSr` z?f8ZV*HSTNR9@Wjvn-J}ud+YFC_p`fn6m@66zM9L8;;m-#8y{cyA^0gJ5bEF@~V)~ zbz)sPda@s(?C`pYe~r-9mu#`$`{M(WD|wj$y^J?>ZZL4@7YRs|j^c-XPla#7RHBtw zUU!)oi~w2L7-bDzJR+ss<nj+sd6LX5vbu?mYq<EYP~0x(puSw3msL4L(iuU;Ytq9` zUxNLJ4(!r{iw5Ccd-WyP{@;Jl_7KB)ZZ3Ae&J@|sI(iPSn2g})JlsnjqeKYXhgX+m zwrLBO>@8)R*j}ORmt^X;vt}d27h*&ch!wkU_rD-N|I3x5nvCt{LkjHfU{{2#7e~TF z3WaAG2dM3ZS?{e)na)Pi`Aoj0j(TZ?WYW<EZ=Q0x)4xZEF$j`d2+AqKqpeLUZ!fO- z@33Qw0Vc@_HAAxL7tZ5#V^vcm(hmWwx*YtzRow8vy$s&x3~}9gbU9&w)<V}yUN6*6 z8fEc>NFGz~U!i_!bahcEw_b1Fts6Fx>$%jOSq;CYCa*VKMn_;02vF2r_*$RN;3<f& z<5;)nmO8rh>E!!rSOkN<+!6u-x<Vtk>-U@h^qCe!O7pC>{@a2XD-7C5t3^eztW;%i z#9w@5ck4^P=Bb3<xxr#9C%y*{i7-x9@w7eiFYyk%EiqL*>6pyn8PZEMGQ#VrgQ zZWT8+ZE9hLHQ~Qj+?BV>#QClvWpQNTO&)_^lI3`YYw952R^s~@eMMkVc*W99@OqR_ zL8-7@=VA1k8(_Qm5%~U_M>VbV@rh0x;A$7e_jl{|o~;$P-c-vjR^zUq>Gv{$P^<T9 zqIDd^KP0>jOiGc$4Oelwc4%s|HAt-K@#ATOV!L-L>*5^PJ%D&^HQZBxer#{-My(8- z@&Sd9j0hBIvhna{v3J8+i;_k1ezoazDEX_V^jy&{qhH&|&3+e;SH|qeB0A%n5SER6 zUSkJ%v$II_WP0a5P;$hYpu)X8hgh!jaa3p!8(p3-%H$L8@-Ynp(veJO>%OxQ6`=AD zqP|A;us?b+T({wBa~yFA1+tOwT}aVbcyRiiS>!5H)8c{{tz%dq4hp--HKY#UJY-(R zN%2zyVg>IlBh;D;sOrMkMj3;#fAOk6K~ImbEa<y?oR>wuaYYwCmjqHjWCTVto7XDq zy)}Sn(oXqUDW1AB64Uo}jLz@ImC#OK1x>DQep7b)$u9>AN1uK^+Q2NCZ0m^5r#k<* z<=lMzvD24RNw7QTp}t&z#b9Eq??B(gO#|pTq3n`r`<ElK1ESvMkwd>w9qk=&mfT8W zKMXtByp9WtpC0LQ5nAMMQY?*`*?8$epwWWzJrC%AVdMWf?g3=gCx2wykj_Aoo&X62 zr)K%^sHC!=0J;T;uU48U@<qccRT8g1%+z;NRWT|Ni-snMVEW(NU-y@MBUYnw9~#X3 zKIvU>`p4Q|>a(HZii=?4qc!t{MN=<DJZgjBNNX%`D6JrAC#lc0G{^si4O$puD4lOm zK7cc6IZ@*aO`3R<JF^*OQSzkZIfD(AovHjMnM(ES>AnT{{kFRU1FQ`Up&!JX7(^w+ zJ&(Eeu*8e{1&@4FISR+^Z`)iU50Y7o3NMGvKSn|zC`Hg(1%3wY0i<$;-;n1SnGA4p z>lf?JFQXs4h&Qqpjx%JE@X4aocgWpo?X=FaGYzVz3{)CPDH=)ppky1>BKIyhn7RS! zQzZJCeY%!)aY?fDepJ_mf~{g6PPvJIwgH4iIGfyYjV(rg`je=SFizX!F}?o8FbCpI zEUu4xk}$1R=dW*sv#gvv@#WY?6ZRA&d%wt2d~%jx@Z>oVT#e)2QG!m`J+cL-7hHn{ z{JFbglSIcUCzE_9<ivLTxkWAWj(I0qk1z^1q#G+1rBRNbj<vX|YZWBp0+c`p=D1v9 z2}^T`vKgB7jx~XNR(sc*ZezrfFjSL6>i8PF_>-j?@GKx%+J7`iT>HrqmXX!BSlg%V zR0<tm{$>eJpNz5+d%Fhvh5Wo?=gyM!UM3@5zs~hR;CSvY?6`m^>#5aOneMaA1h1!I zuQYNlIyst4II2`oe6q+$H|cdtaKu**-wahMXn@0)=f0Ayyw}6m@BBgPc&H$em~Jib zuI=-K!&?GxVYTnI;mPl&7#zR3Q_ihnRs-lc(gMfd7Z$Ha*@&$x2*1ko;9|?m_G#AY zTC`u+5N!;6H<yx4ANDaPC8<2m$y{i0N10Zd;C5=1w&RS1_lwzmp{-F`H|gb>O}m9x z9kEiVmqu2T>~D*IDR8r+hPC5Oft1#!?P3Gie{R$1id{z-Nasyjd>GJubb;2bKRA@d z<N{VYYfmVvaeUj5WvtiD<rFXZS|o)5`zP&nOdS<;mrq&QEnwg&p1SLXavy(pr#rR) znS<Nl%yU=4YdU@7JtA`l_v0v$R&MN=cSE+Wf$1%o<3Ui;KF(t!1r0)e&*P-wC9Col zqkR0Vfps$d`p%t!df0Ah+a^Y%FwZa5c*jt*Pba|x`*niXRXHy>3^N-H_rk8s{{9s0 zmY{sQ&g}(*8b8KZ-z`n8bf9R8p0zR6Si6YfqJkLNK9=``sNjmB4yj>uIivs2!N)eM zmV9>@j73s(hvPDWgSlH)=H(T%9Cnw#HcAoj=sIJbJT1Hku@5IqX?{)`PM@+TX+cS; zD1VXXmXO*_BPg2rsgXDvzn!QNyF$#&R3<>maHL<AS-%%q=afNG$O!t=|BE38B1)q2 z<Wrw+4524Gz$hocr9IFugOy8$Jok;oRsn?EMHa4)&`TNIROg86xUnj`Z<TOUUsK52 zDbtwSZ-X&Fr6(j>^IFEGoMPFIXA$r6c2=JlN<}PmEj>O$EiGpC#i1+0B2!#+420bH zl2Fvk`>^ypUZZ`i*(c9SD;x;!hpgcvC9f^@aB}q43iUR@e@c)O^Tcww8l)S~v6dyG zs##OVV<lZMJ-8k=83g?H)?e7KlW0ob?Yb9RHdSpC^d%edR-7$+(ygV<*FZev|KaT` z!=h^2wPzR*5di@Kff0~y1VO?9Mx?t@hLVu35s;KY=@f?U?(P<)96F^DhDJnMq@Hi# z^SpZ>``z*LyML@TxoXxuSDe>%o>F`XT7&3~bXiQ8LGvtoa%%=$fC0n|z*QQb-#C3_ zCw}oe@0cO!cg6&Y=U$VYS`cGVT@7@&kxD&zCPC3l>=kUdaXrE5v6EqV0R^S#8sfvk zE-qPIGehF<I6t@FRGjm94HHS-MFN?M_O3kCZFxWeXYGo9S(28DH;-}$fb(HEJ979) z#Mt|v4gEK(N4OFiFJDjtpvRfwGC@J=1$gGmu@5)vEgAc^^v%-s))F@HO(UU6yc)Xa zsq@~>QqJn3YGu^@%s=I8r4QtoR|bkQAI7iJD9A35%HPyr*@XgRC`7<s>4IwaU%%8+ zdY<mFtIFx*>?Mewurn~9MECe8zPHp}bYCfG&@e6E)0>_OI;w##s+cFP1c59Q9>Wwj zn4^S)Pr^5BsXn(HLt28d`%5}+c)uLDM>2Y>Aw6AWRqB7VyyTj`DgG9p=2IsOJzD2$ zmhgTlFUH1$LgwxI;wV-#>V3qe6|pkEff`M0eQen!QR68LYW`Y=6Rl~i10;6OQ@kDp zt{K6;R><c!zv26#tmrKn;<A7A(*@t$ynuqeMMa-^<;2043ZF@TCC_K-StW>nxNGIp zhUbZB-VbHpxf}TIuqH1}-#NTr0vWZB`Yny&;(=oexn>DroneDQZ-XLWzmXp6GtcGH z6(7ePo4k2-lA2tqQK5_Mq%&e;)7u`pkQjWYu$u7bXnKyxTbQdC52yii1%K*xQoA7} z_`_A4nBddi=;~aNcWcu_rD7}Wi9vGg@(79i-&5iL$MW#9=(?RV3jPlQ20;OP#g~rT zYcCM!WgA&k`U^xiAle4cAeMGVLKkxq@tLFf!(-Zl*I8Q5!K1{y&f3TFE!Zs4?m36L z_8{&$eexix;BQ@V;Q2f%)mqra*m}S4_M2xi3Q%f5|11-TkaH&eukiZo=oB_h`qG7H z$56$?uVXd8=ZKyr9S$Pqp6R{Q#L`6B@(<!uA;<KzZ^-Pgy02MfLaHn`BD-64ZfU8w zSwb!PhJs&dqw`z9IfMAQJk?eG7&reKxpPh9XUVVIP~U$QLVq8+C-a2E0l*!op}bB^ z9bWa^nCB|}Xd=!vdX^}*kv%ME*4GkEb+KiIcSL{~3#mOLHeU?BS)t9Px>nH^h7;jQ z5&!*}RJF0Xs3rZn%FMvRw(De{V^$An>Q)Vt1O1yLh!v-xie8bj{sO=hu;t3QT(|v9 z-ap4g|I&^9ip^9(cl9GD_+I<jouh3Pas@wxd4p}0gCU-E=G|sbvb-jqCu6}HZ%ROG z&Q(KO8bXTAr24a<jUpN$`^c8SHn?~#bZR8A01-fm&ZI2^XvK;=6Y}61n@22<7rSG& zq=nSrY{|`c(QQ`o$$HXSCU@HiA16=ye_N(Gfr}<V>vxiUK1_mgb$SumI*VP~XJCr_ zPnw&GEz=409ePPd!NPelWiBJ3I22X;0$bKqw?;_&w-rNpHYrihM#-r>V~#iVR6C$; z5Lao=vXENH^1Rp#S(7n*%LRvgq;9*8v!uxKo?p6^uX9{^PZRB`=MM4|Wm`pQfhEh! zq^fe!N{zZhBsxPmqjm>)K=*DT=`|WFcq8}jey&^?gV5b`YWM10n8F)~io!&H*N2S+ zC!uU>z`+4R_l*U=GKo$tUXQcrK|XaM`(KQg%Dd07KA`c$*z+WB!^G2;hmTc=&CT}R z%&<Ehb4i4T18;c;ybV!vi9yU3`<~JJZYDOXw(qrvta>zE&`<cEbw;-M*|hr=Yhx4^ zW{7MXDePxBzOEK;zsMcA+rpM57{pHMQbg**o@`Ov5urH|;D*Tem-B%)i=GDU(;kTm zw4foXv~DhKkq%VA619|(l>G7?x?yCPEe##T^!^CaW))ujN<EIcokcfHE3JXejzo$~ zQ#bTgPXWDF3Z*3xT~9Suk2l3H_QC6Xw{GTI*zw~$AJsz32%AmfcQw7#zeC+ecGbe@ zyHL5OR(hRT7(o0cr}_mpegnET%-VtaV_!SBP3=3qPkrFW9l%8W@55>1cg#b~nwUsb z;*fU=SZ0mO;$vkdaR2{3r0W6W%0yel<|;cJY;SWc8UoRaYjD$jLCeljj#5gn<+4lm z3C_nmuqO*d&rthuxSAifzvIh!P;8<mv^h$ol||uI#b$T&K4=q{yl<@fWmB~-YNIlZ zTu9Rj#e%8KWBwrkqB$*B%;UM~z#&BYW_|$7fWl3i=j#(u-KAai>*srP_JR3|6?8{m z=<-XAlkY6v9l<CjRt-fexS1Up=-pEWYibV8gqb7^3u`n8>}?}C-v{Coc8LFS&C~}5 z??52JO;#SGdcb1je%16UR^l4j1FAPF1#nS#RTp0_718&1H%SyP@oN0mQ^u2`vBNEp zk#)<I=nMO^`2GAzQ85nP2C(T2E((#r9)@B70Rf=dB8+^tKiafsgBPV2vb@qIl^&G? z^KL{s%?Q;Y1YLSVvF;&tVb2`sgI~;bcFDZ<^h+T5L3KAL&bVlSn2qxJ#Up^UzAc5y zk+wqCd3E`bsllLCbLNw3C;l(<O>>SDou@8!Q@=zh?ZT|9uO!|YIanhXjFliI^fe!8 zE1FuJo#qAVC(Ad|sQ0NI(djxLIjcvPAFZltT^Z>8GIzOgAy>;IvON0c(bB1cGuaCP z@0PEN)qFwpcp<ON2da$|mOb@cfw=XUT!l5+dS?VTMuA1aE;{Ny3mplQa~o$cre~>_ zLsqLv&Lu8Y6uEj5_`DMebuK9Rw%ai^Luw;xq5nAMFVN|EddP+;wsNl_K<1$P=VS_> zm5Gnlt^HK0C|-B5=neB_<cjZI<LP6cU-&B|5ud)wlThS0NYmx3a{0&aeXQz7KPK7f zh9loiZ14s6M328mVWJCI`cRuEZzu*@Iofmwex_<?V^1uDGVY$*)fJZ|jgnZKhubI! z&l8tBzFE#M$g?J=w~%R4wOhrc@KFe+x5bD%kdycY$d&J0yBz;N20*UbAP*EcNw9wJ z2FeYKXh0(3e~e`0;rrQ)<?GfhVh{x2kaU#XQq?Zqw)d(p5OcvricN<K0==s|@GO3p zop)N9yt5Oj6azm-GlWM1cZeI<bGI$IRO+=^@tQ2Akr)>ib1OwvAb6<fSPAD;(@Mkq zFb99FIapthsFQJT4dcdQ(^!i9E!oTNlXJ(!<nR1b(gm0^I1Zcv0FXZt8L^cC%DLa3 z?A+M1L7wL5)a=?va6Cbz7WMHg4r>p(+x2l8%+=%T2bm)}ZEYUC&{JaTGRj268~Gz! z=A%eGBVF~u4!U~Gw1z<;(?K!6;K({vOX@8pnz%Msk;9kIC-XZx=7JV3Z>v-~T%jDJ z<UbZ=`wTcQ_zV_z1YX{>t8ZrJ)WzdGL*G45P#nn{^)q_$SdP2&qe@?q_}e=yZ1YjU zakeh>nWTN&iCdLQ>a(C^L&DcGapNw*qrO(81&>#^5D_OKVw|<OV`Z2Uj`seilbkrC zQS-66!L=bO4<G!@^i?0<lme6_giKeYqKP~~Y9q#3TqDMwH~`SLZip%2>PugG@q$HL zT?4L~JEw#cRbMlN3mdAd)e!U3fb|~Nn-|!=Qt4_Cz$qdvdNoFw-l4nt>}_CN{+j+9 z`%EU+>IWyeFP_#)0a2K?QOk!k9);S)4pA@C{`}R=#dxmm8(KP%#?Jz-Tby`^Z{U)l zJs+r5H4x<^%2C!~{%uIHqsIokboEA$CwG-91%7#RW$ryJ55$PgM;fcMSDJcB$92B^ zPA(m@tz?vGw)FCXsiXT;MR*~o0C;!Vcvh)9ELX$A5y9F9F97hq2g@tQ(_!Pg?6;85 z_82`LoNCy(aQNxn;|)f3R<nHgK>Ykfdcx~LUvuaV?uBH)ttj(nXQXF-k|gHze5REC z%{XPBT%>vRMhP?sRWtQhPUSjhD8?I0aO}mSDaxAzDBmd)>SYm;J7(rDmfmDLA{L&A zR8wccmsVc`%fIt@ZjCbXk5+1emF$DXi48{cT?)$AVVVk=T%8WC;*mzQZmuqn_iSl# zJm{f5)IU=Z4BU!<TojM{Ui<pZxqyarig}X%xpWJk>ds%FYpVp*phRuI6h~zr#PYW0 zJ--77ws1Xg>v0gEPCQsu*i6k>0zqW^y`16Yb{Dl*W4awn-i({N2Fz*q!<Y>s?q;85 z!Z1!12)j~u7<y*Y(}QNsf?udS(<5oW)m|2n!(6((a^*aHAC<$xdPbJ4>Gt9RA%AmC z$xXLx;#n91jlT~j7L=3v{a8i}ocod)Z7b^{D+b6m#EX2Anca4z$b^b|?-Y4|<B$Dw zU|<H~MXJ@B;N9ig&-l=UuB+UjmNOJ6Od2KRpTP6j9Hdlsr@Ri3u)9vx;sPKjE($1t z4!miiv8zw#qO+?n;ev1HCVFj?zw9{g)ARc!f<Oqr2?#?1fSIzz)%gIVu*^8T8dRX0 z_u(I&GLXp4Mx0llr8{r$?`<qw0CHFDm~y*}r#*6?Rvtuis=ZEmKfI)>X)|djN1niI zi5(OokPI+N2Jgxo%1CTb)d?W6>S`}&_C&o^@4wN9(v4w;yO3A+K?UHjZmik99$R<) z(ddtK-|Cn2#2%7O?Z#Cz8Eo(0c?gbL`<#J;sC#-LPNA)_8QEv40Qa3p(la(v!8qH~ z7`B<|wFJS&)Tk8KlCOV(uH<s@aZZeQEj`!_DFfAJUN>p4=<O9udZuSW0wo4Mmn3VU z5#JTko>#7P()8j{`~_k~-OlU8W+dMnG9bpkERcs_PJ#%br2bW9v;{z!VsDWuy<fUZ zZr<~SiS)lfS=;N~x2NY>%Os}{FEe7EKk5(a-&@37@d4U9s*)D{7s?^FwK`kJB4lf6 z3gUD{8Pe`oWBxhaqT=~zwG+sAXB5;V)g(SJAIALq)LrtK$)o;2>YRQdORf_KuF>Wv zp+kzKNOUf0n1m>bBu4DltKNi+S)RVCV%b(cy8H<Nt8eO0I{w@N|I30=Q$wXe0nBhH z5@mIv6JpgIzucCYqS04;=C|qhuLKAX?>X<kcj_%Mg#W}(ct6Xd^gDEPOG?ohXgBKs z0^<K`;7bBs*FoCHXdqz$3-|#Ib^DrDdgT6=5h~3qCQ(R)`d_~Mdf!`f84E}&B*a1Y zmku^gPg^5=<6NMeztV+St!*;5S<@%368-|kfOnx>+U1wb7QFP5`1^Z@uiq_l&w3N% zM;!FVDCoyHO3mL;uvpegsZTR@;_GxK#quA@$xXV6w*9e)!Ac8lxv?&RI+Z~Eq_6K8 z1O<3-@Jzv!D=FC<hrijoxkhfX5XdIN*^yyc1CS3${sB=`q_IXH(Dt}~gv0(0Q4O2` z*}t8{bsmW?E2M$wFkytSCoiP;{KGQCMs)Uc&LDw|N9jl6RDs&BnQonAWg3nI)V&WR zxJ-;YgZD<0znn*r{(`6xkS=GpGwsTS-bknJ?^!8TNpTPF3`uy*!2tVe+xa_VBqwag z_?C_S3B=oa@|TdRg3W+)v+|UYA*w+*)BdYJTYd+@X<?*g9RV{Y4*@1r`$2hps-T=u zkJ8#vbVTxesKc>te~&HG;56h;Y0s2G&-(F=ggItXe#}x}Jz>+NImXcqDATRgOmO3H zK-H&(HnUk|PF3Ei-Bu}RqK%0`pz10WZbckt>qk7NaGj3pi~l@j>cBu7Wy*UZeJC3| zR*U1dDdqM~p9q!qWo`R&Eg~PK(OV@hC{xG9)rJZ&O1{yC*PdHIHGgv?PF{0?=n0r3 zn(t}mI$YU4OS{foe={%wC6&k`*nrb~M!x?>zCOzIzB={rTE9_%h@KzoL9gbkD}rsL zA$aSwmCxdglsl2Rm~?8>qqV0MR>9ha`q9hhpSD;UyrYkbc#`?OnJLbwFo9webRIF1 z?a=H;<3^kzWrx_ob3rg7%#bvO@N~=RbaN@iIvOx+GxDW2#|hZ(Lur~9nEqvjseO=% zoD}&H%?a~Oq<l%-j!~JNMp;LNrVqRSb39KXD?^I)UEJ}OD%E2PgJ_Flu=Lje&tszY z0fOwh!urb_Z5?lOXR|fibJ-E|1npl5){bex`t>S|Mrk)c!Wp@=BsjDigw(Xnx;;>l zfPwnkOo;>G8DOR)A94Qc*1|;rkM2Wh+8Noz#4a;v2fmr(=l<)>|FVVzNv2&YvsJbG zCSK)}ANa|valY`NR%gKZ=Tk8(m1NU5C|9BtT%K5V74aC-dAg`niqVrI$Z!8>S<gkH z#MrvTZQLxe%?ml4AltY@=7BoFglO_xnF6{eG&wQ_f-%#1-|cW>KR7HT#3q*yXl~49 zQbz`C=u>QV)Uzq?sAy~~23#oUJik43AjW>ZTX|sT3Ui&_@y_>Kg};~}+h%avrg2*H z!aj3+=ZSulYGA{D`x8K@Bse~ClYqudBR&clp=EWGh06kwV<6$gq2drM^m?+ON})II zm+~!?5xJ5A7hIhRLu{x!kO@pbot@`FfNmv_Jq)cLJ<NQPQ`HNUqPWSKp@aVbXZY%r zONbapt7=iU1}^b?zx76*)7ggStcOV>%7!lL*q?|rA>tS~<+I>~vAiAco`S#(;9XVN z>AY7?r}&bD7qfwYB43VJ0<YsMZO074h5}i@ct}e56a*!3eyNYns5v|p-PTkjAJaPr zSJVg`th&#Q?jZNoQi4;Cg;pN6Qw5*$$b1LN(&Zl6w|M#e*c186OG(k1@aR0z3&9l0 z{?zw%LxtmCprpx8UzM;+!Yg8WTg+?Ih;20R;>r%bF(krt`6UALTC!=xqSLw)YnYv| zWAo1sdeD}g&dW=k-B3`W`|*l&J5^#*VL5C&9p#G62ni)GURN0H{NeJQyi7>%4B+bi zd3(96``gT4pbLS;uUE;E-;MV=ym$?!X?BLjhfb7EU$v=8gFpRvArwjAS_9Cfm96$( zSDU~p)1H7xd;`!KB#~-v5y~QbTl|;*S4abWJC+hfqEs~P?4`BJS4am3k-YXx$snTL zbb+=HT_xRz|9$)xU6{_G)c7qrh}+ID_itMQJ|s86+vlA2E3wA19&!ac8QdL5|9tkJ zGyeA#34T~g1}W=#`u>tLy@ap2fLL3aFdd7YR_x}IWKl5P(!YP<pXbCR7S^{b-&*h} zook&LU&;6L?0H*8824e;%fr8g_nekfbMq+9zA-WD!eY(*`d<8AitFP*Zo2Lbk>Jt^ zsh5$yp<owjOU{4oH1*l3%+i{@L4Ws#w`F&)(<q|A7bro>`iBNdM5I3$%hIi)IeYW( zW;1XH0QQ2efyROwNVYLh_WAt9zaJ#-$ekBbYFYd`MYbk-pA$^IIow#kIXgCzE-O{; z<xQvfe5uD3QE&*QnY-@K0fC4fD#&r#4YX2<dH*`W8I8@6u;8(qx;vL*Kle(()HiI$ zI)c|mp`!5q<L^@Tqq;v$>pMmjB280VA6&v)d=fVd2NoAilI4j!CP&j{Q<?S0w`CYa zu_*}hzKQsNR9c^)!0~xPDQIQGM02u|a{<p|L7NXGq;GE79GT}9BHK~CXPG~ar3Jrh zE4zUe%c{wAWm>qu)<dLuh3j)&Sz~r^9qU)e5qHKm$$ajSRTS}5#vrP>CI}v|irqmw z!g=l<n+yI#Qt|VigNX|Rm>cY>+Y80v<!ALTM%ls8e)DGzX_V9Y6SpUSvB|3DeqR9J z;ta`FpUR|gR%;@b)SO-XoMG}nt_@vKL?m$6SQqbPS9fl)pSeW0n{CohZK7dUg_B8V z1Ygr-SE~Nx!Ou#{Q_sqhkvt-?Og`62wGsbC456(#ZZp%eS7uXlRtcyib0i4AEz)S` z_JJPr_o}X;nPUI;AX@m-3PM1lO+$J-NC&-xZ|<TPA>^YG?oe1A<^ykWk@=>1_r3#% zpY1WRe5BrVa?B=*=XvwAHed))VN)7|@(Hh~S^D=CF7MF3=4{|(Kj=A%5wVOOoMXq& z!Jb%UkkZ+=uf=9KiPMu;!L~L%`k7nM*x^RHfU?rKt6Y!oj}Yh;-a_KbCoyBYPTc#) zyfx2SAo&Of(-~t*9tRzTx6C*CN{V3pd5NbP>(ZqqjWi#NZc(+cA8?LlQ|e!>-e`>s zyH~of8o?AZIg8_~-kw!0h%=RGEEV^)%i$M9NotbfTM^9;?(DW;d9Id^LIE6<uL25f zVxr?4aHQD3Ug5br6zDxm2wX^0GZ7K+n9&?Rtj_$`%?rp%0FBA_uZHwhQt|UTyc3QA zg^K@SP@pFnJAh;#5J;i>Tr3Yi7WrRfzG@9Gs)spfkau9qz$n&;tj;Dblh^O<8V!U5 zaKPm-vW#rO1R^C_{D&<0X#${_KTsRvo!7~s3u%siYx!%Il0Zd#2KjXEN+F%ysnt}c zRc@oJzP>n}_L_XNzZU~6A)q`WY3S~W)d^dq;L)SrNZ7D+$02h&u8v~deFLNtYiJ~# zRiI=C)5v3$iDOVU13R11geNH_MUN1pC`B7*!>o|C$J%atCsjL^U1eHU#O@_;bq90s z#>oXDia0H`1^SYAZfJa7<6N7Vg|f7n^1pKKw>L~PI*6IRCHJl;zVNU{_92GlK3e>C ztCF*KK?)nv4QMJMUZe-&vmeV>&(6U86U3!p_mVIrB-AiZxp=<0pBXRfMx9kiH)eLC z1W<8(@Hjo3i2qafe0(?S@7x(;m9`ha<o}(NWHs0`a_5%?_ID0I6r18U$BdheB|~~L zn#GmTRR82n<}?wo#-q!ZuAi%ilL3$diK)C7IO#u<k)zki$d^<1BUPE!!NAX`nhbU* zCAwTU4EdEL`9r|DNN2`^a)kURx#|{mX;kue&57jlJgD_J&Y0UVV_#bbWtl=XIY@z) z5a720|D+@M2@awP>iNWete?|qlcJV&WEuSfN=IkpUJ(d)U2$GHm3Sc;;kY0Hs2Kv5 zF)oIzJ4QWz-^KQmGu_W5;njE`p?Bap(`e_hMxbI#b#^8R=Xu9_kH1GTIaKWkHf*CH z!NGhSu4!5B-afka3!}5Z)qaFu^7$gzhe)~6F`6W+5M*)PEpX^qEE_Ugiwk6+VZU{u zs*YJAmRQs9^Aem5k~#^gv$S6N+Nmqa`P*$Dj`~XKKNc0#eaw$Ko4R<!XYLzu@)xMa z*w$Bt{<z}Q#B3*R-P1DZdTBx;IlHI~1P$Vl;gbe5J-{h?&;jyFWsY@Mc2MCF3vo_l z+#1-=i${ir0X%H%_)T<=aML(a@^i}shf^PScA0l_g{Qee7H>fL$mtj<YhxB@Q8zr0 zy|<zHTXbrqz2<$}eDM+}&nA)Z=NIF$Z!h2PzwHg4^Fm3yquyUV7^I;WNl_iosR>-! zh$vh=%>nWj6#gqQoEmOPCb*Ad>NopCun#&vuYHvEpgt{4$}7p60e@Eu>jYF=vPf5) z6vmR4Q4$df3i{TUH&a*ekTG&W??W)}^r#9<n`(vy=X0+*ygm#^I^+mid1D=T$Md}m zh%HlakPBA$3PibO%>vj*ow%Yv?a-gir<W&~<CjVB-M%k+<u4cUiA~Wm5OgMj`Lp?S z`KJcC(aTF%<jc73t(myNWRLtcwvTY}FP6RNe&!)Z8}EQ)SR$r--tbY&W6KOw*jw{s z0LsI!+xfW_J%K!ba%OIyBKYuApB>Tdf-ckE^<-E%Qv@by%)4qQQg?2i#PM6@TfXV9 z)K#m-x1$eNi$q#fQD+Z5V8ZkwLePx6Ug^1P)ZL1_;}BlqGv$nDpT!sdUV}W}_KlG{ znho$l(cuPWtZ2ww21O8Uk%~_!?-R(?N*BoIu7H%y3UfdGliTQ?T>-0O5eZR?Qvqw< zsK)ypAUq3^Zf{Nb73}F+NTXQ+Z$;I*c|R<2jkV*%nAT5HB#Qc-YV7cB@R5xoLh#Bz zLo!T4S#^c&NZg1#JkqtFhwU#AgDVPj_wOsz+vB`Q>(pJ^Tr-fapfaC32buA9!@KO> z-xsO&col^kJ3CF1BarT`?#fXDOLT5B3;Dczb|N}wKj(%&^4U4Lu@+;`Vm}6xpc1Tl z6{aS;mEwG%gh9vfEyF#H4#Se0fL71s+8^{HjzOXQp~U>2lG6YIQdQ?5b4cKG^8?JI zjWssl4+-PH7OAM=GD0s+><yDjxLrN?H97qad9NCm4M{wMr-w)?a6=lKrvH6MF6@HN z?pXxN>|q{tVkNw<@*apjoku8#C}8S;0qpP{zFOp||KW$>ic?fF=N?EAVq@e;sD9jX zxc7GFus{?z*J--`l}f%{9zf-Ef#a&cA9N--J~PAi9yro~c?;VbaR;i<AkzDSF$>@k zU9E5mOfDPCO;L&9y_$`5yGTt>7r2)OmS1HoS+I@!ch`3_4`&aH5VQ4BSIBe%X((^% zsC(ZdJ<6oRmXy7wjUZ0ztx53ihgn3@+VJh?O{>4A4@4p#v0AptRYSgJPy`a^37v2@ z&J+EaB%uP~aoq(+WT__QDomd{GgztFs7|O4hhe|3=ZN}ns6&p>tAZic@!HK3@r*9m zbd$w;@cl>r$frFv*fXfw`@wfAdrdAE0#7=i(8W<t<Wo<8B4{<y=~2Is1Q%1rZ{1!e z95RhRkVoe~F5{cje=)AXJ(fP;lKEYy>w!}5YhUq?k^N&-$<-?F5Ulxxtofh{+2T&1 z6@Q)v0m>(g`#Oz^A)sraConSz7hn`=&JGOF-$oSz#)gLU`R@`<3Z*A&Uh&KA3Q(G> z*Ok23ui?xY&+JMN{8J-%)<t*QyC>DhE2+Px#EzW^+m1vUhncX)2aKucP-<*`DDVR7 zmSkE}x;1dU8Ntbam!0M!J<*)WT2aiR<DkPuQXfpHxrjN>4!vZr16yp5>iOK5b&#?n zm^^}(B6fIAa76XTpXP0=m4p!RcBpiuyN*Qao)PPf;C*i*%Bvw#QqAH5|6&m~ZIkU# zJ&zD0bptWJ{lxkuANQc1i88RH$sAW}Tf6QJF<~L8zJtVyG=~HVu4&#FXT6A0TK5V} z)SD==Z+lMJJdz%udCbDQgBRA;8QS(mslDTc!h=D&9M$)5#wjVIJP+MvO`J(9EyFJW zl|?$nkK<CocBH(>hMS<g{L4ppNeh$e&aKr0rDrkOm&8pMO;BHT*07~<PId$x8t&E& z5PcYp@%M5@I9QkXfU50xo+;aI%1smGpP~D{BRNj)o}<=m5ihq|9*k{U#&`p+$<2Nt zih*y_E12jZ-5!G|=CaGs>t8Y%2T<C=9Vr8$fPnb}0}dR;{(+&DmK{M;kN-;8TA%ml z$Pj0C*i<2&DW>eE6@flaNDG&~gP2uE8sTf+9=CIJg%fw$yZX)8xp~58&xpAO9MW5W z&iW?Ma)af+d20fh*Lws8^Ywy2obHxEV@%o12GiJ5&PDARc;foye;YWFl4KSgKyG2c zSBrYbK4V>J+f0(3W+|=svCU|2s6lg@vs>xy96ye4&+MaF1eD^yL8L-e$|6k*ZJ~qn zDPj+YV1-063RZNVo&buv#Kun^@kL+QWs*tPgSSzsL~`7S*<nSGNo^WfUd}X!;10>N zZs+MJuUH>dD%QSje3!-<t;SvR#(`*u7}2_2IPLnEgA2`t#F&iF(V&}@f`DLJNA&22 zB%3&^M9N6-XnlDl!GqsPB9#peN>Y{qJc-mj+Q-6yE^(ToQjom$SlZ%zt#r+)#N2v9 zCY@}^^R<%oiNO+8>DLXTch*ecVAcf&d`FT4>fznPwVHxk&Y#B@QLDScEFS=+9*;Ce zi~jq<kS7H7`j-R-4aJ$9<kbhg8tbZ~it=EZ83w|qY%H&;!)eQs(glBieb3Tlg;FGv z*v!hcWIw9a&k^!^$d8wIqi%r$bkptwu6P*5f8^Qe`N8w`*Ln8qE}G!qD04u(uRIsT zJPs|Qrb2)P+|Sr7cwSsb&NyqNZn(FO*_^<3GBMnMw?(402(ru|8w~k$83Cey5<>!= zw`dlZeB}%saWCL8TWcsWZ0~N%`g~fs&(O|tp017XpNNkMtHmFs<Exb{#{h1Qzh^41 zYu8IH#1EEj4{zV&@pIqLkguN(%#H*(LUh?L3H`c%2tTKq*j!#%dhZkIYr}Wp+cf(5 zd#BkM82DFFvzEL7+BKIx<^_#(&PG<UETlmh%W3IHh$7XjeU*o55@sdGzTEbSi_!F7 z`qoL4hj37<%Wb_WdyK3*^F8O<3Ch<gP|eV6pR(EKnl#GDq&iVNWxZ5`ub#MgxSOA+ z{m&j3c=WSVMR0~y*~}I%K28L(5~l9v+)D4a-}&74Q_qc73G0`A1@z6kUeOq8vyC>+ z;dHSnas$GyjBek`yV%p946X|<^VcYl#?~I}u7R#{@lSKNQ<35(rZe#2($AGsp$PZH zsm@6^5zzM~_k<ue?u?FM{nzR}>x&^T4tpIO*fQSx^BHBn-lxt>VT#Qd`2qs{SZd^> zemyMji<#qvKq8Q}_@P9n<#YxTik<~E4?&*k12I7)qT*;+O)+(>2sO}?NWCw*=v}Vn z5Zna<?JPA4XRM@u_zQ$?+Pep}jq}64&k0-3AQ4;Sd-WP6W_Af}FW?`i-&{L}B!cj3 zIuzvmHNBVyv8N%HeG9<JxTreN4TbCdf`UNe5`^!f7%_1OAol6QAAyM^m&;F$95!AN znHsT5@@eCPXF8nuC}jvF{jPfNK^9gdb1_FSrpXuH#;;V4HS#^+AigkY^`O*~N_G-6 zs+xT%Nvdw%d;`52Z01Jj4+qpCfl7g`3mh`PRC9W&_0}Ti(Mb^b(#mSsX)e<15gV^1 z?Pv}$9}^~B<rjqV#~i3$1cug#+`09Bs&nT;J#^zVZ=!;H=Tt=0bWACePJ<sE9-F<D zIj&OB%s}$`J(kj20qE}>ja@m7!l&Xk?&h0bK5^3{ejs}kzb3L1#YWDj0@`p`s3ZtC z$jza!_X8a_`dUiytFcx?<!YAMg`*U}tM4qRs0Akl;pFrJXYu_TTz{_s#Wb*utJ4Ls z^6bYz@tN610|Q>Rn5NtWb=cN=!n?|y_;uz!RZaV229VJ5UcZFQ&C8kXPE_Z;ah3KZ z_spLwB6yK}tUU3XOCT2~`iZU$F%gn&Q+xn4@wghp8t4V!mn@`>$M{15P>1@}fq88D z4?j53!<X@Pp`?(9ULuznfu#9mzaC;w@$QLY+l1jBdHd$^97WyZG9bG7>e6{=ev6HJ zkR@JBl||248Sz6985*5iR>@E=(xk#%`s35i42CWGpuA^ZnSU?!$@8gh9-du%5{k67 z7zF!fG;ns4pY{O!x{aYhoZjhEzd<R<o%=A$o2MT7UrEdo!JA%e>uQ@GfP7a*l4K@b zCh&iMP2cSeut<nQ{<BU1bccX}XycM&z*Xr?EB0STfgrSctFDSvwcfl<7{?>SdEh** zZXSGH1!_)eMR+K&ieLc3b%FFVMx=?8Zk=o^tXyb%rbHV*-99P^`Bk6sWk6|i8F3k^ zz%Q~Swo{m-uPLj+EKk7@zZf!vSHr6uaaXkiV0M-VJu}qMk}3l#hJ${~JAIo_9EEaS z8A=2+`fjt{_+2lsR%5VmJEg26;6^jLpV1?`yPKyY!e}XiUVUt{15x!+7pl2U*Fkek zLAQ+D`5X@7H469n{H_cVnJFVYAtF4Xb7QeXj!%h4tx0x<)6s;rq)13=2FL)rWaAqx zDecI#cYXI9rOCWcFkZrlan<*`TO!NZ9PR1C<_ee5EsJKE6zF@bSd0@t5*dXY3_S)9 z&cqbt=UKlXne=<>^`Kv+@5i<ZTOOEWtFd7+N;<Hi60gGZL4!+};3!D8D}Q!6?R_Sb z<{PTa^>UO9UWJrLhN-I$D6rk%&^n9voMO#Hv7R$nF%i)1wh9v1k&>Qr1KS8H2T;r> zWRe$Xin><mZxwN<llCRSs?H;*;DDsr>KK{G*P|iK$3QvW-8mdG9ulz!JU3O70i8$N zx)i=Ff0n-5h-B`tN*Y5K8IN(#QRp6v>U~tYD}sC=REgWM&w{(IwAK*Su25KRS=F7u zgyHgXp+<_fc)2|SDc~*Rv&rK!tZ&_ST3(?jZrJ88#EuuaO~fzhb4mu{_B{N^tvnXx zroxLdjwkxfsGLK1(A8HrQmtCv(bny2=PTurql2Lz8O-liC-0|imq+(gT~->K#xYv^ zS*`dRP8d&zfAIf`@wutneB%gw+c`Av-bY>Qe!9`i+a9%}mAO|-HreQdt`dL8ezLn6 z%Tzq}U_z+r&v@=6_QhzWO_gdPoN8$sge<usoQw6nRfSP4-ewTh36tW@n`KJuQ_e<y z^|f%-w17Kk1iFwczCe<ELyRKPS;B-VaNE^IROHRRAW$L@_|{FkUhT<$#a?1PQ^~HR zV6~pDwC!|2Pr|>Z!hcy``$q{AJ#V$_z6ls>QU8XQ>V0;_>foBaqby6K1+!9*+df0+ zD(RvQSEcM}HiEd09)+{8WkcT5sWjK*?U;40I8CMiWb^HA>f8N(O^+izWV*+3GC>eH z$VveO;gUg-N0Fz`QO2`H8IF#2a`vd|IGH%JMSKjQ(uh>!R!)8*V%{ovgRJ{YdH9yw zlWJz{kR7Qex*dfe7SbJU^CZ^}g;lDi;IO!6^^2;`S|Sxn9u0;l3QrKT){@TG=u<>4 z=_4ovJ(FK9#~wSvML%uwQqgRxwEz%As%>Y<m&joV{W8yO=l6}pIJQz1@*lI@G>u*W zwE0X3<_Ofdo$x{|4*};|e3z=w6r2+Tw+^__8I6r8611jy*HZs#p~Xb^jI7p#K`2mm zLF_EVe9a}i86~)HXcxSHe<u{gy<t;W#0)9{TE;@iSpETYj)7YkQvU?nDmMVI903d% z9Rk2L|G>~Zok6UjfYJ1#K;yK*0VeoS5CGnQP--e2@8nsJz}jBDD6b_zIhS@;L>Kmp zBDYT5V@L$M#->0gN88QI2v8z7`&CpUmAd1foO1NFxjbB9F6bGo=r+#x-xCo~3+@%n zyI0^nSpdNLQc12WmVbfH=`Z|#bYkeUOqte<r2xMK$WV3rYN--@BaGVA0=ygf49k{f zQ+#<4pf_{TSfN!Br1Oq&1Pd@dBor-#=!#Upd0%@yJ5xwwlY~|TWQ-8=Ss+Wt9Bh+% zV!aZbt0Pqf97vKL$JlPF)%*o2yT)AtO_$N+VX-V!<4NjtKS_Xc@hEdEC#O`;F95uM z_NW#3&qiRPeggTkOpmLt2WHp&b#%``B(^hq>dU56zieEg7q?>@pL=qOfrep}$^v0K z?nGKvXSXA(Fzvm=nE90BKfs_}V=0EYT1@(U(RbjL;Q1{d)R=*)b$5@Jz4&PKpXVq* zPqW{=8|FGx+>ym^Fs9UmSJnQa`^3cSG&?JlU$Kaa3*Ra1h#Q~2w(8L7V!_mXqwWU* z``%c4K`1E2RT^k5wr3;=D`MNm|JeD-tn*%ZPXPauUdk3KNW$#BiBro38~1{i9*kUI z+6jySU)eV&VPgG{vy=H61e)Xid6#MCUb4B)P042uZ}f)_#c@YQhX|g78`?H5dUSz< z?Ty#6ryk$oIKcs5A8_LRRxW@6YMB0+|54>~JfGznQhPN@5HNh4R2)iG8|ewv78}8I zA3!98;l0cIj|`6=in;&haMrZV4|+)HKhI)|q-`(<;rmwa7sPA%PzHfF&smj{oxeBI zC4xw(X78wD4P7VJo`@GPpC%iU_TXi)5peK~lA&W$(|1syofEser(wRcr7KT-5;%td zV#9I}q~|17)IA;`k}r5L_d|g#jrR){U@J1#obg`!d$pwg?fpAUm#n~a2aqx;4yK#c zE`qj?#yJhX5gU@UuDEc5If3XZs`v9khU)Boid-gfEq||h0t%5)<mG$ief9icHD+fx z(;=>A<50q``faBAb><~x=#Ps+;snAMrsp-Hbe-5Iv7O~Sec?&R4jDhurs6J`G8+&# zwoq`_G_)f=5Y~?Y?TI8JEt8K0gjbmJx(3VFLHguQZlP^2IE1S}#D9S-%)(N0C+n&@ zJdH3{d*Vz3CpBMh9u4!&_OFCNhCw_Xzue`yy<ucK4wju5rQ0++RyUyLcTYW7>nHZ2 zd_!E{*`L7h8zCbnY6BS~hr`ciBn1G1I5;q~0q4W_Pm$tJ*k7Q(Rhu$JfP^wL8EV#e zEVWnrW4<Lj5G{j*m&rWpiZl7O&qL4B7e&lUG>o%iQ|$9_Cr=<>M&^Qg@}79++V&{s zqC@pI&2A47O5=NmDw)AfSGXNj^t3V-bEO-T6!hQ^FNaFKAH@rC=$}(87x0nFlBy2N zr7-H}!99}r$Ho>MOn-?dVM7fDxkTJcUwfCyUaCW@7Q^mjk24dlq`a@G=bcRVXopVj zeIc&=5?*E{4^?0Pl~AEoJ&+d(ySP+T<BU=lz_wdXcZ?1vtM*~kaWU*K>~MkXW+emh z(0yG&M9@{fjJxGUmERQEG_8d%naq9ucw<U`*6CX+U%SS(3T?jRx1byhNnyj43ZB6~ zCs9q0WgZ_}HB3i%G7$5)N(-I|zF_@Y7zwARaFF0#)k4I~;)ojVh9P6u^=i0tQ?_vx z$l@3gBi3-4v%qfVUT%x|o9i-1UKDHc>C$JFjFY>x6`CG8alY!%Z<?;QMTAYT0esG~ zTL+_F=7xTx4s{k~Zyq3zS@KSBc<#*b@P3}OLzNXX4IIe>>L%4|O0uZ3sfp@jV~ql2 zZHpglcp~;2P*pKQsHV>MHtX@z`|uj{5do$=z-3#p9HpA0KOfkgH$kBCi;8#c?OIa{ z=nW#;vBZ3O{TPSi1KO@ZxQG&`Y#TGyz`^G8#VGRya&dLGt(W@+w2)v!sc=KdT=9(Y z9^o#x`rGhZ=H&`vq8$C3ZjFaBB{j(k-Q(JLHqo+1Efo1DaH-h%!7Qv=qf>&ZD9bd# zKHI!I`a(HU!Humm!Gw<aJkGvtA^!P{1T9W1jnLjVq*>%NwG=TjH*&x|2T#u~m<3;_ zC?~fK9&lgbj9E@#+BlQ^gf(=AqkV~fgs(_k3P)nq#_&!@zyLsIO>3@&<LVRACM;tW zs`3MlNYM0999x_r@#z>Vq`t)HjS$$CR6BgJyGgiZUa}d`UWnJ;Rj_a;L7(Rc{w$k^ zMOR7Xh$)sJtV%l1kid5f=kZ;P@zWDfxJU+n+xE+@?+j3}$(n+!;ZD1upc+UJP{qh< z^y+%P{2A9JNH{<Qt9hj<ml&nyR}ctvH~#b9e_esQle`_TK{v;gp{smqSf+iT?T6GP zZQTtTG=d^FLtXHNeq5RphMH$s45Jw{O`OhZJtp{x{h(L`;fU0pcY};8zu4%7jq|Mx z5YLH<<X5Ql!46*`?YBEndWo;WCVBu1Jg`ixb_0P>JIh!4Y{Jpu^xUtEArRE|a%&LB zOef#Fj(R<H%e&?)TykzQPL>dTztS2^@$?Y?YtNg2V)v7Wrs_bqgF9#FGp0g;!Q490 z*B0w8^$@BO&Phs;j+j`ZUF=qBnR<BYbGp0_GlNmVWz5!SL2cfS5a&B#B>=6c<(g$0 zn|<{u()~5iRLngDI4QSa`)e(C5+pbtipn#i{&b}iXM%Vr971Cnc5oYu>qd&K75)I3 zl%NkF3NK2|6C5t3JFbGXqYwU@2ZBgjBqkvcn^;DqG+DJU@ZBcGu=N#l6?r%{t`wuI z=Xo2Me->GbgTfQPYM1L6hVoL;>&_H26MHySZm~vW5D{oP)UtRaOw{WYLLZfSK((e5 z*TQU*#ay{khWdDFAr23gkwF2!1k7b&huKEwsIzxMAO+9|TA;##=^N;oOUT0&*5yu2 zd51^q8?r-lXSF5SR1yf5k6hrCZuIB2Q-*X*r~-4$3<CjkjAG0T)90>5BOZmH9EhCB zl^PiIiM1_XfZ%qmXR5^D=Z%!KGDiH;dS;O5>6$n9z-8jk!1I)S{`F5nn;sV=R8cpm zsDGMxW@4{c!fFU-pSL^|I6=2gClqb=%IEYA$HU~PqR{4^{U$dI6xWy66U;PeYNwoF z#(=|wxb{qLp9q)*0){Cx<`|~RM&6yQ;bjz5)A`CkmLi(7ZE^v;?mW-Ayqb68xA|Y7 zv&*4jOJ_P>2?fbe)(cradfci*<bti<#6epcYhz*gl9yb@4@XwXYmupcxjt|Y6F~hd zt(#lZeSMqnm1nWD&A7JrmPL%UCc2`KE}>SW@c>8)E$#sLob6J7$G&g<W-h}9%e@l2 zlblYu1sK)bFGwd|wOPDqqmqj@iQ2otAm+OQvYbjEwHiKk{ROI`m$0f?LzpLQ<JXCp z^pq>IFAw%$!%9WQk1cN(i2ly~Hc@y#(S3^ATRlwXGEXZKR`rz!ieJ#V?BSD+ohpV5 z;P&wfSnmcyCYMAS`)PV(bXaOEZBsQHn4=H#(iQ4dRe-XLw<B0xYxbuX>{t-EAn=0N z^Si8N*5_y4OUS2=p5Tpl`qs5)ckqjLu6SW#cNc_eEP<}G`bm1R7pp1StKYZr9c$h5 z(7&DDP_&2ua`C-qqCTo-`I4jk+xQPb!~-L0?|OxfEUCXcO@DQOL?6RiKe(^2u&98w zCYBCOFn9z#*QeW03qGPF=IaPm72z*Q4ux4{aLzG*)T~Y|SV#M+KdEtU%&{eAIez8t zzN_Hv6ef2MGKaOG-qVV8a~|0zQKN}DG5FnL<$)q<v>U#m!<(iIr+*s7Eg-wXJaC%M zdC$2GuwvLAWK>+;(Srsy`#CU&r~+me$gzmI-?ruT^wNm5I<Sb<FSab&*`cH3^>AdO zx8D1q)EzpydmVwiau+BnYfb`5yr;CX2z8F($_Ng;_jtBFcrS-Tu5b1XpN-AF9<N$u zH3hv83nDs&y=5c47l(a`=~B_*8aeVw>1=iKV6Kbrc{|Z@)DM)a9V#t<*|!Lvl0uRA zl8{CTYK13^yc&+W4b8pkeNQd&8)5vEL(%Bfw+X^mUk=t{ziFbt{D*u+cJ0WjKPxA8 zz_Xf^{*(O4#&3Mt^Q>!mJ$`*vTnBuJ+FWshi7sXkPC}PlonUHyXzW4Tu<4`lxE_U^ z4JD2~&e&wQXX_iPduC2yO%e+v48o4;pnv?eJz%ROuQab=uE;k(ZWBy?1j2|&54A@< z8J*<8ByJ8+ITDr|$yR%_`J)X4>Ca!YW_&)fnwq@_gQYX;b@IGLIj2FXNS7=c*1S@e zNU{RuRSe9N`LT_KFMGD;7cq2#mh8XHM~Q$oRTEmIecKF(#o@z!7^}ov5Ap0s%Mx)r z5g6UAH|sGI2XMNCYTwpFHKiHJMf_YRFI}ogft{g42_~BUKn)*tdI>^RUNUE!WKR6N zon21;sDS9HSDw((k~+De_<c5=0pQm3t#z+sSvGsKknRK``Qz(78x|)qzrb9A{*dqe zr#$C>v~gP91QCE7zFmoi#-}j7;Jfe=MUAJ75<5zpgQikOsRCtgw9_{Y>2s++Vd`mh zl#lM**ILj2<%Sf0F&Y%}Fg(V40X`Rby4Pc<B|<#JX=5O^JJSPnhN|Jr4m;~^Zev8* z>lb^e2!(H_Om4cZYQ!3%BCTI3<&h>~IydzK*Yt%eUiPeOC_Y@+#iyNrM_w-vBCB^b zTb?v%fIvMK#pw#aEt-5?i@)vbAL2B<TC3eL<bjqG%y?AqxHLF#E9EozHD-d?D8ELZ zFG~Uv-p&(E&3r>9zFUb0D6+?)>-um4sR%IcudecLx>^IMy295E%YH##Y(;y<%uv&K z9`WYbbVR;d^gnFo&{Pf6E`&T4nhAAnVbmMzNMM->@Cjuf`o&Y>#5XAYWLIyO;}?!A zQ+h2?-2{&@oW&5gO}^}ziXC1NZ@p@QUG{qB>eL8<gK)9AY$1oS6b9(U44$N_8;w@d zo4D2MX_c&JO}hOUfwGtI=WGj68!2gn*JW9Sx=`7Ge#_g`TO^Nbx^3cdGk)DI1ZraS z)ha^`H7tD?g$zNF7CO?J^VQ{_$8k6$vSWNO3Qs0%JsD`+sO}dgk9`3vRnBDzkA%5_ zx9cCYJtp%c^|V1bG~ZJ8Uzx7s4aVcskdG^n65fPJ<%MkGa%Q4;`0`@D72+;zs|I)i zTn;$HBbwWC{FFNcuG10eUE?gCe!9ma!z_c_)}EWpKh+<(=kzt%RRkHT*z4xJMQJ|N z+c%_i$Ih-P*BM1<*yQ3F6F0f&UrK$t_p?ac#ayeB5NA7MTe*_8ox)g?CIM+?Z!=9{ zAX&Joez1L>FkZsNV}#O8-kF{%=8pIOF$vZ$YakG8U;%t%AGm)lxOiI;M+|*}(}DQN ze%eCh6{b@HwvW`CF9B@%LumDG5ZCr6v0pglLKFT74NsKf*8ybwx@#8V!<~@|jlwx6 z#sudE&2J<~!ChPqW6ig#;*X{EckqsPskP6gQ;u+2TyLp0NfPq(C6YSkKnH}T5t%Gc z1hB02ym{sM)E7&(ogONAYp)E%PKgA>-a|rmzW@Q<KLZy9Jc#x5Ci!xnZYnMTS@r4o z-`u~Hp#cF8l|zr2NHvCgq`DYZE_GIs+)4CO|Hv#yBPXjtr7<}q<5S#Z=APmiO)smc zB03+zY&fRx7YWmm3@LuR8g|5<)6b_ltWNZlQ%Un9VdK<%q~><4b>_na60R}DV0Y$^ zO|+9Uv9s?dZk^YDBqPC1_{FH})@)_7R1nn_3_a+=PSzEMPG*mP)!=L$0D*ug=;8)i zk1|qO)Z@N*WY;*{sZ~?6SZuE|o`43#f&MZ?L1(Qg<{n-o7w4cAsFXZSYx+66e&Xvp zW@5XGA7iSKmXzs*N8yLEyu=+#;9U@2q^2u{$<}hJ-o)($5_Hvzr)A7h@Y1FHqD)v% z;rkp`HYyb>^D31##_79H9&#>!8(E7N?Hr_xEam%6b_N~-g9zAvCf0{tU*9{Wgm(y^ zzE(sP3L*V<WDuO|+qF2klp7W~{cI{aeo41mv$0!onSdxTDNhI^0<4;swISn~(0h32 z@9xg)f+`0VgChvee!}Mwjd5MYP(-Czqk`{B|F&{^5Hk|yh8{()R6e;=6Xz`9e?Ija zzO9-YXxa4TG~*ze`ylNEC&{>Lv()85iwS{B(F@Ba{b>N@2g$)f<XJ!Iz&}wBR~R-r zF-*>l^p8EK+X_NDe~0ua*ec0h-f}h?Mxx_++laYa9~&rc(7<hb_X&dsV()(z<I@^j z+B+3tY;Jq8vWHQE-L0?r2E-6e5(X7DFqlZI-9^Zl9RPnd_K?sCBfV-Zc1ra`&243} zalU<?S^*3RAB0{~DE(6qRao~Y_OdhZnv>8^{+f9SXJG>U(R?o$8`bR*h2{)xe02~p zz4g*YFP5cL)rc^{0A|2K81}~2#j{B>UX-nl?$-NwxqDm_#Pe5U8~$0L#KN^HQ%4*- zUqqdu3yh&FCvUCmY~$z(NZyI?AN1~aOkhvag<%>odi|ExM65+S_(Okyk@R|FOS9B+ zzSxf>pUgi0Zb)!~S<7@!#0ftAX}Mgrekf<Oxsp(QeEJGMS=n@hGqm1Q<3#^ssGHl% z<^AOYIisc5docQUO&c4&RkI*ytL4qc;Mp--%lQKV({v8xpx|&82l}o6XQ~!t!|%KK ziG!%5Ut^Llp>H^e2#e#hiJ%(BjP565&Q6Wa9%g{k`G&A#m^rqZ_xWES%=aEnehtMK zX7Hz8CnL5){)({TT@PefSP>_X!Gq2}=3cY{%2}7*k0(@5UOZxy=%2zS(z%#%^ktWw zkcEZWC?<=~!ydy3m-K&ebU8ggY`4#wC%JPXo`g?FH(TOK(YrJ69EWMTAJGft*}995 zPyeY&IDw{p^N^-&SoiJtyExg$Epd+i*oISP{6rGDQ&Z1gMypz%#Dru|@Otjzm-nOC zyr96YeN%-#M9mP$&7>FW^n%O9IsIeJgXgriZulR_8stwNc}dbKyp~(GsB{w9m$2Md zc!P66Cma<N>h(3>+wx{jxz(1?HAb6`iF9AnQV|FmS?#`ETyS?tIeoB~ZBO_P?1QJ| z=Y`+>oiovD*fhVjJcsDH&wFHFCV;DSvg;|*Xz;wXYHDKob~RRWc`cGNP7_8g)1x9j zdSod~`e|k0r}Z1Sdq5t63>$lGdT&YCOye>a8YyNOO8o%CJ`36Sv~7N3j%ZX&FfEz! zS;tR)vu8k_8n0ZOU2ixv0HfsA-u~w1;zyvF%R(X2h|xDk!QS${i{}u1Y9P6^A`wxd zJ!Cge42|E;$fRQzXWMBXCq2=>+VWd3Q@tYeL)v)g$Yt-kEidhxPRars0s|Y8&Mu&$ z=2EVN^k7d#U!r4mK3(-bII?FgDv{%LfKaOFeeT%z+mf_sNArcvRE9P6r;LyYnWel> z4s%9S2aS|Esjq4nv_)QDAPxg_Yzuh(Wmx+2Zr4|>4pd=6E;$p+r+@^Uet%QG-NQke z<Vp$eof8LP-Uo`cA!BVx#I{J+>7DM-dpZ4h@_-~{fAA;h>Ab~>WmpF8o?>q8=CF6^ zelN3)wIKe``>&XtdE}cLSo5~{pF{Ym`s%S<$viK<FE8<%xm~es+ouHeCJPDGcevwQ z*6=r3u2%%Ois{un7<5o=xu00|?5?Ou5qRbQG56kKO>FDia1ub8ARTE+3%yAP0VBPa z&_Rkw?}R3y7!;(p(4_YgF!UlIMG@)JLhlF|5aU)s5ODjA`<(r&=l!nt`|Et`x>z%_ zW+tpzvu2fN-Oqi0Ia`xYkZsGU-B-Rm<0@uvbx=#V5VzwmWtYG8GVcN7+9`jc!Yzb> zO?jalB{fHc;wWKq;E%Inx`({SFOJ<5j(r4$JZHvpm(OaRM=_BmU(>k|ZyQYmYQ1Tb z60Wca>V5n|j5Paso<%S1V%*cAxN(l~R!6}crL!u=`5VLl-5GPYO8kc%dHt{x&#HCs zb}?WHeX$eh+2|B-A;<25@YV9v739Tm@<P~jWY>8~uibogRx<InPprOcuWhaxQ`}(W zp(<HBoEIwa)xXd(4>A7YhNJS$?dF`Ok$gUtaffvYrQL#M8st5-!PidyZ!-)3G8q43 zr4(~iYX((02jhWG0rcOb&i<i?NeuyW-sJ@;y8INDf7b;79&8+8{Mo4%#7qWa-xaK@ zuL|=X8dSktS59tARBfvRLMEhImgH!<w`I_}LsDQV%FHR`%O7dHZj1(sZZv>&?EN1Z zeIKH-{*1dxe*NXaxC;i~Ny=;j3)3}_oeSap9PWqPWWL6p(xuW%z9X-7r5GwGgrhb{ z3Z%ANLNqD*JM||N-R6EqXH_nx_;%?Ulbpr#?vSuLv6I_PHQV(>X87k{5koE3LvLIV znTgAw(Sp2Za*n)UZhVY3&=G(fL;N=dS&SydF*Rg_D~NC7ha_LdlrTDYA6?3DE#BN$ zr;1@b*R^chh`TdqQY<w!JUpV_+i$*LUc&ahuO702IAE@N;yafp>Uu;yJD{cqYPw4l z(j|9wNG-cqLm`uVouym#6RM&x%k0k+!u2l2-MktS6!i#mi)gNKTM1TVV(5$WrOHl6 z^=z50+s8r&!Om67(LxDT$QHq6DqwY1C-^1>mx-qx2zcyNuVt#xa?@USit3}5+}avj z#?1>@r&QxD_Q_y!cTlS9dGi<gI;e~d$|6Ity^E<HaZ@-vT6T1Qx>4j2jgF6_dOMP? z{MdOGujZ(4?yF|;6XKZwGauqra8R8@#?;p`dOikLU)9n0fno=Em`U-vj{S4W>9$T6 zTU$Qq@Mxv+7cWkD)NP(q%rbO%x2DD*Hen1M&12mX6%CcMr9!g=VY|_YTHa?gbtllV zcI`-}$_<oh-gl9rIOi&Dif+SE3s%3{kZe%rlI$3+5y=(|7!!ddYTl&~u*L~-y=}Ex zDJxy#ECaZDS@tp1lO(K%-m`rzn5%P%QqdVv&X6ZdydJEsAT;eO7zv6Y$A)KnR1>c> z)pyx8VWUH)=eiiWGb2$RYxNd37nwRIM6wtX3)?INo>=y28iu{G8JP&PG>q<CXEIQE zT~1;eIU|dQw*)ou)HcFHm#OVwm2+(_1@D5SuGW18cU<G<zx~|%nNXtSPE|P!Se^Mh z{5C_<r5T}q+zg!1syYJvGyg38C*$DXm;Almnf&0&qE!9k<;3eK<6C^U)Ad7%8gHaq z1nl{my1|2qE%~pm>_06<cq3^ajl^^pdJ(T3)M+`d>?QNG5CNJmV$(?Cd9a|nnh|2g z(3aV%z$W@h+x?P>P!T;0{r0x}+-3#QyW0<?FUdFF`o*B5e5fv;MaYZS6QQHr(_c=s zUCs!+oB)GB(y7*3uC5jXhxbem<8x{G+NSsWO`=NedP3d+nqQJRHsqstQuT*<qBDNT z$Ydp1qo)I_8@*S*x@Ijp!;L*;-J(jZ7(3UJP9VDq7E|z!(ccTYO^Ol$bO;k<QT!n3 zwbA;uO-Cv|)#-7-7@^qX>X+bWhT8DZ@pQTV^|j9R@kAfEP5ySol5HevpEJ)F1{nH) zKs5`py_w(9lCaEaV-nzvDIbNht|?SsqFil+R?5TPBVnnbSa(#1<rg^KSk4a)++t0~ zTkmLzasS90&j%pMRyk7d5vqelQ|$pbzq!ByCfirM?8?$vC=@Y$HHZ^%wkmIg5M{AC zzj@!NCIMPyB87S{`+tE2<e1M}FA}~SJ;)_`T5onGq@PU4E}D4JA8_(+0-a7>NqY!j zMba4m8uxuvb0mG&E}&bS!Xf{&ET5eJOQezB9r7fV7PE_rybCd9$@cF=%%4PxxRVh9 zc`bf?xn)bexi`9Oe}Q(q(w5I0KV2H(uF1u1x40EgYSk-0x2i~Djj@Ptb1JVB%HRah zG%rJmSHo_J*8!_RiFAkgD)GbOR7v9bLKme<&m%(Ih4$MIy)KRTw>7_hx0h>MxnTU0 z@#f^CpRm30VV7}cw#o~(3#qGx8=7slYyex9Ku=a->d26WnK|cQ=*Qnh{lCMvpY>>6 z+Q&1>Q?S9L?M2$e{w{CQ7|PutC3rxgje9Apnu>Oq>kI%fuEb0}13^31TfpwB*1Q!A ztB$u`?E?NN#ecGU-4J*cq;-en)pN>x<m8{jR{#6|{C`OyidzYTvI_}cbly&WSV*bD z&)ly``j|?}v6#hdXJTNMr3KKxOX?GsGJiJ#qFeO^d^|+2kNK7tII25+fHL+d6K>KC zK9z6?EQsEEDZcOg?bt4L>vsnJB@yQD6YKq#fz*Dc<^5lt??Ns&Dgzlow$Ivt>FakX zk@|W^{k=)P$%n!4{cefinIfxZ{*>Dx19Qm{Yl=}d<o)!55fXkH%_tCv&3{q^(-!h> zFQxWG>C!>+j%hDn<Bp@-YZ+g01B0`?v+Hy4O|{AXgw;n*ZYmF}1a%e`h!sA**cUKR z83^_N1rlY|71GTceIoq0x=r>p{yf^{G5L{a+bv)>{p?voGS!$71GL+6ZG7Xwa@?D@ zZTi#^O}hmeI)#P1tDL_dgp4@mIduc`9*Z8p-8whu6h&9l#nLPg1PknSLTjFtji-z~ zQg_38Xb|AKn@f;v^=w`N(_RadZcYz<H(qU{RwEKs1fS=&ot-$SSF?dE=wb^VsONO2 zSJhIa9vfzRkjgAQJ(+XldyeRPkMJ@WP`;gA{he>#)4bhLxCbh9XpxDO47&|b&wqT7 zv4{}NvB)X4H1CG$d>6M!{My7P8TrHqm{Uu4@)emn>Us043)Ig)Z9j&rjU*i<cG6A& z_L#mw`&V{WmZJ0!0fG9CQFmojl2L8tDOB;Gwjaia=BoX!w#}ng%CGx12GH3vsI)jD z-?waL)k*DFHH8R@!#&UGr);?ymKZTsdm+}F2#<v=%k16}&!k1{({@Ncf3x6{XL0#Y zP*D&4u{v*ws#ga}4Sr-G$(pMv1M$f4p^OY+RR*l=YUerSiqYm}f^9dpD+hA<H2U6W z1Kk7vp+c|rau9z`HmX-KV{)m;{*8)rH&{pqtC<{gltXN4D;Z*&u1&mtWu11i;q~r7 zLDb_BkEd8);?K1$?U6$k`O#hvEMOtTivik6k<U|oN5~husJ!a=^ZGyWT~v|;<Js-J zFkU<brHp&WP$7|Z#)t`Wk8^Z<wKnMsToU^P$)RCwj7F2lcVP>Ij8c;8r+m2xp^j_D zJlV(hSHd%ox%y#H*|$};-dRPyD4nsoi66G(7_8WC)faFuz*|4|!7jD>P_$4gV%D4N zca`~P0CR%Kj(bbKI^e#U9E9K51&rzc<1;2!riW-F^g<p?@*Td_sAYYaLC`I9Fa?on zH0%~G4E1ff<#!cbHyQ&F%vveIL@AjZ?@CDInpLhElhr>K!+PUmS?|^yf~!wm+>0&O zV}oJl^+@JaMT;4R(ZwFf%)Q2@{hX18$_P79{~L|bAmKoQ+J^&9nR}~kdV5~2x8NiF zF9P+VN?qPK`Cv4By57B<_>@(>k$?TAXpc9wzuy)zCr8D7HW2`*O11?(WcAeQ0luFk z*2?z}UdKJqicGFbgd;nM(3BT?8k&N&b$yju>}3n%!VW7W6~x7RI69$%BVBKD|0G+M zGg{vtf=pq8-fjiLg`VQsU_VM`U6-(1HP5M|tVO*K2R7~@38)W~*D(=78J!dhon3%8 zqcsm(K*+Nj*ouPqcj&z&++JAqe4r$Xt<yDWEP0YS>*~e_zpMS(TJ&q5wxg_A_TDU1 zQ?++(qLpSUa;)}N28Ig*nX=eJRpo2s*DO%*6aHsP2-|W6EBXnA=cy(zU9{RWM5-Cl zvp{-n_z`hnsxx~esdy>1vqA=YMHcx!`x`_o^U8pNHCv|oF}RA%OIr0w<~06QY>hY7 z!Z1JWH)>p}q3}BriQ#;Af}UD#tOM=x^wlc)p~KN6_;O*_pCZZS`>7Mu6WJq2yF-j3 ziQnn6b}=m&>0?JEE3e7k<6t-8td)lQX_N(P)c8Xzt-y+V8?y-f$W%;&Y>8beDLEfv z?XwOd1_1riyrgOXOV`HVb?g6b3uzs`npnfIh#AdXUaBO>-7H%Hece0idgT57lq+1E z-+K5|*_gB>Z8_cMoxxA)39En|bFxbJ|GOXmf4%B?8A~1709n|jT=dlUeZV;f>YAke zc<%Sf$gxJ3-H-B7AL>BgwvR>{l?u)|9yUFA-A7h+__tH~f14luQwkawZ2{9GHUKl_ z#sV-dSG!5j=m^r+I11@=36AGbEGve{3<}%@9HLoNO@ij7`ky{2CVmgC#_vtu_Kds6 zS5py;qmo~PKS?ge6xKXq`QpEb<O3{p;7+QP-3jzTy<0>%`kVF8Yn@^73axv4qbW`D z7A)_4RPSKC3;7}fIw|erw5Sw-H3N72Xt5{Vy*B(cp?1;x9m^maA$U+mO>}0UJ*x~G z!IzXctNc*I@W(3yQ~8z$SvTqpw~YTTs%Jkkh=+qnD+b24cFw(R<Ld=q^`uSr)64}g zU1gmsXF}s;>Gog@?K5;(g83a)Q@dyMcNZSdds{lZCSGOI&};Tf@)v4fE4od0;{vs> zS4LrprE9FNJS6eyd%S7GPmqSt-&-X$DiiA^Gjf1Ypl3Xd<aC)DZMYYMz;`r_WDfKl z>X@tWV43z?=jjCvPwcl8DdzkuaEOgh(Mt8<xK#UzM8dLgb}&RiM~AM<e!^o7veHe5 z)>D1iP0)oI;hvIL*}-byV@m;tnNU!<;H@z&aU8kHU7>K2V<;9DS3M%kT3!OIjrFaQ zG0RoafAOBCEo}*NaAFN<1Cay6HdO;``V}?b4iQ49y6`dNf%8Y_TQD|CJ8w&bk0>Y+ zm)0y;&W@h9qI-{vIib)w<u@GA+f?OPI?>K|)NBmEQiOI%<H<aNoeq3SB!oRrMHC_d zanvHkX8p7#`bc`FkBIJ#`1T-2&C2R?bT$P<x_2a-dzEIhl=lAYe5TKlkR7ZJeOOzd zU#!Lbvc-;uZiOe$yAvw3ekIqDHP|IPR9LSGD+@a86!uUam!DmxHS&Zp<IGR^j}!r) zC5#|mS4Y^zE(m7O-mLW2Ll3XJ5A%AY%BB}$Y0*PM!*{aAzn(sSD|niG`d+xKWkC}F zDC{W8yJol>Ic^7Lr914Vom{3ohBQuiFt`>3F3o#i3EMMn_`uZ=w)U|({`VB<pFxKh z1t9Rn-R|t^Ad5YfuesfM>V>18{`>S_TgZ*t^efbo$qn%ZK1ElA*xzjoSj4g-D%D`d zi86Zx1ydp+2CuR7Jt9T!6a}kNsWJ_GJ`sNfUy4HT5+b^YLVAzA<4TagTo&Ts@QRth zViwSoW^;{sjVZv!vk>{lrINd9xzmd|vEW>RJ<TkEt3R{^tEi2o_SmZnE5Akqi86Z> zOr+GVUHM0W?U+74rFZs^VA6WWx8(snxdz(~|F=l@P|dvr-GL7~MHBn3mqvNlB|s?R z+|;)&@0%FIi`Zq&Z^pJ35rAbvNiPJp;z_Yy{SDrp=$T@@oTU3D;?yOWQ6GXIbA${s zx~<ODk4>0G`gFQK5mgZl<YDxq)53QW1?@_QJRNswM|doAC0#sYxtSeZyASv5nK4V{ zsK-KlaZvV&v%<$xM*j@Kul(wP9paI&`bBus*e0f7+*IZ(;0fVvD9Ulmvr}m&tR#fA zOmIlpduLK5Y+28*R+~DNUh`ciW^}NvO3R7p-MFU@<32!a_+{i1{*Ao5ngup`(65<& zxC~9Z>zOh9^j6^F3x>|6gY9Z;Lyc;TCx*d_v$8T<`bzTdjxW5TX;@m^`~^FE8@@;6 zy$s(EiXI#(9Lx#h1u4IOrM&gu-tNEU;P-g`HGl*CZ^ZU3Kn_9F`F$*f7?YXc!I^hU zR{#pM7JZDnrfEd8K|hT8ykG}lgW@j!RFZQkr)9{nAg~g0CBj1crT^p2kW|wsQ5oq& z>~)~IZM>$UpV02+mE~Ml#4aD@990vkT-OLwXxfiZs>GS<Cl{LS7X;Ykf7sf)zHmEJ z{sZ|d+|D%dC$zb*74^{_QKqac^WH?qAMU9<drjh36TLL`%PTR3^7~t#IGWJtHqsmV zzH}a+rpxfULZ0~&B@}gA1N+2nI|u2173VWTJRpom)brTJ=8>uXCS~Nri<{E9YWJor z@u;e92Xc$~Bh?~oJR*{Yt}>H-l;FB2Hq;Gv5jdspmh5+eN1<#o4>gcYna9+kC#CHD z7OX~PN(~rofbWi6X!iB7^Bi`h8fBi?w1-zafw0@*v2^82MjdZfATLv5Q=olS^BI$V zX2b~5U}{!hgAj^=SV)+0=ya;JFG)R4-ewJ}*b?kzOd<Rts5`?P_jLY{Bs-LUo8VT3 zALq;2Vzca0I#8x1uO8hyB33HO5OO-FUxh($A3pK<&K)NJuAP25U~5Z%!u^w|Z-A{6 zml*0!m)S%vgDZJaW_Ah_JmoG4z_>)A+`iCd^`PgD$t8rx?L@LZmhlSrhJc+9N5j)M zdL*C@#;RzhXY}ea&MVaQ{#;@>8H!w6{-O{__lZb0*4h%f%w%9p8#L~Kfy;%1mEIjQ zjm&$;cCLeE2mPAtld}qXVQGnN+&!6fAd5{^^Hb4r7tc0Gux(4!^ZE{>C34;K^tl6W zQFJ=ZYVWA!T1iZ*GXPNR&Uge5%XQUKJQ}b$To!g>$oz9=A_q??2<OsHb^p$@jg^K> zcGkJqA#PGpMuH;jw8SxT!hBe;`3bLO?QiNIE59bhG5C~ktYcHvH>cDHON)$Ec~VQa zSY{cS6ji>dP9mmP=IdrlvzFdz4%5v(rkb(yw&;m=x5wrbb~!H7YTnat)20sj)ByuH z2>uQLbQGwz9Dh#!2|#%UQh$NmlwJR+0rmGKPY=MHlarmLA9908b`Ka+<HrJ#bkA5< zoMqv!9qnJ~o$w8`CkZ-7hqq8HD-Gx{s|Rv<L@SLpyU<M=Gqre^LcWWeN?geisY-%e z4pgDU@}c;Nqg1zvE4j73x`F&J_M1dT+B&D}GsX*q0i4Cl8SLo2M$F#B#;yjD6W&as zS)26llBTntHEr`woA_qj+cgbNxZV|khl(n9--Y<R@&2<~+@DMF_QQw-t=zzvgQ1_L z^8JeE>=Os?m1fS_O95pNEvL#F7%T4ase3)_E&y+P>5B6zgOU9BNqXn64cWe3B1(M9 zma~Nc<gtUKslgkAYZ4FR5;yi8DZic5PMCqC9^KtRGJtH0Uq2$UuL5*B1wq;!gHG5b zdKMYpnbkCD=T6*~I0^2W+MBe1cRdwTh!7^tk|0vUh*6EVime&4MfqcLZ1{;{6rhaG z#fzPj{*bn#l@B;fA(g%mlBM=-`4Fps^XBsgjFen&mKZSzR8s2r|C@HR<e#qBNYcOe zNPpK4>Qvk90tM=hkFjn-7LZuU3vLAzR!U#YYPV(#-+1deB0@;q?8@hqtOsVA)X-1s zM}daLZ(o#=kf``2HL(TECN~W&bog@=K6oh+RRc7j9PDg*GJPu?=*;Skk?n2giagnn z-RgXJJ><cgvjV=_VHFnFvo5q(SJX9D|IC7qrA3z}w&1~WebOFKkmESx4a?H04Eb4w z@xiNmEs)qRyID61m{0E&$LPh4GPXz0T%AF0<b}#Fd>|F>Ey}e*$OI9)qI2{#$USQG zQNJIEczD9RCEy3@_=T>QMsvj2r|*KVZJtEZi<gX_5RqYn%2yb%WF}4G6^Du4PC0`a zyu==B@H%qnQofM^sEFwecbJE-<~q#dEZ*z#Ra;S09V*pM=?&B<Tx8ul&vJ5tB-8zN zB&4(6C1=W5sB|2$X{X(NNWbXFB}CAAeJUE2Y+1_KZo_BoF&$HMq@RVxleplY87xd> zPmI)rM+;rh6&z`tXL@!zYIZi6Bdc|*=93yqHH4R*R)kCXnu(b=(K6&BO!sGHwWN@y zeBw6l5X&wX=8d6qpiUEiMdy}L=*007AI#Gn#z(~j<H*hQoQ00GWP%{bb^73LE@hIA zQ<%ZWR;q^ACu=!<D2qjB9fn!~Bnr>e8^34SCEeWyIhbBcRMUmva=MponSN?}oH&Y? z2_%Lu0r?ZHqcl@9dZDN56YY6SWqCJ9OQwn8c}_N!u&Q_ytw}?f{Bet)fliVRm_iT7 zzw!2`jzN&48q&i(o44ZdMm>VvVF%0{sbiaAmSpLFHSyYXpfoB5eJIVhJHyD2Bk#XE z8A&!z>1ep?H61zBMwD+$8H!=ryc@Yts+&IF7h@AiK24-9bZ8{BmN-pRzm#pKdKaq* zwnj?yl|Oc;j2sD3=%M!}JHU{a`x-R`1RoOHedp_$VNZRWWQ%GnHH+nzi5zHOW}>@~ zKS#Ccn4be|sw90e!anC$*25B>4%m4kTyv$D=Q6&&_uc_2%U^@o-?io+?&466;&(sL z=j>X3t$?23f7k0FVcX9R5_8_za^0&3I$-==PBmP1Ifo8RM$|<I#x^guoBsY0d?5!< zCMc31?6NoZzCuCj7f8~JUDmcqtkr%cH&t(K@_~+d=IG&-mjmU~fzzxS2VF{URk(SE zV15&#*UvEJX7AUi?y7%wf~Au|G}1vjm$KaqK7o7%9c;DJdS*Z?&6Vv<>DT-!W3B$= zc0hODXof}Do2y=M6H#A9@aCXV$(5crGg4{Mj~L$LgVuu~r!H(~agscFvZUg)KgV%z zZHw3qzbPy+%BD`AKPwn?H>Mx@QE{yBu2^dFX4wSLVgZDw8l4)dj(X~*d_&O;L-bAq ziB1X4jv5qvqfNr9Nmgwn9*Lq(16T@|t~d$CGX3_l2^3b+BXc575~5&LZTl>clZ(%A zB-M$niE0_NNX?HnpT0Ui_@IMbR-W*@WiaKD4|u<&rXn*Y`NS|$>#@#SQFOj}wDpwe z)ZOi*wKO7TN2NbPRc^8^n~b8_Gu<iZvSS>^X?U`O?-N{Cy=R(0k70laP};*k1WpHj z=l9<mZan(ua1{R^HUU`J?qd*$X)DNsF!5oT?M`}Nrz2Yn2xQNeB~ldBB=%iyc>Alc z=Q~UBujS9F&WaX=+mhjaPUMEDPTpT2vR(9ih4wxmHO^=60<gg|D%2x6UQXK?$-i`+ z)ux`J)f8*5U|;TP=55PFW`*74(bJRKpGEN<HCqv^s8esUKB89yRIn9mna26A%c6SG z{tq+zZ!JFd_3wPa3O`bFE?oZRcb#y>dL>L+3Me};)wFjl<m}}T<@;~o1OLpkd&0Kj zZ&>^%1Bak<f%?Bd^p5uphfRPr#~NdX5wvsF2|vJ&oRzCOChD6ZXGivk={pfYap7^U zkLHvkW5a7n%jVk+uTeHfLK~F_YbkyJ^)^6yVeD!5wv@Y@FfNFs{SwN$-XsdxNk{sP zH)|=4RHgZPHBrK<bm#OsC*;Vc8}{+CADxAIQl_cwM@&nT6ojy_h7M_h#m;#%5>E`w z^Mh394`sSbsbr7!O{eoCtr-Slg~I8*vr6DWM7Kk%rAKGd@#JvzZ`^HY{_P|1Iqf7~ zted8&Z$KA|Z{NVz*@@(o=zuOLs}405ZJmC?gsIP&dLca!rsHwAhHo2H)3qL^e5UR; zwN)5*34(2I=Vy}VF_eFrqT0%9Ev+81R&~$PWUQZ_yBC(PooGjNe4l@f94pJ-zX$c% z=iAhT<T^2mKK(gZN^Son>hZk$(^6S(qwSB*t4Lsu3;2@E2aENp1sy}^=bD+=&eNKx zZkmiAO7j3-6gt>v9;e*-c*9;};`TN3-lg^>`%>MMU}t%t#}L}HgPDt7*C8zJGar&< z25I5d8g>=!VC_H2tIl)-HE1d~jiq(FDG7;(nvJ#09$Zzv@B)JHAxVSs(9j8w#!RN8 zqPtnY4DCcWr|{$nb)*fy{hN6Ls_GlJXOiD^il3vf=i+O-+rqXTHn+jKwBoTm&lZ&$ zTwwr>#@}BVG3xi8mRswe-hFYbx0Or2l}uk#|DE=CcpWYkcopTEz~!wCcsT3Ui)Con z$t1QB*Wz8@d#{%19HcZ!yz6hLDJ{ovxBAST$Uxcz+G$8^j)fLtmq9MPZuwDc=JRYa znDL>@F&Izrx^!x?hkR=+$Fp29=;4(lt+E~)_dx4;s(@+|ZC=3Y##Omcc?AS@4NT6Q z-Vj#B@-r=6e?5mAl+D|nov-K_OcULxk)x+TBfUu#4fCjL`wTdcjEOVRO1$-=p<3z% z3Y<RzHO`CR>(O#vNY<bbQv@uPyDf5N;<Ta$ieUe&<!FkTC;M7keIH=+Pdrh?23k5w z{WUOsd#UHE{o(h6mjZtjAb_UucR&jOOv(U;4F)3T>=XFroa|tMl-S1I9AbopWf`bU zoXoz-&5nv)Q1UZpti8dbnr51`{iFP){E5=RYh42weF`?m$?aZ?r)C%Q27WI%ioe~2 z-(+N5+wBmc9vV{Zym6A&^#*iwTId}9M%hr+XPQHD$0;Yjur*hyz?pZinM#@%J3e|Z zXl;^J69DcCEr)hhJ;?d!peFZ%#(+kfr1XMDn^vpuA={0!f8_Vy8UKef{^x(v_@lNs zi(`OhX|9vvofPI5NdFyRoFq>7NWGOc3y7)u3#z7R0Za{}4heiocifyV5wNfzeW%@H z#fQa=_bpkzF}xb9`XWKQeUUvHJ7lx;(fZb(yq3IMTeE0yYF6><-7`}9*UQib&ZDDC zp9cq3DY}k{CefaX)y9DSSe-@JpY%^u<lm!B0Dl0f1gCn$KqxSkZ+kz<lq?_CVB?M7 zhXsZ|@28zfWlz^Gc2-EIP-yZ0I$z^vB*`^u%uZ!meK%rKDK!zq)lG#r10KUW%Gs<< zY2=#L6HD(tA2yeV%$2#A8rpIqz#o3pqq&e#3MPQ-<hSALRZT63wgc92b8*0Aox8-~ zb&}T(^uXDnmTAvSkk`Cd5petG*A+g{Z)re7H-kt*J*=>H+C|~%XaYD=JHU3?(@YJf z8QaIo#d}Uah6WuR3*q}kPZ-(2W@xp7E=6wXBVxG+`3b!g04_aSJV}o(vo}%9l`y_a z0I!;x$wF&-GiDA49Lkhs1xmu9IufFdP8<vIHUzbXlxXRXr3UAWbGCd7Bjk<n21$a! z$LRu?YLcG+T+14!zJ;zyc<dsxMbvyc?uH|ee|jBW0lf@XR2EQNiC;vr59pP7RWR46 z(gRJf$2ow|;IYq==|v%Ga31RO1k3D5P@IJfbSRXs0!Oh354u~~O?rs3*@%<GKGrU& zWt@qNq;wx(JnNyuW}HGfujP5uFRW0{P!F_*9GPc(l$L};)-ZJ0CsN2$Q9G3UIl8Xh zS@_66t_AGX#VYBkS9X(m8(0WqpA3RJxa#>F0}c7glH8#UUbzE;X@vVw+D`Y%g4VR# zm(rTU=SmqiOIOQ${Y?6eg-1JLzBUZ?RYnfD_qTa0#R)+TjA>>_u%SY`-6(@h?^s?t zUFCL2gWWOLipXpv*#d@BI7Hu8`x%zJ9-<JZAft!CHi=ZRuEn8+UDcAx3mXmxW<Omy z6wS72&RdWr6)748Mg|}V42XV*f3&j@fCKs4=Jc+XL+hV`=iq~Xocl-2{)76-)dC4A z^$a=~h=xfs!&SS@ij86H7busTy-jlTPHc4Hd8C1U<(x_6BpZ&LGmv%yB}ppDJ$=O` zmvt0V;gR8fm6>vEQEGZ_t}N``tOo2!EAyBZNB!-9x;K3&6M|W*3k(E$`WPlU(1N7N z%yMwDA1cTA5+mfXpV%)|yZDzmBpYmw0`_yiv4@x5YD`#Nh);8}Pcsi;O2l79c<|JT z>IxSA@aWO_VwkOh3gV4-S2fApgD*BKjZm})xPL&`Hd+MX@0aK-I*Pv<%=h^&no*^A z=<(`pnXAI_WR0=Z)byK0;iVB^+OMiaD5$X7da}utrC6||YbOKwvQ;7eh4PNuaJ8B` zE+|2AT(>)VilE~s>u{5V>CgMtE`=q7bbWl<x&wVtv=5BlyRj*L7%~{bXddkw3K`Cq z3Q#F*BL|8j9_0*-wDC;IFydMZ6=B&Kf<tc^ra5T0$`@K)qYi&yY~{kf>Z;giC|QQ; zQw~SNqg<^o6qR}3s&K8`=8+%uB`r{)yA|b{D8_m%thGNrF{hWBTrsC;U{X~`>Tqr* zkM$GFPyK;8;;ukVySxMEiG1_sy;t`#)|zyN0u>=Gle3dt+0gx^#_qeHZ;8>}N(v~7 z?%sKD-Tr8Mhj%Zd6F1C@S#)afA&_cO87Y}Ab+++b-@n(}u3)wj(kUu9=DYhTnlcDb z6^_?Arcx=j$&GU%_tZhs0MNG0*eQ0nr|!;-K7p>le@5l0?q}8O^iCrnUGJW?GJnqB z3|QdL#pIv=Yqk0}?f-`pbj9?4w*Nq06s1pH1HYaZ^dG#7a^%m&A<i=<6i~$urrN57 zb~SjH34Q0!O*g8q)=AbhE3~}NF=rOdRh!IOwM{l2l?$*5C2CC^X8D6)9PSx5Tp{$7 z{L*Hj_8STW>XVt2Z#X*MW8@I|=5LuoNkGzdGLQE_%vK*8CQA<AJgsk4viwZ$>GSsP zU5!qFI0B6Xdo+QHJwly9qEli=fqFeczmM*Z8P#(F#b`}dBgmWGp`Y?l<8pUEg<0~? zffvA-8FjoJV6)Cp>{_&e3Y&_Z=u7~(4TAPKs86%Uaf7!bk}O}a{o%0YQG}>(6{AK+ zuFAaoWa+5TRo_si)4Mc-Mq^>A1v!axnidZ52Q|jf#&5JnU+C)(WA&T|?v=nBPDIMj zTV!mbwW2E94)Oge#c=cXCI%B9Z-Y>c=X^(GwGG>g>e5b&{yYtXMsV@@jDCOqsNFjI z3JWb5bgY{Z08e<OcxtAIp>(}!ALQKbFcP|indRdWEklIuc!{y=k|vC^qX7-2M$-+A zKI92hDg#==wk`0|0<3Z8yfM}7^!E+1Xps&aMeQNG`H?|id<qiPc(>+0l9Dh0Khi9) z7EOzL0XXXTa0f9ItWoqLCC5~r81DJm4fNHQR-QBV!xu<|tLVy0?s|0z;=$?&B)Wt9 z0#!|WI|W1wEo1nM2(w)nNaQso7)WrV0&-OqTzXNnPh)Enab(W)29j_H=3|o=uBFU^ z7_O!%WdArHu#KGF<@Pg(4_$&p#dIl7H(YS8Vo?RTPV7}nS+lm35c*sv-%kGEW=oiw zS2=}QyA6sYr<W+`X$%}9`klOQC_fF!$oO+WbDgZkp+eZ3vbu-SCxmB*px_rmw9Pjw zY&I^zQve5k#YPXqs1M0%D5Bd_uhbHaW<SdML|~6pOTrU3shj(bE5g)#XuWEYDdJwB zz3N?oS;QkJsQ6vsN|I8yH@$Q+2~$OD13>GB{ts;h2n_T)&@K)rPJLIPog4TCGQIiY zFWRENP5==&=DX`Y{n!3l7A(zOI%2xJoa8NJ5bt;1JuWs)k|qeFNEt0viwrAwI~%ik z2?h;1P@|C0PEzH@P>u}l>OB)nhM=$N2(?=Fm$e-C(%GAiP<yE=9{3PBlLmlWDT68+ z7-a$S5ZX)W;tY9piJHQJR=uDGZG2c))#Z<dVT@?ru5)OPPbkE`9>@2?n!?Ol&en>h z&D6yejcny_Vopk`ZgW%LV;K^>gL&(~Rz0v_nrzNDfom{m4^ht^n-xtJJAs96nWr5g zToy%({0q%ILKL9Smsp&SrKCqN+)4g?>3hV{E{r!iUC-uCHBBs~J%7}7K;D_H3Z{N_ zUUb5Kc74g+DSKt+EC^6zZ_!ntGjE<5TkToeeXruTMDeiY_=ZRij|9o3b%;ah7wGbD zJMegm^mg@LvEWQ}Bjrzh&@r^YCP1MTKC%|1k00eQjJSA19kk+RA$SmisP<uAqQ>ax zk_rzq6n0lUJW@*zdE~DUW}2KI{;XZ|Q-d{coBjyd@Vzg6A24V=10%sY&(!C+;k~H& zcgsq{GJQLn{<n%ArcR9J=B0zWm&&5zskka{BKbr|`OaA|mU<#JcAz$wi4#Fl-eHv< znvK%C#HppmfK#H9HG7U$qnb#%Nv2)#maDG%%r!^8aVbS<M*wdPRFWG%wu=AwyBhra zw*P9Rjs~)G;4mkZ{1NbNwm<+!q70|nkEdh4>gAAk;)#2DQ_ezFw8oBmlc7nxcJi$? zG0BCz=!Jn)ZXYKPto2ApfN@D|L^n?|(AVF^Wu7SC@T$%RM0wgW4z$>D=EJ27$z`dg zBP%{Ux$&bSlL|uRmzoNQZ>ICll)@Oo3hhE6^@ukb^f;>KEri8JEMn*3X4zueNc<>? zVv|C^{ji(PL1IkgUfv6WQ0)W*tq_u%RB2U(Km1=Ju_jBE#S_x`HBC4C#dDPMSn<YW zxoS1bqbg8`2l;l?C2o&QzZ1=l^)X}J{WSt3;0xcCuV%oX7|eXo)bZeeLp*PV_XuZn z-t3}BW@q{eeQ#1cvn%-Ma+V@3_zK^*cUA-%)SICrbZ9)_2z5CKg`|FVGPO(aVD$2I zWE#TO;OdO(MIDT}diYiuv|y|)!M5qSst%6i=T~II>5-nqP`rZaI!U83u>g0N3B!-) zzx5F*W+>2W9u1|^k>n=q^)D_^0d^t6x}#n=foLH?tk!E;8_v(=;PK@|f|k^g#^^Bw z_xMEJ_DIjp7nM_@s=$%)3p7%Ml;F=u-#Kq#jbvdO$UkB4-*<L!@*of+dNx(ff;vVI z_OCe*z}{Fsn|fFJMq_A5o90yM`jG(=Y*FIa7t^V)U<In>>!x=n3sS#lzASerLN;@x zxrfWUW?!oM`2oRzz6wmygFdW#n~Vh+;j%k+1>%@DP=E-DLm6Wg&F5Cg<#;o*i||aU zWw4{ieY^%T{o@NN7Ny2;VM|;QKr=yLq4*r6caGZUDPE=!4`=vnEK;@d#N&h^*UXZD zDxzD9`9#q3n=Xo^VMHb_!dI3>yKxi;OG%4P3nRWubos2o0^_16IW~4o;$1u{juA;w z_HOZR2$2nWzp6XHVrJ0vzG2&jeX5D(eZx+|hsfB2COV8a*#%QC$X#P7_*#$vS@2q- zowcY~#kMUc&o&fMRmKD;rF@6M=QG76^-4o_6Ne(asbo_M14H@Vz07~$#`gQOgusC4 zchCl1K>-`GgRMukX>0q6^5Ot>Ufu6Ae~0^bgyjGoNMMd>3rc{HbN-dCnUP<YQ|(CQ zc{MRn&}pD2gUJjfvdjd7cv};r^nup-E+>eSoERixEt^OQA?Sb0Kil1#FPaT0I99q? zBP;aOEm|(mwBdC<oM+Wg_9&Gs-n*H#U{$>`!}t(TdqqvOAzQ*&*~E>Z2BPF}$;S8< z0kSZj^*mimzN5m#N@MaCi(Qfz%w*9)r0SvNt``{;1qM>qcM$|q>AabNPf}NtrdOkp zqu?H${<6`x5ktp{_xgk?3X;AJ<4F|&8Od}|radj-UC9$gdHyVV72VZq7{zm8@YO(Y z?$*@LQpAaC6VlUdzTm#@G@I~V_pQ+hY-=@=C$AyOCy0n~FGKZmRFFr-kw378?-$5P z-rHofM|w2X(1!CCSN<8xO?3;a>P{G9YGN!m%hpd7MTyN&{Yk?V1JHJu6Vx4E&ycsJ zGw&Ly&lH(g+q135bnUJXNWdPI#mS{KMG~vd!PktTlJk>vu@yp&jE{nsJ;hr1yY(y9 zqlrp^;=dO0$F+#RUc<jN`b|=JDgF=ohrf2f13-R=qCB@J1UV?=2BmVAn5vfG!oHnM z0Bk4a55wy#Iha!gpPVE=9QDMSW=?x+36sYlw5F>NOGuHZ>Pd-S&GEe_{n=A#t|N@O z=iNr5t~?3^nj_K^u_YjlglqVNm%eWOaL&ggX-5h@ZK|&rj|xs@R2eMK@XI@SXwI`I zJhz6*%$2zf8w}O3=>x0J=~^-^#vEst@$D>IKiqNP;WwKJ4a4_yB0K~7YOl(>{`gq7 z@L*80!Vl9*lm;l&jP$vMvB0?Ps2(bOb%P&Era!^hP2Wg916=BwM|~xI85^oS4SXc# zQd4cCYf@C|xOTG+6ze5JIoM;^5V&hvF}A0oLyCffkGvcZmzph&uv^Im8b#-fw(erU ze9&e(R-oB;_P&ENNw!6THKXvFLz&WwH>3nX-h;PTbY!)Euj)7Zx^KW-*?za1FgkBd zIS(?ydbhi)*0qQNTv{{Ii|~#-A!RGNPr>RoSUA5bwjqneN7e=}^iiWhnk4GI2ChiB zjG+hg;*`sBhd<l?)$9>5{uk&)+|6&adQG+89R*J*F3SGcI7g#l8V)8=Rc%l$0|5$! zTN4`>%r$t{#Zm_NqPj?{(X^M1G2^~n0aW_CntfHy3Yc1To<?Y(Ad<YpGQU%Oy&kl) zx|T@L^}<jTfY3?PDxc6AOO!|S)0VX+pE;QiZRUxyebo{PkYULq!y<|{R4#O>-V4|9 zxDCS4!)I_#8$54q&hKddlMHeEU||#<IZacAAKeG$PCv=N2$0Uunok!8UC@SrdDr6r zml+C2-D$5S=^64_Nbu23ImZI_jZ)!hk9K<R#Ow`}s_tmLvlq@h7!qclX(FT+L~_iN z7s9>nL6cRY4*5y$)A$MMSDOvi+{4Sbx7@8H=DXnhl++M|0kckf9E(n9M3bvjewt3| zOXh2=z1HMskT4x*_l(xYJ-)+Wb~)u-0;(*-ys<QULe-E=X7dZ=A&R7HUu$)At-u?J zhl}J<*c_6WdumGS?{-C14mwKhaHys}h=Lvh<eva_CNMJkM*#EE{oVm{u-_<DHw^k0 z^1D|N0KVWYi!9LE@{0atmj#2#(OPgAnjCbO6U2oE?6km7k`v3glM@Rs17jLuFfN@_ z0wfa<ytMsQ&$Lf0PybRXbAR|8{7T4Y;cb$7e}I6YxK$5#)tMDjuN?J3i-N7^+;oC_ zha+1=k9DS4L5=n#%KIfB8dq+iJ3Mh(Dy$HwJ7ekqv17S*Q><i-gxoek)8v~Fr9W?6 zm(z2~tzNIdD7Uswg)gJ8R@Pca5nWcyBW*3WcK`U`!Hh6e48Dc7xbmmmkn25l+z%Tm zXFFfWNQ-Tn*h)6gIWP#2xB4=3KlKGTxHxa~=dWiMM};&xKLAvk+E4g1f<lO~)^kY) zh7Y?%cNPsm`0)%4Tige0DAHZMt7@isT>3JZLNAOZzn7t_Et2*b^AJA^*6v2(MiM^E zc)=_+E|-@MPE^&xo@!Z?9ac3BDRPc15R|`kfHR`!!RA-iMaRdkv0<3E(P8f=n>*VS zBFybjd+Q1O%ory9y&$5T`HYUCtXv*5GcYkqJT5NB73bcdZ^WJ-Uhcn_qm*dkyg%_( zr^|QX4ZRbJoA4QqVRD4wxM8U4pzsfm!v}u9-G5I2TmNQMR1m0|FJ$Sh&3rD=Zw<yj z89pV5MQQy4Eyyz89J+fM^b0i4O0-0J<)+7L!<OO9dCye*sIHKSM@=gX;C1^~?Kur7 zh#zqGd8dZ8?2&%wYb->GNQDU*tre^3`|AYi*boUvzH6Z0yG^jMa{O{&X<25-EcEur zJwIc1_`RgVz#F-AWtnjW$sSlE>EFnhASA7BD!ZUkGkj&rWK3)}v0*E0O*LZj_*TDZ z^O?1!@HgwWCjZZr1_EuJu(0N}CJ#{*o72=-oo3%RqMTcZpp3>I-F8Q>&ol%}ewzAi z+=l><wjpqb$YounWB^rNg7*Eak<mosO-BKM+ha&i	Cg;fwv$1hPYXmE-q`e_O#4 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 literal 0 HcmV?d00001 diff --git a/pocketbeagle/images/PocketBeagle_Front_BW.jpg b/boards/pocketbeagle/images/PocketBeagle_Front_BW.jpg similarity index 100% rename from pocketbeagle/images/PocketBeagle_Front_BW.jpg rename to boards/pocketbeagle/images/PocketBeagle_Front_BW.jpg diff --git a/pocketbeagle/images/PocketBeagle_microUSB_bb.png b/boards/pocketbeagle/images/PocketBeagle_microUSB_bb.png similarity index 100% rename from pocketbeagle/images/PocketBeagle_microUSB_bb.png rename to boards/pocketbeagle/images/PocketBeagle_microUSB_bb.png diff --git a/pocketbeagle/images/PocketBeagle_microUSB_bb.svg b/boards/pocketbeagle/images/PocketBeagle_microUSB_bb.svg similarity index 100% rename from pocketbeagle/images/PocketBeagle_microUSB_bb.svg rename to boards/pocketbeagle/images/PocketBeagle_microUSB_bb.svg diff --git a/pocketbeagle/images/PocketBeagle_microUSB_bb1.png b/boards/pocketbeagle/images/PocketBeagle_microUSB_bb1.png similarity index 100% rename from pocketbeagle/images/PocketBeagle_microUSB_bb1.png rename to boards/pocketbeagle/images/PocketBeagle_microUSB_bb1.png diff --git a/pocketbeagle/images/PocketBeagle_pinout.pdf b/boards/pocketbeagle/images/PocketBeagle_pinout.pdf similarity index 100% rename from pocketbeagle/images/PocketBeagle_pinout.pdf rename to boards/pocketbeagle/images/PocketBeagle_pinout.pdf diff --git a/pocketbeagle/images/PocketBeagle_pinout.png b/boards/pocketbeagle/images/PocketBeagle_pinout.png similarity index 100% rename from pocketbeagle/images/PocketBeagle_pinout.png rename to boards/pocketbeagle/images/PocketBeagle_pinout.png diff --git a/pocketbeagle/images/Power-button-sch.png b/boards/pocketbeagle/images/Power-button-sch.png similarity index 100% rename from pocketbeagle/images/Power-button-sch.png rename to boards/pocketbeagle/images/Power-button-sch.png diff --git a/pocketbeagle/images/SRM1_cloud9blinkPB.png b/boards/pocketbeagle/images/SRM1_cloud9blinkPB.png similarity index 100% rename from pocketbeagle/images/SRM1_cloud9blinkPB.png rename to boards/pocketbeagle/images/SRM1_cloud9blinkPB.png diff --git a/pocketbeagle/images/SRM2_cloud9blinkPB.png b/boards/pocketbeagle/images/SRM2_cloud9blinkPB.png similarity index 100% rename from pocketbeagle/images/SRM2_cloud9blinkPB.png rename to boards/pocketbeagle/images/SRM2_cloud9blinkPB.png diff --git a/pocketbeagle/images/SRM3_cloud9blinkPB.png b/boards/pocketbeagle/images/SRM3_cloud9blinkPB.png similarity index 100% rename from pocketbeagle/images/SRM3_cloud9blinkPB.png rename to boards/pocketbeagle/images/SRM3_cloud9blinkPB.png diff --git a/pocketbeagle/images/SRM4_cloud9blinkPB.png b/boards/pocketbeagle/images/SRM4_cloud9blinkPB.png similarity index 100% rename from pocketbeagle/images/SRM4_cloud9blinkPB.png rename to boards/pocketbeagle/images/SRM4_cloud9blinkPB.png diff --git a/pocketbeagle/images/SiP-A-sch.png b/boards/pocketbeagle/images/SiP-A-sch.png similarity index 100% rename from pocketbeagle/images/SiP-A-sch.png rename to boards/pocketbeagle/images/SiP-A-sch.png diff --git a/pocketbeagle/images/SiP-B-sch.png b/boards/pocketbeagle/images/SiP-B-sch.png similarity index 100% rename from pocketbeagle/images/SiP-B-sch.png rename to boards/pocketbeagle/images/SiP-B-sch.png diff --git a/pocketbeagle/images/SiP-C-sch.png b/boards/pocketbeagle/images/SiP-C-sch.png similarity index 100% rename from pocketbeagle/images/SiP-C-sch.png rename to boards/pocketbeagle/images/SiP-C-sch.png diff --git a/pocketbeagle/images/SiP-D-sch.png b/boards/pocketbeagle/images/SiP-D-sch.png similarity index 100% rename from pocketbeagle/images/SiP-D-sch.png rename to boards/pocketbeagle/images/SiP-D-sch.png diff --git a/pocketbeagle/images/SiP-E-sch.png b/boards/pocketbeagle/images/SiP-E-sch.png similarity index 100% rename from pocketbeagle/images/SiP-E-sch.png rename to boards/pocketbeagle/images/SiP-E-sch.png diff --git a/pocketbeagle/images/SiP-F-sch.png b/boards/pocketbeagle/images/SiP-F-sch.png similarity index 100% rename from pocketbeagle/images/SiP-F-sch.png rename to boards/pocketbeagle/images/SiP-F-sch.png diff --git a/pocketbeagle/images/USB-sch.png b/boards/pocketbeagle/images/USB-sch.png similarity index 100% rename from pocketbeagle/images/USB-sch.png rename to boards/pocketbeagle/images/USB-sch.png diff --git a/pocketbeagle/images/User-LEDs-sch.png b/boards/pocketbeagle/images/User-LEDs-sch.png similarity index 100% rename from pocketbeagle/images/User-LEDs-sch.png rename to boards/pocketbeagle/images/User-LEDs-sch.png diff --git a/pocketbeagle/images/fig-PB-Headerphoto.png b/boards/pocketbeagle/images/fig-PB-Headerphoto.png similarity index 100% rename from pocketbeagle/images/fig-PB-Headerphoto.png rename to boards/pocketbeagle/images/fig-PB-Headerphoto.png diff --git a/pocketbeagle/images/green_check.png b/boards/pocketbeagle/images/green_check.png similarity index 100% rename from pocketbeagle/images/green_check.png rename to boards/pocketbeagle/images/green_check.png diff --git a/pocketbeagle/images/mikrobus-socket-pinout.jpg b/boards/pocketbeagle/images/mikrobus-socket-pinout.jpg similarity index 100% rename from pocketbeagle/images/mikrobus-socket-pinout.jpg rename to boards/pocketbeagle/images/mikrobus-socket-pinout.jpg diff --git a/pocketbeagle/images/pocketbeagle_package_small_size.jpg b/boards/pocketbeagle/images/pocketbeagle_package_small_size.jpg similarity index 100% rename from pocketbeagle/images/pocketbeagle_package_small_size.jpg rename to boards/pocketbeagle/images/pocketbeagle_package_small_size.jpg diff --git a/pocketbeagle/images/usdconnector-sch.png b/boards/pocketbeagle/images/usdconnector-sch.png similarity index 100% rename from pocketbeagle/images/usdconnector-sch.png rename to boards/pocketbeagle/images/usdconnector-sch.png diff --git a/pocketbeagle/images/warning_tri.png b/boards/pocketbeagle/images/warning_tri.png similarity index 100% rename from pocketbeagle/images/warning_tri.png rename to boards/pocketbeagle/images/warning_tri.png diff --git a/pocketbeagle/index.rst b/boards/pocketbeagle/index.rst similarity index 100% rename from pocketbeagle/index.rst rename to boards/pocketbeagle/index.rst diff --git a/beaglebone-cookbook/01basics/basics.rst b/books/beaglebone-cookbook/01basics/basics.rst similarity index 100% rename from beaglebone-cookbook/01basics/basics.rst rename to books/beaglebone-cookbook/01basics/basics.rst diff --git a/beaglebone-cookbook/01basics/figures/01GettingStarted.png b/books/beaglebone-cookbook/01basics/figures/01GettingStarted.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/01GettingStarted.png rename to books/beaglebone-cookbook/01basics/figures/01GettingStarted.png diff --git a/beaglebone-cookbook/01basics/figures/02GettingStarted.png b/books/beaglebone-cookbook/01basics/figures/02GettingStarted.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/02GettingStarted.png rename to books/beaglebone-cookbook/01basics/figures/02GettingStarted.png diff --git a/beaglebone-cookbook/01basics/figures/03GettingStarted.png b/books/beaglebone-cookbook/01basics/figures/03GettingStarted.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/03GettingStarted.png rename to books/beaglebone-cookbook/01basics/figures/03GettingStarted.png diff --git a/beaglebone-cookbook/01basics/figures/04GettingStarted.png b/books/beaglebone-cookbook/01basics/figures/04GettingStarted.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/04GettingStarted.png rename to books/beaglebone-cookbook/01basics/figures/04GettingStarted.png diff --git a/beaglebone-cookbook/01basics/figures/05GettingStarted.png b/books/beaglebone-cookbook/01basics/figures/05GettingStarted.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/05GettingStarted.png rename to books/beaglebone-cookbook/01basics/figures/05GettingStarted.png diff --git a/beaglebone-cookbook/01basics/figures/05GettingStartedVScode.png b/books/beaglebone-cookbook/01basics/figures/05GettingStartedVScode.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/05GettingStartedVScode.png rename to books/beaglebone-cookbook/01basics/figures/05GettingStartedVScode.png diff --git a/beaglebone-cookbook/01basics/figures/BeagleBoard_described.jpg b/books/beaglebone-cookbook/01basics/figures/BeagleBoard_described.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/BeagleBoard_described.jpg rename to books/beaglebone-cookbook/01basics/figures/BeagleBoard_described.jpg diff --git a/beaglebone-cookbook/01basics/figures/BeagleBoard_xM.JPG b/books/beaglebone-cookbook/01basics/figures/BeagleBoard_xM.JPG similarity index 100% rename from beaglebone-cookbook/01basics/figures/BeagleBoard_xM.JPG rename to books/beaglebone-cookbook/01basics/figures/BeagleBoard_xM.JPG diff --git a/beaglebone-cookbook/01basics/figures/Beagle_Board_big.jpg b/books/beaglebone-cookbook/01basics/figures/Beagle_Board_big.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/Beagle_Board_big.jpg rename to books/beaglebone-cookbook/01basics/figures/Beagle_Board_big.jpg diff --git a/beaglebone-cookbook/01basics/figures/BeaglexM_details.jpg b/books/beaglebone-cookbook/01basics/figures/BeaglexM_details.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/BeaglexM_details.jpg rename to books/beaglebone-cookbook/01basics/figures/BeaglexM_details.jpg diff --git a/beaglebone-cookbook/01basics/figures/X15_Beta_Front.jpg b/books/beaglebone-cookbook/01basics/figures/X15_Beta_Front.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/X15_Beta_Front.jpg rename to books/beaglebone-cookbook/01basics/figures/X15_Beta_Front.jpg diff --git a/beaglebone-cookbook/01basics/figures/beaglebone-white.jpg b/books/beaglebone-cookbook/01basics/figures/beaglebone-white.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/beaglebone-white.jpg rename to books/beaglebone-cookbook/01basics/figures/beaglebone-white.jpg diff --git a/beaglebone-cookbook/01basics/figures/bone-black-details.jpg b/books/beaglebone-cookbook/01basics/figures/bone-black-details.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/bone-black-details.jpg rename to books/beaglebone-cookbook/01basics/figures/bone-black-details.jpg diff --git a/beaglebone-cookbook/01basics/figures/bone-black.jpg b/books/beaglebone-cookbook/01basics/figures/bone-black.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/bone-black.jpg rename to books/beaglebone-cookbook/01basics/figures/bone-black.jpg diff --git a/beaglebone-cookbook/01basics/figures/bone-white.jpg b/books/beaglebone-cookbook/01basics/figures/bone-white.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/bone-white.jpg rename to books/beaglebone-cookbook/01basics/figures/bone-white.jpg diff --git a/beaglebone-cookbook/01basics/figures/cloud9.png b/books/beaglebone-cookbook/01basics/figures/cloud9.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/cloud9.png rename to books/beaglebone-cookbook/01basics/figures/cloud9.png diff --git a/beaglebone-cookbook/01basics/figures/cloud9Debugger.png b/books/beaglebone-cookbook/01basics/figures/cloud9Debugger.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/cloud9Debugger.png rename to books/beaglebone-cookbook/01basics/figures/cloud9Debugger.png diff --git a/beaglebone-cookbook/01basics/figures/cloud9withBash.png b/books/beaglebone-cookbook/01basics/figures/cloud9withBash.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/cloud9withBash.png rename to books/beaglebone-cookbook/01basics/figures/cloud9withBash.png diff --git a/beaglebone-cookbook/01basics/figures/deb1.png b/books/beaglebone-cookbook/01basics/figures/deb1.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/deb1.png rename to books/beaglebone-cookbook/01basics/figures/deb1.png diff --git a/beaglebone-cookbook/01basics/figures/deb2.png b/books/beaglebone-cookbook/01basics/figures/deb2.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/deb2.png rename to books/beaglebone-cookbook/01basics/figures/deb2.png diff --git a/beaglebone-cookbook/01basics/figures/deb3.png b/books/beaglebone-cookbook/01basics/figures/deb3.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/deb3.png rename to books/beaglebone-cookbook/01basics/figures/deb3.png diff --git a/beaglebone-cookbook/01basics/figures/forkMe.png b/books/beaglebone-cookbook/01basics/figures/forkMe.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/forkMe.png rename to books/beaglebone-cookbook/01basics/figures/forkMe.png diff --git a/beaglebone-cookbook/01basics/figures/pluggingIn.jpg b/books/beaglebone-cookbook/01basics/figures/pluggingIn.jpg similarity index 100% rename from beaglebone-cookbook/01basics/figures/pluggingIn.jpg rename to books/beaglebone-cookbook/01basics/figures/pluggingIn.jpg diff --git a/beaglebone-cookbook/01basics/figures/template.fzz b/books/beaglebone-cookbook/01basics/figures/template.fzz similarity index 100% rename from beaglebone-cookbook/01basics/figures/template.fzz rename to books/beaglebone-cookbook/01basics/figures/template.fzz diff --git a/beaglebone-cookbook/01basics/figures/template_bb.png b/books/beaglebone-cookbook/01basics/figures/template_bb.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/template_bb.png rename to books/beaglebone-cookbook/01basics/figures/template_bb.png diff --git a/beaglebone-cookbook/01basics/figures/vscBash.png b/books/beaglebone-cookbook/01basics/figures/vscBash.png similarity index 100% rename from beaglebone-cookbook/01basics/figures/vscBash.png rename to books/beaglebone-cookbook/01basics/figures/vscBash.png diff --git a/beaglebone-cookbook/02sensors/code/GPS.js b/books/beaglebone-cookbook/02sensors/code/GPS.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/GPS.js rename to books/beaglebone-cookbook/02sensors/code/GPS.js diff --git a/beaglebone-cookbook/02sensors/code/analogIn.js b/books/beaglebone-cookbook/02sensors/code/analogIn.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/analogIn.js rename to books/beaglebone-cookbook/02sensors/code/analogIn.js diff --git a/beaglebone-cookbook/02sensors/code/analogIn.py b/books/beaglebone-cookbook/02sensors/code/analogIn.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/analogIn.py rename to books/beaglebone-cookbook/02sensors/code/analogIn.py diff --git a/beaglebone-cookbook/02sensors/code/audio.asoundrc b/books/beaglebone-cookbook/02sensors/code/audio.asoundrc similarity index 100% rename from beaglebone-cookbook/02sensors/code/audio.asoundrc rename to books/beaglebone-cookbook/02sensors/code/audio.asoundrc diff --git a/beaglebone-cookbook/02sensors/code/audio.js b/books/beaglebone-cookbook/02sensors/code/audio.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/audio.js rename to books/beaglebone-cookbook/02sensors/code/audio.js diff --git a/beaglebone-cookbook/02sensors/code/bone_eqep2b.dts b/books/beaglebone-cookbook/02sensors/code/bone_eqep2b.dts similarity index 100% rename from beaglebone-cookbook/02sensors/code/bone_eqep2b.dts rename to books/beaglebone-cookbook/02sensors/code/bone_eqep2b.dts diff --git a/beaglebone-cookbook/02sensors/code/encoder.js b/books/beaglebone-cookbook/02sensors/code/encoder.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/encoder.js rename to books/beaglebone-cookbook/02sensors/code/encoder.js diff --git a/beaglebone-cookbook/02sensors/code/gpiod/.gitignore b/books/beaglebone-cookbook/02sensors/code/gpiod/.gitignore similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/.gitignore rename to books/beaglebone-cookbook/02sensors/code/gpiod/.gitignore diff --git a/beaglebone-cookbook/02sensors/code/gpiod/Makefile b/books/beaglebone-cookbook/02sensors/code/gpiod/Makefile similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/Makefile rename to books/beaglebone-cookbook/02sensors/code/gpiod/Makefile diff --git a/beaglebone-cookbook/02sensors/code/gpiod/ReadMe.md b/books/beaglebone-cookbook/02sensors/code/gpiod/ReadMe.md similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/ReadMe.md rename to books/beaglebone-cookbook/02sensors/code/gpiod/ReadMe.md diff --git a/beaglebone-cookbook/02sensors/code/gpiod/aggregatorSetup.sh b/books/beaglebone-cookbook/02sensors/code/gpiod/aggregatorSetup.sh similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/aggregatorSetup.sh rename to books/beaglebone-cookbook/02sensors/code/gpiod/aggregatorSetup.sh diff --git a/beaglebone-cookbook/02sensors/code/gpiod/bulk_blink.py b/books/beaglebone-cookbook/02sensors/code/gpiod/bulk_blink.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/bulk_blink.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/bulk_blink.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/get.c b/books/beaglebone-cookbook/02sensors/code/gpiod/get.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/get.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/get.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/get.py b/books/beaglebone-cookbook/02sensors/code/gpiod/get.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/get.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/get.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/get.sh b/books/beaglebone-cookbook/02sensors/code/gpiod/get.sh similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/get.sh rename to books/beaglebone-cookbook/02sensors/code/gpiod/get.sh diff --git a/beaglebone-cookbook/02sensors/code/gpiod/getset.c b/books/beaglebone-cookbook/02sensors/code/gpiod/getset.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/getset.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/getset.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/getset.py b/books/beaglebone-cookbook/02sensors/code/gpiod/getset.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/getset.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/getset.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.c b/books/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.py b/books/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/getsetEvent.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggle1.c b/books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggle1.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggle1.py b/books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggle1.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggle1.sh b/books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.sh similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggle1.sh rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggle1.sh diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggle2.c b/books/beaglebone-cookbook/02sensors/code/gpiod/toggle2.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggle2.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggle2.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggle2.py b/books/beaglebone-cookbook/02sensors/code/gpiod/toggle2.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggle2.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggle2.py diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.c b/books/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.c similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggleLED.c rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.c diff --git a/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.py b/books/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/gpiod/toggleLED.py rename to books/beaglebone-cookbook/02sensors/code/gpiod/toggleLED.py diff --git a/beaglebone-cookbook/02sensors/code/hc-sr04-ultraSonic.js b/books/beaglebone-cookbook/02sensors/code/hc-sr04-ultraSonic.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/hc-sr04-ultraSonic.js rename to books/beaglebone-cookbook/02sensors/code/hc-sr04-ultraSonic.js diff --git a/beaglebone-cookbook/02sensors/code/i2c-scan.js b/books/beaglebone-cookbook/02sensors/code/i2c-scan.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/i2c-scan.js rename to books/beaglebone-cookbook/02sensors/code/i2c-scan.js diff --git a/beaglebone-cookbook/02sensors/code/i2c-test.js b/books/beaglebone-cookbook/02sensors/code/i2c-test.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/i2c-test.js rename to books/beaglebone-cookbook/02sensors/code/i2c-test.js diff --git a/beaglebone-cookbook/02sensors/code/i2cTemp.js b/books/beaglebone-cookbook/02sensors/code/i2cTemp.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/i2cTemp.js rename to books/beaglebone-cookbook/02sensors/code/i2cTemp.js diff --git a/beaglebone-cookbook/02sensors/code/i2cTemp.py b/books/beaglebone-cookbook/02sensors/code/i2cTemp.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/i2cTemp.py rename to books/beaglebone-cookbook/02sensors/code/i2cTemp.py diff --git a/beaglebone-cookbook/02sensors/code/i2ctmp101.py b/books/beaglebone-cookbook/02sensors/code/i2ctmp101.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/i2ctmp101.py rename to books/beaglebone-cookbook/02sensors/code/i2ctmp101.py diff --git a/beaglebone-cookbook/02sensors/code/pushbutton.js b/books/beaglebone-cookbook/02sensors/code/pushbutton.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/pushbutton.js rename to books/beaglebone-cookbook/02sensors/code/pushbutton.js diff --git a/beaglebone-cookbook/02sensors/code/pushbutton.py b/books/beaglebone-cookbook/02sensors/code/pushbutton.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/pushbutton.py rename to books/beaglebone-cookbook/02sensors/code/pushbutton.py diff --git a/beaglebone-cookbook/02sensors/code/pushbutton2.js b/books/beaglebone-cookbook/02sensors/code/pushbutton2.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/pushbutton2.js rename to books/beaglebone-cookbook/02sensors/code/pushbutton2.js diff --git a/beaglebone-cookbook/02sensors/code/pushbuttonPullup.js b/books/beaglebone-cookbook/02sensors/code/pushbuttonPullup.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/pushbuttonPullup.js rename to books/beaglebone-cookbook/02sensors/code/pushbuttonPullup.js diff --git a/beaglebone-cookbook/02sensors/code/pushbutton_digitalRead.js b/books/beaglebone-cookbook/02sensors/code/pushbutton_digitalRead.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/pushbutton_digitalRead.js rename to books/beaglebone-cookbook/02sensors/code/pushbutton_digitalRead.js diff --git a/beaglebone-cookbook/02sensors/code/rotaryEncoder.js b/books/beaglebone-cookbook/02sensors/code/rotaryEncoder.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/rotaryEncoder.js rename to books/beaglebone-cookbook/02sensors/code/rotaryEncoder.js diff --git a/beaglebone-cookbook/02sensors/code/rotaryEncoder.py b/books/beaglebone-cookbook/02sensors/code/rotaryEncoder.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/rotaryEncoder.py rename to books/beaglebone-cookbook/02sensors/code/rotaryEncoder.py diff --git a/beaglebone-cookbook/02sensors/code/sensorTag.js b/books/beaglebone-cookbook/02sensors/code/sensorTag.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/sensorTag.js rename to books/beaglebone-cookbook/02sensors/code/sensorTag.js diff --git a/beaglebone-cookbook/02sensors/code/stop.js b/books/beaglebone-cookbook/02sensors/code/stop.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/stop.js rename to books/beaglebone-cookbook/02sensors/code/stop.js diff --git a/beaglebone-cookbook/02sensors/code/testHC-SR04.js b/books/beaglebone-cookbook/02sensors/code/testHC-SR04.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/testHC-SR04.js rename to books/beaglebone-cookbook/02sensors/code/testHC-SR04.js diff --git a/beaglebone-cookbook/02sensors/code/ultrasonicRange.js b/books/beaglebone-cookbook/02sensors/code/ultrasonicRange.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/ultrasonicRange.js rename to books/beaglebone-cookbook/02sensors/code/ultrasonicRange.js diff --git a/beaglebone-cookbook/02sensors/code/ultrasonicRange.py b/books/beaglebone-cookbook/02sensors/code/ultrasonicRange.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/ultrasonicRange.py rename to books/beaglebone-cookbook/02sensors/code/ultrasonicRange.py diff --git a/beaglebone-cookbook/02sensors/code/w1.js b/books/beaglebone-cookbook/02sensors/code/w1.js similarity index 100% rename from beaglebone-cookbook/02sensors/code/w1.js rename to books/beaglebone-cookbook/02sensors/code/w1.js diff --git a/beaglebone-cookbook/02sensors/code/w1.py b/books/beaglebone-cookbook/02sensors/code/w1.py similarity index 100% rename from beaglebone-cookbook/02sensors/code/w1.py rename to books/beaglebone-cookbook/02sensors/code/w1.py diff --git a/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.fzpz b/books/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.fzpz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.fzpz rename to books/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.fzpz diff --git a/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.txt b/books/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.txt similarity index 100% rename from beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.txt rename to books/beaglebone-cookbook/02sensors/figures/Adafruit Xbee Adapter v1.1.txt diff --git a/beaglebone-cookbook/02sensors/figures/GPS.fzz b/books/beaglebone-cookbook/02sensors/figures/GPS.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/GPS.fzz rename to books/beaglebone-cookbook/02sensors/figures/GPS.fzz diff --git a/beaglebone-cookbook/02sensors/figures/GPS_bb.png b/books/beaglebone-cookbook/02sensors/figures/GPS_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/GPS_bb.png rename to books/beaglebone-cookbook/02sensors/figures/GPS_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/P8P9.fzz b/books/beaglebone-cookbook/02sensors/figures/P8P9.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/P8P9.fzz rename to books/beaglebone-cookbook/02sensors/figures/P8P9.fzz diff --git a/beaglebone-cookbook/02sensors/figures/P8P9_bb.png b/books/beaglebone-cookbook/02sensors/figures/P8P9_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/P8P9_bb.png rename to books/beaglebone-cookbook/02sensors/figures/P8P9_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/analogIn.fzz b/books/beaglebone-cookbook/02sensors/figures/analogIn.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/analogIn.fzz rename to books/beaglebone-cookbook/02sensors/figures/analogIn.fzz diff --git a/beaglebone-cookbook/02sensors/figures/analogIn_bb.png b/books/beaglebone-cookbook/02sensors/figures/analogIn_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/analogIn_bb.png rename to books/beaglebone-cookbook/02sensors/figures/analogIn_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/audioDongle.jpg b/books/beaglebone-cookbook/02sensors/figures/audioDongle.jpg similarity index 100% rename from beaglebone-cookbook/02sensors/figures/audioDongle.jpg rename to books/beaglebone-cookbook/02sensors/figures/audioDongle.jpg diff --git a/beaglebone-cookbook/02sensors/figures/audioDongle.txt b/books/beaglebone-cookbook/02sensors/figures/audioDongle.txt similarity index 100% rename from beaglebone-cookbook/02sensors/figures/audioDongle.txt rename to books/beaglebone-cookbook/02sensors/figures/audioDongle.txt diff --git a/beaglebone-cookbook/02sensors/figures/black_hardware_details.png b/books/beaglebone-cookbook/02sensors/figures/black_hardware_details.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/black_hardware_details.png rename to books/beaglebone-cookbook/02sensors/figures/black_hardware_details.png diff --git a/beaglebone-cookbook/02sensors/figures/cape-headers-analog.png b/books/beaglebone-cookbook/02sensors/figures/cape-headers-analog.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/cape-headers-analog.png rename to books/beaglebone-cookbook/02sensors/figures/cape-headers-analog.png diff --git a/beaglebone-cookbook/02sensors/figures/cape-headers-i2c.png b/books/beaglebone-cookbook/02sensors/figures/cape-headers-i2c.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/cape-headers-i2c.png rename to books/beaglebone-cookbook/02sensors/figures/cape-headers-i2c.png diff --git a/beaglebone-cookbook/02sensors/figures/cape-headers-serial.png b/books/beaglebone-cookbook/02sensors/figures/cape-headers-serial.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/cape-headers-serial.png rename to books/beaglebone-cookbook/02sensors/figures/cape-headers-serial.png diff --git a/beaglebone-cookbook/02sensors/figures/cape-headers.png b/books/beaglebone-cookbook/02sensors/figures/cape-headers.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/cape-headers.png rename to books/beaglebone-cookbook/02sensors/figures/cape-headers.png diff --git a/beaglebone-cookbook/02sensors/figures/flexResistor.fzz b/books/beaglebone-cookbook/02sensors/figures/flexResistor.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/flexResistor.fzz rename to books/beaglebone-cookbook/02sensors/figures/flexResistor.fzz diff --git a/beaglebone-cookbook/02sensors/figures/flexResistor_bb.png b/books/beaglebone-cookbook/02sensors/figures/flexResistor_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/flexResistor_bb.png rename to books/beaglebone-cookbook/02sensors/figures/flexResistor_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic.fzz b/books/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic.fzz rename to books/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic.fzz diff --git a/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic_bb.png b/books/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic_bb.png rename to books/beaglebone-cookbook/02sensors/figures/hc-sr04-ultraSonic_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/hc-sr04.jpg b/books/beaglebone-cookbook/02sensors/figures/hc-sr04.jpg similarity index 100% rename from beaglebone-cookbook/02sensors/figures/hc-sr04.jpg rename to books/beaglebone-cookbook/02sensors/figures/hc-sr04.jpg diff --git a/beaglebone-cookbook/02sensors/figures/i2cTemp.fzz b/books/beaglebone-cookbook/02sensors/figures/i2cTemp.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/i2cTemp.fzz rename to books/beaglebone-cookbook/02sensors/figures/i2cTemp.fzz diff --git a/beaglebone-cookbook/02sensors/figures/i2cTemp.js.old b/books/beaglebone-cookbook/02sensors/figures/i2cTemp.js.old similarity index 100% rename from beaglebone-cookbook/02sensors/figures/i2cTemp.js.old rename to books/beaglebone-cookbook/02sensors/figures/i2cTemp.js.old diff --git a/beaglebone-cookbook/02sensors/figures/i2cTemp_bb.png b/books/beaglebone-cookbook/02sensors/figures/i2cTemp_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/i2cTemp_bb.png rename to books/beaglebone-cookbook/02sensors/figures/i2cTemp_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/onewire.fzz b/books/beaglebone-cookbook/02sensors/figures/onewire.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/onewire.fzz rename to books/beaglebone-cookbook/02sensors/figures/onewire.fzz diff --git a/beaglebone-cookbook/02sensors/figures/onewire_bb.png b/books/beaglebone-cookbook/02sensors/figures/onewire_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/onewire_bb.png rename to books/beaglebone-cookbook/02sensors/figures/onewire_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/onewire_setup.sh b/books/beaglebone-cookbook/02sensors/figures/onewire_setup.sh similarity index 100% rename from beaglebone-cookbook/02sensors/figures/onewire_setup.sh rename to books/beaglebone-cookbook/02sensors/figures/onewire_setup.sh diff --git a/beaglebone-cookbook/02sensors/figures/pot.fzz b/books/beaglebone-cookbook/02sensors/figures/pot.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pot.fzz rename to books/beaglebone-cookbook/02sensors/figures/pot.fzz diff --git a/beaglebone-cookbook/02sensors/figures/pot_schem.png b/books/beaglebone-cookbook/02sensors/figures/pot_schem.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pot_schem.png rename to books/beaglebone-cookbook/02sensors/figures/pot_schem.png diff --git a/beaglebone-cookbook/02sensors/figures/pushbutton.fzz b/books/beaglebone-cookbook/02sensors/figures/pushbutton.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pushbutton.fzz rename to books/beaglebone-cookbook/02sensors/figures/pushbutton.fzz diff --git a/beaglebone-cookbook/02sensors/figures/pushbuttonPullup.fzz b/books/beaglebone-cookbook/02sensors/figures/pushbuttonPullup.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pushbuttonPullup.fzz rename to books/beaglebone-cookbook/02sensors/figures/pushbuttonPullup.fzz diff --git a/beaglebone-cookbook/02sensors/figures/pushbuttonPullup_bb.png b/books/beaglebone-cookbook/02sensors/figures/pushbuttonPullup_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pushbuttonPullup_bb.png rename to books/beaglebone-cookbook/02sensors/figures/pushbuttonPullup_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/pushbutton_bb.png b/books/beaglebone-cookbook/02sensors/figures/pushbutton_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/pushbutton_bb.png rename to books/beaglebone-cookbook/02sensors/figures/pushbutton_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/rotaryEncoder.fzz b/books/beaglebone-cookbook/02sensors/figures/rotaryEncoder.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/rotaryEncoder.fzz rename to books/beaglebone-cookbook/02sensors/figures/rotaryEncoder.fzz diff --git a/beaglebone-cookbook/02sensors/figures/rotaryEncoder.js.orig b/books/beaglebone-cookbook/02sensors/figures/rotaryEncoder.js.orig similarity index 100% rename from beaglebone-cookbook/02sensors/figures/rotaryEncoder.js.orig rename to books/beaglebone-cookbook/02sensors/figures/rotaryEncoder.js.orig diff --git a/beaglebone-cookbook/02sensors/figures/rotaryEncoder_bb.png b/books/beaglebone-cookbook/02sensors/figures/rotaryEncoder_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/rotaryEncoder_bb.png rename to books/beaglebone-cookbook/02sensors/figures/rotaryEncoder_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/sensorTag.jpg b/books/beaglebone-cookbook/02sensors/figures/sensorTag.jpg similarity index 100% rename from beaglebone-cookbook/02sensors/figures/sensorTag.jpg rename to books/beaglebone-cookbook/02sensors/figures/sensorTag.jpg diff --git a/beaglebone-cookbook/02sensors/figures/testSerial-2014-04-11.zip b/books/beaglebone-cookbook/02sensors/figures/testSerial-2014-04-11.zip similarity index 100% rename from beaglebone-cookbook/02sensors/figures/testSerial-2014-04-11.zip rename to books/beaglebone-cookbook/02sensors/figures/testSerial-2014-04-11.zip diff --git a/beaglebone-cookbook/02sensors/figures/ultrasonicRange.fzz b/books/beaglebone-cookbook/02sensors/figures/ultrasonicRange.fzz similarity index 100% rename from beaglebone-cookbook/02sensors/figures/ultrasonicRange.fzz rename to books/beaglebone-cookbook/02sensors/figures/ultrasonicRange.fzz diff --git a/beaglebone-cookbook/02sensors/figures/ultrasonicRange_bb.png b/books/beaglebone-cookbook/02sensors/figures/ultrasonicRange_bb.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/ultrasonicRange_bb.png rename to books/beaglebone-cookbook/02sensors/figures/ultrasonicRange_bb.png diff --git a/beaglebone-cookbook/02sensors/figures/vsc-bash-tab.png b/books/beaglebone-cookbook/02sensors/figures/vsc-bash-tab.png similarity index 100% rename from beaglebone-cookbook/02sensors/figures/vsc-bash-tab.png rename to books/beaglebone-cookbook/02sensors/figures/vsc-bash-tab.png diff --git a/beaglebone-cookbook/02sensors/sensors.rst b/books/beaglebone-cookbook/02sensors/sensors.rst similarity index 100% rename from beaglebone-cookbook/02sensors/sensors.rst rename to books/beaglebone-cookbook/02sensors/sensors.rst diff --git a/beaglebone-cookbook/03displays/code/externLED.js b/books/beaglebone-cookbook/03displays/code/externLED.js similarity index 100% rename from beaglebone-cookbook/03displays/code/externLED.js rename to books/beaglebone-cookbook/03displays/code/externLED.js diff --git a/beaglebone-cookbook/03displays/code/externLED.py b/books/beaglebone-cookbook/03displays/code/externLED.py similarity index 100% rename from beaglebone-cookbook/03displays/code/externLED.py rename to books/beaglebone-cookbook/03displays/code/externLED.py diff --git a/beaglebone-cookbook/03displays/code/fadeLED.js b/books/beaglebone-cookbook/03displays/code/fadeLED.js similarity index 100% rename from beaglebone-cookbook/03displays/code/fadeLED.js rename to books/beaglebone-cookbook/03displays/code/fadeLED.js diff --git a/beaglebone-cookbook/03displays/code/fadeLED.py b/books/beaglebone-cookbook/03displays/code/fadeLED.py similarity index 100% rename from beaglebone-cookbook/03displays/code/fadeLED.py rename to books/beaglebone-cookbook/03displays/code/fadeLED.py diff --git a/beaglebone-cookbook/03displays/code/internLED.js b/books/beaglebone-cookbook/03displays/code/internLED.js similarity index 100% rename from beaglebone-cookbook/03displays/code/internLED.js rename to books/beaglebone-cookbook/03displays/code/internLED.js diff --git a/beaglebone-cookbook/03displays/code/internLED.py b/books/beaglebone-cookbook/03displays/code/internLED.py similarity index 100% rename from beaglebone-cookbook/03displays/code/internLED.py rename to books/beaglebone-cookbook/03displays/code/internLED.py diff --git a/beaglebone-cookbook/03displays/code/matrixLEDi2c.js b/books/beaglebone-cookbook/03displays/code/matrixLEDi2c.js similarity index 100% rename from beaglebone-cookbook/03displays/code/matrixLEDi2c.js rename to books/beaglebone-cookbook/03displays/code/matrixLEDi2c.js diff --git a/beaglebone-cookbook/03displays/code/matrixLEDi2c.py b/books/beaglebone-cookbook/03displays/code/matrixLEDi2c.py similarity index 100% rename from beaglebone-cookbook/03displays/code/matrixLEDi2c.py rename to books/beaglebone-cookbook/03displays/code/matrixLEDi2c.py diff --git a/beaglebone-cookbook/03displays/code/neoPixel.sh b/books/beaglebone-cookbook/03displays/code/neoPixel.sh similarity index 100% rename from beaglebone-cookbook/03displays/code/neoPixel.sh rename to books/beaglebone-cookbook/03displays/code/neoPixel.sh diff --git a/beaglebone-cookbook/03displays/code/nokia5110.js b/books/beaglebone-cookbook/03displays/code/nokia5110.js similarity index 100% rename from beaglebone-cookbook/03displays/code/nokia5110.js rename to books/beaglebone-cookbook/03displays/code/nokia5110.js diff --git a/beaglebone-cookbook/03displays/code/nokia5110Test.js b/books/beaglebone-cookbook/03displays/code/nokia5110Test.js similarity index 100% rename from beaglebone-cookbook/03displays/code/nokia5110Test.js rename to books/beaglebone-cookbook/03displays/code/nokia5110Test.js diff --git a/beaglebone-cookbook/03displays/code/pwmTest.sh b/books/beaglebone-cookbook/03displays/code/pwmTest.sh similarity index 100% rename from beaglebone-cookbook/03displays/code/pwmTest.sh rename to books/beaglebone-cookbook/03displays/code/pwmTest.sh diff --git a/beaglebone-cookbook/03displays/code/speak.js b/books/beaglebone-cookbook/03displays/code/speak.js similarity index 100% rename from beaglebone-cookbook/03displays/code/speak.js rename to books/beaglebone-cookbook/03displays/code/speak.js diff --git a/beaglebone-cookbook/03displays/displays.rst b/books/beaglebone-cookbook/03displays/displays.rst similarity index 100% rename from beaglebone-cookbook/03displays/displays.rst rename to books/beaglebone-cookbook/03displays/displays.rst diff --git a/beaglebone-cookbook/03displays/figures/LEDstring.fzz b/books/beaglebone-cookbook/03displays/figures/LEDstring.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/LEDstring.fzz rename to books/beaglebone-cookbook/03displays/figures/LEDstring.fzz diff --git a/beaglebone-cookbook/03displays/figures/LEDstring_bb.png b/books/beaglebone-cookbook/03displays/figures/LEDstring_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/LEDstring_bb.png rename to books/beaglebone-cookbook/03displays/figures/LEDstring_bb.png diff --git a/beaglebone-cookbook/03displays/figures/P8P9.fzz b/books/beaglebone-cookbook/03displays/figures/P8P9.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/P8P9.fzz rename to books/beaglebone-cookbook/03displays/figures/P8P9.fzz diff --git a/beaglebone-cookbook/03displays/figures/P8P9_bb.png b/books/beaglebone-cookbook/03displays/figures/P8P9_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/P8P9_bb.png rename to books/beaglebone-cookbook/03displays/figures/P8P9_bb.png diff --git a/beaglebone-cookbook/03displays/figures/cape-headers-pwm.png b/books/beaglebone-cookbook/03displays/figures/cape-headers-pwm.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/cape-headers-pwm.png rename to books/beaglebone-cookbook/03displays/figures/cape-headers-pwm.png diff --git a/beaglebone-cookbook/03displays/figures/externLED.fzz b/books/beaglebone-cookbook/03displays/figures/externLED.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/externLED.fzz rename to books/beaglebone-cookbook/03displays/figures/externLED.fzz diff --git a/beaglebone-cookbook/03displays/figures/externLED_bb.png b/books/beaglebone-cookbook/03displays/figures/externLED_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/externLED_bb.png rename to books/beaglebone-cookbook/03displays/figures/externLED_bb.png diff --git a/beaglebone-cookbook/03displays/figures/i2cMatrix.fzz b/books/beaglebone-cookbook/03displays/figures/i2cMatrix.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/i2cMatrix.fzz rename to books/beaglebone-cookbook/03displays/figures/i2cMatrix.fzz diff --git a/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans.fzz b/books/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans.fzz rename to books/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans.fzz diff --git a/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans_bb.png b/books/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans_bb.png rename to books/beaglebone-cookbook/03displays/figures/i2cMatrixLevelTrans_bb.png diff --git a/beaglebone-cookbook/03displays/figures/i2cMatrixOLD.fzz b/books/beaglebone-cookbook/03displays/figures/i2cMatrixOLD.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/i2cMatrixOLD.fzz rename to books/beaglebone-cookbook/03displays/figures/i2cMatrixOLD.fzz diff --git a/beaglebone-cookbook/03displays/figures/i2cMatrix_bb.png b/books/beaglebone-cookbook/03displays/figures/i2cMatrix_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/i2cMatrix_bb.png rename to books/beaglebone-cookbook/03displays/figures/i2cMatrix_bb.png diff --git a/beaglebone-cookbook/03displays/figures/internLED.png b/books/beaglebone-cookbook/03displays/figures/internLED.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/internLED.png rename to books/beaglebone-cookbook/03displays/figures/internLED.png diff --git a/beaglebone-cookbook/03displays/figures/matrix16x24.fzz b/books/beaglebone-cookbook/03displays/figures/matrix16x24.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/matrix16x24.fzz rename to books/beaglebone-cookbook/03displays/figures/matrix16x24.fzz diff --git a/beaglebone-cookbook/03displays/figures/matrix16x24_bb.png b/books/beaglebone-cookbook/03displays/figures/matrix16x24_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/matrix16x24_bb.png rename to books/beaglebone-cookbook/03displays/figures/matrix16x24_bb.png diff --git a/beaglebone-cookbook/03displays/figures/neo.fzz b/books/beaglebone-cookbook/03displays/figures/neo.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/neo.fzz rename to books/beaglebone-cookbook/03displays/figures/neo.fzz diff --git a/beaglebone-cookbook/03displays/figures/neoPixel.fzz b/books/beaglebone-cookbook/03displays/figures/neoPixel.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/neoPixel.fzz rename to books/beaglebone-cookbook/03displays/figures/neoPixel.fzz diff --git a/beaglebone-cookbook/03displays/figures/neoPixelMatrix.fzz b/books/beaglebone-cookbook/03displays/figures/neoPixelMatrix.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/neoPixelMatrix.fzz rename to books/beaglebone-cookbook/03displays/figures/neoPixelMatrix.fzz diff --git a/beaglebone-cookbook/03displays/figures/neoPixelMatrix_bb.png b/books/beaglebone-cookbook/03displays/figures/neoPixelMatrix_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/neoPixelMatrix_bb.png rename to books/beaglebone-cookbook/03displays/figures/neoPixelMatrix_bb.png diff --git a/beaglebone-cookbook/03displays/figures/neoPixel_bb.png b/books/beaglebone-cookbook/03displays/figures/neoPixel_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/neoPixel_bb.png rename to books/beaglebone-cookbook/03displays/figures/neoPixel_bb.png diff --git a/beaglebone-cookbook/03displays/figures/neo_bb.png b/books/beaglebone-cookbook/03displays/figures/neo_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/neo_bb.png rename to books/beaglebone-cookbook/03displays/figures/neo_bb.png diff --git a/beaglebone-cookbook/03displays/figures/nokia5110.fzz b/books/beaglebone-cookbook/03displays/figures/nokia5110.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/nokia5110.fzz rename to books/beaglebone-cookbook/03displays/figures/nokia5110.fzz diff --git a/beaglebone-cookbook/03displays/figures/nokia5110_bb.png b/books/beaglebone-cookbook/03displays/figures/nokia5110_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/nokia5110_bb.png rename to books/beaglebone-cookbook/03displays/figures/nokia5110_bb.png diff --git a/beaglebone-cookbook/03displays/figures/old/USERLEDs.png b/books/beaglebone-cookbook/03displays/figures/old/USERLEDs.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/old/USERLEDs.png rename to books/beaglebone-cookbook/03displays/figures/old/USERLEDs.png diff --git a/beaglebone-cookbook/03displays/figures/old/externalLED.png b/books/beaglebone-cookbook/03displays/figures/old/externalLED.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/old/externalLED.png rename to books/beaglebone-cookbook/03displays/figures/old/externalLED.png diff --git a/beaglebone-cookbook/03displays/figures/old/p8p9headers.png b/books/beaglebone-cookbook/03displays/figures/old/p8p9headers.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/old/p8p9headers.png rename to books/beaglebone-cookbook/03displays/figures/old/p8p9headers.png diff --git a/beaglebone-cookbook/03displays/figures/powerSwitch.fzz b/books/beaglebone-cookbook/03displays/figures/powerSwitch.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/powerSwitch.fzz rename to books/beaglebone-cookbook/03displays/figures/powerSwitch.fzz diff --git a/beaglebone-cookbook/03displays/figures/powerSwitch_bb.png b/books/beaglebone-cookbook/03displays/figures/powerSwitch_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/powerSwitch_bb.png rename to books/beaglebone-cookbook/03displays/figures/powerSwitch_bb.png diff --git a/beaglebone-cookbook/03displays/figures/ws2801.fzz b/books/beaglebone-cookbook/03displays/figures/ws2801.fzz similarity index 100% rename from beaglebone-cookbook/03displays/figures/ws2801.fzz rename to books/beaglebone-cookbook/03displays/figures/ws2801.fzz diff --git a/beaglebone-cookbook/03displays/figures/ws2801_bb.png b/books/beaglebone-cookbook/03displays/figures/ws2801_bb.png similarity index 100% rename from beaglebone-cookbook/03displays/figures/ws2801_bb.png rename to books/beaglebone-cookbook/03displays/figures/ws2801_bb.png diff --git a/beaglebone-cookbook/04motors/code/bipolarStepperMotor.py b/books/beaglebone-cookbook/04motors/code/bipolarStepperMotor.py similarity index 100% rename from beaglebone-cookbook/04motors/code/bipolarStepperMotor.py rename to books/beaglebone-cookbook/04motors/code/bipolarStepperMotor.py diff --git a/beaglebone-cookbook/04motors/code/dcMotor.js b/books/beaglebone-cookbook/04motors/code/dcMotor.js similarity index 100% rename from beaglebone-cookbook/04motors/code/dcMotor.js rename to books/beaglebone-cookbook/04motors/code/dcMotor.js diff --git a/beaglebone-cookbook/04motors/code/dcMotor.py b/books/beaglebone-cookbook/04motors/code/dcMotor.py similarity index 100% rename from beaglebone-cookbook/04motors/code/dcMotor.py rename to books/beaglebone-cookbook/04motors/code/dcMotor.py diff --git a/beaglebone-cookbook/04motors/code/h-bridgeMotor.js b/books/beaglebone-cookbook/04motors/code/h-bridgeMotor.js similarity index 100% rename from beaglebone-cookbook/04motors/code/h-bridgeMotor.js rename to books/beaglebone-cookbook/04motors/code/h-bridgeMotor.js diff --git a/beaglebone-cookbook/04motors/code/ring.js b/books/beaglebone-cookbook/04motors/code/ring.js similarity index 100% rename from beaglebone-cookbook/04motors/code/ring.js rename to books/beaglebone-cookbook/04motors/code/ring.js diff --git a/beaglebone-cookbook/04motors/code/servoBird.js b/books/beaglebone-cookbook/04motors/code/servoBird.js similarity index 100% rename from beaglebone-cookbook/04motors/code/servoBird.js rename to books/beaglebone-cookbook/04motors/code/servoBird.js diff --git a/beaglebone-cookbook/04motors/code/servoEncoder.py b/books/beaglebone-cookbook/04motors/code/servoEncoder.py similarity index 100% rename from beaglebone-cookbook/04motors/code/servoEncoder.py rename to books/beaglebone-cookbook/04motors/code/servoEncoder.py diff --git a/beaglebone-cookbook/04motors/code/servoMotor.js b/books/beaglebone-cookbook/04motors/code/servoMotor.js similarity index 100% rename from beaglebone-cookbook/04motors/code/servoMotor.js rename to books/beaglebone-cookbook/04motors/code/servoMotor.js diff --git a/beaglebone-cookbook/04motors/code/servoMotor.py b/books/beaglebone-cookbook/04motors/code/servoMotor.py similarity index 100% rename from beaglebone-cookbook/04motors/code/servoMotor.py rename to books/beaglebone-cookbook/04motors/code/servoMotor.py diff --git a/beaglebone-cookbook/04motors/code/servoSense.js b/books/beaglebone-cookbook/04motors/code/servoSense.js similarity index 100% rename from beaglebone-cookbook/04motors/code/servoSense.js rename to books/beaglebone-cookbook/04motors/code/servoSense.js diff --git a/beaglebone-cookbook/04motors/code/stop.js b/books/beaglebone-cookbook/04motors/code/stop.js similarity index 100% rename from beaglebone-cookbook/04motors/code/stop.js rename to books/beaglebone-cookbook/04motors/code/stop.js diff --git a/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js b/books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js similarity index 100% rename from beaglebone-cookbook/04motors/code/unipolarStepperMotor.js rename to books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js diff --git a/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js.diff b/books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js.diff similarity index 100% rename from beaglebone-cookbook/04motors/code/unipolarStepperMotor.js.diff rename to books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.js.diff diff --git a/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py b/books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py similarity index 100% rename from beaglebone-cookbook/04motors/code/unipolarStepperMotor.py rename to books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py diff --git a/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py.diff b/books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py.diff similarity index 100% rename from beaglebone-cookbook/04motors/code/unipolarStepperMotor.py.diff rename to books/beaglebone-cookbook/04motors/code/unipolarStepperMotor.py.diff diff --git a/beaglebone-cookbook/04motors/figures/H-bridge.ms13 b/books/beaglebone-cookbook/04motors/figures/H-bridge.ms13 similarity index 100% rename from beaglebone-cookbook/04motors/figures/H-bridge.ms13 rename to books/beaglebone-cookbook/04motors/figures/H-bridge.ms13 diff --git a/beaglebone-cookbook/04motors/figures/H-bridge.png b/books/beaglebone-cookbook/04motors/figures/H-bridge.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/H-bridge.png rename to books/beaglebone-cookbook/04motors/figures/H-bridge.png diff --git a/beaglebone-cookbook/04motors/figures/bipolarStepperMotor.fzz b/books/beaglebone-cookbook/04motors/figures/bipolarStepperMotor.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/bipolarStepperMotor.fzz rename to books/beaglebone-cookbook/04motors/figures/bipolarStepperMotor.fzz diff --git a/beaglebone-cookbook/04motors/figures/bipolarStepperMotor_bb.png b/books/beaglebone-cookbook/04motors/figures/bipolarStepperMotor_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/bipolarStepperMotor_bb.png rename to books/beaglebone-cookbook/04motors/figures/bipolarStepperMotor_bb.png diff --git a/beaglebone-cookbook/04motors/figures/dcMotor.fzz b/books/beaglebone-cookbook/04motors/figures/dcMotor.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/dcMotor.fzz rename to books/beaglebone-cookbook/04motors/figures/dcMotor.fzz diff --git a/beaglebone-cookbook/04motors/figures/dcMotor_bb.png b/books/beaglebone-cookbook/04motors/figures/dcMotor_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/dcMotor_bb.png rename to books/beaglebone-cookbook/04motors/figures/dcMotor_bb.png diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotor.fzz b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotor.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotor.fzz rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotor.fzz diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V.fzz b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotor5V.fzz rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V.fzz diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V_bb.png b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotor5V_bb.png rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotor5V_bb.png diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal.fzz b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal.fzz rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal.fzz diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal_bb.png b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal_bb.png rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotorExternal_bb.png diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotorOLD.fzz b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotorOLD.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotorOLD.fzz rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotorOLD.fzz diff --git a/beaglebone-cookbook/04motors/figures/h-bridgeMotor_bb.png b/books/beaglebone-cookbook/04motors/figures/h-bridgeMotor_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/h-bridgeMotor_bb.png rename to books/beaglebone-cookbook/04motors/figures/h-bridgeMotor_bb.png diff --git a/beaglebone-cookbook/04motors/figures/servoMotor.fzz b/books/beaglebone-cookbook/04motors/figures/servoMotor.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/servoMotor.fzz rename to books/beaglebone-cookbook/04motors/figures/servoMotor.fzz diff --git a/beaglebone-cookbook/04motors/figures/servoMotor5V.fzz b/books/beaglebone-cookbook/04motors/figures/servoMotor5V.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/servoMotor5V.fzz rename to books/beaglebone-cookbook/04motors/figures/servoMotor5V.fzz diff --git a/beaglebone-cookbook/04motors/figures/servoMotor5V_bb.png b/books/beaglebone-cookbook/04motors/figures/servoMotor5V_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/servoMotor5V_bb.png rename to books/beaglebone-cookbook/04motors/figures/servoMotor5V_bb.png diff --git a/beaglebone-cookbook/04motors/figures/servoMotor_bb.png b/books/beaglebone-cookbook/04motors/figures/servoMotor_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/servoMotor_bb.png rename to books/beaglebone-cookbook/04motors/figures/servoMotor_bb.png diff --git a/beaglebone-cookbook/04motors/figures/stepExternalSupply.fzz b/books/beaglebone-cookbook/04motors/figures/stepExternalSupply.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/stepExternalSupply.fzz rename to books/beaglebone-cookbook/04motors/figures/stepExternalSupply.fzz diff --git a/beaglebone-cookbook/04motors/figures/stepExternalSupply_bb.png b/books/beaglebone-cookbook/04motors/figures/stepExternalSupply_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/stepExternalSupply_bb.png rename to books/beaglebone-cookbook/04motors/figures/stepExternalSupply_bb.png diff --git a/beaglebone-cookbook/04motors/figures/unipolarStepperMotor.fzz b/books/beaglebone-cookbook/04motors/figures/unipolarStepperMotor.fzz similarity index 100% rename from beaglebone-cookbook/04motors/figures/unipolarStepperMotor.fzz rename to books/beaglebone-cookbook/04motors/figures/unipolarStepperMotor.fzz diff --git a/beaglebone-cookbook/04motors/figures/unipolarStepperMotor_bb.png b/books/beaglebone-cookbook/04motors/figures/unipolarStepperMotor_bb.png similarity index 100% rename from beaglebone-cookbook/04motors/figures/unipolarStepperMotor_bb.png rename to books/beaglebone-cookbook/04motors/figures/unipolarStepperMotor_bb.png diff --git a/beaglebone-cookbook/04motors/motors.rst b/books/beaglebone-cookbook/04motors/motors.rst similarity index 100% rename from beaglebone-cookbook/04motors/motors.rst rename to books/beaglebone-cookbook/04motors/motors.rst diff --git a/beaglebone-cookbook/05tips/code/blinkLED.c b/books/beaglebone-cookbook/05tips/code/blinkLED.c similarity index 100% rename from beaglebone-cookbook/05tips/code/blinkLED.c rename to books/beaglebone-cookbook/05tips/code/blinkLED.c diff --git a/beaglebone-cookbook/05tips/code/blinkLED.py b/books/beaglebone-cookbook/05tips/code/blinkLED.py similarity index 100% rename from beaglebone-cookbook/05tips/code/blinkLED.py rename to books/beaglebone-cookbook/05tips/code/blinkLED.py diff --git a/beaglebone-cookbook/05tips/code/ipMasquerade.sh b/books/beaglebone-cookbook/05tips/code/ipMasquerade.sh similarity index 100% rename from beaglebone-cookbook/05tips/code/ipMasquerade.sh rename to books/beaglebone-cookbook/05tips/code/ipMasquerade.sh diff --git a/beaglebone-cookbook/05tips/code/setDNS.sh b/books/beaglebone-cookbook/05tips/code/setDNS.sh similarity index 100% rename from beaglebone-cookbook/05tips/code/setDNS.sh rename to books/beaglebone-cookbook/05tips/code/setDNS.sh diff --git a/beaglebone-cookbook/05tips/figures/FTDIPins.png b/books/beaglebone-cookbook/05tips/figures/FTDIPins.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/FTDIPins.png rename to books/beaglebone-cookbook/05tips/figures/FTDIPins.png diff --git a/beaglebone-cookbook/05tips/figures/FTDIcable.jpg b/books/beaglebone-cookbook/05tips/figures/FTDIcable.jpg similarity index 100% rename from beaglebone-cookbook/05tips/figures/FTDIcable.jpg rename to books/beaglebone-cookbook/05tips/figures/FTDIcable.jpg diff --git a/beaglebone-cookbook/05tips/figures/FTDIconnector.jpg b/books/beaglebone-cookbook/05tips/figures/FTDIconnector.jpg similarity index 100% rename from beaglebone-cookbook/05tips/figures/FTDIconnector.jpg rename to books/beaglebone-cookbook/05tips/figures/FTDIconnector.jpg diff --git a/beaglebone-cookbook/05tips/figures/cape-headers-digital.png b/books/beaglebone-cookbook/05tips/figures/cape-headers-digital.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/cape-headers-digital.png rename to books/beaglebone-cookbook/05tips/figures/cape-headers-digital.png diff --git a/beaglebone-cookbook/05tips/figures/gedit.png b/books/beaglebone-cookbook/05tips/figures/gedit.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/gedit.png rename to books/beaglebone-cookbook/05tips/figures/gedit.png diff --git a/beaglebone-cookbook/05tips/figures/hdmiConverter.jpg b/books/beaglebone-cookbook/05tips/figures/hdmiConverter.jpg similarity index 100% rename from beaglebone-cookbook/05tips/figures/hdmiConverter.jpg rename to books/beaglebone-cookbook/05tips/figures/hdmiConverter.jpg diff --git a/beaglebone-cookbook/05tips/figures/internLED.png b/books/beaglebone-cookbook/05tips/figures/internLED.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/internLED.png rename to books/beaglebone-cookbook/05tips/figures/internLED.png diff --git a/beaglebone-cookbook/05tips/figures/latest-images.png b/books/beaglebone-cookbook/05tips/figures/latest-images.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/latest-images.png rename to books/beaglebone-cookbook/05tips/figures/latest-images.png diff --git a/beaglebone-cookbook/05tips/figures/leafpad.png b/books/beaglebone-cookbook/05tips/figures/leafpad.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/leafpad.png rename to books/beaglebone-cookbook/05tips/figures/leafpad.png diff --git a/beaglebone-cookbook/05tips/figures/nano.png b/books/beaglebone-cookbook/05tips/figures/nano.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/nano.png rename to books/beaglebone-cookbook/05tips/figures/nano.png diff --git a/beaglebone-cookbook/05tips/figures/network.png b/books/beaglebone-cookbook/05tips/figures/network.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/network.png rename to books/beaglebone-cookbook/05tips/figures/network.png diff --git a/beaglebone-cookbook/05tips/figures/npm.png b/books/beaglebone-cookbook/05tips/figures/npm.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/npm.png rename to books/beaglebone-cookbook/05tips/figures/npm.png diff --git a/beaglebone-cookbook/05tips/figures/vi.png b/books/beaglebone-cookbook/05tips/figures/vi.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/vi.png rename to books/beaglebone-cookbook/05tips/figures/vi.png diff --git a/beaglebone-cookbook/05tips/figures/vnc1.png b/books/beaglebone-cookbook/05tips/figures/vnc1.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/vnc1.png rename to books/beaglebone-cookbook/05tips/figures/vnc1.png diff --git a/beaglebone-cookbook/05tips/figures/vnc2.png b/books/beaglebone-cookbook/05tips/figures/vnc2.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/vnc2.png rename to books/beaglebone-cookbook/05tips/figures/vnc2.png diff --git a/beaglebone-cookbook/05tips/figures/vnc3.png b/books/beaglebone-cookbook/05tips/figures/vnc3.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/vnc3.png rename to books/beaglebone-cookbook/05tips/figures/vnc3.png diff --git a/beaglebone-cookbook/05tips/figures/wicd.png b/books/beaglebone-cookbook/05tips/figures/wicd.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicd.png rename to books/beaglebone-cookbook/05tips/figures/wicd.png diff --git a/beaglebone-cookbook/05tips/figures/wicdConfig.png b/books/beaglebone-cookbook/05tips/figures/wicdConfig.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicdConfig.png rename to books/beaglebone-cookbook/05tips/figures/wicdConfig.png diff --git a/beaglebone-cookbook/05tips/figures/wicdConnected.png b/books/beaglebone-cookbook/05tips/figures/wicdConnected.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicdConnected.png rename to books/beaglebone-cookbook/05tips/figures/wicdConnected.png diff --git a/beaglebone-cookbook/05tips/figures/wicdPassword.png b/books/beaglebone-cookbook/05tips/figures/wicdPassword.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicdPassword.png rename to books/beaglebone-cookbook/05tips/figures/wicdPassword.png diff --git a/beaglebone-cookbook/05tips/figures/wicdPrefs.png b/books/beaglebone-cookbook/05tips/figures/wicdPrefs.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicdPrefs.png rename to books/beaglebone-cookbook/05tips/figures/wicdPrefs.png diff --git a/beaglebone-cookbook/05tips/figures/wicdSecure.png b/books/beaglebone-cookbook/05tips/figures/wicdSecure.png similarity index 100% rename from beaglebone-cookbook/05tips/figures/wicdSecure.png rename to books/beaglebone-cookbook/05tips/figures/wicdSecure.png diff --git a/beaglebone-cookbook/05tips/tips.rst b/books/beaglebone-cookbook/05tips/tips.rst similarity index 100% rename from beaglebone-cookbook/05tips/tips.rst rename to books/beaglebone-cookbook/05tips/tips.rst diff --git a/beaglebone-cookbook/06iot/code/GPIOserver.js b/books/beaglebone-cookbook/06iot/code/GPIOserver.js similarity index 100% rename from beaglebone-cookbook/06iot/code/GPIOserver.js rename to books/beaglebone-cookbook/06iot/code/GPIOserver.js diff --git a/beaglebone-cookbook/06iot/code/analogInContinuous.py b/books/beaglebone-cookbook/06iot/code/analogInContinuous.py similarity index 100% rename from beaglebone-cookbook/06iot/code/analogInContinuous.py rename to books/beaglebone-cookbook/06iot/code/analogInContinuous.py diff --git a/beaglebone-cookbook/06iot/code/emailTest.py b/books/beaglebone-cookbook/06iot/code/emailTest.py similarity index 100% rename from beaglebone-cookbook/06iot/code/emailTest.py rename to books/beaglebone-cookbook/06iot/code/emailTest.py diff --git a/beaglebone-cookbook/06iot/code/flask/app1.py b/books/beaglebone-cookbook/06iot/code/flask/app1.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/app1.py rename to books/beaglebone-cookbook/06iot/code/flask/app1.py diff --git a/beaglebone-cookbook/06iot/code/flask/app2.py b/books/beaglebone-cookbook/06iot/code/flask/app2.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/app2.py rename to books/beaglebone-cookbook/06iot/code/flask/app2.py diff --git a/beaglebone-cookbook/06iot/code/flask/app3.py b/books/beaglebone-cookbook/06iot/code/flask/app3.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/app3.py rename to books/beaglebone-cookbook/06iot/code/flask/app3.py diff --git a/beaglebone-cookbook/06iot/code/flask/app4.py b/books/beaglebone-cookbook/06iot/code/flask/app4.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/app4.py rename to books/beaglebone-cookbook/06iot/code/flask/app4.py diff --git a/beaglebone-cookbook/06iot/code/flask/app5.py b/books/beaglebone-cookbook/06iot/code/flask/app5.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/app5.py rename to books/beaglebone-cookbook/06iot/code/flask/app5.py diff --git a/beaglebone-cookbook/06iot/code/flask/flask.service b/books/beaglebone-cookbook/06iot/code/flask/flask.service similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/flask.service rename to books/beaglebone-cookbook/06iot/code/flask/flask.service diff --git a/beaglebone-cookbook/06iot/code/flask/helloWorld.py b/books/beaglebone-cookbook/06iot/code/flask/helloWorld.py similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/helloWorld.py rename to books/beaglebone-cookbook/06iot/code/flask/helloWorld.py diff --git a/beaglebone-cookbook/06iot/code/flask/install.sh b/books/beaglebone-cookbook/06iot/code/flask/install.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/install.sh rename to books/beaglebone-cookbook/06iot/code/flask/install.sh diff --git a/beaglebone-cookbook/06iot/code/flask/ngrok.yml b/books/beaglebone-cookbook/06iot/code/flask/ngrok.yml similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/ngrok.yml rename to books/beaglebone-cookbook/06iot/code/flask/ngrok.yml diff --git a/beaglebone-cookbook/06iot/code/flask/setup.sh b/books/beaglebone-cookbook/06iot/code/flask/setup.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/setup.sh rename to books/beaglebone-cookbook/06iot/code/flask/setup.sh diff --git a/beaglebone-cookbook/06iot/code/flask/static/favicon.ico b/books/beaglebone-cookbook/06iot/code/flask/static/favicon.ico similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/static/favicon.ico rename to books/beaglebone-cookbook/06iot/code/flask/static/favicon.ico diff --git a/beaglebone-cookbook/06iot/code/flask/static/style.css b/books/beaglebone-cookbook/06iot/code/flask/static/style.css similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/static/style.css rename to books/beaglebone-cookbook/06iot/code/flask/static/style.css diff --git a/beaglebone-cookbook/06iot/code/flask/templates/index1.html b/books/beaglebone-cookbook/06iot/code/flask/templates/index1.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/templates/index1.html rename to books/beaglebone-cookbook/06iot/code/flask/templates/index1.html diff --git a/beaglebone-cookbook/06iot/code/flask/templates/index2.html b/books/beaglebone-cookbook/06iot/code/flask/templates/index2.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/templates/index2.html rename to books/beaglebone-cookbook/06iot/code/flask/templates/index2.html diff --git a/beaglebone-cookbook/06iot/code/flask/templates/index3.html b/books/beaglebone-cookbook/06iot/code/flask/templates/index3.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/templates/index3.html rename to books/beaglebone-cookbook/06iot/code/flask/templates/index3.html diff --git a/beaglebone-cookbook/06iot/code/flask/templates/index4.html b/books/beaglebone-cookbook/06iot/code/flask/templates/index4.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/templates/index4.html rename to books/beaglebone-cookbook/06iot/code/flask/templates/index4.html diff --git a/beaglebone-cookbook/06iot/code/flask/templates/index5.html b/books/beaglebone-cookbook/06iot/code/flask/templates/index5.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flask/templates/index5.html rename to books/beaglebone-cookbook/06iot/code/flask/templates/index5.html diff --git a/beaglebone-cookbook/06iot/code/flotDemo.html b/books/beaglebone-cookbook/06iot/code/flotDemo.html similarity index 100% rename from beaglebone-cookbook/06iot/code/flotDemo.html rename to books/beaglebone-cookbook/06iot/code/flotDemo.html diff --git a/beaglebone-cookbook/06iot/code/flotDemo.js b/books/beaglebone-cookbook/06iot/code/flotDemo.js similarity index 100% rename from beaglebone-cookbook/06iot/code/flotDemo.js rename to books/beaglebone-cookbook/06iot/code/flotDemo.js diff --git a/beaglebone-cookbook/06iot/code/jQueryDemo.js b/books/beaglebone-cookbook/06iot/code/jQueryDemo.js similarity index 100% rename from beaglebone-cookbook/06iot/code/jQueryDemo.js rename to books/beaglebone-cookbook/06iot/code/jQueryDemo.js diff --git a/beaglebone-cookbook/06iot/code/jQueryInstall.sh b/books/beaglebone-cookbook/06iot/code/jQueryInstall.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/jQueryInstall.sh rename to books/beaglebone-cookbook/06iot/code/jQueryInstall.sh diff --git a/beaglebone-cookbook/06iot/code/launchPad.js b/books/beaglebone-cookbook/06iot/code/launchPad.js similarity index 100% rename from beaglebone-cookbook/06iot/code/launchPad.js rename to books/beaglebone-cookbook/06iot/code/launchPad.js diff --git a/beaglebone-cookbook/06iot/code/launchPad/launchPad.ino b/books/beaglebone-cookbook/06iot/code/launchPad/launchPad.ino similarity index 100% rename from beaglebone-cookbook/06iot/code/launchPad/launchPad.ino rename to books/beaglebone-cookbook/06iot/code/launchPad/launchPad.ino diff --git a/beaglebone-cookbook/06iot/code/nodemailer-install.sh b/books/beaglebone-cookbook/06iot/code/nodemailer-install.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/nodemailer-install.sh rename to books/beaglebone-cookbook/06iot/code/nodemailer-install.sh diff --git a/beaglebone-cookbook/06iot/code/nodemailer-test.js b/books/beaglebone-cookbook/06iot/code/nodemailer-test.js similarity index 100% rename from beaglebone-cookbook/06iot/code/nodemailer-test.js rename to books/beaglebone-cookbook/06iot/code/nodemailer-test.js diff --git a/beaglebone-cookbook/06iot/code/noderedExample.json b/books/beaglebone-cookbook/06iot/code/noderedExample.json similarity index 100% rename from beaglebone-cookbook/06iot/code/noderedExample.json rename to books/beaglebone-cookbook/06iot/code/noderedExample.json diff --git a/beaglebone-cookbook/06iot/code/processingDemo.js b/books/beaglebone-cookbook/06iot/code/processingDemo.js similarity index 100% rename from beaglebone-cookbook/06iot/code/processingDemo.js rename to books/beaglebone-cookbook/06iot/code/processingDemo.js diff --git a/beaglebone-cookbook/06iot/code/server.js b/books/beaglebone-cookbook/06iot/code/server.js similarity index 100% rename from beaglebone-cookbook/06iot/code/server.js rename to books/beaglebone-cookbook/06iot/code/server.js diff --git a/beaglebone-cookbook/06iot/code/test.html b/books/beaglebone-cookbook/06iot/code/test.html similarity index 100% rename from beaglebone-cookbook/06iot/code/test.html rename to books/beaglebone-cookbook/06iot/code/test.html diff --git a/beaglebone-cookbook/06iot/code/twilio-test.js b/books/beaglebone-cookbook/06iot/code/twilio-test.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twilio-test.js rename to books/beaglebone-cookbook/06iot/code/twilio-test.js diff --git a/beaglebone-cookbook/06iot/code/twilioSetup.sh b/books/beaglebone-cookbook/06iot/code/twilioSetup.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/twilioSetup.sh rename to books/beaglebone-cookbook/06iot/code/twilioSetup.sh diff --git a/beaglebone-cookbook/06iot/code/twilioTest.py b/books/beaglebone-cookbook/06iot/code/twilioTest.py similarity index 100% rename from beaglebone-cookbook/06iot/code/twilioTest.py rename to books/beaglebone-cookbook/06iot/code/twilioTest.py diff --git a/beaglebone-cookbook/06iot/code/twitterInstall.sh b/books/beaglebone-cookbook/06iot/code/twitterInstall.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterInstall.sh rename to books/beaglebone-cookbook/06iot/code/twitterInstall.sh diff --git a/beaglebone-cookbook/06iot/code/twitterKeys.sh b/books/beaglebone-cookbook/06iot/code/twitterKeys.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterKeys.sh rename to books/beaglebone-cookbook/06iot/code/twitterKeys.sh diff --git a/beaglebone-cookbook/06iot/code/twitterPushbutton.js b/books/beaglebone-cookbook/06iot/code/twitterPushbutton.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterPushbutton.js rename to books/beaglebone-cookbook/06iot/code/twitterPushbutton.js diff --git a/beaglebone-cookbook/06iot/code/twitterSearch.js b/books/beaglebone-cookbook/06iot/code/twitterSearch.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterSearch.js rename to books/beaglebone-cookbook/06iot/code/twitterSearch.js diff --git a/beaglebone-cookbook/06iot/code/twitterStream.js b/books/beaglebone-cookbook/06iot/code/twitterStream.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterStream.js rename to books/beaglebone-cookbook/06iot/code/twitterStream.js diff --git a/beaglebone-cookbook/06iot/code/twitterTimeLine.js b/books/beaglebone-cookbook/06iot/code/twitterTimeLine.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterTimeLine.js rename to books/beaglebone-cookbook/06iot/code/twitterTimeLine.js diff --git a/beaglebone-cookbook/06iot/code/twitterUpload.js b/books/beaglebone-cookbook/06iot/code/twitterUpload.js similarity index 100% rename from beaglebone-cookbook/06iot/code/twitterUpload.js rename to books/beaglebone-cookbook/06iot/code/twitterUpload.js diff --git a/beaglebone-cookbook/06iot/code/twitter_create_tweet.py b/books/beaglebone-cookbook/06iot/code/twitter_create_tweet.py similarity index 100% rename from beaglebone-cookbook/06iot/code/twitter_create_tweet.py rename to books/beaglebone-cookbook/06iot/code/twitter_create_tweet.py diff --git a/beaglebone-cookbook/06iot/code/twitter_delete_tweet.py b/books/beaglebone-cookbook/06iot/code/twitter_delete_tweet.py similarity index 100% rename from beaglebone-cookbook/06iot/code/twitter_delete_tweet.py rename to books/beaglebone-cookbook/06iot/code/twitter_delete_tweet.py diff --git a/beaglebone-cookbook/06iot/code/twitter_recent_search.py b/books/beaglebone-cookbook/06iot/code/twitter_recent_search.py similarity index 100% rename from beaglebone-cookbook/06iot/code/twitter_recent_search.py rename to books/beaglebone-cookbook/06iot/code/twitter_recent_search.py diff --git a/beaglebone-cookbook/06iot/code/twitter_user_tweets.py b/books/beaglebone-cookbook/06iot/code/twitter_user_tweets.py similarity index 100% rename from beaglebone-cookbook/06iot/code/twitter_user_tweets.py rename to books/beaglebone-cookbook/06iot/code/twitter_user_tweets.py diff --git a/beaglebone-cookbook/06iot/code/weather.py b/books/beaglebone-cookbook/06iot/code/weather.py similarity index 100% rename from beaglebone-cookbook/06iot/code/weather.py rename to books/beaglebone-cookbook/06iot/code/weather.py diff --git a/beaglebone-cookbook/06iot/code/weatherSetup.sh b/books/beaglebone-cookbook/06iot/code/weatherSetup.sh similarity index 100% rename from beaglebone-cookbook/06iot/code/weatherSetup.sh rename to books/beaglebone-cookbook/06iot/code/weatherSetup.sh diff --git a/beaglebone-cookbook/06iot/code/xbee.js b/books/beaglebone-cookbook/06iot/code/xbee.js similarity index 100% rename from beaglebone-cookbook/06iot/code/xbee.js rename to books/beaglebone-cookbook/06iot/code/xbee.js diff --git a/beaglebone-cookbook/06iot/figures/GPIOWebPage.png b/books/beaglebone-cookbook/06iot/figures/GPIOWebPage.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/GPIOWebPage.png rename to books/beaglebone-cookbook/06iot/figures/GPIOWebPage.png diff --git a/beaglebone-cookbook/06iot/figures/Sine1k.png b/books/beaglebone-cookbook/06iot/figures/Sine1k.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/Sine1k.png rename to books/beaglebone-cookbook/06iot/figures/Sine1k.png diff --git a/beaglebone-cookbook/06iot/figures/Tri10k.png b/books/beaglebone-cookbook/06iot/figures/Tri10k.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/Tri10k.png rename to books/beaglebone-cookbook/06iot/figures/Tri10k.png diff --git a/beaglebone-cookbook/06iot/figures/apacheIndex.png b/books/beaglebone-cookbook/06iot/figures/apacheIndex.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/apacheIndex.png rename to books/beaglebone-cookbook/06iot/figures/apacheIndex.png diff --git a/beaglebone-cookbook/06iot/figures/apacheNoFiles.png b/books/beaglebone-cookbook/06iot/figures/apacheNoFiles.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/apacheNoFiles.png rename to books/beaglebone-cookbook/06iot/figures/apacheNoFiles.png diff --git a/beaglebone-cookbook/06iot/figures/apacheTest.png b/books/beaglebone-cookbook/06iot/figures/apacheTest.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/apacheTest.png rename to books/beaglebone-cookbook/06iot/figures/apacheTest.png diff --git a/beaglebone-cookbook/06iot/figures/bone-usr3-led.png b/books/beaglebone-cookbook/06iot/figures/bone-usr3-led.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/bone-usr3-led.png rename to books/beaglebone-cookbook/06iot/figures/bone-usr3-led.png diff --git a/beaglebone-cookbook/06iot/figures/cape-headers-serial.png b/books/beaglebone-cookbook/06iot/figures/cape-headers-serial.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/cape-headers-serial.png rename to books/beaglebone-cookbook/06iot/figures/cape-headers-serial.png diff --git a/beaglebone-cookbook/06iot/figures/flaskServer.png b/books/beaglebone-cookbook/06iot/figures/flaskServer.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/flaskServer.png rename to books/beaglebone-cookbook/06iot/figures/flaskServer.png diff --git a/beaglebone-cookbook/06iot/figures/flaskapp1.png b/books/beaglebone-cookbook/06iot/figures/flaskapp1.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/flaskapp1.png rename to books/beaglebone-cookbook/06iot/figures/flaskapp1.png diff --git a/beaglebone-cookbook/06iot/figures/flaskapp2.png b/books/beaglebone-cookbook/06iot/figures/flaskapp2.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/flaskapp2.png rename to books/beaglebone-cookbook/06iot/figures/flaskapp2.png diff --git a/beaglebone-cookbook/06iot/figures/flaskapp3.png b/books/beaglebone-cookbook/06iot/figures/flaskapp3.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/flaskapp3.png rename to books/beaglebone-cookbook/06iot/figures/flaskapp3.png diff --git a/beaglebone-cookbook/06iot/figures/flotDemo.png b/books/beaglebone-cookbook/06iot/figures/flotDemo.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/flotDemo.png rename to books/beaglebone-cookbook/06iot/figures/flotDemo.png diff --git a/beaglebone-cookbook/06iot/figures/jQueryDemo.html b/books/beaglebone-cookbook/06iot/figures/jQueryDemo.html similarity index 100% rename from beaglebone-cookbook/06iot/figures/jQueryDemo.html rename to books/beaglebone-cookbook/06iot/figures/jQueryDemo.html diff --git a/beaglebone-cookbook/06iot/figures/jQueryFiddle.png b/books/beaglebone-cookbook/06iot/figures/jQueryFiddle.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/jQueryFiddle.png rename to books/beaglebone-cookbook/06iot/figures/jQueryFiddle.png diff --git a/beaglebone-cookbook/06iot/figures/jsfiddleFrameworks.png b/books/beaglebone-cookbook/06iot/figures/jsfiddleFrameworks.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/jsfiddleFrameworks.png rename to books/beaglebone-cookbook/06iot/figures/jsfiddleFrameworks.png diff --git a/beaglebone-cookbook/06iot/figures/launchPad.fzz b/books/beaglebone-cookbook/06iot/figures/launchPad.fzz similarity index 100% rename from beaglebone-cookbook/06iot/figures/launchPad.fzz rename to books/beaglebone-cookbook/06iot/figures/launchPad.fzz diff --git a/beaglebone-cookbook/06iot/figures/launchPad_bb.png b/books/beaglebone-cookbook/06iot/figures/launchPad_bb.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/launchPad_bb.png rename to books/beaglebone-cookbook/06iot/figures/launchPad_bb.png diff --git a/beaglebone-cookbook/06iot/figures/nginxTest.png b/books/beaglebone-cookbook/06iot/figures/nginxTest.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/nginxTest.png rename to books/beaglebone-cookbook/06iot/figures/nginxTest.png diff --git a/beaglebone-cookbook/06iot/figures/node-disc-out-setup.png b/books/beaglebone-cookbook/06iot/figures/node-disc-out-setup.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-disc-out-setup.png rename to books/beaglebone-cookbook/06iot/figures/node-disc-out-setup.png diff --git a/beaglebone-cookbook/06iot/figures/node-disc-out.png b/books/beaglebone-cookbook/06iot/figures/node-disc-out.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-disc-out.png rename to books/beaglebone-cookbook/06iot/figures/node-disc-out.png diff --git a/beaglebone-cookbook/06iot/figures/node-red.png b/books/beaglebone-cookbook/06iot/figures/node-red.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-red.png rename to books/beaglebone-cookbook/06iot/figures/node-red.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter-auth.png b/books/beaglebone-cookbook/06iot/figures/node-twitter-auth.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter-auth.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter-auth.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter-auth2.png b/books/beaglebone-cookbook/06iot/figures/node-twitter-auth2.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter-auth2.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter-auth2.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter-auth3.png b/books/beaglebone-cookbook/06iot/figures/node-twitter-auth3.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter-auth3.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter-auth3.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter-beagle.png b/books/beaglebone-cookbook/06iot/figures/node-twitter-beagle.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter-beagle.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter-beagle.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter-debug.png b/books/beaglebone-cookbook/06iot/figures/node-twitter-debug.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter-debug.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter-debug.png diff --git a/beaglebone-cookbook/06iot/figures/node-twitter.png b/books/beaglebone-cookbook/06iot/figures/node-twitter.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/node-twitter.png rename to books/beaglebone-cookbook/06iot/figures/node-twitter.png diff --git a/beaglebone-cookbook/06iot/figures/nodeServer.png b/books/beaglebone-cookbook/06iot/figures/nodeServer.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/nodeServer.png rename to books/beaglebone-cookbook/06iot/figures/nodeServer.png diff --git a/beaglebone-cookbook/06iot/figures/nodeTest.png b/books/beaglebone-cookbook/06iot/figures/nodeTest.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/nodeTest.png rename to books/beaglebone-cookbook/06iot/figures/nodeTest.png diff --git a/beaglebone-cookbook/06iot/figures/processingDemo.html b/books/beaglebone-cookbook/06iot/figures/processingDemo.html similarity index 100% rename from beaglebone-cookbook/06iot/figures/processingDemo.html rename to books/beaglebone-cookbook/06iot/figures/processingDemo.html diff --git a/beaglebone-cookbook/06iot/figures/xbee.fzz b/books/beaglebone-cookbook/06iot/figures/xbee.fzz similarity index 100% rename from beaglebone-cookbook/06iot/figures/xbee.fzz rename to books/beaglebone-cookbook/06iot/figures/xbee.fzz diff --git a/beaglebone-cookbook/06iot/figures/xbee_bb.png b/books/beaglebone-cookbook/06iot/figures/xbee_bb.png similarity index 100% rename from beaglebone-cookbook/06iot/figures/xbee_bb.png rename to books/beaglebone-cookbook/06iot/figures/xbee_bb.png diff --git a/beaglebone-cookbook/06iot/iot.rst b/books/beaglebone-cookbook/06iot/iot.rst similarity index 100% rename from beaglebone-cookbook/06iot/iot.rst rename to books/beaglebone-cookbook/06iot/iot.rst diff --git a/beaglebone-cookbook/07kernel/code/Makefile b/books/beaglebone-cookbook/07kernel/code/Makefile similarity index 100% rename from beaglebone-cookbook/07kernel/code/Makefile rename to books/beaglebone-cookbook/07kernel/code/Makefile diff --git a/beaglebone-cookbook/07kernel/code/Makefile.display b/books/beaglebone-cookbook/07kernel/code/Makefile.display similarity index 100% rename from beaglebone-cookbook/07kernel/code/Makefile.display rename to books/beaglebone-cookbook/07kernel/code/Makefile.display diff --git a/beaglebone-cookbook/07kernel/code/hello.c b/books/beaglebone-cookbook/07kernel/code/hello.c similarity index 100% rename from beaglebone-cookbook/07kernel/code/hello.c rename to books/beaglebone-cookbook/07kernel/code/hello.c diff --git a/beaglebone-cookbook/07kernel/code/hello.patch b/books/beaglebone-cookbook/07kernel/code/hello.patch similarity index 100% rename from beaglebone-cookbook/07kernel/code/hello.patch rename to books/beaglebone-cookbook/07kernel/code/hello.patch diff --git a/beaglebone-cookbook/07kernel/code/helloWorld.c b/books/beaglebone-cookbook/07kernel/code/helloWorld.c similarity index 100% rename from beaglebone-cookbook/07kernel/code/helloWorld.c rename to books/beaglebone-cookbook/07kernel/code/helloWorld.c diff --git a/beaglebone-cookbook/07kernel/figures/KernelConfig3.16.png b/books/beaglebone-cookbook/07kernel/figures/KernelConfig3.16.png similarity index 100% rename from beaglebone-cookbook/07kernel/figures/KernelConfig3.16.png rename to books/beaglebone-cookbook/07kernel/figures/KernelConfig3.16.png diff --git a/beaglebone-cookbook/07kernel/figures/cape-headers-digitalGPIO7.png b/books/beaglebone-cookbook/07kernel/figures/cape-headers-digitalGPIO7.png similarity index 100% rename from beaglebone-cookbook/07kernel/figures/cape-headers-digitalGPIO7.png rename to books/beaglebone-cookbook/07kernel/figures/cape-headers-digitalGPIO7.png diff --git a/beaglebone-cookbook/07kernel/kernel.rst b/books/beaglebone-cookbook/07kernel/kernel.rst similarity index 100% rename from beaglebone-cookbook/07kernel/kernel.rst rename to books/beaglebone-cookbook/07kernel/kernel.rst diff --git a/beaglebone-cookbook/08realtime/code/pushLED.c b/books/beaglebone-cookbook/08realtime/code/pushLED.c similarity index 100% rename from beaglebone-cookbook/08realtime/code/pushLED.c rename to books/beaglebone-cookbook/08realtime/code/pushLED.c diff --git a/beaglebone-cookbook/08realtime/code/pushLED.js b/books/beaglebone-cookbook/08realtime/code/pushLED.js similarity index 100% rename from beaglebone-cookbook/08realtime/code/pushLED.js rename to books/beaglebone-cookbook/08realtime/code/pushLED.js diff --git a/beaglebone-cookbook/08realtime/code/pushLED.py b/books/beaglebone-cookbook/08realtime/code/pushLED.py similarity index 100% rename from beaglebone-cookbook/08realtime/code/pushLED.py rename to books/beaglebone-cookbook/08realtime/code/pushLED.py diff --git a/beaglebone-cookbook/08realtime/code/pushLEDmmap.c b/books/beaglebone-cookbook/08realtime/code/pushLEDmmap.c similarity index 100% rename from beaglebone-cookbook/08realtime/code/pushLEDmmap.c rename to books/beaglebone-cookbook/08realtime/code/pushLEDmmap.c diff --git a/beaglebone-cookbook/08realtime/code/pushLEDmmap.h b/books/beaglebone-cookbook/08realtime/code/pushLEDmmap.h similarity index 100% rename from beaglebone-cookbook/08realtime/code/pushLEDmmap.h rename to books/beaglebone-cookbook/08realtime/code/pushLEDmmap.h diff --git a/beaglebone-cookbook/08realtime/code/rt/cyclictest.png b/books/beaglebone-cookbook/08realtime/code/rt/cyclictest.png similarity index 100% rename from beaglebone-cookbook/08realtime/code/rt/cyclictest.png rename to books/beaglebone-cookbook/08realtime/code/rt/cyclictest.png diff --git a/beaglebone-cookbook/08realtime/code/rt/hist.gen b/books/beaglebone-cookbook/08realtime/code/rt/hist.gen similarity index 100% rename from beaglebone-cookbook/08realtime/code/rt/hist.gen rename to books/beaglebone-cookbook/08realtime/code/rt/hist.gen diff --git a/beaglebone-cookbook/08realtime/code/rt/hist.plt b/books/beaglebone-cookbook/08realtime/code/rt/hist.plt similarity index 100% rename from beaglebone-cookbook/08realtime/code/rt/hist.plt rename to books/beaglebone-cookbook/08realtime/code/rt/hist.plt diff --git a/beaglebone-cookbook/08realtime/code/rt/install.sh b/books/beaglebone-cookbook/08realtime/code/rt/install.sh similarity index 100% rename from beaglebone-cookbook/08realtime/code/rt/install.sh rename to books/beaglebone-cookbook/08realtime/code/rt/install.sh diff --git a/beaglebone-cookbook/08realtime/code/rt/setup.sh b/books/beaglebone-cookbook/08realtime/code/rt/setup.sh similarity index 100% rename from beaglebone-cookbook/08realtime/code/rt/setup.sh rename to books/beaglebone-cookbook/08realtime/code/rt/setup.sh diff --git a/beaglebone-cookbook/08realtime/figures/kernel_update.png b/books/beaglebone-cookbook/08realtime/figures/kernel_update.png similarity index 100% rename from beaglebone-cookbook/08realtime/figures/kernel_update.png rename to books/beaglebone-cookbook/08realtime/figures/kernel_update.png diff --git a/beaglebone-cookbook/08realtime/figures/pushLED.fzz b/books/beaglebone-cookbook/08realtime/figures/pushLED.fzz similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLED.fzz rename to books/beaglebone-cookbook/08realtime/figures/pushLED.fzz diff --git a/beaglebone-cookbook/08realtime/figures/pushLED_bb.png b/books/beaglebone-cookbook/08realtime/figures/pushLED_bb.png similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLED_bb.png rename to books/beaglebone-cookbook/08realtime/figures/pushLED_bb.png diff --git a/beaglebone-cookbook/08realtime/figures/pushLEDmmap.fzz b/books/beaglebone-cookbook/08realtime/figures/pushLEDmmap.fzz similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLEDmmap.fzz rename to books/beaglebone-cookbook/08realtime/figures/pushLEDmmap.fzz diff --git a/beaglebone-cookbook/08realtime/figures/pushLEDmmap_bb.png b/books/beaglebone-cookbook/08realtime/figures/pushLEDmmap_bb.png similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLEDmmap_bb.png rename to books/beaglebone-cookbook/08realtime/figures/pushLEDmmap_bb.png diff --git a/beaglebone-cookbook/08realtime/figures/pushLEDpru.fzz b/books/beaglebone-cookbook/08realtime/figures/pushLEDpru.fzz similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLEDpru.fzz rename to books/beaglebone-cookbook/08realtime/figures/pushLEDpru.fzz diff --git a/beaglebone-cookbook/08realtime/figures/pushLEDpru_bb.png b/books/beaglebone-cookbook/08realtime/figures/pushLEDpru_bb.png similarity index 100% rename from beaglebone-cookbook/08realtime/figures/pushLEDpru_bb.png rename to books/beaglebone-cookbook/08realtime/figures/pushLEDpru_bb.png diff --git a/beaglebone-cookbook/08realtime/old/pruSpeak.py b/books/beaglebone-cookbook/08realtime/old/pruSpeak.py similarity index 100% rename from beaglebone-cookbook/08realtime/old/pruSpeak.py rename to books/beaglebone-cookbook/08realtime/old/pruSpeak.py diff --git a/beaglebone-cookbook/08realtime/old/thumb.patch b/books/beaglebone-cookbook/08realtime/old/thumb.patch similarity index 100% rename from beaglebone-cookbook/08realtime/old/thumb.patch rename to books/beaglebone-cookbook/08realtime/old/thumb.patch diff --git a/beaglebone-cookbook/08realtime/old/xenomaiConfig.png b/books/beaglebone-cookbook/08realtime/old/xenomaiConfig.png similarity index 100% rename from beaglebone-cookbook/08realtime/old/xenomaiConfig.png rename to books/beaglebone-cookbook/08realtime/old/xenomaiConfig.png diff --git a/beaglebone-cookbook/08realtime/realtime.rst b/books/beaglebone-cookbook/08realtime/realtime.rst similarity index 100% rename from beaglebone-cookbook/08realtime/realtime.rst rename to books/beaglebone-cookbook/08realtime/realtime.rst diff --git a/beaglebone-cookbook/09capes/capes.rst b/books/beaglebone-cookbook/09capes/capes.rst similarity index 100% rename from beaglebone-cookbook/09capes/capes.rst rename to books/beaglebone-cookbook/09capes/capes.rst diff --git a/beaglebone-cookbook/09capes/code/quickBot_motor_test.js b/books/beaglebone-cookbook/09capes/code/quickBot_motor_test.js similarity index 100% rename from beaglebone-cookbook/09capes/code/quickBot_motor_test.js rename to books/beaglebone-cookbook/09capes/code/quickBot_motor_test.js diff --git a/beaglebone-cookbook/09capes/figures/BBB_GPS_Cape.fzz b/books/beaglebone-cookbook/09capes/figures/BBB_GPS_Cape.fzz similarity index 100% rename from beaglebone-cookbook/09capes/figures/BBB_GPS_Cape.fzz rename to books/beaglebone-cookbook/09capes/figures/BBB_GPS_Cape.fzz diff --git a/beaglebone-cookbook/09capes/figures/BeagleBone_Black_Cape__7fab878f3c590bbf730a21__pcb__cc4cbffa099dd2076377e89426324f3b.svg b/books/beaglebone-cookbook/09capes/figures/BeagleBone_Black_Cape__7fab878f3c590bbf730a21__pcb__cc4cbffa099dd2076377e89426324f3b.svg similarity index 100% rename from beaglebone-cookbook/09capes/figures/BeagleBone_Black_Cape__7fab878f3c590bbf730a21__pcb__cc4cbffa099dd2076377e89426324f3b.svg rename to books/beaglebone-cookbook/09capes/figures/BeagleBone_Black_Cape__7fab878f3c590bbf730a21__pcb__cc4cbffa099dd2076377e89426324f3b.svg diff --git a/beaglebone-cookbook/09capes/figures/Boris128.jpg b/books/beaglebone-cookbook/09capes/figures/Boris128.jpg similarity index 100% rename from beaglebone-cookbook/09capes/figures/Boris128.jpg rename to books/beaglebone-cookbook/09capes/figures/Boris128.jpg diff --git a/beaglebone-cookbook/09capes/figures/EagleLicense.png b/books/beaglebone-cookbook/09capes/figures/EagleLicense.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/EagleLicense.png rename to books/beaglebone-cookbook/09capes/figures/EagleLicense.png diff --git a/beaglebone-cookbook/09capes/figures/Fritzing_Inspector.png b/books/beaglebone-cookbook/09capes/figures/Fritzing_Inspector.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Fritzing_Inspector.png rename to books/beaglebone-cookbook/09capes/figures/Fritzing_Inspector.png diff --git a/beaglebone-cookbook/09capes/figures/Fritzing_layers.png b/books/beaglebone-cookbook/09capes/figures/Fritzing_layers.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Fritzing_layers.png rename to books/beaglebone-cookbook/09capes/figures/Fritzing_layers.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz160.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz160.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz160.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz160.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz161.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz161.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz161.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz161.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz162.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz162.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz162.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz162.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz163.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz163.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz163.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz163.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz164.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz164.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz164.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz164.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz166.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz166.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz166.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz166.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz167.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz167.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz167.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz167.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz168.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz168.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz168.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz168.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz169.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz169.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz169.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz169.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz170.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz170.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz170.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz170.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz171.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz171.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz171.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz171.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz172.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz172.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz172.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz172.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz173.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz173.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz173.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz173.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz174.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz174.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz174.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz174.png diff --git a/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz175.png b/books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz175.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz175.png rename to books/beaglebone-cookbook/09capes/figures/Google ChromeScreenSnapz175.png diff --git a/beaglebone-cookbook/09capes/figures/LCD b/books/beaglebone-cookbook/09capes/figures/LCD similarity index 100% rename from beaglebone-cookbook/09capes/figures/LCD rename to books/beaglebone-cookbook/09capes/figures/LCD diff --git a/beaglebone-cookbook/09capes/figures/LCD.png b/books/beaglebone-cookbook/09capes/figures/LCD.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/LCD.png rename to books/beaglebone-cookbook/09capes/figures/LCD.png diff --git a/beaglebone-cookbook/09capes/figures/LCD7Desktop.png b/books/beaglebone-cookbook/09capes/figures/LCD7Desktop.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/LCD7Desktop.png rename to books/beaglebone-cookbook/09capes/figures/LCD7Desktop.png diff --git a/beaglebone-cookbook/09capes/figures/LCD7back.png b/books/beaglebone-cookbook/09capes/figures/LCD7back.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/LCD7back.png rename to books/beaglebone-cookbook/09capes/figures/LCD7back.png diff --git a/beaglebone-cookbook/09capes/figures/MiniDisplay-A1.jpg b/books/beaglebone-cookbook/09capes/figures/MiniDisplay-A1.jpg similarity index 100% rename from beaglebone-cookbook/09capes/figures/MiniDisplay-A1.jpg rename to books/beaglebone-cookbook/09capes/figures/MiniDisplay-A1.jpg diff --git a/beaglebone-cookbook/09capes/figures/audioCape.png b/books/beaglebone-cookbook/09capes/figures/audioCape.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/audioCape.png rename to books/beaglebone-cookbook/09capes/figures/audioCape.png diff --git a/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.png b/books/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.png rename to books/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.png diff --git a/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.svg b/books/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.svg similarity index 100% rename from beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.svg rename to books/beaglebone-cookbook/09capes/figures/beaglebone_cape_boardoutline.svg diff --git a/beaglebone-cookbook/09capes/figures/boneOutline.xml b/books/beaglebone-cookbook/09capes/figures/boneOutline.xml similarity index 100% rename from beaglebone-cookbook/09capes/figures/boneOutline.xml rename to books/beaglebone-cookbook/09capes/figures/boneOutline.xml diff --git a/beaglebone-cookbook/09capes/figures/breadboard.png b/books/beaglebone-cookbook/09capes/figures/breadboard.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/breadboard.png rename to books/beaglebone-cookbook/09capes/figures/breadboard.png diff --git a/beaglebone-cookbook/09capes/figures/circuithub_part_matching.png b/books/beaglebone-cookbook/09capes/figures/circuithub_part_matching.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/circuithub_part_matching.png rename to books/beaglebone-cookbook/09capes/figures/circuithub_part_matching.png diff --git a/beaglebone-cookbook/09capes/figures/circuithub_quote.png b/books/beaglebone-cookbook/09capes/figures/circuithub_quote.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/circuithub_quote.png rename to books/beaglebone-cookbook/09capes/figures/circuithub_quote.png diff --git a/beaglebone-cookbook/09capes/figures/convert-fritzing-to-eagle.sh b/books/beaglebone-cookbook/09capes/figures/convert-fritzing-to-eagle.sh similarity index 100% rename from beaglebone-cookbook/09capes/figures/convert-fritzing-to-eagle.sh rename to books/beaglebone-cookbook/09capes/figures/convert-fritzing-to-eagle.sh diff --git a/beaglebone-cookbook/09capes/figures/convert-fritzing-to-kicad.sh b/books/beaglebone-cookbook/09capes/figures/convert-fritzing-to-kicad.sh similarity index 100% rename from beaglebone-cookbook/09capes/figures/convert-fritzing-to-kicad.sh rename to books/beaglebone-cookbook/09capes/figures/convert-fritzing-to-kicad.sh diff --git a/beaglebone-cookbook/09capes/figures/eagle3.png b/books/beaglebone-cookbook/09capes/figures/eagle3.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/eagle3.png rename to books/beaglebone-cookbook/09capes/figures/eagle3.png diff --git a/beaglebone-cookbook/09capes/figures/eagle7.png b/books/beaglebone-cookbook/09capes/figures/eagle7.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/eagle7.png rename to books/beaglebone-cookbook/09capes/figures/eagle7.png diff --git a/beaglebone-cookbook/09capes/figures/fritzing1.png b/books/beaglebone-cookbook/09capes/figures/fritzing1.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/fritzing1.png rename to books/beaglebone-cookbook/09capes/figures/fritzing1.png diff --git a/beaglebone-cookbook/09capes/figures/fritzing2.png b/books/beaglebone-cookbook/09capes/figures/fritzing2.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/fritzing2.png rename to books/beaglebone-cookbook/09capes/figures/fritzing2.png diff --git a/beaglebone-cookbook/09capes/figures/fritzing3.png b/books/beaglebone-cookbook/09capes/figures/fritzing3.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/fritzing3.png rename to books/beaglebone-cookbook/09capes/figures/fritzing3.png diff --git a/beaglebone-cookbook/09capes/figures/fritzing4.png b/books/beaglebone-cookbook/09capes/figures/fritzing4.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/fritzing4.png rename to books/beaglebone-cookbook/09capes/figures/fritzing4.png diff --git a/beaglebone-cookbook/09capes/figures/miniDisplay_Boris.png b/books/beaglebone-cookbook/09capes/figures/miniDisplay_Boris.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/miniDisplay_Boris.png rename to books/beaglebone-cookbook/09capes/figures/miniDisplay_Boris.png diff --git a/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_pcb.png b/books/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_pcb.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/miniDisplay_Cape_pcb.png rename to books/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_pcb.png diff --git a/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_schem.png b/books/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_schem.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/miniDisplay_Cape_schem.png rename to books/beaglebone-cookbook/09capes/figures/miniDisplay_Cape_schem.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot-cache-cache.lib b/books/beaglebone-cookbook/09capes/figures/quickBot-cache-cache.lib similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot-cache-cache.lib rename to books/beaglebone-cookbook/09capes/figures/quickBot-cache-cache.lib diff --git a/beaglebone-cookbook/09capes/figures/quickBot-eagle.sch b/books/beaglebone-cookbook/09capes/figures/quickBot-eagle.sch similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot-eagle.sch rename to books/beaglebone-cookbook/09capes/figures/quickBot-eagle.sch diff --git a/beaglebone-cookbook/09capes/figures/quickBot-eaglexml.sch b/books/beaglebone-cookbook/09capes/figures/quickBot-eaglexml.sch similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot-eaglexml.sch rename to books/beaglebone-cookbook/09capes/figures/quickBot-eaglexml.sch diff --git a/beaglebone-cookbook/09capes/figures/quickBot-schematic.json b/books/beaglebone-cookbook/09capes/figures/quickBot-schematic.json similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot-schematic.json rename to books/beaglebone-cookbook/09capes/figures/quickBot-schematic.json diff --git a/beaglebone-cookbook/09capes/figures/quickBot-upverter.PNG b/books/beaglebone-cookbook/09capes/figures/quickBot-upverter.PNG similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot-upverter.PNG rename to books/beaglebone-cookbook/09capes/figures/quickBot-upverter.PNG diff --git a/beaglebone-cookbook/09capes/figures/quickBot.fzz b/books/beaglebone-cookbook/09capes/figures/quickBot.fzz similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot.fzz rename to books/beaglebone-cookbook/09capes/figures/quickBot.fzz diff --git a/beaglebone-cookbook/09capes/figures/quickBot.upv b/books/beaglebone-cookbook/09capes/figures/quickBot.upv similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot.upv rename to books/beaglebone-cookbook/09capes/figures/quickBot.upv diff --git a/beaglebone-cookbook/09capes/figures/quickBot5IR.fzz b/books/beaglebone-cookbook/09capes/figures/quickBot5IR.fzz similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot5IR.fzz rename to books/beaglebone-cookbook/09capes/figures/quickBot5IR.fzz diff --git a/beaglebone-cookbook/09capes/figures/quickBot_bb.png b/books/beaglebone-cookbook/09capes/figures/quickBot_bb.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_bb.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_bb.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_eaglexml.png b/books/beaglebone-cookbook/09capes/figures/quickBot_eaglexml.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_eaglexml.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_eaglexml.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_fritzing_export.png b/books/beaglebone-cookbook/09capes/figures/quickBot_fritzing_export.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_fritzing_export.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_fritzing_export.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers.zip b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers.zip similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers.zip rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers.zip diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_contour.gm1 b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_contour.gm1 similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_contour.gm1 rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_contour.gm1 diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperBottom.gbl b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperBottom.gbl similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperBottom.gbl rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperBottom.gbl diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperTop.gtl b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperTop.gtl similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperTop.gtl rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_copperTop.gtl diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_drill.txt b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_drill.txt similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_drill.txt rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_drill.txt diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_bottom_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_copper_top_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_bottom_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_mask_top_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_bottom_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_paste_mask_top_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_bottom_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top_mirror.pdf b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top_mirror.pdf similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top_mirror.pdf rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_etch_silk_top_mirror.pdf diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskBottom.gbs b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskBottom.gbs similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskBottom.gbs rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskBottom.gbs diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskTop.gts b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskTop.gts similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskTop.gts rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_maskTop.gts diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_pnp.txt b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_pnp.txt similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_pnp.txt rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_pnp.txt diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkBottom.gbo b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkBottom.gbo similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkBottom.gbo rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkBottom.gbo diff --git a/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkTop.gto b/books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkTop.gto similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkTop.gto rename to books/beaglebone-cookbook/09capes/figures/quickBot_gerbers/quickBot_silkTop.gto diff --git a/beaglebone-cookbook/09capes/figures/quickBot_kicad.sch b/books/beaglebone-cookbook/09capes/figures/quickBot_kicad.sch similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_kicad.sch rename to books/beaglebone-cookbook/09capes/figures/quickBot_kicad.sch diff --git a/beaglebone-cookbook/09capes/figures/quickBot_motor_kickback.JPG b/books/beaglebone-cookbook/09capes/figures/quickBot_motor_kickback.JPG similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_motor_kickback.JPG rename to books/beaglebone-cookbook/09capes/figures/quickBot_motor_kickback.JPG diff --git a/beaglebone-cookbook/09capes/figures/quickBot_motor_test_cloud9.png b/books/beaglebone-cookbook/09capes/figures/quickBot_motor_test_cloud9.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_motor_test_cloud9.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_motor_test_cloud9.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_motor_test_scope.JPG b/books/beaglebone-cookbook/09capes/figures/quickBot_motor_test_scope.JPG similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_motor_test_scope.JPG rename to books/beaglebone-cookbook/09capes/figures/quickBot_motor_test_scope.JPG diff --git a/beaglebone-cookbook/09capes/figures/quickBot_motors.jpg b/books/beaglebone-cookbook/09capes/figures/quickBot_motors.jpg similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_motors.jpg rename to books/beaglebone-cookbook/09capes/figures/quickBot_motors.jpg diff --git a/beaglebone-cookbook/09capes/figures/quickBot_on_OSHPark.png b/books/beaglebone-cookbook/09capes/figures/quickBot_on_OSHPark.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_on_OSHPark.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_on_OSHPark.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_oshpark_share.png b/books/beaglebone-cookbook/09capes/figures/quickBot_oshpark_share.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_oshpark_share.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_oshpark_share.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_pcb.JPG b/books/beaglebone-cookbook/09capes/figures/quickBot_pcb.JPG similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_pcb.JPG rename to books/beaglebone-cookbook/09capes/figures/quickBot_pcb.JPG diff --git a/beaglebone-cookbook/09capes/figures/quickBot_pcb.png b/books/beaglebone-cookbook/09capes/figures/quickBot_pcb.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_pcb.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_pcb.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_play.fzz b/books/beaglebone-cookbook/09capes/figures/quickBot_play.fzz similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_play.fzz rename to books/beaglebone-cookbook/09capes/figures/quickBot_play.fzz diff --git a/beaglebone-cookbook/09capes/figures/quickBot_schem.png b/books/beaglebone-cookbook/09capes/figures/quickBot_schem.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_schem.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_schem.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_schemRaw.png b/books/beaglebone-cookbook/09capes/figures/quickBot_schemRaw.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_schemRaw.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_schemRaw.png diff --git a/beaglebone-cookbook/09capes/figures/quickBot_schemZoom.png b/books/beaglebone-cookbook/09capes/figures/quickBot_schemZoom.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/quickBot_schemZoom.png rename to books/beaglebone-cookbook/09capes/figures/quickBot_schemZoom.png diff --git a/beaglebone-cookbook/09capes/figures/roboCape.fzz b/books/beaglebone-cookbook/09capes/figures/roboCape.fzz similarity index 100% rename from beaglebone-cookbook/09capes/figures/roboCape.fzz rename to books/beaglebone-cookbook/09capes/figures/roboCape.fzz diff --git a/beaglebone-cookbook/09capes/figures/srm_cape_dimensions.png b/books/beaglebone-cookbook/09capes/figures/srm_cape_dimensions.png similarity index 100% rename from beaglebone-cookbook/09capes/figures/srm_cape_dimensions.png rename to books/beaglebone-cookbook/09capes/figures/srm_cape_dimensions.png diff --git a/beaglebone-cookbook/09capes/figures/stacking_headers.JPG b/books/beaglebone-cookbook/09capes/figures/stacking_headers.JPG similarity index 100% rename from beaglebone-cookbook/09capes/figures/stacking_headers.JPG rename to books/beaglebone-cookbook/09capes/figures/stacking_headers.JPG diff --git a/beaglebone-cookbook/09capes/figures/urls.txt b/books/beaglebone-cookbook/09capes/figures/urls.txt similarity index 100% rename from beaglebone-cookbook/09capes/figures/urls.txt rename to books/beaglebone-cookbook/09capes/figures/urls.txt diff --git a/beaglebone-cookbook/10parts/parts.rst b/books/beaglebone-cookbook/10parts/parts.rst similarity index 100% rename from beaglebone-cookbook/10parts/parts.rst rename to books/beaglebone-cookbook/10parts/parts.rst diff --git a/beaglebone-cookbook/index.rst b/books/beaglebone-cookbook/index.rst similarity index 100% rename from beaglebone-cookbook/index.rst rename to books/beaglebone-cookbook/index.rst diff --git a/books/index.rst b/books/index.rst new file mode 100644 index 00000000..b96c8dab --- /dev/null +++ b/books/index.rst @@ -0,0 +1,22 @@ +Books +******** + +This is a collection of open-source books written to help Beagle developers. + +`BeagleBone Cookbook <beaglebone-cookbook>`__ is a great introduction to programming +a BeagleBone using Linux from userspace, mostly using Python or JavaScript. + +`PRU Cookbook <pru-cookbook>`__ provides numerous examples on using the incredible +ultra-low-latency microcontrollers inside the processors used on BeagleBone boards +that are a big part of what has made BeagleBone such a popular platform. + +Links to additional books available for purchase can be found on the +`Beagle books page <https://beagleboard.org/books>`__. + +.. toctree:: + :maxdepth: 1 + :caption: Books + + beaglebone-cookbook/index.rst + pru-cookbook/index.rst + diff --git a/pru-cookbook/01case/case.rst b/books/pru-cookbook/01case/case.rst similarity index 100% rename from pru-cookbook/01case/case.rst rename to books/pru-cookbook/01case/case.rst diff --git a/pru-cookbook/01case/code/blink.sim b/books/pru-cookbook/01case/code/blink.sim similarity index 100% rename from pru-cookbook/01case/code/blink.sim rename to books/pru-cookbook/01case/code/blink.sim diff --git a/pru-cookbook/01case/code/circle.py b/books/pru-cookbook/01case/code/circle.py similarity index 100% rename from pru-cookbook/01case/code/circle.py rename to books/pru-cookbook/01case/code/circle.py diff --git a/pru-cookbook/01case/code/e1.31-test.py b/books/pru-cookbook/01case/code/e1.31-test.py similarity index 100% rename from pru-cookbook/01case/code/e1.31-test.py rename to books/pru-cookbook/01case/code/e1.31-test.py diff --git a/pru-cookbook/01case/code/encoder_setup.sh b/books/pru-cookbook/01case/code/encoder_setup.sh similarity index 100% rename from pru-cookbook/01case/code/encoder_setup.sh rename to books/pru-cookbook/01case/code/encoder_setup.sh diff --git a/pru-cookbook/01case/code/fire.fseq b/books/pru-cookbook/01case/code/fire.fseq similarity index 100% rename from pru-cookbook/01case/code/fire.fseq rename to books/pru-cookbook/01case/code/fire.fseq diff --git a/pru-cookbook/01case/code/logic_install.sh b/books/pru-cookbook/01case/code/logic_install.sh similarity index 100% rename from pru-cookbook/01case/code/logic_install.sh rename to books/pru-cookbook/01case/code/logic_install.sh diff --git a/pru-cookbook/01case/code/main_pru1.c b/books/pru-cookbook/01case/code/main_pru1.c similarity index 100% rename from pru-cookbook/01case/code/main_pru1.c rename to books/pru-cookbook/01case/code/main_pru1.c diff --git a/pru-cookbook/01case/code/my-config.json b/books/pru-cookbook/01case/code/my-config.json similarity index 100% rename from pru-cookbook/01case/code/my-config.json rename to books/pru-cookbook/01case/code/my-config.json diff --git a/pru-cookbook/01case/code/opc.py b/books/pru-cookbook/01case/code/opc.py similarity index 100% rename from pru-cookbook/01case/code/opc.py rename to books/pru-cookbook/01case/code/opc.py diff --git a/pru-cookbook/01case/code/pru1-servo.asm b/books/pru-cookbook/01case/code/pru1-servo.asm similarity index 100% rename from pru-cookbook/01case/code/pru1-servo.asm rename to books/pru-cookbook/01case/code/pru1-servo.asm diff --git a/pru-cookbook/01case/code/servo-test.c b/books/pru-cookbook/01case/code/servo-test.c similarity index 100% rename from pru-cookbook/01case/code/servo-test.c rename to books/pru-cookbook/01case/code/servo-test.c diff --git a/pru-cookbook/01case/code/servos_setup.sh b/books/pru-cookbook/01case/code/servos_setup.sh similarity index 100% rename from pru-cookbook/01case/code/servos_setup.sh rename to books/pru-cookbook/01case/code/servos_setup.sh diff --git a/pru-cookbook/01case/figures/LEDblink.png b/books/pru-cookbook/01case/figures/LEDblink.png similarity index 100% rename from pru-cookbook/01case/figures/LEDblink.png rename to books/pru-cookbook/01case/figures/LEDblink.png diff --git a/pru-cookbook/01case/figures/beaglelogic_capture.png b/books/pru-cookbook/01case/figures/beaglelogic_capture.png similarity index 100% rename from pru-cookbook/01case/figures/beaglelogic_capture.png rename to books/pru-cookbook/01case/figures/beaglelogic_capture.png diff --git a/pru-cookbook/01case/figures/blue.png b/books/pru-cookbook/01case/figures/blue.png similarity index 100% rename from pru-cookbook/01case/figures/blue.png rename to books/pru-cookbook/01case/figures/blue.png diff --git a/pru-cookbook/01case/figures/fpp_channel_inputs.png b/books/pru-cookbook/01case/figures/fpp_channel_inputs.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_channel_inputs.png rename to books/pru-cookbook/01case/figures/fpp_channel_inputs.png diff --git a/pru-cookbook/01case/figures/fpp_channel_outputs.png b/books/pru-cookbook/01case/figures/fpp_channel_outputs.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_channel_outputs.png rename to books/pru-cookbook/01case/figures/fpp_channel_outputs.png diff --git a/pru-cookbook/01case/figures/fpp_channel_outputs_menu.png b/books/pru-cookbook/01case/figures/fpp_channel_outputs_menu.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_channel_outputs_menu.png rename to books/pru-cookbook/01case/figures/fpp_channel_outputs_menu.png diff --git a/pru-cookbook/01case/figures/fpp_channel_outputs_strings.png b/books/pru-cookbook/01case/figures/fpp_channel_outputs_strings.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_channel_outputs_strings.png rename to books/pru-cookbook/01case/figures/fpp_channel_outputs_strings.png diff --git a/pru-cookbook/01case/figures/fpp_display_testing.png b/books/pru-cookbook/01case/figures/fpp_display_testing.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_display_testing.png rename to books/pru-cookbook/01case/figures/fpp_display_testing.png diff --git a/pru-cookbook/01case/figures/fpp_display_testing2.png b/books/pru-cookbook/01case/figures/fpp_display_testing2.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_display_testing2.png rename to books/pru-cookbook/01case/figures/fpp_display_testing2.png diff --git a/pru-cookbook/01case/figures/fpp_display_testing_menu.png b/books/pru-cookbook/01case/figures/fpp_display_testing_menu.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_display_testing_menu.png rename to books/pru-cookbook/01case/figures/fpp_display_testing_menu.png diff --git a/pru-cookbook/01case/figures/fpp_display_testing_menu2.png b/books/pru-cookbook/01case/figures/fpp_display_testing_menu2.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_display_testing_menu2.png rename to books/pru-cookbook/01case/figures/fpp_display_testing_menu2.png diff --git a/pru-cookbook/01case/figures/fpp_file_manager.png b/books/pru-cookbook/01case/figures/fpp_file_manager.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_file_manager.png rename to books/pru-cookbook/01case/figures/fpp_file_manager.png diff --git a/pru-cookbook/01case/figures/fpp_inputs_setup.png b/books/pru-cookbook/01case/figures/fpp_inputs_setup.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_inputs_setup.png rename to books/pru-cookbook/01case/figures/fpp_inputs_setup.png diff --git a/pru-cookbook/01case/figures/fpp_inputs_setup2.png b/books/pru-cookbook/01case/figures/fpp_inputs_setup2.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_inputs_setup2.png rename to books/pru-cookbook/01case/figures/fpp_inputs_setup2.png diff --git a/pru-cookbook/01case/figures/fpp_mode_bridge.png b/books/pru-cookbook/01case/figures/fpp_mode_bridge.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_mode_bridge.png rename to books/pru-cookbook/01case/figures/fpp_mode_bridge.png diff --git a/pru-cookbook/01case/figures/fpp_playlist.png b/books/pru-cookbook/01case/figures/fpp_playlist.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_playlist.png rename to books/pru-cookbook/01case/figures/fpp_playlist.png diff --git a/pru-cookbook/01case/figures/fpp_playlist_status.png b/books/pru-cookbook/01case/figures/fpp_playlist_status.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_playlist_status.png rename to books/pru-cookbook/01case/figures/fpp_playlist_status.png diff --git a/pru-cookbook/01case/figures/fpp_program_control.png b/books/pru-cookbook/01case/figures/fpp_program_control.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_program_control.png rename to books/pru-cookbook/01case/figures/fpp_program_control.png diff --git a/pru-cookbook/01case/figures/fpp_status.png b/books/pru-cookbook/01case/figures/fpp_status.png similarity index 100% rename from pru-cookbook/01case/figures/fpp_status.png rename to books/pru-cookbook/01case/figures/fpp_status.png diff --git a/pru-cookbook/01case/figures/ledmatrix.jpg b/books/pru-cookbook/01case/figures/ledmatrix.jpg similarity index 100% rename from pru-cookbook/01case/figures/ledmatrix.jpg rename to books/pru-cookbook/01case/figures/ledmatrix.jpg diff --git a/pru-cookbook/01case/figures/pocketscroller.jpg b/books/pru-cookbook/01case/figures/pocketscroller.jpg similarity index 100% rename from pru-cookbook/01case/figures/pocketscroller.jpg rename to books/pru-cookbook/01case/figures/pocketscroller.jpg diff --git a/pru-cookbook/01case/figures/xlights_layout.png b/books/pru-cookbook/01case/figures/xlights_layout.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_layout.png rename to books/pru-cookbook/01case/figures/xlights_layout.png diff --git a/pru-cookbook/01case/figures/xlights_layout_details.png b/books/pru-cookbook/01case/figures/xlights_layout_details.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_layout_details.png rename to books/pru-cookbook/01case/figures/xlights_layout_details.png diff --git a/pru-cookbook/01case/figures/xlights_seq_drag.png b/books/pru-cookbook/01case/figures/xlights_seq_drag.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_seq_drag.png rename to books/pru-cookbook/01case/figures/xlights_seq_drag.png diff --git a/pru-cookbook/01case/figures/xlights_seq_new.png b/books/pru-cookbook/01case/figures/xlights_seq_new.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_seq_new.png rename to books/pru-cookbook/01case/figures/xlights_seq_new.png diff --git a/pru-cookbook/01case/figures/xlights_setup.png b/books/pru-cookbook/01case/figures/xlights_setup.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_setup.png rename to books/pru-cookbook/01case/figures/xlights_setup.png diff --git a/pru-cookbook/01case/figures/xlights_setup_done.png b/books/pru-cookbook/01case/figures/xlights_setup_done.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_setup_done.png rename to books/pru-cookbook/01case/figures/xlights_setup_done.png diff --git a/pru-cookbook/01case/figures/xlights_setup_e1_31.png b/books/pru-cookbook/01case/figures/xlights_setup_e1_31.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_setup_e1_31.png rename to books/pru-cookbook/01case/figures/xlights_setup_e1_31.png diff --git a/pru-cookbook/01case/figures/xlights_setup_e1_31.png.orig b/books/pru-cookbook/01case/figures/xlights_setup_e1_31.png.orig similarity index 100% rename from pru-cookbook/01case/figures/xlights_setup_e1_31.png.orig rename to books/pru-cookbook/01case/figures/xlights_setup_e1_31.png.orig diff --git a/pru-cookbook/01case/figures/xlights_test.png b/books/pru-cookbook/01case/figures/xlights_test.png similarity index 100% rename from pru-cookbook/01case/figures/xlights_test.png rename to books/pru-cookbook/01case/figures/xlights_test.png diff --git a/pru-cookbook/01case/figures/xlights_twinkle.jpg b/books/pru-cookbook/01case/figures/xlights_twinkle.jpg similarity index 100% rename from pru-cookbook/01case/figures/xlights_twinkle.jpg rename to books/pru-cookbook/01case/figures/xlights_twinkle.jpg diff --git a/pru-cookbook/02start/code/Makefile b/books/pru-cookbook/02start/code/Makefile similarity index 100% rename from pru-cookbook/02start/code/Makefile rename to books/pru-cookbook/02start/code/Makefile diff --git a/pru-cookbook/02start/code/ai.notes b/books/pru-cookbook/02start/code/ai.notes similarity index 100% rename from pru-cookbook/02start/code/ai.notes rename to books/pru-cookbook/02start/code/ai.notes diff --git a/pru-cookbook/02start/code/hello.pru0.c b/books/pru-cookbook/02start/code/hello.pru0.c similarity index 100% rename from pru-cookbook/02start/code/hello.pru0.c rename to books/pru-cookbook/02start/code/hello.pru0.c diff --git a/pru-cookbook/02start/code/hello.pru1_1.c b/books/pru-cookbook/02start/code/hello.pru1_1.c similarity index 100% rename from pru-cookbook/02start/code/hello.pru1_1.c rename to books/pru-cookbook/02start/code/hello.pru1_1.c diff --git a/pru-cookbook/02start/code/hello2.pru0.c b/books/pru-cookbook/02start/code/hello2.pru0.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru0.c rename to books/pru-cookbook/02start/code/hello2.pru0.c diff --git a/pru-cookbook/02start/code/hello2.pru1.c b/books/pru-cookbook/02start/code/hello2.pru1.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru1.c rename to books/pru-cookbook/02start/code/hello2.pru1.c diff --git a/pru-cookbook/02start/code/hello2.pru1_0.c b/books/pru-cookbook/02start/code/hello2.pru1_0.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru1_0.c rename to books/pru-cookbook/02start/code/hello2.pru1_0.c diff --git a/pru-cookbook/02start/code/hello2.pru1_1.c b/books/pru-cookbook/02start/code/hello2.pru1_1.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru1_1.c rename to books/pru-cookbook/02start/code/hello2.pru1_1.c diff --git a/pru-cookbook/02start/code/hello2.pru2_0.c b/books/pru-cookbook/02start/code/hello2.pru2_0.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru2_0.c rename to books/pru-cookbook/02start/code/hello2.pru2_0.c diff --git a/pru-cookbook/02start/code/hello2.pru2_1.c b/books/pru-cookbook/02start/code/hello2.pru2_1.c similarity index 100% rename from pru-cookbook/02start/code/hello2.pru2_1.c rename to books/pru-cookbook/02start/code/hello2.pru2_1.c diff --git a/pru-cookbook/02start/code/setup.sh b/books/pru-cookbook/02start/code/setup.sh similarity index 100% rename from pru-cookbook/02start/code/setup.sh rename to books/pru-cookbook/02start/code/setup.sh diff --git a/pru-cookbook/02start/code/setup2.sh b/books/pru-cookbook/02start/code/setup2.sh similarity index 100% rename from pru-cookbook/02start/code/setup2.sh rename to books/pru-cookbook/02start/code/setup2.sh diff --git a/pru-cookbook/02start/figures/BB_AI_BeautyAngle_800px.jpg b/books/pru-cookbook/02start/figures/BB_AI_BeautyAngle_800px.jpg similarity index 100% rename from pru-cookbook/02start/figures/BB_AI_BeautyAngle_800px.jpg rename to books/pru-cookbook/02start/figures/BB_AI_BeautyAngle_800px.jpg diff --git a/pru-cookbook/02start/figures/PocketBeagle-size-compare-small.jpg b/books/pru-cookbook/02start/figures/PocketBeagle-size-compare-small.jpg similarity index 100% rename from pru-cookbook/02start/figures/PocketBeagle-size-compare-small.jpg rename to books/pru-cookbook/02start/figures/PocketBeagle-size-compare-small.jpg diff --git a/pru-cookbook/02start/figures/beagle-blue.png b/books/pru-cookbook/02start/figures/beagle-blue.png similarity index 100% rename from pru-cookbook/02start/figures/beagle-blue.png rename to books/pru-cookbook/02start/figures/beagle-blue.png diff --git a/pru-cookbook/02start/figures/c9.png b/books/pru-cookbook/02start/figures/c9.png similarity index 100% rename from pru-cookbook/02start/figures/c9.png rename to books/pru-cookbook/02start/figures/c9.png diff --git a/pru-cookbook/02start/figures/c9ShowHome.png b/books/pru-cookbook/02start/figures/c9ShowHome.png similarity index 100% rename from pru-cookbook/02start/figures/c9ShowHome.png rename to books/pru-cookbook/02start/figures/c9ShowHome.png diff --git a/pru-cookbook/02start/figures/edumip.png b/books/pru-cookbook/02start/figures/edumip.png similarity index 100% rename from pru-cookbook/02start/figures/edumip.png rename to books/pru-cookbook/02start/figures/edumip.png diff --git a/pru-cookbook/02start/figures/etcher.png b/books/pru-cookbook/02start/figures/etcher.png similarity index 100% rename from pru-cookbook/02start/figures/etcher.png rename to books/pru-cookbook/02start/figures/etcher.png diff --git a/pru-cookbook/02start/figures/latest-images.png b/books/pru-cookbook/02start/figures/latest-images.png similarity index 100% rename from pru-cookbook/02start/figures/latest-images.png rename to books/pru-cookbook/02start/figures/latest-images.png diff --git a/pru-cookbook/02start/figures/product_detail_black_sm.jpg b/books/pru-cookbook/02start/figures/product_detail_black_sm.jpg similarity index 100% rename from pru-cookbook/02start/figures/product_detail_black_sm.jpg rename to books/pru-cookbook/02start/figures/product_detail_black_sm.jpg diff --git a/pru-cookbook/02start/start.rst b/books/pru-cookbook/02start/start.rst similarity index 100% rename from pru-cookbook/02start/start.rst rename to books/pru-cookbook/02start/start.rst diff --git a/pru-cookbook/03details/code/Makefile b/books/pru-cookbook/03details/code/Makefile similarity index 100% rename from pru-cookbook/03details/code/Makefile rename to books/pru-cookbook/03details/code/Makefile diff --git a/pru-cookbook/03details/code/encoder_setup.sh b/books/pru-cookbook/03details/code/encoder_setup.sh similarity index 100% rename from pru-cookbook/03details/code/encoder_setup.sh rename to books/pru-cookbook/03details/code/encoder_setup.sh diff --git a/pru-cookbook/03details/code/gpio_setup.sh b/books/pru-cookbook/03details/code/gpio_setup.sh similarity index 100% rename from pru-cookbook/03details/code/gpio_setup.sh rename to books/pru-cookbook/03details/code/gpio_setup.sh diff --git a/pru-cookbook/03details/code/servos_setup.sh b/books/pru-cookbook/03details/code/servos_setup.sh similarity index 100% rename from pru-cookbook/03details/code/servos_setup.sh rename to books/pru-cookbook/03details/code/servos_setup.sh diff --git a/pru-cookbook/03details/details.rst b/books/pru-cookbook/03details/details.rst similarity index 100% rename from pru-cookbook/03details/details.rst rename to books/pru-cookbook/03details/details.rst diff --git a/pru-cookbook/04debug/code/Makefile b/books/pru-cookbook/04debug/code/Makefile similarity index 100% rename from pru-cookbook/04debug/code/Makefile rename to books/pru-cookbook/04debug/code/Makefile diff --git a/pru-cookbook/04debug/code/copyright.c b/books/pru-cookbook/04debug/code/copyright.c similarity index 100% rename from pru-cookbook/04debug/code/copyright.c rename to books/pru-cookbook/04debug/code/copyright.c diff --git a/pru-cookbook/04debug/code/resource_table_empty.h b/books/pru-cookbook/04debug/code/resource_table_empty.h similarity index 100% rename from pru-cookbook/04debug/code/resource_table_empty.h rename to books/pru-cookbook/04debug/code/resource_table_empty.h diff --git a/pru-cookbook/04debug/code/uart1.pru0.c b/books/pru-cookbook/04debug/code/uart1.pru0.c similarity index 100% rename from pru-cookbook/04debug/code/uart1.pru0.c rename to books/pru-cookbook/04debug/code/uart1.pru0.c diff --git a/pru-cookbook/04debug/code/uart1.pru1_0.c b/books/pru-cookbook/04debug/code/uart1.pru1_0.c similarity index 100% rename from pru-cookbook/04debug/code/uart1.pru1_0.c rename to books/pru-cookbook/04debug/code/uart1.pru1_0.c diff --git a/pru-cookbook/04debug/code/uart2.pru0.c b/books/pru-cookbook/04debug/code/uart2.pru0.c similarity index 100% rename from pru-cookbook/04debug/code/uart2.pru0.c rename to books/pru-cookbook/04debug/code/uart2.pru0.c diff --git a/pru-cookbook/04debug/code/uart2.pru1_0.c b/books/pru-cookbook/04debug/code/uart2.pru1_0.c similarity index 100% rename from pru-cookbook/04debug/code/uart2.pru1_0.c rename to books/pru-cookbook/04debug/code/uart2.pru1_0.c diff --git a/pru-cookbook/04debug/code/uart_setup.sh b/books/pru-cookbook/04debug/code/uart_setup.sh similarity index 100% rename from pru-cookbook/04debug/code/uart_setup.sh rename to books/pru-cookbook/04debug/code/uart_setup.sh diff --git a/pru-cookbook/04debug/debug.rst b/books/pru-cookbook/04debug/debug.rst similarity index 100% rename from pru-cookbook/04debug/debug.rst rename to books/pru-cookbook/04debug/debug.rst diff --git a/pru-cookbook/04debug/figures/FTDIcable.jpg b/books/pru-cookbook/04debug/figures/FTDIcable.jpg similarity index 100% rename from pru-cookbook/04debug/figures/FTDIcable.jpg rename to books/pru-cookbook/04debug/figures/FTDIcable.jpg diff --git a/pru-cookbook/04debug/figures/FTDIconnector.jpg b/books/pru-cookbook/04debug/figures/FTDIconnector.jpg similarity index 100% rename from pru-cookbook/04debug/figures/FTDIconnector.jpg rename to books/pru-cookbook/04debug/figures/FTDIconnector.jpg diff --git a/pru-cookbook/04debug/figures/FTDIhookup.fzz b/books/pru-cookbook/04debug/figures/FTDIhookup.fzz similarity index 100% rename from pru-cookbook/04debug/figures/FTDIhookup.fzz rename to books/pru-cookbook/04debug/figures/FTDIhookup.fzz diff --git a/pru-cookbook/04debug/figures/FTDIhookup_bb.png b/books/pru-cookbook/04debug/figures/FTDIhookup_bb.png similarity index 100% rename from pru-cookbook/04debug/figures/FTDIhookup_bb.png rename to books/pru-cookbook/04debug/figures/FTDIhookup_bb.png diff --git a/pru-cookbook/04debug/figures/LED.fzz b/books/pru-cookbook/04debug/figures/LED.fzz similarity index 100% rename from pru-cookbook/04debug/figures/LED.fzz rename to books/pru-cookbook/04debug/figures/LED.fzz diff --git a/pru-cookbook/04debug/figures/LED_bb.png b/books/pru-cookbook/04debug/figures/LED_bb.png similarity index 100% rename from pru-cookbook/04debug/figures/LED_bb.png rename to books/pru-cookbook/04debug/figures/LED_bb.png diff --git a/pru-cookbook/04debug/figures/uart1.pru0.png b/books/pru-cookbook/04debug/figures/uart1.pru0.png similarity index 100% rename from pru-cookbook/04debug/figures/uart1.pru0.png rename to books/pru-cookbook/04debug/figures/uart1.pru0.png diff --git a/pru-cookbook/04debug/figures/uart2.pru0.png b/books/pru-cookbook/04debug/figures/uart2.pru0.png similarity index 100% rename from pru-cookbook/04debug/figures/uart2.pru0.png rename to books/pru-cookbook/04debug/figures/uart2.pru0.png diff --git a/pru-cookbook/05blocks/blocks.rst b/books/pru-cookbook/05blocks/blocks.rst similarity index 100% rename from pru-cookbook/05blocks/blocks.rst rename to books/pru-cookbook/05blocks/blocks.rst diff --git a/pru-cookbook/05blocks/code/Makefile b/books/pru-cookbook/05blocks/code/Makefile similarity index 100% rename from pru-cookbook/05blocks/code/Makefile rename to books/pru-cookbook/05blocks/code/Makefile diff --git a/pru-cookbook/05blocks/code/copyright.c b/books/pru-cookbook/05blocks/code/copyright.c similarity index 100% rename from pru-cookbook/05blocks/code/copyright.c rename to books/pru-cookbook/05blocks/code/copyright.c diff --git a/pru-cookbook/05blocks/code/input.pru0.c b/books/pru-cookbook/05blocks/code/input.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/input.pru0.c rename to books/pru-cookbook/05blocks/code/input.pru0.c diff --git a/pru-cookbook/05blocks/code/input_setup.sh b/books/pru-cookbook/05blocks/code/input_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/input_setup.sh rename to books/pru-cookbook/05blocks/code/input_setup.sh diff --git a/pru-cookbook/05blocks/code/module/.gitignore b/books/pru-cookbook/05blocks/code/module/.gitignore similarity index 100% rename from pru-cookbook/05blocks/code/module/.gitignore rename to books/pru-cookbook/05blocks/code/module/.gitignore diff --git a/pru-cookbook/05blocks/code/module/Makefile b/books/pru-cookbook/05blocks/code/module/Makefile similarity index 100% rename from pru-cookbook/05blocks/code/module/Makefile rename to books/pru-cookbook/05blocks/code/module/Makefile diff --git a/pru-cookbook/05blocks/code/module/install.sh b/books/pru-cookbook/05blocks/code/module/install.sh similarity index 100% rename from pru-cookbook/05blocks/code/module/install.sh rename to books/pru-cookbook/05blocks/code/module/install.sh diff --git a/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c b/books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c similarity index 100% rename from pru-cookbook/05blocks/code/module/rpmsg_client_sample.c rename to books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c diff --git a/pru-cookbook/05blocks/code/module/rpmsg_pru.c b/books/pru-cookbook/05blocks/code/module/rpmsg_pru.c similarity index 100% rename from pru-cookbook/05blocks/code/module/rpmsg_pru.c rename to books/pru-cookbook/05blocks/code/module/rpmsg_pru.c diff --git a/pru-cookbook/05blocks/code/module/setup.sh b/books/pru-cookbook/05blocks/code/module/setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/module/setup.sh rename to books/pru-cookbook/05blocks/code/module/setup.sh diff --git a/pru-cookbook/05blocks/code/neo-colors.py b/books/pru-cookbook/05blocks/code/neo-colors.py similarity index 100% rename from pru-cookbook/05blocks/code/neo-colors.py rename to books/pru-cookbook/05blocks/code/neo-colors.py diff --git a/pru-cookbook/05blocks/code/neo-rainbow.py b/books/pru-cookbook/05blocks/code/neo-rainbow.py similarity index 100% rename from pru-cookbook/05blocks/code/neo-rainbow.py rename to books/pru-cookbook/05blocks/code/neo-rainbow.py diff --git a/pru-cookbook/05blocks/code/neo1.pru0.c b/books/pru-cookbook/05blocks/code/neo1.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/neo1.pru0.c rename to books/pru-cookbook/05blocks/code/neo1.pru0.c diff --git a/pru-cookbook/05blocks/code/neo1.pru1_1.c b/books/pru-cookbook/05blocks/code/neo1.pru1_1.c similarity index 100% rename from pru-cookbook/05blocks/code/neo1.pru1_1.c rename to books/pru-cookbook/05blocks/code/neo1.pru1_1.c diff --git a/pru-cookbook/05blocks/code/neo2.pru0.c b/books/pru-cookbook/05blocks/code/neo2.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/neo2.pru0.c rename to books/pru-cookbook/05blocks/code/neo2.pru0.c diff --git a/pru-cookbook/05blocks/code/neo2.pru1_1.c b/books/pru-cookbook/05blocks/code/neo2.pru1_1.c similarity index 100% rename from pru-cookbook/05blocks/code/neo2.pru1_1.c rename to books/pru-cookbook/05blocks/code/neo2.pru1_1.c diff --git a/pru-cookbook/05blocks/code/neo3.pru0.c b/books/pru-cookbook/05blocks/code/neo3.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/neo3.pru0.c rename to books/pru-cookbook/05blocks/code/neo3.pru0.c diff --git a/pru-cookbook/05blocks/code/neo3.pru1_1.c b/books/pru-cookbook/05blocks/code/neo3.pru1_1.c similarity index 100% rename from pru-cookbook/05blocks/code/neo3.pru1_1.c rename to books/pru-cookbook/05blocks/code/neo3.pru1_1.c diff --git a/pru-cookbook/05blocks/code/neo4.pru0.c b/books/pru-cookbook/05blocks/code/neo4.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/neo4.pru0.c rename to books/pru-cookbook/05blocks/code/neo4.pru0.c diff --git a/pru-cookbook/05blocks/code/neo4.pru1_1.c b/books/pru-cookbook/05blocks/code/neo4.pru1_1.c similarity index 100% rename from pru-cookbook/05blocks/code/neo4.pru1_1.c rename to books/pru-cookbook/05blocks/code/neo4.pru1_1.c diff --git a/pru-cookbook/05blocks/code/neo_setup.sh b/books/pru-cookbook/05blocks/code/neo_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/neo_setup.sh rename to books/pru-cookbook/05blocks/code/neo_setup.sh diff --git a/pru-cookbook/05blocks/code/pwm-test.c b/books/pru-cookbook/05blocks/code/pwm-test.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm-test.c rename to books/pru-cookbook/05blocks/code/pwm-test.c diff --git a/pru-cookbook/05blocks/code/pwm1.pru0.c b/books/pru-cookbook/05blocks/code/pwm1.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm1.pru0.c rename to books/pru-cookbook/05blocks/code/pwm1.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm1.pru1_1.c b/books/pru-cookbook/05blocks/code/pwm1.pru1_1.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm1.pru1_1.c rename to books/pru-cookbook/05blocks/code/pwm1.pru1_1.c diff --git a/pru-cookbook/05blocks/code/pwm2.pru0.c b/books/pru-cookbook/05blocks/code/pwm2.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm2.pru0.c rename to books/pru-cookbook/05blocks/code/pwm2.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm3.pru0.c b/books/pru-cookbook/05blocks/code/pwm3.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm3.pru0.c rename to books/pru-cookbook/05blocks/code/pwm3.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm4.pru0.c b/books/pru-cookbook/05blocks/code/pwm4.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm4.pru0.c rename to books/pru-cookbook/05blocks/code/pwm4.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm5.pru0.c b/books/pru-cookbook/05blocks/code/pwm5.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm5.pru0.c rename to books/pru-cookbook/05blocks/code/pwm5.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm6.pru0.c b/books/pru-cookbook/05blocks/code/pwm6.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm6.pru0.c rename to books/pru-cookbook/05blocks/code/pwm6.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm7-test.c b/books/pru-cookbook/05blocks/code/pwm7-test.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm7-test.c rename to books/pru-cookbook/05blocks/code/pwm7-test.c diff --git a/pru-cookbook/05blocks/code/pwm7.pru0.c b/books/pru-cookbook/05blocks/code/pwm7.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm7.pru0.c rename to books/pru-cookbook/05blocks/code/pwm7.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm7.pru1.c b/books/pru-cookbook/05blocks/code/pwm7.pru1.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm7.pru1.c rename to books/pru-cookbook/05blocks/code/pwm7.pru1.c diff --git a/pru-cookbook/05blocks/code/pwm7_setup.sh b/books/pru-cookbook/05blocks/code/pwm7_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/pwm7_setup.sh rename to books/pru-cookbook/05blocks/code/pwm7_setup.sh diff --git a/pru-cookbook/05blocks/code/pwm8.pru0.c b/books/pru-cookbook/05blocks/code/pwm8.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm8.pru0.c rename to books/pru-cookbook/05blocks/code/pwm8.pru0.c diff --git a/pru-cookbook/05blocks/code/pwm8.pru1.c b/books/pru-cookbook/05blocks/code/pwm8.pru1.c similarity index 100% rename from pru-cookbook/05blocks/code/pwm8.pru1.c rename to books/pru-cookbook/05blocks/code/pwm8.pru1.c diff --git a/pru-cookbook/05blocks/code/pwm_setup.sh b/books/pru-cookbook/05blocks/code/pwm_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/pwm_setup.sh rename to books/pru-cookbook/05blocks/code/pwm_setup.sh diff --git a/pru-cookbook/05blocks/code/resource_table_empty.h b/books/pru-cookbook/05blocks/code/resource_table_empty.h similarity index 100% rename from pru-cookbook/05blocks/code/resource_table_empty.h rename to books/pru-cookbook/05blocks/code/resource_table_empty.h diff --git a/pru-cookbook/05blocks/code/rgb1.pru0.c b/books/pru-cookbook/05blocks/code/rgb1.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/rgb1.pru0.c rename to books/pru-cookbook/05blocks/code/rgb1.pru0.c diff --git a/pru-cookbook/05blocks/code/rgb2.pru0.c b/books/pru-cookbook/05blocks/code/rgb2.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/rgb2.pru0.c rename to books/pru-cookbook/05blocks/code/rgb2.pru0.c diff --git a/pru-cookbook/05blocks/code/rgb3.pru0.c b/books/pru-cookbook/05blocks/code/rgb3.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/rgb3.pru0.c rename to books/pru-cookbook/05blocks/code/rgb3.pru0.c diff --git a/pru-cookbook/05blocks/code/rgb4.pru0.c b/books/pru-cookbook/05blocks/code/rgb4.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/rgb4.pru0.c rename to books/pru-cookbook/05blocks/code/rgb4.pru0.c diff --git a/pru-cookbook/05blocks/code/rgb_black.h b/books/pru-cookbook/05blocks/code/rgb_black.h similarity index 100% rename from pru-cookbook/05blocks/code/rgb_black.h rename to books/pru-cookbook/05blocks/code/rgb_black.h diff --git a/pru-cookbook/05blocks/code/rgb_pocket.h b/books/pru-cookbook/05blocks/code/rgb_pocket.h similarity index 100% rename from pru-cookbook/05blocks/code/rgb_pocket.h rename to books/pru-cookbook/05blocks/code/rgb_pocket.h diff --git a/pru-cookbook/05blocks/code/rgb_python.py b/books/pru-cookbook/05blocks/code/rgb_python.py similarity index 100% rename from pru-cookbook/05blocks/code/rgb_python.py rename to books/pru-cookbook/05blocks/code/rgb_python.py diff --git a/pru-cookbook/05blocks/code/rgb_python_setup.sh b/books/pru-cookbook/05blocks/code/rgb_python_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/rgb_python_setup.sh rename to books/pru-cookbook/05blocks/code/rgb_python_setup.sh diff --git a/pru-cookbook/05blocks/code/rgb_setup.sh b/books/pru-cookbook/05blocks/code/rgb_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/rgb_setup.sh rename to books/pru-cookbook/05blocks/code/rgb_setup.sh diff --git a/pru-cookbook/05blocks/code/rgb_white.pru0.c b/books/pru-cookbook/05blocks/code/rgb_white.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/rgb_white.pru0.c rename to books/pru-cookbook/05blocks/code/rgb_white.pru0.c diff --git a/pru-cookbook/05blocks/code/shared.pru0.c b/books/pru-cookbook/05blocks/code/shared.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/shared.pru0.c rename to books/pru-cookbook/05blocks/code/shared.pru0.c diff --git a/pru-cookbook/05blocks/code/shared_setup.sh b/books/pru-cookbook/05blocks/code/shared_setup.sh similarity index 100% rename from pru-cookbook/05blocks/code/shared_setup.sh rename to books/pru-cookbook/05blocks/code/shared_setup.sh diff --git a/pru-cookbook/05blocks/code/sine.map b/books/pru-cookbook/05blocks/code/sine.map similarity index 100% rename from pru-cookbook/05blocks/code/sine.map rename to books/pru-cookbook/05blocks/code/sine.map diff --git a/pru-cookbook/05blocks/code/sine.pru0.c b/books/pru-cookbook/05blocks/code/sine.pru0.c similarity index 100% rename from pru-cookbook/05blocks/code/sine.pru0.c rename to books/pru-cookbook/05blocks/code/sine.pru0.c diff --git a/pru-cookbook/05blocks/code/write_init_pins.sh b/books/pru-cookbook/05blocks/code/write_init_pins.sh similarity index 100% rename from pru-cookbook/05blocks/code/write_init_pins.sh rename to books/pru-cookbook/05blocks/code/write_init_pins.sh diff --git a/pru-cookbook/05blocks/figures/blockDiagram.png b/books/pru-cookbook/05blocks/figures/blockDiagram.png similarity index 100% rename from pru-cookbook/05blocks/figures/blockDiagram.png rename to books/pru-cookbook/05blocks/figures/blockDiagram.png diff --git a/pru-cookbook/05blocks/figures/blocks_plots.asv b/books/pru-cookbook/05blocks/figures/blocks_plots.asv similarity index 100% rename from pru-cookbook/05blocks/figures/blocks_plots.asv rename to books/pru-cookbook/05blocks/figures/blocks_plots.asv diff --git a/pru-cookbook/05blocks/figures/blocks_plots.m b/books/pru-cookbook/05blocks/figures/blocks_plots.m similarity index 100% rename from pru-cookbook/05blocks/figures/blocks_plots.m rename to books/pru-cookbook/05blocks/figures/blocks_plots.m diff --git a/pru-cookbook/05blocks/figures/filter.fzz b/books/pru-cookbook/05blocks/figures/filter.fzz similarity index 100% rename from pru-cookbook/05blocks/figures/filter.fzz rename to books/pru-cookbook/05blocks/figures/filter.fzz diff --git a/pru-cookbook/05blocks/figures/filter_bb.png b/books/pru-cookbook/05blocks/figures/filter_bb.png similarity index 100% rename from pru-cookbook/05blocks/figures/filter_bb.png rename to books/pru-cookbook/05blocks/figures/filter_bb.png diff --git a/pru-cookbook/05blocks/figures/matrix_j1.jpg b/books/pru-cookbook/05blocks/figures/matrix_j1.jpg similarity index 100% rename from pru-cookbook/05blocks/figures/matrix_j1.jpg rename to books/pru-cookbook/05blocks/figures/matrix_j1.jpg diff --git a/pru-cookbook/05blocks/figures/neo.fzz b/books/pru-cookbook/05blocks/figures/neo.fzz similarity index 100% rename from pru-cookbook/05blocks/figures/neo.fzz rename to books/pru-cookbook/05blocks/figures/neo.fzz diff --git a/pru-cookbook/05blocks/figures/neo_bb.png b/books/pru-cookbook/05blocks/figures/neo_bb.png similarity index 100% rename from pru-cookbook/05blocks/figures/neo_bb.png rename to books/pru-cookbook/05blocks/figures/neo_bb.png diff --git a/pru-cookbook/05blocks/figures/neo_data_seq.png b/books/pru-cookbook/05blocks/figures/neo_data_seq.png similarity index 100% rename from pru-cookbook/05blocks/figures/neo_data_seq.png rename to books/pru-cookbook/05blocks/figures/neo_data_seq.png diff --git a/pru-cookbook/05blocks/figures/neo_scope.png b/books/pru-cookbook/05blocks/figures/neo_scope.png similarity index 100% rename from pru-cookbook/05blocks/figures/neo_scope.png rename to books/pru-cookbook/05blocks/figures/neo_scope.png diff --git a/pru-cookbook/05blocks/figures/neo_sequence.png b/books/pru-cookbook/05blocks/figures/neo_sequence.png similarity index 100% rename from pru-cookbook/05blocks/figures/neo_sequence.png rename to books/pru-cookbook/05blocks/figures/neo_sequence.png diff --git a/pru-cookbook/05blocks/figures/pwm1.png b/books/pru-cookbook/05blocks/figures/pwm1.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm1.png rename to books/pru-cookbook/05blocks/figures/pwm1.png diff --git a/pru-cookbook/05blocks/figures/pwm2.png b/books/pru-cookbook/05blocks/figures/pwm2.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm2.png rename to books/pru-cookbook/05blocks/figures/pwm2.png diff --git a/pru-cookbook/05blocks/figures/pwm3.png b/books/pru-cookbook/05blocks/figures/pwm3.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm3.png rename to books/pru-cookbook/05blocks/figures/pwm3.png diff --git a/pru-cookbook/05blocks/figures/pwm4.png b/books/pru-cookbook/05blocks/figures/pwm4.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm4.png rename to books/pru-cookbook/05blocks/figures/pwm4.png diff --git a/pru-cookbook/05blocks/figures/pwm5_no_loop.png b/books/pru-cookbook/05blocks/figures/pwm5_no_loop.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm5_no_loop.png rename to books/pru-cookbook/05blocks/figures/pwm5_no_loop.png diff --git a/pru-cookbook/05blocks/figures/pwm5_zoomed.png b/books/pru-cookbook/05blocks/figures/pwm5_zoomed.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm5_zoomed.png rename to books/pru-cookbook/05blocks/figures/pwm5_zoomed.png diff --git a/pru-cookbook/05blocks/figures/pwm6_synced.png b/books/pru-cookbook/05blocks/figures/pwm6_synced.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm6_synced.png rename to books/pru-cookbook/05blocks/figures/pwm6_synced.png diff --git a/pru-cookbook/05blocks/figures/pwm7_two_prus_running.png b/books/pru-cookbook/05blocks/figures/pwm7_two_prus_running.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm7_two_prus_running.png rename to books/pru-cookbook/05blocks/figures/pwm7_two_prus_running.png diff --git a/pru-cookbook/05blocks/figures/pwm7_two_prus_stopped.png b/books/pru-cookbook/05blocks/figures/pwm7_two_prus_stopped.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm7_two_prus_stopped.png rename to books/pru-cookbook/05blocks/figures/pwm7_two_prus_stopped.png diff --git a/pru-cookbook/05blocks/figures/pwm8_prus_sycned.png b/books/pru-cookbook/05blocks/figures/pwm8_prus_sycned.png similarity index 100% rename from pru-cookbook/05blocks/figures/pwm8_prus_sycned.png rename to books/pru-cookbook/05blocks/figures/pwm8_prus_sycned.png diff --git a/pru-cookbook/05blocks/figures/rgb_fpp.png b/books/pru-cookbook/05blocks/figures/rgb_fpp.png similarity index 100% rename from pru-cookbook/05blocks/figures/rgb_fpp.png rename to books/pru-cookbook/05blocks/figures/rgb_fpp.png diff --git a/pru-cookbook/05blocks/figures/rgb_pru.jpg b/books/pru-cookbook/05blocks/figures/rgb_pru.jpg similarity index 100% rename from pru-cookbook/05blocks/figures/rgb_pru.jpg rename to books/pru-cookbook/05blocks/figures/rgb_pru.jpg diff --git a/pru-cookbook/05blocks/figures/rgb_python.jpg b/books/pru-cookbook/05blocks/figures/rgb_python.jpg similarity index 100% rename from pru-cookbook/05blocks/figures/rgb_python.jpg rename to books/pru-cookbook/05blocks/figures/rgb_python.jpg diff --git a/pru-cookbook/05blocks/figures/rgb_waveforms.png b/books/pru-cookbook/05blocks/figures/rgb_waveforms.png similarity index 100% rename from pru-cookbook/05blocks/figures/rgb_waveforms.png rename to books/pru-cookbook/05blocks/figures/rgb_waveforms.png diff --git a/pru-cookbook/05blocks/figures/ring_around.mp4 b/books/pru-cookbook/05blocks/figures/ring_around.mp4 similarity index 100% rename from pru-cookbook/05blocks/figures/ring_around.mp4 rename to books/pru-cookbook/05blocks/figures/ring_around.mp4 diff --git a/pru-cookbook/05blocks/figures/sawhighercutoff.png b/books/pru-cookbook/05blocks/figures/sawhighercutoff.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawhighercutoff.png rename to books/pru-cookbook/05blocks/figures/sawhighercutoff.png diff --git a/pru-cookbook/05blocks/figures/sawlowercutoff.png b/books/pru-cookbook/05blocks/figures/sawlowercutoff.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawlowercutoff.png rename to books/pru-cookbook/05blocks/figures/sawlowercutoff.png diff --git a/pru-cookbook/05blocks/figures/sawscope.png b/books/pru-cookbook/05blocks/figures/sawscope.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawscope.png rename to books/pru-cookbook/05blocks/figures/sawscope.png diff --git a/pru-cookbook/05blocks/figures/sawtoothsampled.png b/books/pru-cookbook/05blocks/figures/sawtoothsampled.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawtoothsampled.png rename to books/pru-cookbook/05blocks/figures/sawtoothsampled.png diff --git a/pru-cookbook/05blocks/figures/sawtoothsmooth.png b/books/pru-cookbook/05blocks/figures/sawtoothsmooth.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawtoothsmooth.png rename to books/pru-cookbook/05blocks/figures/sawtoothsmooth.png diff --git a/pru-cookbook/05blocks/figures/sawunfiltered.png b/books/pru-cookbook/05blocks/figures/sawunfiltered.png similarity index 100% rename from pru-cookbook/05blocks/figures/sawunfiltered.png rename to books/pru-cookbook/05blocks/figures/sawunfiltered.png diff --git a/pru-cookbook/05blocks/figures/sine.png b/books/pru-cookbook/05blocks/figures/sine.png similarity index 100% rename from pru-cookbook/05blocks/figures/sine.png rename to books/pru-cookbook/05blocks/figures/sine.png diff --git a/pru-cookbook/05blocks/figures/triangle.png b/books/pru-cookbook/05blocks/figures/triangle.png similarity index 100% rename from pru-cookbook/05blocks/figures/triangle.png rename to books/pru-cookbook/05blocks/figures/triangle.png diff --git a/pru-cookbook/06io/code/Makefile b/books/pru-cookbook/06io/code/Makefile similarity index 100% rename from pru-cookbook/06io/code/Makefile rename to books/pru-cookbook/06io/code/Makefile diff --git a/pru-cookbook/06io/code/gpio.pru0.c b/books/pru-cookbook/06io/code/gpio.pru0.c similarity index 100% rename from pru-cookbook/06io/code/gpio.pru0.c rename to books/pru-cookbook/06io/code/gpio.pru0.c diff --git a/pru-cookbook/06io/code/setup.sh b/books/pru-cookbook/06io/code/setup.sh similarity index 100% rename from pru-cookbook/06io/code/setup.sh rename to books/pru-cookbook/06io/code/setup.sh diff --git a/pru-cookbook/06io/figures/gpio0delay.png b/books/pru-cookbook/06io/figures/gpio0delay.png similarity index 100% rename from pru-cookbook/06io/figures/gpio0delay.png rename to books/pru-cookbook/06io/figures/gpio0delay.png diff --git a/pru-cookbook/06io/figures/jitter.png b/books/pru-cookbook/06io/figures/jitter.png similarity index 100% rename from pru-cookbook/06io/figures/jitter.png rename to books/pru-cookbook/06io/figures/jitter.png diff --git a/pru-cookbook/06io/figures/pruIntegration.png b/books/pru-cookbook/06io/figures/pruIntegration.png similarity index 100% rename from pru-cookbook/06io/figures/pruIntegration.png rename to books/pru-cookbook/06io/figures/pruIntegration.png diff --git a/pru-cookbook/06io/io.html b/books/pru-cookbook/06io/io.html similarity index 100% rename from pru-cookbook/06io/io.html rename to books/pru-cookbook/06io/io.html diff --git a/pru-cookbook/06io/io.rst b/books/pru-cookbook/06io/io.rst similarity index 100% rename from pru-cookbook/06io/io.rst rename to books/pru-cookbook/06io/io.rst diff --git a/pru-cookbook/07more/code/Makefile b/books/pru-cookbook/07more/code/Makefile similarity index 100% rename from pru-cookbook/07more/code/Makefile rename to books/pru-cookbook/07more/code/Makefile diff --git a/pru-cookbook/07more/code/copyright.c b/books/pru-cookbook/07more/code/copyright.c similarity index 100% rename from pru-cookbook/07more/code/copyright.c rename to books/pru-cookbook/07more/code/copyright.c diff --git a/pru-cookbook/07more/code/cycle.pru0.c b/books/pru-cookbook/07more/code/cycle.pru0.c similarity index 100% rename from pru-cookbook/07more/code/cycle.pru0.c rename to books/pru-cookbook/07more/code/cycle.pru0.c diff --git a/pru-cookbook/07more/code/cycle.pru0.lst b/books/pru-cookbook/07more/code/cycle.pru0.lst similarity index 100% rename from pru-cookbook/07more/code/cycle.pru0.lst rename to books/pru-cookbook/07more/code/cycle.pru0.lst diff --git a/pru-cookbook/07more/code/delay-test.pru0.c b/books/pru-cookbook/07more/code/delay-test.pru0.c similarity index 100% rename from pru-cookbook/07more/code/delay-test.pru0.c rename to books/pru-cookbook/07more/code/delay-test.pru0.c diff --git a/pru-cookbook/07more/code/delay-test2.pru0.c b/books/pru-cookbook/07more/code/delay-test2.pru0.c similarity index 100% rename from pru-cookbook/07more/code/delay-test2.pru0.c rename to books/pru-cookbook/07more/code/delay-test2.pru0.c diff --git a/pru-cookbook/07more/code/delay.pru0.asm b/books/pru-cookbook/07more/code/delay.pru0.asm similarity index 100% rename from pru-cookbook/07more/code/delay.pru0.asm rename to books/pru-cookbook/07more/code/delay.pru0.asm diff --git a/pru-cookbook/07more/code/delay2.pru0.asm b/books/pru-cookbook/07more/code/delay2.pru0.asm similarity index 100% rename from pru-cookbook/07more/code/delay2.pru0.asm rename to books/pru-cookbook/07more/code/delay2.pru0.asm diff --git a/pru-cookbook/07more/code/logic.c b/books/pru-cookbook/07more/code/logic.c similarity index 100% rename from pru-cookbook/07more/code/logic.c rename to books/pru-cookbook/07more/code/logic.c diff --git a/pru-cookbook/07more/code/logic_setup.sh b/books/pru-cookbook/07more/code/logic_setup.sh similarity index 100% rename from pru-cookbook/07more/code/logic_setup.sh rename to books/pru-cookbook/07more/code/logic_setup.sh diff --git a/pru-cookbook/07more/code/resource_table_pru0.h b/books/pru-cookbook/07more/code/resource_table_pru0.h similarity index 100% rename from pru-cookbook/07more/code/resource_table_pru0.h rename to books/pru-cookbook/07more/code/resource_table_pru0.h diff --git a/pru-cookbook/07more/code/setup.sh b/books/pru-cookbook/07more/code/setup.sh similarity index 100% rename from pru-cookbook/07more/code/setup.sh rename to books/pru-cookbook/07more/code/setup.sh diff --git a/pru-cookbook/07more/code/xin.pru1.c b/books/pru-cookbook/07more/code/xin.pru1.c similarity index 100% rename from pru-cookbook/07more/code/xin.pru1.c rename to books/pru-cookbook/07more/code/xin.pru1.c diff --git a/pru-cookbook/07more/code/xout-cycle.pru0.c b/books/pru-cookbook/07more/code/xout-cycle.pru0.c similarity index 100% rename from pru-cookbook/07more/code/xout-cycle.pru0.c rename to books/pru-cookbook/07more/code/xout-cycle.pru0.c diff --git a/pru-cookbook/07more/code/xout.pru0.c b/books/pru-cookbook/07more/code/xout.pru0.c similarity index 100% rename from pru-cookbook/07more/code/xout.pru0.c rename to books/pru-cookbook/07more/code/xout.pru0.c diff --git a/pru-cookbook/07more/code/xout_run.sh b/books/pru-cookbook/07more/code/xout_run.sh similarity index 100% rename from pru-cookbook/07more/code/xout_run.sh rename to books/pru-cookbook/07more/code/xout_run.sh diff --git a/pru-cookbook/07more/figures/my_delay_cycles.png b/books/pru-cookbook/07more/figures/my_delay_cycles.png similarity index 100% rename from pru-cookbook/07more/figures/my_delay_cycles.png rename to books/pru-cookbook/07more/figures/my_delay_cycles.png diff --git a/pru-cookbook/07more/more.rst b/books/pru-cookbook/07more/more.rst similarity index 100% rename from pru-cookbook/07more/more.rst rename to books/pru-cookbook/07more/more.rst diff --git a/pru-cookbook/08ai/ai.rst b/books/pru-cookbook/08ai/ai.rst similarity index 100% rename from pru-cookbook/08ai/ai.rst rename to books/pru-cookbook/08ai/ai.rst diff --git a/pru-cookbook/08ai/code/Makefile b/books/pru-cookbook/08ai/code/Makefile similarity index 100% rename from pru-cookbook/08ai/code/Makefile rename to books/pru-cookbook/08ai/code/Makefile diff --git a/pru-cookbook/08ai/code/pwm1.pru2_1.c b/books/pru-cookbook/08ai/code/pwm1.pru2_1.c similarity index 100% rename from pru-cookbook/08ai/code/pwm1.pru2_1.c rename to books/pru-cookbook/08ai/code/pwm1.pru2_1.c diff --git a/pru-cookbook/common/Makefile b/books/pru-cookbook/common/Makefile similarity index 100% rename from pru-cookbook/common/Makefile rename to books/pru-cookbook/common/Makefile diff --git a/pru-cookbook/common/README.md b/books/pru-cookbook/common/README.md similarity index 100% rename from pru-cookbook/common/README.md rename to books/pru-cookbook/common/README.md diff --git a/pru-cookbook/common/config-pin.sh b/books/pru-cookbook/common/config-pin.sh similarity index 100% rename from pru-cookbook/common/config-pin.sh rename to books/pru-cookbook/common/config-pin.sh diff --git a/pru-cookbook/common/init_pins_empty.h b/books/pru-cookbook/common/init_pins_empty.h similarity index 100% rename from pru-cookbook/common/init_pins_empty.h rename to books/pru-cookbook/common/init_pins_empty.h diff --git a/pru-cookbook/common/prugpio.h b/books/pru-cookbook/common/prugpio.h similarity index 100% rename from pru-cookbook/common/prugpio.h rename to books/pru-cookbook/common/prugpio.h diff --git a/pru-cookbook/common/resource_table_0.h b/books/pru-cookbook/common/resource_table_0.h similarity index 100% rename from pru-cookbook/common/resource_table_0.h rename to books/pru-cookbook/common/resource_table_0.h diff --git a/pru-cookbook/common/resource_table_1.h b/books/pru-cookbook/common/resource_table_1.h similarity index 100% rename from pru-cookbook/common/resource_table_1.h rename to books/pru-cookbook/common/resource_table_1.h diff --git a/pru-cookbook/common/resource_table_empty.h b/books/pru-cookbook/common/resource_table_empty.h similarity index 100% rename from pru-cookbook/common/resource_table_empty.h rename to books/pru-cookbook/common/resource_table_empty.h diff --git a/pru-cookbook/common/write_init_pins.sh b/books/pru-cookbook/common/write_init_pins.sh similarity index 100% rename from pru-cookbook/common/write_init_pins.sh rename to books/pru-cookbook/common/write_init_pins.sh diff --git a/pru-cookbook/index.rst b/books/pru-cookbook/index.rst similarity index 100% rename from pru-cookbook/index.rst rename to books/pru-cookbook/index.rst diff --git a/pru-cookbook/projects.rst b/books/pru-cookbook/projects.rst similarity index 100% rename from pru-cookbook/projects.rst rename to books/pru-cookbook/projects.rst diff --git a/index-tex.rst b/index-tex.rst index c5507002..f048f60b 100644 --- a/index-tex.rst +++ b/index-tex.rst @@ -10,13 +10,7 @@ BeagleBoard Docs .. toctree:: - support/index.rst - contribution/index.rst - beaglebone-black/index.rst - beaglebone-ai-64/index.rst - pocketbeagle/index.rst - beaglebone-blue/index.rst - beagleconnect/index.rst - simppru/index.rst - beaglebone-cookbook/index.rst - pru-cookbook/index.rst + intro/index.rst + boards/index.rst + projects/index.rst + books/index.rst diff --git a/index.rst b/index.rst index 2b2b325a..8fa160df 100644 --- a/index.rst +++ b/index.rst @@ -11,31 +11,28 @@ Sections .. toctree:: :maxdepth: 1 - :caption: General + :caption: Introduction - support/index.rst - contribution/index.rst + intro/index.rst .. toctree:: :maxdepth: 1 :caption: Boards - beaglebone-black/index.rst - beaglebone-ai-64/index.rst - pocketbeagle/index.rst - beaglebone-blue/index.rst - beagleconnect/index.rst + boards/index.rst .. toctree:: :maxdepth: 1 :caption: Projects + projects/index.rst simppru/index.rst .. toctree:: :maxdepth: 1 :caption: Books + books/index.rst beaglebone-cookbook/index.rst pru-cookbook/index.rst diff --git a/contribution/contribute.rst b/intro/contribution/contribute.rst similarity index 100% rename from contribution/contribute.rst rename to intro/contribution/contribute.rst diff --git a/contribution/git-usage.rst b/intro/contribution/git-usage.rst similarity index 100% rename from contribution/git-usage.rst rename to intro/contribution/git-usage.rst diff --git a/contribution/index.rst b/intro/contribution/index.rst similarity index 100% rename from contribution/index.rst rename to intro/contribution/index.rst diff --git a/support/getting-started.rst b/intro/support/getting-started.rst similarity index 100% rename from support/getting-started.rst rename to intro/support/getting-started.rst diff --git a/support/images/88x31.png b/intro/support/images/88x31.png similarity index 100% rename from support/images/88x31.png rename to intro/support/images/88x31.png diff --git a/support/images/bad-to-the-bone.jpg b/intro/support/images/bad-to-the-bone.jpg similarity index 100% rename from support/images/bad-to-the-bone.jpg rename to intro/support/images/bad-to-the-bone.jpg diff --git a/support/images/beagle_logo_326x60.png b/intro/support/images/beagle_logo_326x60.png similarity index 100% rename from support/images/beagle_logo_326x60.png rename to intro/support/images/beagle_logo_326x60.png diff --git a/support/images/beaglebone-cookbook.jpg b/intro/support/images/beaglebone-cookbook.jpg similarity index 100% rename from support/images/beaglebone-cookbook.jpg rename to intro/support/images/beaglebone-cookbook.jpg diff --git a/support/images/bone101.png b/intro/support/images/bone101.png similarity index 100% rename from support/images/bone101.png rename to intro/support/images/bone101.png diff --git a/support/images/btn_step1.gif b/intro/support/images/btn_step1.gif similarity index 100% rename from support/images/btn_step1.gif rename to intro/support/images/btn_step1.gif diff --git a/support/images/btn_step2.gif b/intro/support/images/btn_step2.gif similarity index 100% rename from support/images/btn_step2.gif rename to intro/support/images/btn_step2.gif diff --git a/support/images/btn_step3.gif b/intro/support/images/btn_step3.gif similarity index 100% rename from support/images/btn_step3.gif rename to intro/support/images/btn_step3.gif diff --git a/support/images/download-etcher.png b/intro/support/images/download-etcher.png similarity index 100% rename from support/images/download-etcher.png rename to intro/support/images/download-etcher.png diff --git a/support/images/download-latestimage.png b/intro/support/images/download-latestimage.png similarity index 100% rename from support/images/download-latestimage.png rename to intro/support/images/download-latestimage.png diff --git a/support/images/embedded-linux-primer.jpg b/intro/support/images/embedded-linux-primer.jpg similarity index 100% rename from support/images/embedded-linux-primer.jpg rename to intro/support/images/embedded-linux-primer.jpg diff --git a/support/images/exploring-beaglebone.jpg b/intro/support/images/exploring-beaglebone.jpg similarity index 100% rename from support/images/exploring-beaglebone.jpg rename to intro/support/images/exploring-beaglebone.jpg diff --git a/support/images/icon_facebook.png b/intro/support/images/icon_facebook.png similarity index 100% rename from support/images/icon_facebook.png rename to intro/support/images/icon_facebook.png diff --git a/support/images/icon_linkedin.png b/intro/support/images/icon_linkedin.png similarity index 100% rename from support/images/icon_linkedin.png rename to intro/support/images/icon_linkedin.png diff --git a/support/images/icon_twitter.png b/intro/support/images/icon_twitter.png similarity index 100% rename from support/images/icon_twitter.png rename to intro/support/images/icon_twitter.png diff --git a/support/images/install-etcher.png b/intro/support/images/install-etcher.png similarity index 100% rename from support/images/install-etcher.png rename to intro/support/images/install-etcher.png diff --git a/support/images/write-latestimage.png b/intro/support/images/write-latestimage.png similarity index 100% rename from support/images/write-latestimage.png rename to intro/support/images/write-latestimage.png diff --git a/support/images/youTube-icon.png b/intro/support/images/youTube-icon.png similarity index 100% rename from support/images/youTube-icon.png rename to intro/support/images/youTube-icon.png diff --git a/support/overview.rst b/intro/support/index.rst similarity index 83% rename from support/overview.rst rename to intro/support/index.rst index d9e1f965..3e913b59 100644 --- a/support/overview.rst +++ b/intro/support/index.rst @@ -1,15 +1,19 @@ -Overview -========= +.. _support: + +Support +######### + +.. note:: #TODO# all the links need updating and content moved into this repo. Getting started ---------------- +=============== The starting experience for all Beagles has been made to be as consistent as is possible. For any of the Beagle Linux-based open hardware computers, visit our `getting started guide <getting-started>`__. Getting support ---------------- +=============== BeagleBoard.org products and `open hardware <https://www.oshwa.org/definition/>`__ designs are supported @@ -23,8 +27,14 @@ to provide a link to your questions on the `community forums <https://forum.beagleboard.org>`__ as answers will be provided there. +.. toctree:: + :maxdepth: 1 + + getting-started.rst + + Diagnostic tools ----------------- +================ Best to be prepared with good diagnostic information to aide with support. @@ -33,7 +43,7 @@ support. - `Beagle Tester source <https://git.beagleboard.org/jkridner/beagle-tester>`__ Community resources -------------------- +=================== Please execute the board diagnostics, review the hardware documentation, and consult the mailing list and IRC channel for support. @@ -46,7 +56,7 @@ of the entire community. - `Live Chat <https://beagleboard.org/chat>`__ Consulting and other resources ------------------------------- +============================== Need timely response or contract resources because you are building a product? @@ -54,7 +64,7 @@ product? - `Resources <https://beagleboard.org/resources>`__ Repairs -------- +======= Repairs and replacements only provided on unmodified boards purchased via an authorized distributor within the first 90 days. All repaired @@ -62,10 +72,10 @@ board will have their flash reset to factory contents. For repairs and replacements, please contact ‘support’ at BeagleBoard.org using the RMA form: -- `RMA request <https://beagleboard.org//support/rma>`__ +- `RMA request <https://beagleboard.org/support/rma>`__ Understanding Your Beagle -------------------------- +========================= - `BeagleBone Introduction <https://beagleboard.org/Support/bone101>`__ - `Hardware <https://beagleboard.org/Support/Hardware+Support>`__ @@ -78,3 +88,8 @@ Understanding Your Beagle - `BeagleBone Cookbook <https://beagleboard.org/cookbook>`__ - `Bad to the Bone <https://beagleboard.org/bad-to-the-bone>`__ +Working with Cape Add-on Boards +=============================== + +- `BeagleBone Cape Interface Specification <../../boards/capes/cape-interface-spec>`__ + diff --git a/projects/index.rst b/projects/index.rst new file mode 100644 index 00000000..d86b7bf2 --- /dev/null +++ b/projects/index.rst @@ -0,0 +1,10 @@ +Projects +******** + +This is a collection of reasonably well-supported projects useful to Beagle developers. + +.. toctree:: + :maxdepth: 1 + + simppru/index.rst + diff --git a/simppru/basics.rst b/projects/simppru/basics.rst similarity index 100% rename from simppru/basics.rst rename to projects/simppru/basics.rst diff --git a/simppru/build.rst b/projects/simppru/build.rst similarity index 100% rename from simppru/build.rst rename to projects/simppru/build.rst diff --git a/simppru/examples/button_click_rpmsg.rst b/projects/simppru/examples/button_click_rpmsg.rst similarity index 100% rename from simppru/examples/button_click_rpmsg.rst rename to projects/simppru/examples/button_click_rpmsg.rst diff --git a/simppru/examples/delay.rst b/projects/simppru/examples/delay.rst similarity index 100% rename from simppru/examples/delay.rst rename to projects/simppru/examples/delay.rst diff --git a/simppru/examples/digital_read.rst b/projects/simppru/examples/digital_read.rst similarity index 100% rename from simppru/examples/digital_read.rst rename to projects/simppru/examples/digital_read.rst diff --git a/simppru/examples/digital_write.rst b/projects/simppru/examples/digital_write.rst similarity index 100% rename from simppru/examples/digital_write.rst rename to projects/simppru/examples/digital_write.rst diff --git a/simppru/examples/hcsr04_example_rpmsg.rst b/projects/simppru/examples/hcsr04_example_rpmsg.rst similarity index 100% rename from simppru/examples/hcsr04_example_rpmsg.rst rename to projects/simppru/examples/hcsr04_example_rpmsg.rst diff --git a/simppru/examples/hcsr04_sensor.rst b/projects/simppru/examples/hcsr04_sensor.rst similarity index 100% rename from simppru/examples/hcsr04_sensor.rst rename to projects/simppru/examples/hcsr04_sensor.rst diff --git a/simppru/examples/images/hcsr04_beagle_bone_black.png b/projects/simppru/examples/images/hcsr04_beagle_bone_black.png similarity index 100% rename from simppru/examples/images/hcsr04_beagle_bone_black.png rename to projects/simppru/examples/images/hcsr04_beagle_bone_black.png diff --git a/simppru/examples/images/hcsr04_pocket_beagle.png b/projects/simppru/examples/images/hcsr04_pocket_beagle.png similarity index 100% rename from simppru/examples/images/hcsr04_pocket_beagle.png rename to projects/simppru/examples/images/hcsr04_pocket_beagle.png diff --git a/simppru/examples/images/led_beagle_bone_black.png b/projects/simppru/examples/images/led_beagle_bone_black.png similarity index 100% rename from simppru/examples/images/led_beagle_bone_black.png rename to projects/simppru/examples/images/led_beagle_bone_black.png diff --git a/simppru/examples/images/led_button_beagle_bone_black.png b/projects/simppru/examples/images/led_button_beagle_bone_black.png similarity index 100% rename from simppru/examples/images/led_button_beagle_bone_black.png rename to projects/simppru/examples/images/led_button_beagle_bone_black.png diff --git a/simppru/examples/images/led_button_pocket_beagle.png b/projects/simppru/examples/images/led_button_pocket_beagle.png similarity index 100% rename from simppru/examples/images/led_button_pocket_beagle.png rename to projects/simppru/examples/images/led_button_pocket_beagle.png diff --git a/simppru/examples/images/led_pocket_beagle.png b/projects/simppru/examples/images/led_pocket_beagle.png similarity index 100% rename from simppru/examples/images/led_pocket_beagle.png rename to projects/simppru/examples/images/led_pocket_beagle.png diff --git a/simppru/examples/images/simpPRU.png b/projects/simppru/examples/images/simpPRU.png similarity index 100% rename from simppru/examples/images/simpPRU.png rename to projects/simppru/examples/images/simpPRU.png diff --git a/simppru/examples/index.rst b/projects/simppru/examples/index.rst similarity index 100% rename from simppru/examples/index.rst rename to projects/simppru/examples/index.rst diff --git a/simppru/examples/led_blink.rst b/projects/simppru/examples/led_blink.rst similarity index 100% rename from simppru/examples/led_blink.rst rename to projects/simppru/examples/led_blink.rst diff --git a/simppru/examples/led_blink_button.rst b/projects/simppru/examples/led_blink_button.rst similarity index 100% rename from simppru/examples/led_blink_button.rst rename to projects/simppru/examples/led_blink_button.rst diff --git a/simppru/examples/led_blink_counter.rst b/projects/simppru/examples/led_blink_counter.rst similarity index 100% rename from simppru/examples/led_blink_counter.rst rename to projects/simppru/examples/led_blink_counter.rst diff --git a/simppru/examples/led_blink_for.rst b/projects/simppru/examples/led_blink_for.rst similarity index 100% rename from simppru/examples/led_blink_for.rst rename to projects/simppru/examples/led_blink_for.rst diff --git a/simppru/examples/led_blink_while.rst b/projects/simppru/examples/led_blink_while.rst similarity index 100% rename from simppru/examples/led_blink_while.rst rename to projects/simppru/examples/led_blink_while.rst diff --git a/simppru/examples/read_counter.rst b/projects/simppru/examples/read_counter.rst similarity index 100% rename from simppru/examples/read_counter.rst rename to projects/simppru/examples/read_counter.rst diff --git a/simppru/examples/rpmsg_example.rst b/projects/simppru/examples/rpmsg_example.rst similarity index 100% rename from simppru/examples/rpmsg_example.rst rename to projects/simppru/examples/rpmsg_example.rst diff --git a/simppru/examples/rpmsg_pru_calculator.rst b/projects/simppru/examples/rpmsg_pru_calculator.rst similarity index 100% rename from simppru/examples/rpmsg_pru_calculator.rst rename to projects/simppru/examples/rpmsg_pru_calculator.rst diff --git a/simppru/images/main_screen.png b/projects/simppru/images/main_screen.png similarity index 100% rename from simppru/images/main_screen.png rename to projects/simppru/images/main_screen.png diff --git a/simppru/images/receive_counter.png b/projects/simppru/images/receive_counter.png similarity index 100% rename from simppru/images/receive_counter.png rename to projects/simppru/images/receive_counter.png diff --git a/simppru/images/receive_counter_2.png b/projects/simppru/images/receive_counter_2.png similarity index 100% rename from simppru/images/receive_counter_2.png rename to projects/simppru/images/receive_counter_2.png diff --git a/simppru/images/receive_screen.png b/projects/simppru/images/receive_screen.png similarity index 100% rename from simppru/images/receive_screen.png rename to projects/simppru/images/receive_screen.png diff --git a/simppru/images/receive_screen_2.png b/projects/simppru/images/receive_screen_2.png similarity index 100% rename from simppru/images/receive_screen_2.png rename to projects/simppru/images/receive_screen_2.png diff --git a/simppru/images/select_pru_id_screen.png b/projects/simppru/images/select_pru_id_screen.png similarity index 100% rename from simppru/images/select_pru_id_screen.png rename to projects/simppru/images/select_pru_id_screen.png diff --git a/simppru/images/send_screen.png b/projects/simppru/images/send_screen.png similarity index 100% rename from simppru/images/send_screen.png rename to projects/simppru/images/send_screen.png diff --git a/simppru/images/simpPRU.png b/projects/simppru/images/simpPRU.png similarity index 100% rename from simppru/images/simpPRU.png rename to projects/simppru/images/simpPRU.png diff --git a/simppru/images/stop_screen.png b/projects/simppru/images/stop_screen.png similarity index 100% rename from simppru/images/stop_screen.png rename to projects/simppru/images/stop_screen.png diff --git a/simppru/index.rst b/projects/simppru/index.rst similarity index 100% rename from simppru/index.rst rename to projects/simppru/index.rst diff --git a/simppru/install.rst b/projects/simppru/install.rst similarity index 100% rename from simppru/install.rst rename to projects/simppru/install.rst diff --git a/simppru/io.rst b/projects/simppru/io.rst similarity index 100% rename from simppru/io.rst rename to projects/simppru/io.rst diff --git a/simppru/language.rst b/projects/simppru/language.rst similarity index 100% rename from simppru/language.rst rename to projects/simppru/language.rst diff --git a/simppru/usage-simppru-console.rst b/projects/simppru/usage-simppru-console.rst similarity index 100% rename from simppru/usage-simppru-console.rst rename to projects/simppru/usage-simppru-console.rst diff --git a/simppru/usage-simppru.rst b/projects/simppru/usage-simppru.rst similarity index 100% rename from simppru/usage-simppru.rst rename to projects/simppru/usage-simppru.rst diff --git a/support/index.rst b/support/index.rst deleted file mode 100644 index 3077a483..00000000 --- a/support/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. _support: - -Support -######### - -.. note:: #TODO# all the links need updating and content moved into this repo. - -.. toctree:: - :maxdepth: 1 - - overview.rst - getting-started.rst - cape-interface-spec.rst -- GitLab From 5306c504fe5966e133a94549bcb38efca76c3673 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 10:56:52 -0400 Subject: [PATCH 04/83] Fixing some reorganization issues --- boards/index.rst | 2 +- books/index.rst | 2 +- index.rst | 15 ++++----------- intro/index.rst | 19 +++++++++++++++++++ projects/index.rst | 2 +- 5 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 intro/index.rst diff --git a/boards/index.rst b/boards/index.rst index 10382195..324c0de6 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -1,4 +1,4 @@ -Boards +BOARDS ######### `BeagleBone <beaglebone>`__ is a family of ARM-based, Linux-capable boards intended to be diff --git a/books/index.rst b/books/index.rst index b96c8dab..e78bb4ed 100644 --- a/books/index.rst +++ b/books/index.rst @@ -1,4 +1,4 @@ -Books +BOOKS ******** This is a collection of open-source books written to help Beagle developers. diff --git a/index.rst b/index.rst index 8fa160df..14ebc830 100644 --- a/index.rst +++ b/index.rst @@ -10,31 +10,24 @@ Sections ******** .. toctree:: - :maxdepth: 1 - :caption: Introduction + :maxdepth: 2 intro/index.rst .. toctree:: - :maxdepth: 1 - :caption: Boards + :maxdepth: 2 boards/index.rst .. toctree:: - :maxdepth: 1 - :caption: Projects + :maxdepth: 2 projects/index.rst - simppru/index.rst .. toctree:: - :maxdepth: 1 - :caption: Books + :maxdepth: 2 books/index.rst - beaglebone-cookbook/index.rst - pru-cookbook/index.rst Indices and tables ############################ diff --git a/intro/index.rst b/intro/index.rst new file mode 100644 index 00000000..e1387b4e --- /dev/null +++ b/intro/index.rst @@ -0,0 +1,19 @@ +INTRODUCTION +************* + +Welcome to the BeagleBoard documentation project. If you are looking for help with your Beagle +open-hardware development platform, you've found the right place! + +Please check out our `Support Page <support>`__ to find out how to get started, resolve issues, +and engage the developer community. + +Don't forget that this is an open-source project! Your contributions are welcome. Learn about how +to contribute to the BeagleBoard documentation project and any of the many open-source Beagle +projects on-going on our `Contribution Page <contribution>`__. + +.. toctree:: + :maxdepth: 1 + + support/index.rst + contribution/index.rst + diff --git a/projects/index.rst b/projects/index.rst index d86b7bf2..506d836f 100644 --- a/projects/index.rst +++ b/projects/index.rst @@ -1,4 +1,4 @@ -Projects +PROJECTS ******** This is a collection of reasonably well-supported projects useful to Beagle developers. -- GitLab From a64fcf5b691222ded74e529c8a596a10356e7f1d Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 11:08:17 -0400 Subject: [PATCH 05/83] Try boards index fix --- boards/index.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/boards/index.rst b/boards/index.rst index 324c0de6..a56e5c00 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -19,7 +19,8 @@ options that enable almost endless sensing and actuation expansion. started. .. toctree:: - :maxdepth: 1 + :maxdepth: 2 + beaglebone/index.rst capes/index.rst pocketbeagle/index.rst -- GitLab From 973acd1f6820ed704bb40d3a62286fc546278715 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 11:14:30 -0400 Subject: [PATCH 06/83] Fix image BeagleConnect Freedom image links --- .../{ => freedom}/media/image1.jpg | Bin boards/beagleconnect/index.rst | 2 +- boards/beagleconnect/story.rst | 24 ------------------ 3 files changed, 1 insertion(+), 25 deletions(-) rename boards/beagleconnect/{ => freedom}/media/image1.jpg (100%) diff --git a/boards/beagleconnect/media/image1.jpg b/boards/beagleconnect/freedom/media/image1.jpg similarity index 100% rename from boards/beagleconnect/media/image1.jpg rename to boards/beagleconnect/freedom/media/image1.jpg diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst index e4565c52..e94df7fe 100644 --- a/boards/beagleconnect/index.rst +++ b/boards/beagleconnect/index.rst @@ -82,7 +82,7 @@ For home automaters, integration into WebThings… #TODO: think a bit more about this section with some feedback from Cathy. -.. image:: media/image1.jpg +.. image:: freedom/media/image1.jpg :width: 598 :align: center :height: 400 diff --git a/boards/beagleconnect/story.rst b/boards/beagleconnect/story.rst index 99d700ea..40e8f15b 100644 --- a/boards/beagleconnect/story.rst +++ b/boards/beagleconnect/story.rst @@ -30,27 +30,3 @@ locations on the screen, she adopted using a joystick and her productivity came to a crawl. How is it that such assumptions could be made impacting all computer users without any thoughtful provisions for what already worked? - - -.. image:: media/image1.jpg - :width: 598 - :align: center - :height: 400 - :alt: BeagleConnect - -.. toctree:: - :maxdepth: 1 - - intro.rst - ch02.rst - ch03.rst - ch04.rst - ch05.rst - ch06.rst - ch07.rst - ch08.rst - ch09.rst - ch10.rst - ch11.rst - freedom/index.rst - -- GitLab From 119e785abca145591e85b1b37d5840e2cee9a02b Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 11:18:13 -0400 Subject: [PATCH 07/83] Fix BeagleConnect image locations --- .../beagleconnect/{ => freedom}/media/ProvStep1.jpg | Bin .../beagleconnect/{ => freedom}/media/ProvStep2.jpg | Bin .../beagleconnect/{ => freedom}/media/ProvStep3.jpg | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename boards/beagleconnect/{ => freedom}/media/ProvStep1.jpg (100%) rename boards/beagleconnect/{ => freedom}/media/ProvStep2.jpg (100%) rename boards/beagleconnect/{ => freedom}/media/ProvStep3.jpg (100%) diff --git a/boards/beagleconnect/media/ProvStep1.jpg b/boards/beagleconnect/freedom/media/ProvStep1.jpg similarity index 100% rename from boards/beagleconnect/media/ProvStep1.jpg rename to boards/beagleconnect/freedom/media/ProvStep1.jpg diff --git a/boards/beagleconnect/media/ProvStep2.jpg b/boards/beagleconnect/freedom/media/ProvStep2.jpg similarity index 100% rename from boards/beagleconnect/media/ProvStep2.jpg rename to boards/beagleconnect/freedom/media/ProvStep2.jpg diff --git a/boards/beagleconnect/media/ProvStep3.jpg b/boards/beagleconnect/freedom/media/ProvStep3.jpg similarity index 100% rename from boards/beagleconnect/media/ProvStep3.jpg rename to boards/beagleconnect/freedom/media/ProvStep3.jpg -- GitLab From 46768f64e4769ad128053f893f41a15afafa00f8 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 11:47:27 -0400 Subject: [PATCH 08/83] WIP cleanups --- boards/beaglebone/index.rst | 4 ++-- boards/beagleconnect/index.rst | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index 4ab89c9f..6140bc4e 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -4,10 +4,10 @@ BeagleBone BeagleBone boards are intended to be bare-bones, with a balance of features to enable rapid prototyping and provide a solid reference for building end products. -The most popular design is BeagleBone Black, a staple reference for an open hardware +The most popular design is `BeagleBone Black <black>`__, a staple reference for an open hardware embedded Linux single board computer. -BeagleBone AI-64 is our most powerful design with tremendous machine learning inference +`BeagleBone AI-64 <ai-64>`__ is our most powerful design with tremendous machine learning inference performance and For simplicity of developing small, mobile robotics, check out BeagleBone Blue, a highly diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst index e94df7fe..880e1e18 100644 --- a/boards/beagleconnect/index.rst +++ b/boards/beagleconnect/index.rst @@ -1,8 +1,7 @@ .. _beagleconnect-home: -************** BeagleConnectâ„¢ -************** +############### BeagleConnectâ„¢ is a revolutionary technology virtually eliminating low-level software development for `IoT <https://en.wikipedia.org/wiki/Internet_of_things>`_ @@ -90,9 +89,9 @@ For home automaters, integration into WebThings… .. _beagleconnect-Change-History: -************** Change History -************** +-------------- + .. toctree:: :maxdepth: 1 -- GitLab From 204ff5d022da2d15cba6fdeaaa093d3044e363be Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 11:49:45 -0400 Subject: [PATCH 09/83] Add capes to boards index --- boards/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/boards/index.rst b/boards/index.rst index a56e5c00..106ed0d4 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -24,6 +24,7 @@ started. beaglebone/index.rst capes/index.rst pocketbeagle/index.rst + capes/index.rst beagleconnect/index.rst beagleboard/index.rst -- GitLab From ae65baaf02347317ea884fae40d00ce5b049b5e2 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 12:28:46 -0400 Subject: [PATCH 10/83] WIP fixing index appearance --- boards/beagleconnect/freedom/index.rst | 6 + boards/beagleconnect/index.rst | 30 +- boards/beagleconnect/overview.rst | 1108 ----------------- .../{ => technology}/media/SoftwareProp.jpg | Bin .../media/bcf_block_diagram.svg | 0 .../beagleconnect/{ => technology}/story.rst | 5 +- boards/index.rst | 4 +- .../System-Reference-Manual.wiki | 0 boards/pocketbeagle/{ => original}/ch01.rst | 0 boards/pocketbeagle/{ => original}/ch02.rst | 0 boards/pocketbeagle/{ => original}/ch03.rst | 0 boards/pocketbeagle/{ => original}/ch04.rst | 0 boards/pocketbeagle/{ => original}/ch05.rst | 0 boards/pocketbeagle/{ => original}/ch06.rst | 0 boards/pocketbeagle/{ => original}/ch07.rst | 0 boards/pocketbeagle/{ => original}/ch08.rst | 0 boards/pocketbeagle/{ => original}/ch09.rst | 0 boards/pocketbeagle/{ => original}/ch10.rst | 0 boards/pocketbeagle/{ => original}/ch11.rst | 0 .../images/10fig-PB-SDcardinsert1.jpg | Bin .../images/10fig-PB-SDcardinsert2.jpg | Bin .../images/11fig-PB-microUSBattach1.jpg | Bin .../images/12fig-PB-USBtoPC1.jpg | Bin .../images/13fig-PB-PowerLED1.png | Bin .../images/14fig-PB-UserLEDs1.png | Bin .../images/15fig-PB-starthtmpage.png | Bin .../images/16fig-PB-enablenetwork.png | Bin .../{ => original}/images/17fig-PB-cloud9.png | Bin .../images/18fig-PB-cloud9exs.png | Bin .../images/19fig-PB-cloud9blink.png | Bin .../images/1fig-PB-homepage.png | Bin .../images/20fig-PB-powerbutton.png | Bin .../images/21fig-PB-walkaround.png | Bin .../images/22fig-PB-blockdiagram.png | Bin .../images/24fig-PB-Headerphoto.png | Bin .../{ => original}/images/25fig-PB-SDcard.png | Bin .../{ => original}/images/26fig-PB-USB.png | Bin .../images/27fig-PB-JTAGpads.png | Bin .../images/28fig-PB-serialdebug.png | Bin .../images/40fig-PB-PRU-block.png | Bin .../images/41fig-PB-Headerback.png | Bin .../{ => original}/images/46fig-PB-Mikro.png | Bin .../images/5fig-PB-GetStarted.png | Bin .../images/6fig-PB-DownloadSW.png | Bin .../images/7fig-PB-Etcherdownload.png | Bin .../images/8fig-PB-Etcherselectimage.png | Bin .../images/9fig-PB-Etcherfinish.png | Bin .../{ => original}/images/Bonescript-ex.png | Bin .../{ => original}/images/Header-P1-sch.png | Bin .../{ => original}/images/Header-P2-sch.png | Bin .../{ => original}/images/Header-both-sch.png | Bin .../{ => original}/images/JTAG-pads-sch.png | Bin .../images/OSD335x-color-block.jpg | Bin .../images/OSHW_mark_US000083.png | Bin .../{ => original}/images/PB-USB-photo.png | Bin .../{ => original}/images/PB-block-diag2.jpg | Bin .../{ => original}/images/PB-block-diag3.png | Bin .../images/PB-block-diagram.png | Bin .../{ => original}/images/PB-card-back-1.jpg | Bin .../{ => original}/images/PB-card-back.jpg | Bin .../{ => original}/images/PB-card-front-1.jpg | Bin .../{ => original}/images/PB-card-front.jpg | Bin .../{ => original}/images/PB-header-photo.png | Bin .../images/PB-microSDphoto-small.jpg | Bin .../{ => original}/images/PB-microSDphoto.jpg | Bin .../images/PB-powerLED-photo.png | Bin .../{ => original}/images/PB-powerbutton.png | Bin .../{ => original}/images/PB-tethered.png | Bin .../{ => original}/images/PB-tutorials.png | Bin .../images/PB-userLED-photo.png | Bin .../{ => original}/images/PB-walkaround-2.jpg | Bin .../{ => original}/images/PB-walkaround-2.png | Bin .../{ => original}/images/PB-walkaround-3.jpg | Bin .../{ => original}/images/PB-walkaround.png | Bin .../{ => original}/images/PB1-fullPC-3.jpg | Bin .../PocketBeagle-size-compare-small.jpg | Bin .../images/PocketBeagle_Back_BW.jpg | Bin .../images/PocketBeagle_Expansion_Headers.ods | Bin .../images/PocketBeagle_Front_BW-small.jpg | Bin .../images/PocketBeagle_Front_BW.jpg | Bin .../images/PocketBeagle_microUSB_bb.png | Bin .../images/PocketBeagle_microUSB_bb.svg | 0 .../images/PocketBeagle_microUSB_bb1.png | Bin .../images/PocketBeagle_pinout.pdf | Bin .../images/PocketBeagle_pinout.png | Bin .../images/Power-button-sch.png | Bin .../images/SRM1_cloud9blinkPB.png | Bin .../images/SRM2_cloud9blinkPB.png | Bin .../images/SRM3_cloud9blinkPB.png | Bin .../images/SRM4_cloud9blinkPB.png | Bin .../{ => original}/images/SiP-A-sch.png | Bin .../{ => original}/images/SiP-B-sch.png | Bin .../{ => original}/images/SiP-C-sch.png | Bin .../{ => original}/images/SiP-D-sch.png | Bin .../{ => original}/images/SiP-E-sch.png | Bin .../{ => original}/images/SiP-F-sch.png | Bin .../{ => original}/images/USB-sch.png | Bin .../{ => original}/images/User-LEDs-sch.png | Bin .../images/fig-PB-Headerphoto.png | Bin .../{ => original}/images/green_check.png | Bin .../images/mikrobus-socket-pinout.jpg | Bin .../pocketbeagle_package_small_size.jpg | Bin .../images/usdconnector-sch.png | Bin .../{ => original}/images/warning_tri.png | Bin boards/pocketbeagle/{ => original}/index.rst | 0 index.rst | 4 +- intro/contribution/contribute.rst | 1 - intro/contribution/index.rst | 1 + intro/contribution/style.rst | 12 + intro/index.rst | 4 +- 110 files changed, 47 insertions(+), 1128 deletions(-) delete mode 100644 boards/beagleconnect/overview.rst rename boards/beagleconnect/{ => technology}/media/SoftwareProp.jpg (100%) rename boards/beagleconnect/{ => technology}/media/bcf_block_diagram.svg (100%) rename boards/beagleconnect/{ => technology}/story.rst (97%) rename boards/pocketbeagle/{ => original}/System-Reference-Manual.wiki (100%) rename boards/pocketbeagle/{ => original}/ch01.rst (100%) rename boards/pocketbeagle/{ => original}/ch02.rst (100%) rename boards/pocketbeagle/{ => original}/ch03.rst (100%) rename boards/pocketbeagle/{ => original}/ch04.rst (100%) rename boards/pocketbeagle/{ => original}/ch05.rst (100%) rename boards/pocketbeagle/{ => original}/ch06.rst (100%) rename boards/pocketbeagle/{ => original}/ch07.rst (100%) rename boards/pocketbeagle/{ => original}/ch08.rst (100%) rename boards/pocketbeagle/{ => original}/ch09.rst (100%) rename boards/pocketbeagle/{ => original}/ch10.rst (100%) rename boards/pocketbeagle/{ => original}/ch11.rst (100%) rename boards/pocketbeagle/{ => original}/images/10fig-PB-SDcardinsert1.jpg (100%) rename boards/pocketbeagle/{ => original}/images/10fig-PB-SDcardinsert2.jpg (100%) rename boards/pocketbeagle/{ => original}/images/11fig-PB-microUSBattach1.jpg (100%) rename boards/pocketbeagle/{ => original}/images/12fig-PB-USBtoPC1.jpg (100%) rename boards/pocketbeagle/{ => original}/images/13fig-PB-PowerLED1.png (100%) rename boards/pocketbeagle/{ => original}/images/14fig-PB-UserLEDs1.png (100%) rename boards/pocketbeagle/{ => original}/images/15fig-PB-starthtmpage.png (100%) rename boards/pocketbeagle/{ => original}/images/16fig-PB-enablenetwork.png (100%) rename boards/pocketbeagle/{ => original}/images/17fig-PB-cloud9.png (100%) rename boards/pocketbeagle/{ => original}/images/18fig-PB-cloud9exs.png (100%) rename boards/pocketbeagle/{ => original}/images/19fig-PB-cloud9blink.png (100%) rename boards/pocketbeagle/{ => original}/images/1fig-PB-homepage.png (100%) rename boards/pocketbeagle/{ => original}/images/20fig-PB-powerbutton.png (100%) rename boards/pocketbeagle/{ => original}/images/21fig-PB-walkaround.png (100%) rename boards/pocketbeagle/{ => original}/images/22fig-PB-blockdiagram.png (100%) rename boards/pocketbeagle/{ => original}/images/24fig-PB-Headerphoto.png (100%) rename boards/pocketbeagle/{ => original}/images/25fig-PB-SDcard.png (100%) rename boards/pocketbeagle/{ => original}/images/26fig-PB-USB.png (100%) rename boards/pocketbeagle/{ => original}/images/27fig-PB-JTAGpads.png (100%) rename boards/pocketbeagle/{ => original}/images/28fig-PB-serialdebug.png (100%) rename boards/pocketbeagle/{ => original}/images/40fig-PB-PRU-block.png (100%) rename boards/pocketbeagle/{ => original}/images/41fig-PB-Headerback.png (100%) rename boards/pocketbeagle/{ => original}/images/46fig-PB-Mikro.png (100%) rename boards/pocketbeagle/{ => original}/images/5fig-PB-GetStarted.png (100%) rename boards/pocketbeagle/{ => original}/images/6fig-PB-DownloadSW.png (100%) rename boards/pocketbeagle/{ => original}/images/7fig-PB-Etcherdownload.png (100%) rename boards/pocketbeagle/{ => original}/images/8fig-PB-Etcherselectimage.png (100%) rename boards/pocketbeagle/{ => original}/images/9fig-PB-Etcherfinish.png (100%) rename boards/pocketbeagle/{ => original}/images/Bonescript-ex.png (100%) rename boards/pocketbeagle/{ => original}/images/Header-P1-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/Header-P2-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/Header-both-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/JTAG-pads-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/OSD335x-color-block.jpg (100%) rename boards/pocketbeagle/{ => original}/images/OSHW_mark_US000083.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-USB-photo.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-block-diag2.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-block-diag3.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-block-diagram.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-card-back-1.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-card-back.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-card-front-1.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-card-front.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-header-photo.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-microSDphoto-small.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-microSDphoto.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-powerLED-photo.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-powerbutton.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-tethered.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-tutorials.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-userLED-photo.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-walkaround-2.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-walkaround-2.png (100%) rename boards/pocketbeagle/{ => original}/images/PB-walkaround-3.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PB-walkaround.png (100%) rename boards/pocketbeagle/{ => original}/images/PB1-fullPC-3.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle-size-compare-small.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_Back_BW.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_Expansion_Headers.ods (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_Front_BW-small.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_Front_BW.jpg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_microUSB_bb.png (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_microUSB_bb.svg (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_microUSB_bb1.png (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_pinout.pdf (100%) rename boards/pocketbeagle/{ => original}/images/PocketBeagle_pinout.png (100%) rename boards/pocketbeagle/{ => original}/images/Power-button-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SRM1_cloud9blinkPB.png (100%) rename boards/pocketbeagle/{ => original}/images/SRM2_cloud9blinkPB.png (100%) rename boards/pocketbeagle/{ => original}/images/SRM3_cloud9blinkPB.png (100%) rename boards/pocketbeagle/{ => original}/images/SRM4_cloud9blinkPB.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-A-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-B-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-C-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-D-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-E-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/SiP-F-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/USB-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/User-LEDs-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/fig-PB-Headerphoto.png (100%) rename boards/pocketbeagle/{ => original}/images/green_check.png (100%) rename boards/pocketbeagle/{ => original}/images/mikrobus-socket-pinout.jpg (100%) rename boards/pocketbeagle/{ => original}/images/pocketbeagle_package_small_size.jpg (100%) rename boards/pocketbeagle/{ => original}/images/usdconnector-sch.png (100%) rename boards/pocketbeagle/{ => original}/images/warning_tri.png (100%) rename boards/pocketbeagle/{ => original}/index.rst (100%) delete mode 100644 intro/contribution/contribute.rst create mode 100644 intro/contribution/style.rst diff --git a/boards/beagleconnect/freedom/index.rst b/boards/beagleconnect/freedom/index.rst index f42ded22..79ce3fec 100644 --- a/boards/beagleconnect/freedom/index.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -171,3 +171,9 @@ Each BeagleBoard.org BeagleConnectâ„¢ solution will be: to secure your own network, and * Fully FCC/CE certified. +.. toctree:: + :maxdepth: 1 + + usage.rst + zephyr.rst + diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst index 880e1e18..c16e47cb 100644 --- a/boards/beagleconnect/index.rst +++ b/boards/beagleconnect/index.rst @@ -1,6 +1,6 @@ .. _beagleconnect-home: -BeagleConnectâ„¢ +BeagleConnect ############### BeagleConnectâ„¢ is a revolutionary technology virtually eliminating low-level @@ -38,8 +38,8 @@ BeagleConnectâ„¢ technology solves: * The need to produce high-volume custom hardware cost-optimized for your requirements. -BeagleConnectâ„¢ Experience -######################### +BeagleConnect Experience +************************* BeagleConnectâ„¢ provides a scalable experience for interacting with the physical world. @@ -87,18 +87,26 @@ For home automaters, integration into WebThings… :height: 400 :alt: BeagleConnect -.. _beagleconnect-Change-History: -Change History --------------- +BeagleConnect Technology +************************ +Learn about the technology behind BeagleConnect. .. toctree:: - :maxdepth: 1 + :maxdepth: 2 + + technology/index.rst + technology/story.rst + + +BeagleConnect Boards +******************** + +Get started using your BeagleConnect. + +.. toctree:: + :maxdepth: 2 - story.rst - overview.rst freedom/index.rst - freedom/usage.rst - freedom/zephyr.rst diff --git a/boards/beagleconnect/overview.rst b/boards/beagleconnect/overview.rst deleted file mode 100644 index 0ecccae0..00000000 --- a/boards/beagleconnect/overview.rst +++ /dev/null @@ -1,1108 +0,0 @@ -.. _beagleconnect-overview: - -*********************** -BeagleConnectâ„¢ Overview -*********************** - -BeagleConnectâ„¢ Greybus Stack -############################ - -Work in progress -**************** - -To understand a bit more about how the BeagleConnectâ„¢ Greybus stack is being -built, this section helps describe the development currently in progress and -the principles of operation. - -Background -********** -.. image:: media/SoftwareProp.jpg - :width: 600 - :align: center - :height: 400 - :alt: BeagleConnect Software Proposition - -BeagleConnectâ„¢ uses Greybus and updated Click Boards with identifiers to -eliminate the need to add and manually configure devices added onto the Linux -system. - -High-level -********** -* For Linux nerds: Think of BeagleConnectâ„¢ as 6LoWPAN over 802.15.4-based - Greybus (instead of Unipro as used by Project Ara), where every - BeagleConnectâ„¢ board shows up as new SPI, I2C, UART, PWM, ADC, and GPIO - controllers that can now be probed to load drivers for the sensors or - whatever is connected to them. (Proof of concept of Greybus over TCP/IP: - https://www.youtube.com/watch?v=7H50pv-4YXw) - -* For MCU folks: Think of BeagleConnectâ„¢ as a Firmata-style firmware load that - exposes the interfaces for remote access over a secured wireless network. - However, instead of using host software that knows how to speak the Firmata - protocol, the Linux kernel speaks the slightly similar Greybus protocol to - the MCU and exposes the device generically to users using a Linux kernel - driver. Further, the Greybus protocol is spoken over 6LoWPAN on 802.15.4. - -Software architecture -********************* - -.. image:: media/bcf_block_diagram.svg - :width: 600 - :align: center - :height: 400 - :alt: BeagleConnect Block Diagram - -TODO items -********** - -* Linux kernel driver - -* Provisioning - -* Firmware for host CC13x - -* Firmware for device CC13x - -* Click Board drivers and device tree formatted metadata for 100 or so Click - Boards - -* Click Board plug-ins for node-red for the same 100 or so Click Boards - -* BeagleConnectâ„¢ Freedom System Reference Manual and FAQs - - -Associated pre-work -******************* - -* Click Board support for Node-RED can be executed with native connections on - PocketBeagle+TechLab and BeagleBone Black with mikroBUS Cape - -* Device tree fragments and driver updates can be provided via - https://bbb.io/click - -* The Kconfig style provisioning can be implemented for those solutions, which - will require a reboot. We need to centralize edits to /boot/uEnv.txt to be - programmatic. As I think through this, I don't think BeagleConnect is - impacted, because the Greybus-style discovery along with Click EEPROMS will - eliminate any need to edit /boot/uEnv.txt. - -User experience concerns -************************ - -* Make sure no reboots are required - -* Plugging BeagleConnect into host should trigger host configuration - -* Click EEPROMs should trigger loading whatever drivers are needed and - provisioning should load any new drivers - -* Userspace (spidev, etc.) drivers should unload cleanly when 2nd phase - provisioning is completed - -BeagleConnectâ„¢ Greybus demo using BeagleConnectâ„¢ Freedom -******************************************************** -BeagleConnectâ„¢ Freedom runs a subGHz IEEE 802.15.4 network. This BeagleConnectâ„¢ -Greybus demo shows how to interact with GPIO, I2C and mikroBUS add-on boards -remotely connected over a BeagleConnectâ„¢ Freedom. - -This section starts with the steps required to use -`Linux <https://en.wikipedia.org/wiki/Linux>`_ embedded computer -(`BeagleBone Green Gateway <https://wiki.seeedstudio.com/BeagleBone-Green-Gateway/>`_) -and the `Greybus <https://lwn.net/Articles/715955/>`_ protocol, over an -IEEE 802.15.4 wireless link, to blink an LED on a -`Zephyr <https://zephyrproject.org/>`_ device. - -Introduction -************ - -Why?? ------ - - -Good question. Blinking an LED is kind of the -`Hello, World <https://en.wikipedia.org/wiki/%22Hello,_World!%22_program>`_ of -the hardware community. In this case, we're less interested in the mechanics -of switching a GPIO to drive some current through an LED and more interested in -how that happens with the -`Internet of Things (IoT) <https://en.wikipedia.org/wiki/Internet_of_things>`_. - -There are several existing network and application layers that are driven by -corporate heavyweights and industry consortiums, but relatively few that are -community driven and, more specifically, even fewer that have the ability to -integrate so tightly with the Linux kernel. - -The goal here is to provide a community-maintained, developer-friendly, and -open-source protocol for the Internet of Things using the Greybus Protocol, and -blinking an LED using Greybus is the simplest proof-of-concept for that. All -that is required is a reliable transport. - -#. Power a BeagleConnect Freedom that has not yet been programmed via a USB - power source, not the BeagleBone Green Gateway. You'll hear a click every - 1-2 seconds along with seeing 4 of the LEDs turn off and on. - -#. In an isolated terminal window, :code:`sudo beagleconnect-start-gateway` - -#. :code:`sensortest-rx.py` - -Every 1-2 minutes, you should see something like: - -.. code-block:: - - ('fe80::3111:7a22:4b:1200%lowpan0', 52213, 0, 13) '2l:7.79;' - ('fe80::3111:7a22:4b:1200%lowpan0', 52213, 0, 13) '4h:43.75;4t:23.11;' - -The value after "2l:" is the amount of light in lux. The value after "4h:" is -the relative humidity and after "4t:" is the temperature in Celsius. - -Flash BeagleConnectâ„¢ Freedom node device with Greybus firmware -************************************************************** - -#TODO: How can we add a step in here to show the network is connected without needing gbridge to be fully functional? - -Do this from the BeagleBone® Green Gateway board that was previously used to -program the BeagleConnectâ„¢ Freedom gateway device: - -#. Disconnect the BeagleConnectâ„¢ Freedom **gateway** device - -#. Connect a new BeagleConnectâ„¢ Freedom board via USB - -#. :code:`sudo systemctl stop lowpan.service` - -#. :code:`cc2538-bsl.py /usr/share/beagleconnect/cc1352/greybus_mikrobus_beagleconnect.bin /dev/ttyACM0` - -#. After it finishes programming successfully, disconnect the BeagleConnect Freedom node device - -#. Power the newly programmed BeagleConnect Freedom node device from an alternate USB power source - -#. Reconnect the BeagleConnect Freedom **gateway** device to the BeagleBone Green Gateway - -#. :code:`sudo systemctl start lowpan.service` - -#. :code:`sudo beagleconnect-start-gateway` - -.. code-block:: bash - - debian@beaglebone:~$ sudo beagleconnect-start-gateway - [sudo] password for debian: - setting up wpanusb gateway for IEEE 802154 CHANNEL 1(906 Mhz) - ping6: Warning: source address might be selected on device other than lowpan0. - PING 2001:db8::1(2001:db8::1) from ::1 lowpan0: 56 data bytes - 64 bytes from 2001:db8::1: icmp_seq=2 ttl=64 time=185 ms - 64 bytes from 2001:db8::1: icmp_seq=3 ttl=64 time=40.9 ms - 64 bytes from 2001:db8::1: icmp_seq=4 ttl=64 time=40.9 ms - 64 bytes from 2001:db8::1: icmp_seq=5 ttl=64 time=40.6 ms - - --- 2001:db8::1 ping statistics --- - 5 packets transmitted, 4 received, 20% packet loss, time 36ms - rtt min/avg/max/mdev = 40.593/76.796/184.799/62.356 ms - debian@beaglebone:~$ iio_info - Library version: 0.19 (git tag: v0.19) - Compiled with backends: local xml ip usb serial - IIO context created with local backend. - Backend version: 0.19 (git tag: v0.19) - Backend description string: Linux beaglebone 5.14.18-bone20 #1buster PREEMPT Tue Nov 16 20:47:19 UTC 2021 armv7l - IIO context has 1 attributes: - local,kernel: 5.14.18-bone20 - IIO context has 3 devices: - iio:device0: TI-am335x-adc.0.auto (buffer capable) - 8 channels found: - voltage0: (input, index: 0, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 1412 - voltage1: (input, index: 1, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 2318 - voltage2: (input, index: 2, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 2631 - voltage3: (input, index: 3, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 817 - voltage4: (input, index: 4, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 881 - voltage5: (input, index: 5, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 0 - voltage6: (input, index: 6, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 0 - voltage7: (input, index: 7, format: le:u12/16>>0) - 1 channel-specific attributes found: - attr 0: raw value: 1180 - 2 buffer-specific attributes found: - attr 0: data_available value: 0 - attr 1: watermark value: 1 - iio:device1: hdc2010 - 3 channels found: - humidityrelative: (input) - 3 channel-specific attributes found: - attr 0: peak_raw value: 52224 - attr 1: raw value: 52234 - attr 2: scale value: 1.525878906 - current: (output) - 2 channel-specific attributes found: - attr 0: heater_raw value: 0 - attr 1: heater_raw_available value: 0 1 - temp: (input) - 4 channel-specific attributes found: - attr 0: offset value: -15887.515151 - attr 1: peak_raw value: 25600 - attr 2: raw value: 25628 - attr 3: scale value: 2.517700195 - iio:device2: opt3001 - 1 channels found: - illuminance: (input) - 2 channel-specific attributes found: - attr 0: input value: 79.040000 - attr 1: integration_time value: 0.800000 - 2 device-specific attributes found: - attr 0: current_timestamp_clock value: realtime - - attr 1: integration_time_available value: 0.1 0.8 - debian@beaglebone:~$ dmesg | grep -e mikrobus -e greybus - [ 100.491253] greybus 1-2.2: Interface added (greybus) - [ 100.491294] greybus 1-2.2: GMP VID=0x00000126, PID=0x00000126 - [ 100.491306] greybus 1-2.2: DDBL1 Manufacturer=0x00000126, Product=0x00000126 - [ 100.737637] greybus 1-2.2: excess descriptors in interface manifest - [ 102.475168] mikrobus:mikrobus_port_gb_register: mikrobus gb_probe , num cports= 2, manifest_size 192 - [ 102.475206] mikrobus:mikrobus_port_gb_register: protocol added 3 - [ 102.475214] mikrobus:mikrobus_port_gb_register: protocol added 2 - [ 102.475239] mikrobus:mikrobus_port_register: registering port mikrobus-1 - [ 102.475400] mikrobus_manifest:mikrobus_state_get: mikrobus descriptor not found - [ 102.475417] mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 1, driver=opt3001, protocol=3, reg=44 - [ 102.494516] mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 2, driver=hdc2010, protocol=3, reg=41 - [ 102.494567] mikrobus_manifest:mikrobus_manifest_parse: (null) manifest parsed with 2 devices - [ 102.494592] mikrobus mikrobus-1: registering device : opt3001 - [ 102.495096] mikrobus mikrobus-1: registering device : hdc2010 - debian@beaglebone:~$ - - -#TODO: update the below for the built-in sensors - -#TODO: can we also handle the case where these sensors are included and recommend them? Same firmware? - -#TODO: the current demo is for the built-in sensors, not the Click boards mentioned below - -Currently only a limited number of add-on boards have been tested to work over Greybus, simple add-on boards without interrupt requirement are the ones that work currently. The example is for Air Quality 2 Click and Weather Click attached to the mikroBUS ports on the device side. - -/var/log/gbridge will have the gbridge log, and if the mikroBUS port has been instantiated successfully the kernel log will show the devices probe messages: - -#TODO: this log needs to be updated - -.. code-block:: - - greybus 1-2.2: GMP VID=0x00000126, PID=0x00000126 - greybus 1-2.2: DDBL1 Manufacturer=0x00000126, Product=0x00000126 - greybus 1-2.2: excess descriptors in interface manifest - mikrobus:mikrobus_port_gb_register: mikrobus gb_probe , num cports= 3, manifest_size 252 - mikrobus:mikrobus_port_gb_register: protocol added 11 - mikrobus:mikrobus_port_gb_register: protocol added 3 - mikrobus:mikrobus_port_gb_register: protocol added 2 - mikrobus:mikrobus_port_register: registering port mikrobus-0 - mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 1, driver=bme280, protocol=3, reg=76 - mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 2, driver=ams-iaq-core, protocol=3, reg=5a - mikrobus_manifest:mikrobus_manifest_parse: Greybus Service Sample Application manifest parsed with 2 devices - mikrobus mikrobus-0: registering device : bme280 - mikrobus mikrobus-0: registering device : ams-iaq-core - - -#TODO: bring in the GPIO toggle and I2C explorations for greater understanding - -Flashing via a Linux Host -************************* - - - -If flashing the Freedom board via the BeagleBone fails here's a trick you can try to flash from a Linux host. - -Use :code:`sshfs` to mount the Bone's files on the Linux host. This assumes the -Bone is plugged in the the USB and appears at :code:`192.168.7.2`: - -.. code-block:: bash - - host$ cd - host$ sshfs 192.168.7.2:/ bone - host$ cd bone; ls - bin dev home lib media opt root sbin sys usr - boot etc ID.txt lost+found mnt proc run srv tmp var - host$ ls /dev/ttyACM* - /dev/ttyACM1 - - - -The Bone's files now appear as local files. Notice there is already a -:code:`/dev/ACM*` appearing. Now plug the Connect into the Linux host's USB -port and run the command again. - -.. code-block:: bash - - host$ ls /dev/ttyACM* - /dev/ttyACM0 /dev/ttyACM1 - -The :code:`/dev/ttyACM` that just appeared is the one associated with the -Connect. In my case it's :code:`/dev/ttyACM0`. That's what I'll use in this -example. - -Now change directories to where the binaries are and load: - -.. code-block:: bash - - host$ cd ~/bone/usr/share/beagleconnect/cc1352;ls - greybus_mikrobus_beagleconnect.bin sensortest_beagleconnect.dts - greybus_mikrobus_beagleconnect.config wpanusb_beagleconnect.bin - greybus_mikrobus_beagleconnect.dts wpanusb_beagleconnect.config - sensortest_beagleconnect.bin wpanusb_beagleconnect.dts - sensortest_beagleconnect.config - - host$ ~/bone/usr/bin/cc2538-bsl.py sensortest_beagleconnect.bin /dev/ttyACM0 - 8-bsl.py sensortest_beagleconnect.bin /dev/ttyACM0 - Opening port /dev/ttyACM0, baud 50000 - Reading data from sensortest_beagleconnect.bin - Cannot auto-detect firmware filetype: Assuming .bin - Connecting to target... - CC1350 PG2.0 (7x7mm): 352KB Flash, 20KB SRAM, CCFG.BL_CONFIG at 0x00057FD8 - Primary IEEE Address: 00:12:4B:00:22:7A:10:46 - Performing mass erase - Erasing all main bank flash sectors - Erase done - Writing 360448 bytes starting at address 0x00000000 - Write 104 bytes at 0x00057F988 - Write done - Verifying by comparing CRC32 calculations. - Verified (match: 0x0f6bdf0f) - -Now you are ready to continue the instructions above after the cc2528 command. - -Trying for different add-on boards ----------------------------------- - -See `mikroBUS over Greybus <https://github.com/vaishnav98/greybus-for-zephyr/tree/mikrobus#trying-out-different-add-on-boardsdevices-over-mikrobus>`_ -for trying out the same example for different mikroBUS add-on boards/ on-board devices. - -Observe the node device -*********************** - -Connect BeagleConnect Freedom node device to an Ubuntu laptop to observe the -Zephyr console. - - -Console (:code:`tio`) -********************* -In order to see diagnostic messages or to run certain commands on the Zephyr -device we will require a terminal open to the device console. In this case, we -use `tio <https://tio.github.io/>`_ due how its usage simplifies the -instructions. - -#. Install :code:`tio` - :code:`sudo apt install -y tio` - -#. Run :code:`tio` - :code:`tio /dev/ttyACM0` - - To exit :code:`tio` (later), enter :code:`ctrl+t, q`. - - -The Zephyr Shell -**************** - - - -After flashing, you should observe the something matching the following output in :code:`tio`. - -.. code-block:: bash - - uart:~$ *** Booting Zephyr OS build 9c858c863223 *** - [00:00:00.009,735] <inf> greybus_transport_tcpip: CPort 0 mapped to TCP/IP port 4242 - [00:00:00.010,131] <inf> greybus_transport_tcpip: CPort 1 mapped to TCP/IP port 4243 - [00:00:00.010,528] <inf> greybus_transport_tcpip: CPort 2 mapped to TCP/IP port 4244 - [00:00:00.010,742] <inf> greybus_transport_tcpip: Greybus TCP/IP Transport initialized - [00:00:00.010,864] <inf> greybus_manifest: Registering CONTROL greybus driver. - [00:00:00.011,230] <inf> greybus_manifest: Registering GPIO greybus driver. - [00:00:00.011,596] <inf> greybus_manifest: Registering I2C greybus driver. - [00:00:00.011,871] <inf> greybus_service: Greybus is active - [00:00:00.026,092] <inf> net_config: Initializing network - [00:00:00.134,063] <inf> net_config: IPv6 address: 2001:db8::1 - - - -The line beginning with :code:`***` is the Zephyr boot banner. - -Lines beginning with a timestamp of the form :code:`[H:m:s.us]` are Zephyr -kernel messages. - -Lines beginning with :code:`uart:~$` indicates that the Zephyr shell is -prompting you to enter a command. - -From the informational messages shown, we observe the following. - -* Zephyr is configured with the following - `link-local IPv6 address <https://en.wikipedia.org/wiki/Link-local_address#IPv6>`_ :code:`fe80::3177:a11c:4b:1200` - -* It is listening for (both) TCP and UDP traffic on port 4242 - -However, what the log messages do not show (which will come into play later), -are 2 critical pieces of information: - -#. **The RF Channel**: As you may have guessed, IEEE 802.15.4 devices are only - able to communicate with each other if they are using the same frequency to - transmit and recieve data. This information is part of the Physical Layer. - -#. The `PAN identifier <https://www.silabs.com/community/wireless/proprietary/knowledge-base.entry.html/2019/10/04/connect_tutorial6-ieee802154addressing-rapc>`_: - IEEE 802.15.4 devices are only be able to communicate with one another if - they use the same PAN ID. This permits multiple networks (PANs) on the same - frequency. This information is part of the Data Link Layer. - -If we type :code:`help` in the shell and hit Enter, we're prompted with the -following: - -.. code-block:: - - Please press the <Tab> button to see all available commands. - You can also use the <Tab> button to prompt or auto-complete all commands or its subcommands. - You can try to call commands with <-h> or <--help> parameter for more information. - Shell supports following meta-keys: - - Ctrl+a, Ctrl+b, Ctrl+c, Ctrl+d, Ctrl+e, Ctrl+f, Ctrl+k, Ctrl+l, Ctrl+n, Ctrl+p, Ctrl+u, Ctrl+w - Alt+b, Alt+f. - Please refer to shell documentation for more details. - -So after hitting Tab, we see that there are several interesting commands we can -use for additional information. - -.. code-block:: - - uart:~$ - clear help history ieee802154 log net - resize sample shell - -Zephyr Shell: IEEE 802.15.4 commands ------------------------------------- - -Entering :code:`ieee802154 help`, we see - -.. code-block:: - - uart:~$ ieee802154 help - ieee802154 - IEEE 802.15.4 commands - Subcommands: - ack :<set/1 | unset/0> Set auto-ack flag - associate :<pan_id> <PAN coordinator short or long address (EUI-64)> - disassociate :Disassociate from network - get_chan :Get currently used channel - get_ext_addr :Get currently used extended address - get_pan_id :Get currently used PAN id - get_short_addr :Get currently used short address - get_tx_power :Get currently used TX power - scan :<passive|active> <channels set n[:m:...]:x|all> <per-channel - duration in ms> - set_chan :<channel> Set used channel - set_ext_addr :<long/extended address (EUI-64)> Set extended address - set_pan_id :<pan_id> Set used PAN id - set_short_addr :<short address> Set short address - set_tx_power :<-18/-7/-4/-2/0/1/2/3/5> Set TX power - - -We get the missing Channel number (frequency) with the command :code:`ieee802154 get_chan`. - -.. code-block:: - - uart:~$ ieee802154 get_chan - Channel 26 - -We get the missing PAN ID with the command :code:`ieee802154 get_pan_id`. - -.. code-block:: - - uart:~$ ieee802154 get_pan_id - PAN ID 43981 (0xabcd) - -Zephyr Shell: Network Commands ------------------------------- - -Additionally, we may query the IPv6 information of the Zephyr device. - -.. code-block:: - - uart:~$ net iface - - Interface 0x20002b20 (IEEE 802.15.4) [1] - ======================================== - Link addr : CD:99:A1:1C:00:4B:12:00 - MTU : 125 - IPv6 unicast addresses (max 3): - fe80::cf99:a11c:4b:1200 autoconf preferred infinite - 2001:db8::1 manual preferred infinite - IPv6 multicast addresses (max 4): - ff02::1 - ff02::1:ff4b:1200 - ff02::1:ff00:1 - IPv6 prefixes (max 2): - <none> - IPv6 hop limit : 64 - IPv6 base reachable time : 30000 - IPv6 reachable time : 16929 - IPv6 retransmit timer : 0 - - - -And we see that the static IPv6 address (:code:`2001:db8::1`) from -:code:`samples/net/sockets/echo_server/prj.conf` is present and configured. -While the statically configured IPv6 address is useful, it isn't 100% necessary. - -Rebuilding from source -********************** - -#TODO: revisit everything below here - -Prerequisites -------------- - -* Zephyr environment is set up according to the - `Getting Started Guide <https://docs.zephyrproject.org/latest/getting_started/index.html>`_ - - * Please use the Zephyr SDK when installing a toolchain above - -* `Zephyr SDK <https://docs.zephyrproject.org/latest/getting_started/index.html#install-a-toolchain>`_ - is installed at ~/zephyr-sdk-0.11.2 (any later version should be fine as well) - -* Zephyr board is connected via USB - -Cloning the repository ----------------------- - -This repository utilizes `git submodules <https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ -to keep track of all of the projects required to reproduce the on-going work. -The instructions here only cover checking out the :code:`demo` branch which -should stay in a tested state. On-going development will be on the -:code:`master` branch. - -Note: The parent directory :code:`~` is simply used as a placeholder for testing. -Please use whatever parent directory you see fit. - -Clone specific tag ------------------- - -.. code-block:: bash - - cd ~ - git clone --recurse-submodules --branch demo https://github.com/jadonk/beagleconnect - -Zephyr -****** - -Add the Fork ------------- - -For the time being, Greybus must remain outside of the main Zephyr repository. -Currently, it is just in a Zephyr fork, but it should be converted to a -proper `Module (External Project) <https://docs.zephyrproject.org/latest/guides/modules.html>`_. -This is for a number of reasons, but mainly there must be: - -* specifications for authentication and encryption - -* specifications for joining and rejoining wireless networks - -* specifications for discovery - -Therefore, in order to reproduce this example, please run the following. - -.. code-block:: bash - - cd ~/beagleconnect/sw/zephyrproject/zephyr - west update - -Build and Flash Zephyr ----------------------- - -Here, we will build and flash the Zephyr -`greybus_net sample <https://github.com/cfriedt/zephyr/tree/greybus-sockets/samples/subsys/greybus/net>`_ -to our device. - -#. Edit the file :code:`~/.zephyrrc` and place the following text inside of it - -.. code-block:: bash - - export ZEPHYR_TOOLCHAIN_VARIANT=zephyr - export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.11.2 - -#. Set up the required Zephyr environment variables via - -.. code-block:: bash - - source zephyr-env.sh - -#. Build the project - -.. code-block:: bash - - BOARD=cc1352r1_launchxl west build samples/subsys/greybus/net --pristine \ - --build-dir build/greybus_launchpad -- -DCONF_FILE="prj.conf overlay-802154.conf" - -#. Ensure that the last part of the build process looks somewhat like this: - -.. code-block:: bash - - ... - [221/226] Linking C executable zephyr/zephyr_prebuilt.elf - Memory region Used Size Region Size %age Used - FLASH: 155760 B 360360 B 43.22% - FLASH_CCFG: 88 B 88 B 100.00% - SRAM: 58496 B 80 KB 71.41% - IDT_LIST: 184 B 2 KB 8.98% - [226/226] Linking C executable zephyr/zephyr.elf - -#. Flash the firmware to your device using - -.. code-block:: bash - - BOARD=cc1352r1_launchxl west flash --build-dir build/greybus_launchpad - -Linux -***** - -Warning: If you aren't comfortable building and installing a Linux kernel on -your computer, you should probably just stop here. I'll assume you know the -basics of building and installing a Linux kernel from here on out. - -Clone, patch, and build the kernel ----------------------------------- - -For this demo, I used the 5.8.4 stable kernel. Also, I've applied the -:code:`mikrobus` kernel driver, though it isn't strictly required for greybus. - -Note: The parent directory :code:`~` is simply used as a placeholder for testing. -Please use whatever parent directory you see fit. - -TODO: The patches for gb-netlink will eventually be applied here until pushed into mainline. - -.. code-block:: bash - - cd ~ - git clone --branch v5.8.4 --single-branch git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git - cd linux - git checkout -b v5.8.4-greybus - git am ~/beagleconnect/sw/linux/v2-0001-RFC-mikroBUS-driver-for-add-on-boards.patch - git am ~/beagleconnect/sw/linux/0001-mikroBUS-build-fixes.patch - cp /boot/config-`uname -r` .config - yes "" | make oldconfig - ./scripts/kconfig/merge_config.sh .config ~/beagleconnect/sw/linux/mikrobus.config - ./scripts/kconfig/merge_config.sh .config ~/beagleconnect/sw/linux/atusb.config - make -j`nproc --all` - sudo make modules_install - sudo make install - -Reboot and select your new kernel. - -Probe the IEEE 802.15.4 Device Driver -------------------------------------- - -On the Linux machine, make sure the :code:`atusb` driver is loaded. This should -happen automatically when the adapter is inserted or when the machine is booted -while the adapter is installed. - -.. code-block:: bash - - $ dmesg | grep -i ATUSB - [ 6.512154] usb 1-1: ATUSB: AT86RF231 version 2 - [ 6.512492] usb 1-1: Firmware: major: 0, minor: 3, hardware type: ATUSB (2) - [ 6.525357] usbcore: registered new interface driver atusb - ... - - - -We should now be able to see the IEEE 802.15.4 network device by entering :code:`ip a show wpan0`. - -.. code-block:: bash - - $ ip a show wpan0 - 36: wpan0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 123 qdisc fq_codel state UNKNOWN group default qlen 300 - link/ieee802.15.4 3e:7d:90:4d:8f:00:76:a2 brd ff:ff:ff:ff:ff:ff:ff:ff - - -But wait, that is not an IP address! It's the hardware address of the 802.15.4 -device. So, in order to associate it with an IP address, we need to run a -couple of other commands (thanks to wpan.cakelab.org). - -Set the 802.15.4 Physical and Link-Layer Parameters ---------------------------------------------------- - -#. First, get the phy number for the :code:`wpan0` device - -.. code-block:: bash - - $ iwpan list - wpan_phy phy0 - supported channels: - page 0: 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 - current_page: 0 - current_channel: 26, 2480 MHz - cca_mode: (1) Energy above threshold - cca_ed_level: -77 - tx_power: 3 - capabilities: - iftypes: node,monitor - channels: - page 0: - [11] 2405 MHz, [12] 2410 MHz, [13] 2415 MHz, - [14] 2420 MHz, [15] 2425 MHz, [16] 2430 MHz, - [17] 2435 MHz, [18] 2440 MHz, [19] 2445 MHz, - [20] 2450 MHz, [21] 2455 MHz, [22] 2460 MHz, - [23] 2465 MHz, [24] 2470 MHz, [25] 2475 MHz, - [26] 2480 MHz - tx_powers: - 3 dBm, 2.8 dBm, 2.3 dBm, 1.8 dBm, 1.3 dBm, 0.7 dBm, - 0 dBm, -1 dBm, -2 dBm, -3 dBm, -4 dBm, -5 dBm, - -7 dBm, -9 dBm, -12 dBm, -17 dBm, - cca_ed_levels: - -91 dBm, -89 dBm, -87 dBm, -85 dBm, -83 dBm, -81 dBm, - -79 dBm, -77 dBm, -75 dBm, -73 dBm, -71 dBm, -69 dBm, - -67 dBm, -65 dBm, -63 dBm, -61 dBm, - cca_modes: - (1) Energy above threshold - (2) Carrier sense only - (3, cca_opt: 0) Carrier sense with energy above threshold (logical operator is 'and') - (3, cca_opt: 1) Carrier sense with energy above threshold (logical operator is 'or') - min_be: 0,1,2,3,4,5,6,7,8 - max_be: 3,4,5,6,7,8 - csma_backoffs: 0,1,2,3,4,5 - frame_retries: 3 - lbt: false - -#. Next, set the Channel for the 802.15.4 device on the Linux machine - -.. code-block:: bash - - sudo iwpan phy phy0 set channel 0 26 - -#. Then, set the PAN identifier for the 802.15.4 device on the Linux machine :code:`sudo iwpan dev wpan0 set pan_id 0xabcd` - -#. Associate the :code:`wpan0` device to a new, 6lowpan network interface - -.. code-block:: bash - - sudo ip link add link wpan0 name lowpan0 type lowpan - -#. Finally, set the links up for both :code:`wpan0` and :code:`lowpan0` - -.. code-block:: bash - - sudo ip link set wpan0 up - sudo ip link set lowpan0 up - - - -We should observe something like the following when we run :code:`ip a show lowpan0`. - -.. code-block:: bash - - ip a show lowpan0 - 37: lowpan0@wpan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000 - link/6lowpan 9e:0b:a4:e8:00:d3:45:53 brd ff:ff:ff:ff:ff:ff:ff:ff - inet6 fe80::9c0b:a4e8:d3:4553/64 scope link - valid_lft forever preferred_lft forever - -Ping Pong -********* - -Broadcast Ping --------------- - -Now, perform a broadcast ping to see what else is listening on :code:`lowpan0`. - -.. code-block:: - - $ ping6 -I lowpan0 ff02::1 - PING ff02::1(ff02::1) from fe80::9c0b:a4e8:d3:4553%lowpan0 lowpan0: 56 data bytes - 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=1 ttl=64 time=0.099 ms - 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=2 ttl=64 time=0.125 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=2 ttl=64 time=17.3 ms (DUP!) - 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=3 ttl=64 time=0.126 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=3 ttl=64 time=9.60 ms (DUP!) - 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=4 ttl=64 time=0.131 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=4 ttl=64 time=14.9 ms (DUP!) - -Yay! We have pinged (pung?) the Zephyr device over IEEE 802.15.4 using 6LowPAN! - -Ping Zephyr ------------ - -We can ping the Zephyr device directly without a broadcast ping too, of course. - -.. code-block:: - - $ ping6 -I lowpan0 fe80::cf99:a11c:4b:1200 - PING fe80::cf99:a11c:4b:1200(fe80::cf99:a11c:4b:1200) from fe80::9c0b:a4e8:d3:4553%lowpan0 lowpan0: 56 data bytes - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=1 ttl=64 time=16.0 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=2 ttl=64 time=13.8 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=3 ttl=64 time=9.77 ms - 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=5 ttl=64 time=11.5 ms - -Ping Linux ----------- - -Similarly, we can ping the Linux host from the Zephyr shell. - -.. code-block:: - - uart:~$ net ping --help - ping - Ping a network host. - Subcommands: - --help :'net ping [-c count] [-i interval ms] <host>' Send ICMPv4 or ICMPv6 - Echo-Request to a network host. - $ net ping -c 5 fe80::9c0b:a4e8:d3:4553 - PING fe80::9c0b:a4e8:d3:4553 - 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=0 ttl=64 rssi=110 time=11 ms - 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=1 ttl=64 rssi=126 time=9 ms - 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=2 ttl=64 rssi=128 time=13 ms - 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=3 ttl=64 rssi=126 time=10 ms - 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=4 ttl=64 rssi=126 time=7 ms - -Assign a Static Address ------------------------ - -So far, we have been using IPv6 Link-Local addressing. However, the Zephyr -application is configured to use a statically configured IPv6 address as well -which is, namely :code:`2001:db8::1`. - -If we add a similar static IPv6 address to our Linux IEEE 802.15.4 network -interface, :code:`lowpan0`, then we should expect to be able to reach that as -well. - -In Linux, run the following - -.. code-block:: bash - - sudo ip -6 addr add 2001:db8::2/64 dev lowpan0 - -We can verify that the address has been set by examining the :code:`lowpan0` -network interface again. - -.. code-block:: bash - - $ ip a show lowpan0 - 37: lowpan0@wpan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000 - link/6lowpan 9e:0b:a4:e8:00:d3:45:53 brd ff:ff:ff:ff:ff:ff:ff:ff - inet6 2001:db8::2/64 scope global - valid_lft forever preferred_lft forever - inet6 fe80::9c0b:a4e8:d3:4553/64 scope link - valid_lft forever preferred_lft forever - -Lastly, ping the statically configured IPv6 address of the Zephyr device. - -.. code-block:: - - $ ping6 2001:db8::1 - PING 2001:db8::1(2001:db8::1) 56 data bytes - 64 bytes from 2001:db8::1: icmp_seq=2 ttl=64 time=53.7 ms - 64 bytes from 2001:db8::1: icmp_seq=3 ttl=64 time=13.1 ms - 64 bytes from 2001:db8::1: icmp_seq=4 ttl=64 time=22.0 ms - 64 bytes from 2001:db8::1: icmp_seq=5 ttl=64 time=22.7 ms - 64 bytes from 2001:db8::1: icmp_seq=6 ttl=64 time=18.4 ms - -Now that we have set up a reliable transport, let's move on to the application -layer. - - -Greybus -******* - -Hopefully the videos listed earlier provide a sufficient foundation to -understand what will happen shortly. However, there is still a bit more -preparation required. - -Build and probe Greybus Kernel Modules --------------------------------------- - -Greybus was originally intended to work exclusively on the UniPro physical -layer. However, we're using RF as our physical layer and TCP/IP as our -transport. As such, there was need to be able to communicate with the Linux -Greybus facilities through userspace, and out of that need arose gb-netlink. -The Netlink Greybus module actually does not care about the physical layer, but -is happy to usher Greybus messages back and forth between the kernel and -userspace. - -Build and probe the gb-netlink modules (as well as the other Greybus modules) -with the following: - -.. code-block:: bash - - cd ${WORKSPACE}/sw/greybus - make -j`nproc --all` - sudo make install - ../load_gb_modules.sh - -Build and Run Gbridge ---------------------- - -The gbridge utility was created as a proof of concept to abstract the Greybus -Netlink datapath among several reliable transports. For the purposes of this -tutorial, we'll be using it as a TCP/IP bridge. - -To run :code:`gbridge`, perform the following: - -.. code-block:: bash - - sudo apt install -y libnl-3-dev libnl-genl-3-dev libbluetooth-dev libavahi-client-dev - cd gbridge - autoreconf -vfi - GBNETLINKDIR=${PWD}/../greybus \ - ./configure --enable-uart --enable-tcpip --disable-gbsim --enable-netlink --disable-bluetooth - make -j`nproc --all` - sudo make install - gbridge - - -Blinky! -******* - -Now that we have set up a reliable TCP transport, and set up the Greybus -modules in the Linux kernel, and used Gbridge to connect a Greybus node to the -Linux kernel via TCP/IP, we can now get to the heart of the demonstration! - -First, save the following script as :code:`blinky.sh`. - -.. code-block:: bash - - #!/bin/bash - - # Blinky Demo for CC1352R SensorTag - - # /dev/gpiochipN that Greybus created - CHIP="$(gpiodetect | grep greybus_gpio | head -n 1 | awk '{print $1}')" - - # red, green, blue LED pins - RED=6 - GREEN=7 - BLUE=21 - - # Bash array for pins and values - PINS=($RED $GREEN $BLUE) - NPINS=${#PINS[@]} - - for ((;;)); do - for i in ${!PINS[@]}; do - # turn off previous pin - if [ $i -eq 0 ]; then - PREV=2 - else - PREV=$((i-1)) - fi - gpioset $CHIP ${PINS[$PREV]}=0 - - # turn on current pin - gpioset $CHIP ${PINS[$i]}=1 - - # wait a sec - sleep 1 - done - done - - -Second, run the script with root privileges: :code:`sudo bash blinky.sh` - -The output of your minicom session should resemble the following. - -.. code-block:: - - $ *** Booting Zephyr OS build zephyr-v2.3.0-1435-g40c0ed940d71 *** - [00:00:00.011,932] <inf> net_config: Initializing network - [00:00:00.111,938] <inf> net_config: IPv6 address: fe80::6c42:bc1c:4b:1200 - [00:00:00.112,121] <dbg> greybus_service.greybus_service_init: Greybus initializing.. - [00:00:00.112,426] <dbg> greybus_transport_tcpip.gb_transport_backend_init: Greybus TCP/IP Transport initializing.. - [00:00:00.112,579] <dbg> greybus_transport_tcpip.netsetup: created server socket 0 for cport 0 - [00:00:00.112,579] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 0 - [00:00:00.112,609] <dbg> greybus_transport_tcpip.netsetup: binding socket 0 (cport 0) to port 4242 - [00:00:00.112,640] <dbg> greybus_transport_tcpip.netsetup: listening on socket 0 (cport 0) - [00:00:00.112,823] <dbg> greybus_transport_tcpip.netsetup: created server socket 1 for cport 1 - [00:00:00.112,823] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 1 - [00:00:00.112,854] <dbg> greybus_transport_tcpip.netsetup: binding socket 1 (cport 1) to port 4243 - [00:00:00.112,854] <dbg> greybus_transport_tcpip.netsetup: listening on socket 1 (cport 1) - [00:00:00.113,037] <inf> net_config: IPv6 address: fe80::6c42:bc1c:4b:1200 - [00:00:00.113,250] <dbg> greybus_transport_tcpip.netsetup: created server socket 2 for cport 2 - [00:00:00.113,250] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 2 - [00:00:00.113,281] <dbg> greybus_transport_tcpip.netsetup: binding socket 2 (cport 2) to port 4244 - [00:00:00.113,311] <dbg> greybus_transport_tcpip.netsetup: listening on socket 2 (cport 2) - [00:00:00.113,494] <dbg> greybus_transport_tcpip.netsetup: created server socket 3 for cport 3 - [00:00:00.113,494] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 3 - [00:00:00.113,525] <dbg> greybus_transport_tcpip.netsetup: binding socket 3 (cport 3) to port 4245 - [00:00:00.113,555] <dbg> greybus_transport_tcpip.netsetup: listening on socket 3 (cport 3) - [00:00:00.113,861] <inf> greybus_transport_tcpip: Greybus TCP/IP Transport initialized - [00:00:00.116,149] <inf> greybus_service: Greybus is active - [00:00:00.116,546] <dbg> greybus_transport_tcpip.accept_loop: calling poll - [00:45:08.397,399] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 - [00:45:08.397,399] <dbg> greybus_transport_tcpip.accept_loop: socket 0 (cport 0) has traffic - [00:45:08.397,491] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:39638 as fd 4 - [00:45:08.397,491] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. - [00:45:08.397,735] <dbg> greybus_transport_tcpip.accept_loop: calling poll - [00:45:08.491,363] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 - [00:45:08.491,363] <dbg> greybus_transport_tcpip.accept_loop: socket 3 (cport 3) has traffic - [00:45:08.491,455] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:39890 as fd 5 - [00:45:08.491,455] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. - [00:45:08.491,699] <dbg> greybus_transport_tcpip.accept_loop: calling poll - [00:45:08.620,056] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 - [00:45:08.620,086] <dbg> greybus_transport_tcpip.accept_loop: socket 2 (cport 2) has traffic - [00:45:08.620,147] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:42422 as fd 6 - [00:45:08.620,147] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. - [00:45:08.620,422] <dbg> greybus_transport_tcpip.accept_loop: calling poll - [00:45:08.679,504] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 - [00:45:08.679,534] <dbg> greybus_transport_tcpip.accept_loop: socket 1 (cport 1) has traffic - [00:45:08.679,595] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:48286 as fd 7 - [00:45:08.679,595] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. - [00:45:08.679,870] <dbg> greybus_transport_tcpip.accept_loop: calling poll - ... - -Read I2C Registers ------------------- - -The SensorTag comes with an opt3001 ambient light sensor as well as an hdc2080 -temperature & humidity sensor. - -First, find which i2c device corresponds to the SensorTag: - -.. code-block:: bash - - ls -la /sys/bus/i2c/devices/* | grep "greybus" - lrwxrwxrwx 1 root root 0 Aug 15 11:24 /sys/bus/i2c/devices/i2c-8 -> ../../../devices/virtual/gb_nl/gn_nl/greybus1/1-2/1-2.2/1-2.2.2/gbphy2/i2c-8 - -On my machine, the i2c device node that Greybus creates is :code:`/dev/i2c-8`. - -Read the ID registers (at the i2c register address 0x7e) of the opt3001 sensor -(at i2c bus address 0x44) as shown below: - -.. code-block:: bash - - i2cget -y 8 0x44 0x7e w - 0x4954 - -Read the ID registers (at the i2c register address 0xfc) of the hdc2080 sensor -(at i2c bus address 0x41) as shown below: - -.. code-block:: bash - - i2cget -y 8 0x41 0xfc w - 0x5449 - -Conclusion -********** - -The blinking LED can and poking i2c registers can be a somewhat anticlimactic, -but hopefully it illustrates the potential for Greybus as an IoT application layer -protocol. - -What is nice about this demo, is that we're using Device Tree to describe our -Greybus Peripheral declaratively, they Greybus Manifest is automatically -generated, and the Greybus Service is automatically started in Zephyr. - -In other words, all that is required to replicate this for other IoT devices is -simply an appropriate Device Tree overlay file. - -The proof-of-concept involving Linux, Zephyr, and IEEE 802.15.4 was actually -fairly straight forward and was accomplished with mostly already-upstream -source. - -For Greybus in Zephyr, there is still a considerable amount of integration work -to be done, including * converting the fork to a proper Zephyr module * adding -security and authentication * automatic detection, joining, and rejoining of -devices. - -Thanks for reading, and we hope you've enjoyed this tutorial. diff --git a/boards/beagleconnect/media/SoftwareProp.jpg b/boards/beagleconnect/technology/media/SoftwareProp.jpg similarity index 100% rename from boards/beagleconnect/media/SoftwareProp.jpg rename to boards/beagleconnect/technology/media/SoftwareProp.jpg diff --git a/boards/beagleconnect/media/bcf_block_diagram.svg b/boards/beagleconnect/technology/media/bcf_block_diagram.svg similarity index 100% rename from boards/beagleconnect/media/bcf_block_diagram.svg rename to boards/beagleconnect/technology/media/bcf_block_diagram.svg diff --git a/boards/beagleconnect/story.rst b/boards/beagleconnect/technology/story.rst similarity index 97% rename from boards/beagleconnect/story.rst rename to boards/beagleconnect/technology/story.rst index 40e8f15b..4a907c06 100644 --- a/boards/beagleconnect/story.rst +++ b/boards/beagleconnect/technology/story.rst @@ -1,8 +1,7 @@ .. _beagleconnect-home: -************* -BeagleConnect -************* +BeagleConnectâ„¢ Story +********************* There are many stories behind BeagleConnectâ„¢, mine is just one of them. It begins with my mom teaching me about computers. She told me I could anything I diff --git a/boards/index.rst b/boards/index.rst index 106ed0d4..e81bf363 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -1,4 +1,4 @@ -BOARDS +Boards ######### `BeagleBone <beaglebone>`__ is a family of ARM-based, Linux-capable boards intended to be @@ -23,7 +23,7 @@ started. beaglebone/index.rst capes/index.rst - pocketbeagle/index.rst + pocketbeagle/original/index.rst capes/index.rst beagleconnect/index.rst beagleboard/index.rst diff --git a/boards/pocketbeagle/System-Reference-Manual.wiki b/boards/pocketbeagle/original/System-Reference-Manual.wiki similarity index 100% rename from boards/pocketbeagle/System-Reference-Manual.wiki rename to boards/pocketbeagle/original/System-Reference-Manual.wiki diff --git a/boards/pocketbeagle/ch01.rst b/boards/pocketbeagle/original/ch01.rst similarity index 100% rename from boards/pocketbeagle/ch01.rst rename to boards/pocketbeagle/original/ch01.rst diff --git a/boards/pocketbeagle/ch02.rst b/boards/pocketbeagle/original/ch02.rst similarity index 100% rename from boards/pocketbeagle/ch02.rst rename to boards/pocketbeagle/original/ch02.rst diff --git a/boards/pocketbeagle/ch03.rst b/boards/pocketbeagle/original/ch03.rst similarity index 100% rename from boards/pocketbeagle/ch03.rst rename to boards/pocketbeagle/original/ch03.rst diff --git a/boards/pocketbeagle/ch04.rst b/boards/pocketbeagle/original/ch04.rst similarity index 100% rename from boards/pocketbeagle/ch04.rst rename to boards/pocketbeagle/original/ch04.rst diff --git a/boards/pocketbeagle/ch05.rst b/boards/pocketbeagle/original/ch05.rst similarity index 100% rename from boards/pocketbeagle/ch05.rst rename to boards/pocketbeagle/original/ch05.rst diff --git a/boards/pocketbeagle/ch06.rst b/boards/pocketbeagle/original/ch06.rst similarity index 100% rename from boards/pocketbeagle/ch06.rst rename to boards/pocketbeagle/original/ch06.rst diff --git a/boards/pocketbeagle/ch07.rst b/boards/pocketbeagle/original/ch07.rst similarity index 100% rename from boards/pocketbeagle/ch07.rst rename to boards/pocketbeagle/original/ch07.rst diff --git a/boards/pocketbeagle/ch08.rst b/boards/pocketbeagle/original/ch08.rst similarity index 100% rename from boards/pocketbeagle/ch08.rst rename to boards/pocketbeagle/original/ch08.rst diff --git a/boards/pocketbeagle/ch09.rst b/boards/pocketbeagle/original/ch09.rst similarity index 100% rename from boards/pocketbeagle/ch09.rst rename to boards/pocketbeagle/original/ch09.rst diff --git a/boards/pocketbeagle/ch10.rst b/boards/pocketbeagle/original/ch10.rst similarity index 100% rename from boards/pocketbeagle/ch10.rst rename to boards/pocketbeagle/original/ch10.rst diff --git a/boards/pocketbeagle/ch11.rst b/boards/pocketbeagle/original/ch11.rst similarity index 100% rename from boards/pocketbeagle/ch11.rst rename to boards/pocketbeagle/original/ch11.rst diff --git a/boards/pocketbeagle/images/10fig-PB-SDcardinsert1.jpg b/boards/pocketbeagle/original/images/10fig-PB-SDcardinsert1.jpg similarity index 100% rename from boards/pocketbeagle/images/10fig-PB-SDcardinsert1.jpg rename to boards/pocketbeagle/original/images/10fig-PB-SDcardinsert1.jpg diff --git a/boards/pocketbeagle/images/10fig-PB-SDcardinsert2.jpg b/boards/pocketbeagle/original/images/10fig-PB-SDcardinsert2.jpg similarity index 100% rename from boards/pocketbeagle/images/10fig-PB-SDcardinsert2.jpg rename to boards/pocketbeagle/original/images/10fig-PB-SDcardinsert2.jpg diff --git a/boards/pocketbeagle/images/11fig-PB-microUSBattach1.jpg b/boards/pocketbeagle/original/images/11fig-PB-microUSBattach1.jpg similarity index 100% rename from boards/pocketbeagle/images/11fig-PB-microUSBattach1.jpg rename to boards/pocketbeagle/original/images/11fig-PB-microUSBattach1.jpg diff --git a/boards/pocketbeagle/images/12fig-PB-USBtoPC1.jpg b/boards/pocketbeagle/original/images/12fig-PB-USBtoPC1.jpg similarity index 100% rename from boards/pocketbeagle/images/12fig-PB-USBtoPC1.jpg rename to boards/pocketbeagle/original/images/12fig-PB-USBtoPC1.jpg diff --git a/boards/pocketbeagle/images/13fig-PB-PowerLED1.png b/boards/pocketbeagle/original/images/13fig-PB-PowerLED1.png similarity index 100% rename from boards/pocketbeagle/images/13fig-PB-PowerLED1.png rename to boards/pocketbeagle/original/images/13fig-PB-PowerLED1.png diff --git a/boards/pocketbeagle/images/14fig-PB-UserLEDs1.png b/boards/pocketbeagle/original/images/14fig-PB-UserLEDs1.png similarity index 100% rename from boards/pocketbeagle/images/14fig-PB-UserLEDs1.png rename to boards/pocketbeagle/original/images/14fig-PB-UserLEDs1.png diff --git a/boards/pocketbeagle/images/15fig-PB-starthtmpage.png b/boards/pocketbeagle/original/images/15fig-PB-starthtmpage.png similarity index 100% rename from boards/pocketbeagle/images/15fig-PB-starthtmpage.png rename to boards/pocketbeagle/original/images/15fig-PB-starthtmpage.png diff --git a/boards/pocketbeagle/images/16fig-PB-enablenetwork.png b/boards/pocketbeagle/original/images/16fig-PB-enablenetwork.png similarity index 100% rename from boards/pocketbeagle/images/16fig-PB-enablenetwork.png rename to boards/pocketbeagle/original/images/16fig-PB-enablenetwork.png diff --git a/boards/pocketbeagle/images/17fig-PB-cloud9.png b/boards/pocketbeagle/original/images/17fig-PB-cloud9.png similarity index 100% rename from boards/pocketbeagle/images/17fig-PB-cloud9.png rename to boards/pocketbeagle/original/images/17fig-PB-cloud9.png diff --git a/boards/pocketbeagle/images/18fig-PB-cloud9exs.png b/boards/pocketbeagle/original/images/18fig-PB-cloud9exs.png similarity index 100% rename from boards/pocketbeagle/images/18fig-PB-cloud9exs.png rename to boards/pocketbeagle/original/images/18fig-PB-cloud9exs.png diff --git a/boards/pocketbeagle/images/19fig-PB-cloud9blink.png b/boards/pocketbeagle/original/images/19fig-PB-cloud9blink.png similarity index 100% rename from boards/pocketbeagle/images/19fig-PB-cloud9blink.png rename to boards/pocketbeagle/original/images/19fig-PB-cloud9blink.png diff --git a/boards/pocketbeagle/images/1fig-PB-homepage.png b/boards/pocketbeagle/original/images/1fig-PB-homepage.png similarity index 100% rename from boards/pocketbeagle/images/1fig-PB-homepage.png rename to boards/pocketbeagle/original/images/1fig-PB-homepage.png diff --git a/boards/pocketbeagle/images/20fig-PB-powerbutton.png b/boards/pocketbeagle/original/images/20fig-PB-powerbutton.png similarity index 100% rename from boards/pocketbeagle/images/20fig-PB-powerbutton.png rename to boards/pocketbeagle/original/images/20fig-PB-powerbutton.png diff --git a/boards/pocketbeagle/images/21fig-PB-walkaround.png b/boards/pocketbeagle/original/images/21fig-PB-walkaround.png similarity index 100% rename from boards/pocketbeagle/images/21fig-PB-walkaround.png rename to boards/pocketbeagle/original/images/21fig-PB-walkaround.png diff --git a/boards/pocketbeagle/images/22fig-PB-blockdiagram.png b/boards/pocketbeagle/original/images/22fig-PB-blockdiagram.png similarity index 100% rename from boards/pocketbeagle/images/22fig-PB-blockdiagram.png rename to boards/pocketbeagle/original/images/22fig-PB-blockdiagram.png diff --git a/boards/pocketbeagle/images/24fig-PB-Headerphoto.png b/boards/pocketbeagle/original/images/24fig-PB-Headerphoto.png similarity index 100% rename from boards/pocketbeagle/images/24fig-PB-Headerphoto.png rename to boards/pocketbeagle/original/images/24fig-PB-Headerphoto.png diff --git a/boards/pocketbeagle/images/25fig-PB-SDcard.png b/boards/pocketbeagle/original/images/25fig-PB-SDcard.png similarity index 100% rename from boards/pocketbeagle/images/25fig-PB-SDcard.png rename to boards/pocketbeagle/original/images/25fig-PB-SDcard.png diff --git a/boards/pocketbeagle/images/26fig-PB-USB.png b/boards/pocketbeagle/original/images/26fig-PB-USB.png similarity index 100% rename from boards/pocketbeagle/images/26fig-PB-USB.png rename to boards/pocketbeagle/original/images/26fig-PB-USB.png diff --git a/boards/pocketbeagle/images/27fig-PB-JTAGpads.png b/boards/pocketbeagle/original/images/27fig-PB-JTAGpads.png similarity index 100% rename from boards/pocketbeagle/images/27fig-PB-JTAGpads.png rename to boards/pocketbeagle/original/images/27fig-PB-JTAGpads.png diff --git a/boards/pocketbeagle/images/28fig-PB-serialdebug.png b/boards/pocketbeagle/original/images/28fig-PB-serialdebug.png similarity index 100% rename from boards/pocketbeagle/images/28fig-PB-serialdebug.png rename to boards/pocketbeagle/original/images/28fig-PB-serialdebug.png diff --git a/boards/pocketbeagle/images/40fig-PB-PRU-block.png b/boards/pocketbeagle/original/images/40fig-PB-PRU-block.png similarity index 100% rename from boards/pocketbeagle/images/40fig-PB-PRU-block.png rename to boards/pocketbeagle/original/images/40fig-PB-PRU-block.png diff --git a/boards/pocketbeagle/images/41fig-PB-Headerback.png b/boards/pocketbeagle/original/images/41fig-PB-Headerback.png similarity index 100% rename from boards/pocketbeagle/images/41fig-PB-Headerback.png rename to boards/pocketbeagle/original/images/41fig-PB-Headerback.png diff --git a/boards/pocketbeagle/images/46fig-PB-Mikro.png b/boards/pocketbeagle/original/images/46fig-PB-Mikro.png similarity index 100% rename from boards/pocketbeagle/images/46fig-PB-Mikro.png rename to boards/pocketbeagle/original/images/46fig-PB-Mikro.png diff --git a/boards/pocketbeagle/images/5fig-PB-GetStarted.png b/boards/pocketbeagle/original/images/5fig-PB-GetStarted.png similarity index 100% rename from boards/pocketbeagle/images/5fig-PB-GetStarted.png rename to boards/pocketbeagle/original/images/5fig-PB-GetStarted.png diff --git a/boards/pocketbeagle/images/6fig-PB-DownloadSW.png b/boards/pocketbeagle/original/images/6fig-PB-DownloadSW.png similarity index 100% rename from boards/pocketbeagle/images/6fig-PB-DownloadSW.png rename to boards/pocketbeagle/original/images/6fig-PB-DownloadSW.png diff --git a/boards/pocketbeagle/images/7fig-PB-Etcherdownload.png b/boards/pocketbeagle/original/images/7fig-PB-Etcherdownload.png similarity index 100% rename from boards/pocketbeagle/images/7fig-PB-Etcherdownload.png rename to boards/pocketbeagle/original/images/7fig-PB-Etcherdownload.png diff --git a/boards/pocketbeagle/images/8fig-PB-Etcherselectimage.png b/boards/pocketbeagle/original/images/8fig-PB-Etcherselectimage.png similarity index 100% rename from boards/pocketbeagle/images/8fig-PB-Etcherselectimage.png rename to boards/pocketbeagle/original/images/8fig-PB-Etcherselectimage.png diff --git a/boards/pocketbeagle/images/9fig-PB-Etcherfinish.png b/boards/pocketbeagle/original/images/9fig-PB-Etcherfinish.png similarity index 100% rename from boards/pocketbeagle/images/9fig-PB-Etcherfinish.png rename to boards/pocketbeagle/original/images/9fig-PB-Etcherfinish.png diff --git a/boards/pocketbeagle/images/Bonescript-ex.png b/boards/pocketbeagle/original/images/Bonescript-ex.png similarity index 100% rename from boards/pocketbeagle/images/Bonescript-ex.png rename to boards/pocketbeagle/original/images/Bonescript-ex.png diff --git a/boards/pocketbeagle/images/Header-P1-sch.png b/boards/pocketbeagle/original/images/Header-P1-sch.png similarity index 100% rename from boards/pocketbeagle/images/Header-P1-sch.png rename to boards/pocketbeagle/original/images/Header-P1-sch.png diff --git a/boards/pocketbeagle/images/Header-P2-sch.png b/boards/pocketbeagle/original/images/Header-P2-sch.png similarity index 100% rename from boards/pocketbeagle/images/Header-P2-sch.png rename to boards/pocketbeagle/original/images/Header-P2-sch.png diff --git a/boards/pocketbeagle/images/Header-both-sch.png b/boards/pocketbeagle/original/images/Header-both-sch.png similarity index 100% rename from boards/pocketbeagle/images/Header-both-sch.png rename to boards/pocketbeagle/original/images/Header-both-sch.png diff --git a/boards/pocketbeagle/images/JTAG-pads-sch.png b/boards/pocketbeagle/original/images/JTAG-pads-sch.png similarity index 100% rename from boards/pocketbeagle/images/JTAG-pads-sch.png rename to boards/pocketbeagle/original/images/JTAG-pads-sch.png diff --git a/boards/pocketbeagle/images/OSD335x-color-block.jpg b/boards/pocketbeagle/original/images/OSD335x-color-block.jpg similarity index 100% rename from boards/pocketbeagle/images/OSD335x-color-block.jpg rename to boards/pocketbeagle/original/images/OSD335x-color-block.jpg diff --git a/boards/pocketbeagle/images/OSHW_mark_US000083.png b/boards/pocketbeagle/original/images/OSHW_mark_US000083.png similarity index 100% rename from boards/pocketbeagle/images/OSHW_mark_US000083.png rename to boards/pocketbeagle/original/images/OSHW_mark_US000083.png diff --git a/boards/pocketbeagle/images/PB-USB-photo.png b/boards/pocketbeagle/original/images/PB-USB-photo.png similarity index 100% rename from boards/pocketbeagle/images/PB-USB-photo.png rename to boards/pocketbeagle/original/images/PB-USB-photo.png diff --git a/boards/pocketbeagle/images/PB-block-diag2.jpg b/boards/pocketbeagle/original/images/PB-block-diag2.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-block-diag2.jpg rename to boards/pocketbeagle/original/images/PB-block-diag2.jpg diff --git a/boards/pocketbeagle/images/PB-block-diag3.png b/boards/pocketbeagle/original/images/PB-block-diag3.png similarity index 100% rename from boards/pocketbeagle/images/PB-block-diag3.png rename to boards/pocketbeagle/original/images/PB-block-diag3.png diff --git a/boards/pocketbeagle/images/PB-block-diagram.png b/boards/pocketbeagle/original/images/PB-block-diagram.png similarity index 100% rename from boards/pocketbeagle/images/PB-block-diagram.png rename to boards/pocketbeagle/original/images/PB-block-diagram.png diff --git a/boards/pocketbeagle/images/PB-card-back-1.jpg b/boards/pocketbeagle/original/images/PB-card-back-1.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-card-back-1.jpg rename to boards/pocketbeagle/original/images/PB-card-back-1.jpg diff --git a/boards/pocketbeagle/images/PB-card-back.jpg b/boards/pocketbeagle/original/images/PB-card-back.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-card-back.jpg rename to boards/pocketbeagle/original/images/PB-card-back.jpg diff --git a/boards/pocketbeagle/images/PB-card-front-1.jpg b/boards/pocketbeagle/original/images/PB-card-front-1.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-card-front-1.jpg rename to boards/pocketbeagle/original/images/PB-card-front-1.jpg diff --git a/boards/pocketbeagle/images/PB-card-front.jpg b/boards/pocketbeagle/original/images/PB-card-front.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-card-front.jpg rename to boards/pocketbeagle/original/images/PB-card-front.jpg diff --git a/boards/pocketbeagle/images/PB-header-photo.png b/boards/pocketbeagle/original/images/PB-header-photo.png similarity index 100% rename from boards/pocketbeagle/images/PB-header-photo.png rename to boards/pocketbeagle/original/images/PB-header-photo.png diff --git a/boards/pocketbeagle/images/PB-microSDphoto-small.jpg b/boards/pocketbeagle/original/images/PB-microSDphoto-small.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-microSDphoto-small.jpg rename to boards/pocketbeagle/original/images/PB-microSDphoto-small.jpg diff --git a/boards/pocketbeagle/images/PB-microSDphoto.jpg b/boards/pocketbeagle/original/images/PB-microSDphoto.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-microSDphoto.jpg rename to boards/pocketbeagle/original/images/PB-microSDphoto.jpg diff --git a/boards/pocketbeagle/images/PB-powerLED-photo.png b/boards/pocketbeagle/original/images/PB-powerLED-photo.png similarity index 100% rename from boards/pocketbeagle/images/PB-powerLED-photo.png rename to boards/pocketbeagle/original/images/PB-powerLED-photo.png diff --git a/boards/pocketbeagle/images/PB-powerbutton.png b/boards/pocketbeagle/original/images/PB-powerbutton.png similarity index 100% rename from boards/pocketbeagle/images/PB-powerbutton.png rename to boards/pocketbeagle/original/images/PB-powerbutton.png diff --git a/boards/pocketbeagle/images/PB-tethered.png b/boards/pocketbeagle/original/images/PB-tethered.png similarity index 100% rename from boards/pocketbeagle/images/PB-tethered.png rename to boards/pocketbeagle/original/images/PB-tethered.png diff --git a/boards/pocketbeagle/images/PB-tutorials.png b/boards/pocketbeagle/original/images/PB-tutorials.png similarity index 100% rename from boards/pocketbeagle/images/PB-tutorials.png rename to boards/pocketbeagle/original/images/PB-tutorials.png diff --git a/boards/pocketbeagle/images/PB-userLED-photo.png b/boards/pocketbeagle/original/images/PB-userLED-photo.png similarity index 100% rename from boards/pocketbeagle/images/PB-userLED-photo.png rename to boards/pocketbeagle/original/images/PB-userLED-photo.png diff --git a/boards/pocketbeagle/images/PB-walkaround-2.jpg b/boards/pocketbeagle/original/images/PB-walkaround-2.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-walkaround-2.jpg rename to boards/pocketbeagle/original/images/PB-walkaround-2.jpg diff --git a/boards/pocketbeagle/images/PB-walkaround-2.png b/boards/pocketbeagle/original/images/PB-walkaround-2.png similarity index 100% rename from boards/pocketbeagle/images/PB-walkaround-2.png rename to boards/pocketbeagle/original/images/PB-walkaround-2.png diff --git a/boards/pocketbeagle/images/PB-walkaround-3.jpg b/boards/pocketbeagle/original/images/PB-walkaround-3.jpg similarity index 100% rename from boards/pocketbeagle/images/PB-walkaround-3.jpg rename to boards/pocketbeagle/original/images/PB-walkaround-3.jpg diff --git a/boards/pocketbeagle/images/PB-walkaround.png b/boards/pocketbeagle/original/images/PB-walkaround.png similarity index 100% rename from boards/pocketbeagle/images/PB-walkaround.png rename to boards/pocketbeagle/original/images/PB-walkaround.png diff --git a/boards/pocketbeagle/images/PB1-fullPC-3.jpg b/boards/pocketbeagle/original/images/PB1-fullPC-3.jpg similarity index 100% rename from boards/pocketbeagle/images/PB1-fullPC-3.jpg rename to boards/pocketbeagle/original/images/PB1-fullPC-3.jpg diff --git a/boards/pocketbeagle/images/PocketBeagle-size-compare-small.jpg b/boards/pocketbeagle/original/images/PocketBeagle-size-compare-small.jpg similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle-size-compare-small.jpg rename to boards/pocketbeagle/original/images/PocketBeagle-size-compare-small.jpg diff --git a/boards/pocketbeagle/images/PocketBeagle_Back_BW.jpg b/boards/pocketbeagle/original/images/PocketBeagle_Back_BW.jpg similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_Back_BW.jpg rename to boards/pocketbeagle/original/images/PocketBeagle_Back_BW.jpg diff --git a/boards/pocketbeagle/images/PocketBeagle_Expansion_Headers.ods b/boards/pocketbeagle/original/images/PocketBeagle_Expansion_Headers.ods similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_Expansion_Headers.ods rename to boards/pocketbeagle/original/images/PocketBeagle_Expansion_Headers.ods diff --git a/boards/pocketbeagle/images/PocketBeagle_Front_BW-small.jpg b/boards/pocketbeagle/original/images/PocketBeagle_Front_BW-small.jpg similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_Front_BW-small.jpg rename to boards/pocketbeagle/original/images/PocketBeagle_Front_BW-small.jpg diff --git a/boards/pocketbeagle/images/PocketBeagle_Front_BW.jpg b/boards/pocketbeagle/original/images/PocketBeagle_Front_BW.jpg similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_Front_BW.jpg rename to boards/pocketbeagle/original/images/PocketBeagle_Front_BW.jpg diff --git a/boards/pocketbeagle/images/PocketBeagle_microUSB_bb.png b/boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb.png similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_microUSB_bb.png rename to boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb.png diff --git a/boards/pocketbeagle/images/PocketBeagle_microUSB_bb.svg b/boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb.svg similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_microUSB_bb.svg rename to boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb.svg diff --git a/boards/pocketbeagle/images/PocketBeagle_microUSB_bb1.png b/boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb1.png similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_microUSB_bb1.png rename to boards/pocketbeagle/original/images/PocketBeagle_microUSB_bb1.png diff --git a/boards/pocketbeagle/images/PocketBeagle_pinout.pdf b/boards/pocketbeagle/original/images/PocketBeagle_pinout.pdf similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_pinout.pdf rename to boards/pocketbeagle/original/images/PocketBeagle_pinout.pdf diff --git a/boards/pocketbeagle/images/PocketBeagle_pinout.png b/boards/pocketbeagle/original/images/PocketBeagle_pinout.png similarity index 100% rename from boards/pocketbeagle/images/PocketBeagle_pinout.png rename to boards/pocketbeagle/original/images/PocketBeagle_pinout.png diff --git a/boards/pocketbeagle/images/Power-button-sch.png b/boards/pocketbeagle/original/images/Power-button-sch.png similarity index 100% rename from boards/pocketbeagle/images/Power-button-sch.png rename to boards/pocketbeagle/original/images/Power-button-sch.png diff --git a/boards/pocketbeagle/images/SRM1_cloud9blinkPB.png b/boards/pocketbeagle/original/images/SRM1_cloud9blinkPB.png similarity index 100% rename from boards/pocketbeagle/images/SRM1_cloud9blinkPB.png rename to boards/pocketbeagle/original/images/SRM1_cloud9blinkPB.png diff --git a/boards/pocketbeagle/images/SRM2_cloud9blinkPB.png b/boards/pocketbeagle/original/images/SRM2_cloud9blinkPB.png similarity index 100% rename from boards/pocketbeagle/images/SRM2_cloud9blinkPB.png rename to boards/pocketbeagle/original/images/SRM2_cloud9blinkPB.png diff --git a/boards/pocketbeagle/images/SRM3_cloud9blinkPB.png b/boards/pocketbeagle/original/images/SRM3_cloud9blinkPB.png similarity index 100% rename from boards/pocketbeagle/images/SRM3_cloud9blinkPB.png rename to boards/pocketbeagle/original/images/SRM3_cloud9blinkPB.png diff --git a/boards/pocketbeagle/images/SRM4_cloud9blinkPB.png b/boards/pocketbeagle/original/images/SRM4_cloud9blinkPB.png similarity index 100% rename from boards/pocketbeagle/images/SRM4_cloud9blinkPB.png rename to boards/pocketbeagle/original/images/SRM4_cloud9blinkPB.png diff --git a/boards/pocketbeagle/images/SiP-A-sch.png b/boards/pocketbeagle/original/images/SiP-A-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-A-sch.png rename to boards/pocketbeagle/original/images/SiP-A-sch.png diff --git a/boards/pocketbeagle/images/SiP-B-sch.png b/boards/pocketbeagle/original/images/SiP-B-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-B-sch.png rename to boards/pocketbeagle/original/images/SiP-B-sch.png diff --git a/boards/pocketbeagle/images/SiP-C-sch.png b/boards/pocketbeagle/original/images/SiP-C-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-C-sch.png rename to boards/pocketbeagle/original/images/SiP-C-sch.png diff --git a/boards/pocketbeagle/images/SiP-D-sch.png b/boards/pocketbeagle/original/images/SiP-D-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-D-sch.png rename to boards/pocketbeagle/original/images/SiP-D-sch.png diff --git a/boards/pocketbeagle/images/SiP-E-sch.png b/boards/pocketbeagle/original/images/SiP-E-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-E-sch.png rename to boards/pocketbeagle/original/images/SiP-E-sch.png diff --git a/boards/pocketbeagle/images/SiP-F-sch.png b/boards/pocketbeagle/original/images/SiP-F-sch.png similarity index 100% rename from boards/pocketbeagle/images/SiP-F-sch.png rename to boards/pocketbeagle/original/images/SiP-F-sch.png diff --git a/boards/pocketbeagle/images/USB-sch.png b/boards/pocketbeagle/original/images/USB-sch.png similarity index 100% rename from boards/pocketbeagle/images/USB-sch.png rename to boards/pocketbeagle/original/images/USB-sch.png diff --git a/boards/pocketbeagle/images/User-LEDs-sch.png b/boards/pocketbeagle/original/images/User-LEDs-sch.png similarity index 100% rename from boards/pocketbeagle/images/User-LEDs-sch.png rename to boards/pocketbeagle/original/images/User-LEDs-sch.png diff --git a/boards/pocketbeagle/images/fig-PB-Headerphoto.png b/boards/pocketbeagle/original/images/fig-PB-Headerphoto.png similarity index 100% rename from boards/pocketbeagle/images/fig-PB-Headerphoto.png rename to boards/pocketbeagle/original/images/fig-PB-Headerphoto.png diff --git a/boards/pocketbeagle/images/green_check.png b/boards/pocketbeagle/original/images/green_check.png similarity index 100% rename from boards/pocketbeagle/images/green_check.png rename to boards/pocketbeagle/original/images/green_check.png diff --git a/boards/pocketbeagle/images/mikrobus-socket-pinout.jpg b/boards/pocketbeagle/original/images/mikrobus-socket-pinout.jpg similarity index 100% rename from boards/pocketbeagle/images/mikrobus-socket-pinout.jpg rename to boards/pocketbeagle/original/images/mikrobus-socket-pinout.jpg diff --git a/boards/pocketbeagle/images/pocketbeagle_package_small_size.jpg b/boards/pocketbeagle/original/images/pocketbeagle_package_small_size.jpg similarity index 100% rename from boards/pocketbeagle/images/pocketbeagle_package_small_size.jpg rename to boards/pocketbeagle/original/images/pocketbeagle_package_small_size.jpg diff --git a/boards/pocketbeagle/images/usdconnector-sch.png b/boards/pocketbeagle/original/images/usdconnector-sch.png similarity index 100% rename from boards/pocketbeagle/images/usdconnector-sch.png rename to boards/pocketbeagle/original/images/usdconnector-sch.png diff --git a/boards/pocketbeagle/images/warning_tri.png b/boards/pocketbeagle/original/images/warning_tri.png similarity index 100% rename from boards/pocketbeagle/images/warning_tri.png rename to boards/pocketbeagle/original/images/warning_tri.png diff --git a/boards/pocketbeagle/index.rst b/boards/pocketbeagle/original/index.rst similarity index 100% rename from boards/pocketbeagle/index.rst rename to boards/pocketbeagle/original/index.rst diff --git a/index.rst b/index.rst index 14ebc830..3f2ace49 100644 --- a/index.rst +++ b/index.rst @@ -6,6 +6,8 @@ BeagleBoard Documentation ############################ +Welcome to the `BeagleBoard project documentation <https://git.beagleboard.org/docs/docs.beagleboard.io>`__. + Sections ******** @@ -30,7 +32,7 @@ Sections books/index.rst Indices and tables -############################ +******************** * :ref:`glossary` * :ref:`genindex` diff --git a/intro/contribution/contribute.rst b/intro/contribution/contribute.rst deleted file mode 100644 index 723dea9a..00000000 --- a/intro/contribution/contribute.rst +++ /dev/null @@ -1 +0,0 @@ -.. _beagleboard-contribute: \ No newline at end of file diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 26ff7b41..bcea82b8 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -9,3 +9,4 @@ Contribution :maxdepth: 1 git-usage.rst + style.rst diff --git a/intro/contribution/style.rst b/intro/contribution/style.rst new file mode 100644 index 00000000..e80d7615 --- /dev/null +++ b/intro/contribution/style.rst @@ -0,0 +1,12 @@ +.. _beagleboard-doc-style: + +Documentation Style Guide +########################## + +.. note:: + This is currently a work-in-progress placeholder for some notes + on how to style the BeagleBoard Documenation Project. + +See the `Zephyr Project Documentation Guidelines <https://docs.zephyrproject.org/latest/contribute/documentation/guidelines.html>`__ as a starting point. + + diff --git a/intro/index.rst b/intro/index.rst index e1387b4e..96900e60 100644 --- a/intro/index.rst +++ b/intro/index.rst @@ -1,5 +1,5 @@ -INTRODUCTION -************* +Introduction +############# Welcome to the BeagleBoard documentation project. If you are looking for help with your Beagle open-hardware development platform, you've found the right place! -- GitLab From a2e3ee545994fa750fe0cde7deb49848f9fe45cb Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 12:42:27 -0400 Subject: [PATCH 11/83] WIP reorganization --- intro/support/index.rst | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/intro/support/index.rst b/intro/support/index.rst index 3e913b59..a40c10a7 100644 --- a/intro/support/index.rst +++ b/intro/support/index.rst @@ -3,7 +3,7 @@ Support ######### -.. note:: #TODO# all the links need updating and content moved into this repo. +.. note:: #TODO# all the links need updating and content moved into this repo, especially bone101. Getting started =============== @@ -12,6 +12,8 @@ The starting experience for all Beagles has been made to be as consistent as is possible. For any of the Beagle Linux-based open hardware computers, visit our `getting started guide <getting-started>`__. +- `Getting Started Guide <getting-started>`__ + Getting support =============== @@ -27,12 +29,6 @@ to provide a link to your questions on the `community forums <https://forum.beagleboard.org>`__ as answers will be provided there. -.. toctree:: - :maxdepth: 1 - - getting-started.rst - - Diagnostic tools ================ @@ -91,5 +87,6 @@ Understanding Your Beagle Working with Cape Add-on Boards =============================== +- `Cape Documentation <../../boards/capes>`__ - `BeagleBone Cape Interface Specification <../../boards/capes/cape-interface-spec>`__ -- GitLab From a24c8a4885e829134ec1252ad5b1a56930fbbf9c Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 13:40:53 -0400 Subject: [PATCH 12/83] WIP missed technology/index --- boards/beagleconnect/technology/index.rst | 1116 +++++++++++++++++++++ 1 file changed, 1116 insertions(+) create mode 100644 boards/beagleconnect/technology/index.rst diff --git a/boards/beagleconnect/technology/index.rst b/boards/beagleconnect/technology/index.rst new file mode 100644 index 00000000..b224c487 --- /dev/null +++ b/boards/beagleconnect/technology/index.rst @@ -0,0 +1,1116 @@ +.. _beagleconnect-overview: + +BeagleConnect Overview +####################### + +This is the deep-dive introduction to BeagleConnect technology and software +architecture. + +.. note:: + This documentation and the associated software are each a work-in-progress. + +.. image:: ../freedom/media/image1.jpg + :width: 598 + :align: center + :height: 400 + :alt: BeagleConnect + +BeagleConnectâ„¢ Greybus Stack +**************************** + +Work in progress +================ + +To understand a bit more about how the BeagleConnectâ„¢ Greybus stack is being +built, this section helps describe the development currently in progress and +the principles of operation. + +Background +---------- +.. image:: media/SoftwareProp.jpg + :width: 600 + :align: center + :height: 400 + :alt: BeagleConnect Software Proposition + +BeagleConnectâ„¢ uses Greybus and updated Click Boards with identifiers to +eliminate the need to add and manually configure devices added onto the Linux +system. + +High-level +---------- +* For Linux nerds: Think of BeagleConnectâ„¢ as 6LoWPAN over 802.15.4-based + Greybus (instead of Unipro as used by Project Ara), where every + BeagleConnectâ„¢ board shows up as new SPI, I2C, UART, PWM, ADC, and GPIO + controllers that can now be probed to load drivers for the sensors or + whatever is connected to them. (Proof of concept of Greybus over TCP/IP: + https://www.youtube.com/watch?v=7H50pv-4YXw) + +* For MCU folks: Think of BeagleConnectâ„¢ as a Firmata-style firmware load that + exposes the interfaces for remote access over a secured wireless network. + However, instead of using host software that knows how to speak the Firmata + protocol, the Linux kernel speaks the slightly similar Greybus protocol to + the MCU and exposes the device generically to users using a Linux kernel + driver. Further, the Greybus protocol is spoken over 6LoWPAN on 802.15.4. + +Software architecture +--------------------- + +.. image:: media/bcf_block_diagram.svg + :width: 600 + :align: center + :height: 400 + :alt: BeagleConnect Block Diagram + +TODO items +---------- + +* Linux kernel driver + +* Provisioning + +* Firmware for host CC13x + +* Firmware for device CC13x + +* Click Board drivers and device tree formatted metadata for 100 or so Click + Boards + +* Click Board plug-ins for node-red for the same 100 or so Click Boards + +* BeagleConnectâ„¢ Freedom System Reference Manual and FAQs + + +Associated pre-work +------------------- + +* Click Board support for Node-RED can be executed with native connections on + PocketBeagle+TechLab and BeagleBone Black with mikroBUS Cape + +* Device tree fragments and driver updates can be provided via + https://bbb.io/click + +* The Kconfig style provisioning can be implemented for those solutions, which + will require a reboot. We need to centralize edits to /boot/uEnv.txt to be + programmatic. As I think through this, I don't think BeagleConnect is + impacted, because the Greybus-style discovery along with Click EEPROMS will + eliminate any need to edit /boot/uEnv.txt. + +User experience concerns +------------------------ + +* Make sure no reboots are required + +* Plugging BeagleConnect into host should trigger host configuration + +* Click EEPROMs should trigger loading whatever drivers are needed and + provisioning should load any new drivers + +* Userspace (spidev, etc.) drivers should unload cleanly when 2nd phase + provisioning is completed + +BeagleConnectâ„¢ Greybus demo using BeagleConnectâ„¢ Freedom +======================================================== +BeagleConnectâ„¢ Freedom runs a subGHz IEEE 802.15.4 network. This BeagleConnectâ„¢ +Greybus demo shows how to interact with GPIO, I2C and mikroBUS add-on boards +remotely connected over a BeagleConnectâ„¢ Freedom. + +This section starts with the steps required to use +`Linux <https://en.wikipedia.org/wiki/Linux>`_ embedded computer +(`BeagleBone Green Gateway <https://wiki.seeedstudio.com/BeagleBone-Green-Gateway/>`_) +and the `Greybus <https://lwn.net/Articles/715955/>`_ protocol, over an +IEEE 802.15.4 wireless link, to blink an LED on a +`Zephyr <https://zephyrproject.org/>`_ device. + +Introduction +------------ + +*Why??* + +Good question. Blinking an LED is kind of the +`Hello, World <https://en.wikipedia.org/wiki/%22Hello,_World!%22_program>`_ of +the hardware community. In this case, we're less interested in the mechanics +of switching a GPIO to drive some current through an LED and more interested in +how that happens with the +`Internet of Things (IoT) <https://en.wikipedia.org/wiki/Internet_of_things>`_. + +There are several existing network and application layers that are driven by +corporate heavyweights and industry consortiums, but relatively few that are +community driven and, more specifically, even fewer that have the ability to +integrate so tightly with the Linux kernel. + +The goal here is to provide a community-maintained, developer-friendly, and +open-source protocol for the Internet of Things using the Greybus Protocol, and +blinking an LED using Greybus is the simplest proof-of-concept for that. All +that is required is a reliable transport. + +#. Power a BeagleConnect Freedom that has not yet been programmed via a USB + power source, not the BeagleBone Green Gateway. You'll hear a click every + 1-2 seconds along with seeing 4 of the LEDs turn off and on. + +#. In an isolated terminal window, :code:`sudo beagleconnect-start-gateway` + +#. :code:`sensortest-rx.py` + +Every 1-2 minutes, you should see something like: + +.. code-block:: + + ('fe80::3111:7a22:4b:1200%lowpan0', 52213, 0, 13) '2l:7.79;' + ('fe80::3111:7a22:4b:1200%lowpan0', 52213, 0, 13) '4h:43.75;4t:23.11;' + +The value after "2l:" is the amount of light in lux. The value after "4h:" is +the relative humidity and after "4t:" is the temperature in Celsius. + +Flash BeagleConnectâ„¢ Freedom node device with Greybus firmware +-------------------------------------------------------------- + +#TODO: How can we add a step in here to show the network is connected without needing gbridge to be fully functional? + +Do this from the BeagleBone® Green Gateway board that was previously used to +program the BeagleConnectâ„¢ Freedom gateway device: + +#. Disconnect the BeagleConnectâ„¢ Freedom **gateway** device + +#. Connect a new BeagleConnectâ„¢ Freedom board via USB + +#. :code:`sudo systemctl stop lowpan.service` + +#. :code:`cc2538-bsl.py /usr/share/beagleconnect/cc1352/greybus_mikrobus_beagleconnect.bin /dev/ttyACM0` + +#. After it finishes programming successfully, disconnect the BeagleConnect Freedom node device + +#. Power the newly programmed BeagleConnect Freedom node device from an alternate USB power source + +#. Reconnect the BeagleConnect Freedom **gateway** device to the BeagleBone Green Gateway + +#. :code:`sudo systemctl start lowpan.service` + +#. :code:`sudo beagleconnect-start-gateway` + +.. code-block:: bash + + debian@beaglebone:~$ sudo beagleconnect-start-gateway + [sudo] password for debian: + setting up wpanusb gateway for IEEE 802154 CHANNEL 1(906 Mhz) + ping6: Warning: source address might be selected on device other than lowpan0. + PING 2001:db8::1(2001:db8::1) from ::1 lowpan0: 56 data bytes + 64 bytes from 2001:db8::1: icmp_seq=2 ttl=64 time=185 ms + 64 bytes from 2001:db8::1: icmp_seq=3 ttl=64 time=40.9 ms + 64 bytes from 2001:db8::1: icmp_seq=4 ttl=64 time=40.9 ms + 64 bytes from 2001:db8::1: icmp_seq=5 ttl=64 time=40.6 ms + + --- 2001:db8::1 ping statistics --- + 5 packets transmitted, 4 received, 20% packet loss, time 36ms + rtt min/avg/max/mdev = 40.593/76.796/184.799/62.356 ms + debian@beaglebone:~$ iio_info + Library version: 0.19 (git tag: v0.19) + Compiled with backends: local xml ip usb serial + IIO context created with local backend. + Backend version: 0.19 (git tag: v0.19) + Backend description string: Linux beaglebone 5.14.18-bone20 #1buster PREEMPT Tue Nov 16 20:47:19 UTC 2021 armv7l + IIO context has 1 attributes: + local,kernel: 5.14.18-bone20 + IIO context has 3 devices: + iio:device0: TI-am335x-adc.0.auto (buffer capable) + 8 channels found: + voltage0: (input, index: 0, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 1412 + voltage1: (input, index: 1, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 2318 + voltage2: (input, index: 2, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 2631 + voltage3: (input, index: 3, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 817 + voltage4: (input, index: 4, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 881 + voltage5: (input, index: 5, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 0 + voltage6: (input, index: 6, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 0 + voltage7: (input, index: 7, format: le:u12/16>>0) + 1 channel-specific attributes found: + attr 0: raw value: 1180 + 2 buffer-specific attributes found: + attr 0: data_available value: 0 + attr 1: watermark value: 1 + iio:device1: hdc2010 + 3 channels found: + humidityrelative: (input) + 3 channel-specific attributes found: + attr 0: peak_raw value: 52224 + attr 1: raw value: 52234 + attr 2: scale value: 1.525878906 + current: (output) + 2 channel-specific attributes found: + attr 0: heater_raw value: 0 + attr 1: heater_raw_available value: 0 1 + temp: (input) + 4 channel-specific attributes found: + attr 0: offset value: -15887.515151 + attr 1: peak_raw value: 25600 + attr 2: raw value: 25628 + attr 3: scale value: 2.517700195 + iio:device2: opt3001 + 1 channels found: + illuminance: (input) + 2 channel-specific attributes found: + attr 0: input value: 79.040000 + attr 1: integration_time value: 0.800000 + 2 device-specific attributes found: + attr 0: current_timestamp_clock value: realtime + + attr 1: integration_time_available value: 0.1 0.8 + debian@beaglebone:~$ dmesg | grep -e mikrobus -e greybus + [ 100.491253] greybus 1-2.2: Interface added (greybus) + [ 100.491294] greybus 1-2.2: GMP VID=0x00000126, PID=0x00000126 + [ 100.491306] greybus 1-2.2: DDBL1 Manufacturer=0x00000126, Product=0x00000126 + [ 100.737637] greybus 1-2.2: excess descriptors in interface manifest + [ 102.475168] mikrobus:mikrobus_port_gb_register: mikrobus gb_probe , num cports= 2, manifest_size 192 + [ 102.475206] mikrobus:mikrobus_port_gb_register: protocol added 3 + [ 102.475214] mikrobus:mikrobus_port_gb_register: protocol added 2 + [ 102.475239] mikrobus:mikrobus_port_register: registering port mikrobus-1 + [ 102.475400] mikrobus_manifest:mikrobus_state_get: mikrobus descriptor not found + [ 102.475417] mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 1, driver=opt3001, protocol=3, reg=44 + [ 102.494516] mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 2, driver=hdc2010, protocol=3, reg=41 + [ 102.494567] mikrobus_manifest:mikrobus_manifest_parse: (null) manifest parsed with 2 devices + [ 102.494592] mikrobus mikrobus-1: registering device : opt3001 + [ 102.495096] mikrobus mikrobus-1: registering device : hdc2010 + debian@beaglebone:~$ + + +#TODO: update the below for the built-in sensors + +#TODO: can we also handle the case where these sensors are included and recommend them? Same firmware? + +#TODO: the current demo is for the built-in sensors, not the Click boards mentioned below + +Currently only a limited number of add-on boards have been tested to work over Greybus, simple add-on boards without interrupt requirement are the ones that work currently. The example is for Air Quality 2 Click and Weather Click attached to the mikroBUS ports on the device side. + +/var/log/gbridge will have the gbridge log, and if the mikroBUS port has been instantiated successfully the kernel log will show the devices probe messages: + +#TODO: this log needs to be updated + +.. code-block:: + + greybus 1-2.2: GMP VID=0x00000126, PID=0x00000126 + greybus 1-2.2: DDBL1 Manufacturer=0x00000126, Product=0x00000126 + greybus 1-2.2: excess descriptors in interface manifest + mikrobus:mikrobus_port_gb_register: mikrobus gb_probe , num cports= 3, manifest_size 252 + mikrobus:mikrobus_port_gb_register: protocol added 11 + mikrobus:mikrobus_port_gb_register: protocol added 3 + mikrobus:mikrobus_port_gb_register: protocol added 2 + mikrobus:mikrobus_port_register: registering port mikrobus-0 + mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 1, driver=bme280, protocol=3, reg=76 + mikrobus_manifest:mikrobus_manifest_attach_device: parsed device 2, driver=ams-iaq-core, protocol=3, reg=5a + mikrobus_manifest:mikrobus_manifest_parse: Greybus Service Sample Application manifest parsed with 2 devices + mikrobus mikrobus-0: registering device : bme280 + mikrobus mikrobus-0: registering device : ams-iaq-core + + +#TODO: bring in the GPIO toggle and I2C explorations for greater understanding + +Flashing via a Linux Host +------------------------- + + + +If flashing the Freedom board via the BeagleBone fails here's a trick you can try to flash from a Linux host. + +Use :code:`sshfs` to mount the Bone's files on the Linux host. This assumes the +Bone is plugged in the the USB and appears at :code:`192.168.7.2`: + +.. code-block:: bash + + host$ cd + host$ sshfs 192.168.7.2:/ bone + host$ cd bone; ls + bin dev home lib media opt root sbin sys usr + boot etc ID.txt lost+found mnt proc run srv tmp var + host$ ls /dev/ttyACM* + /dev/ttyACM1 + + + +The Bone's files now appear as local files. Notice there is already a +:code:`/dev/ACM*` appearing. Now plug the Connect into the Linux host's USB +port and run the command again. + +.. code-block:: bash + + host$ ls /dev/ttyACM* + /dev/ttyACM0 /dev/ttyACM1 + +The :code:`/dev/ttyACM` that just appeared is the one associated with the +Connect. In my case it's :code:`/dev/ttyACM0`. That's what I'll use in this +example. + +Now change directories to where the binaries are and load: + +.. code-block:: bash + + host$ cd ~/bone/usr/share/beagleconnect/cc1352;ls + greybus_mikrobus_beagleconnect.bin sensortest_beagleconnect.dts + greybus_mikrobus_beagleconnect.config wpanusb_beagleconnect.bin + greybus_mikrobus_beagleconnect.dts wpanusb_beagleconnect.config + sensortest_beagleconnect.bin wpanusb_beagleconnect.dts + sensortest_beagleconnect.config + + host$ ~/bone/usr/bin/cc2538-bsl.py sensortest_beagleconnect.bin /dev/ttyACM0 + 8-bsl.py sensortest_beagleconnect.bin /dev/ttyACM0 + Opening port /dev/ttyACM0, baud 50000 + Reading data from sensortest_beagleconnect.bin + Cannot auto-detect firmware filetype: Assuming .bin + Connecting to target... + CC1350 PG2.0 (7x7mm): 352KB Flash, 20KB SRAM, CCFG.BL_CONFIG at 0x00057FD8 + Primary IEEE Address: 00:12:4B:00:22:7A:10:46 + Performing mass erase + Erasing all main bank flash sectors + Erase done + Writing 360448 bytes starting at address 0x00000000 + Write 104 bytes at 0x00057F988 + Write done + Verifying by comparing CRC32 calculations. + Verified (match: 0x0f6bdf0f) + +Now you are ready to continue the instructions above after the cc2528 command. + +Trying for different add-on boards +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See `mikroBUS over Greybus <https://github.com/vaishnav98/greybus-for-zephyr/tree/mikrobus#trying-out-different-add-on-boardsdevices-over-mikrobus>`_ +for trying out the same example for different mikroBUS add-on boards/ on-board devices. + +Observe the node device +----------------------- + +Connect BeagleConnect Freedom node device to an Ubuntu laptop to observe the +Zephyr console. + + +Console (:code:`tio`) +--------------------- +In order to see diagnostic messages or to run certain commands on the Zephyr +device we will require a terminal open to the device console. In this case, we +use `tio <https://tio.github.io/>`_ due how its usage simplifies the +instructions. + +#. Install :code:`tio` + :code:`sudo apt install -y tio` + +#. Run :code:`tio` + :code:`tio /dev/ttyACM0` + + To exit :code:`tio` (later), enter :code:`ctrl+t, q`. + + +The Zephyr Shell +---------------- + + +After flashing, you should observe the something matching the following output in :code:`tio`. + +.. code-block:: bash + + uart:~$ *** Booting Zephyr OS build 9c858c863223 *** + [00:00:00.009,735] <inf> greybus_transport_tcpip: CPort 0 mapped to TCP/IP port 4242 + [00:00:00.010,131] <inf> greybus_transport_tcpip: CPort 1 mapped to TCP/IP port 4243 + [00:00:00.010,528] <inf> greybus_transport_tcpip: CPort 2 mapped to TCP/IP port 4244 + [00:00:00.010,742] <inf> greybus_transport_tcpip: Greybus TCP/IP Transport initialized + [00:00:00.010,864] <inf> greybus_manifest: Registering CONTROL greybus driver. + [00:00:00.011,230] <inf> greybus_manifest: Registering GPIO greybus driver. + [00:00:00.011,596] <inf> greybus_manifest: Registering I2C greybus driver. + [00:00:00.011,871] <inf> greybus_service: Greybus is active + [00:00:00.026,092] <inf> net_config: Initializing network + [00:00:00.134,063] <inf> net_config: IPv6 address: 2001:db8::1 + + + +The line beginning with :code:`***` is the Zephyr boot banner. + +Lines beginning with a timestamp of the form :code:`[H:m:s.us]` are Zephyr +kernel messages. + +Lines beginning with :code:`uart:~$` indicates that the Zephyr shell is +prompting you to enter a command. + +From the informational messages shown, we observe the following. + +* Zephyr is configured with the following + `link-local IPv6 address <https://en.wikipedia.org/wiki/Link-local_address#IPv6>`_ :code:`fe80::3177:a11c:4b:1200` + +* It is listening for (both) TCP and UDP traffic on port 4242 + +However, what the log messages do not show (which will come into play later), +are 2 critical pieces of information: + +#. **The RF Channel**: As you may have guessed, IEEE 802.15.4 devices are only + able to communicate with each other if they are using the same frequency to + transmit and recieve data. This information is part of the Physical Layer. + +#. The `PAN identifier <https://www.silabs.com/community/wireless/proprietary/knowledge-base.entry.html/2019/10/04/connect_tutorial6-ieee802154addressing-rapc>`_: + IEEE 802.15.4 devices are only be able to communicate with one another if + they use the same PAN ID. This permits multiple networks (PANs) on the same + frequency. This information is part of the Data Link Layer. + +If we type :code:`help` in the shell and hit Enter, we're prompted with the +following: + +.. code-block:: + + Please press the <Tab> button to see all available commands. + You can also use the <Tab> button to prompt or auto-complete all commands or its subcommands. + You can try to call commands with <-h> or <--help> parameter for more information. + Shell supports following meta-keys: + + Ctrl+a, Ctrl+b, Ctrl+c, Ctrl+d, Ctrl+e, Ctrl+f, Ctrl+k, Ctrl+l, Ctrl+n, Ctrl+p, Ctrl+u, Ctrl+w + Alt+b, Alt+f. + Please refer to shell documentation for more details. + +So after hitting Tab, we see that there are several interesting commands we can +use for additional information. + +.. code-block:: + + uart:~$ + clear help history ieee802154 log net + resize sample shell + +Zephyr Shell: IEEE 802.15.4 commands +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Entering :code:`ieee802154 help`, we see + +.. code-block:: + + uart:~$ ieee802154 help + ieee802154 - IEEE 802.15.4 commands + Subcommands: + ack :<set/1 | unset/0> Set auto-ack flag + associate :<pan_id> <PAN coordinator short or long address (EUI-64)> + disassociate :Disassociate from network + get_chan :Get currently used channel + get_ext_addr :Get currently used extended address + get_pan_id :Get currently used PAN id + get_short_addr :Get currently used short address + get_tx_power :Get currently used TX power + scan :<passive|active> <channels set n[:m:...]:x|all> <per-channel + duration in ms> + set_chan :<channel> Set used channel + set_ext_addr :<long/extended address (EUI-64)> Set extended address + set_pan_id :<pan_id> Set used PAN id + set_short_addr :<short address> Set short address + set_tx_power :<-18/-7/-4/-2/0/1/2/3/5> Set TX power + + +We get the missing Channel number (frequency) with the command :code:`ieee802154 get_chan`. + +.. code-block:: + + uart:~$ ieee802154 get_chan + Channel 26 + +We get the missing PAN ID with the command :code:`ieee802154 get_pan_id`. + +.. code-block:: + + uart:~$ ieee802154 get_pan_id + PAN ID 43981 (0xabcd) + +Zephyr Shell: Network Commands +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Additionally, we may query the IPv6 information of the Zephyr device. + +.. code-block:: + + uart:~$ net iface + + Interface 0x20002b20 (IEEE 802.15.4) [1] + ======================================== + Link addr : CD:99:A1:1C:00:4B:12:00 + MTU : 125 + IPv6 unicast addresses (max 3): + fe80::cf99:a11c:4b:1200 autoconf preferred infinite + 2001:db8::1 manual preferred infinite + IPv6 multicast addresses (max 4): + ff02::1 + ff02::1:ff4b:1200 + ff02::1:ff00:1 + IPv6 prefixes (max 2): + <none> + IPv6 hop limit : 64 + IPv6 base reachable time : 30000 + IPv6 reachable time : 16929 + IPv6 retransmit timer : 0 + + + +And we see that the static IPv6 address (:code:`2001:db8::1`) from +:code:`samples/net/sockets/echo_server/prj.conf` is present and configured. +While the statically configured IPv6 address is useful, it isn't 100% necessary. + +Rebuilding from source +---------------------- + +#TODO: revisit everything below here + +Prerequisites +^^^^^^^^^^^^^ + +* Zephyr environment is set up according to the + `Getting Started Guide <https://docs.zephyrproject.org/latest/getting_started/index.html>`_ + + * Please use the Zephyr SDK when installing a toolchain above + +* `Zephyr SDK <https://docs.zephyrproject.org/latest/getting_started/index.html#install-a-toolchain>`_ + is installed at ~/zephyr-sdk-0.11.2 (any later version should be fine as well) + +* Zephyr board is connected via USB + +Cloning the repository +^^^^^^^^^^^^^^^^^^^^^^ + +This repository utilizes `git submodules <https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ +to keep track of all of the projects required to reproduce the on-going work. +The instructions here only cover checking out the :code:`demo` branch which +should stay in a tested state. On-going development will be on the +:code:`master` branch. + +Note: The parent directory :code:`~` is simply used as a placeholder for testing. +Please use whatever parent directory you see fit. + +Clone specific tag +^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + cd ~ + git clone --recurse-submodules --branch demo https://github.com/jadonk/beagleconnect + +Zephyr +------ + +Add the Fork +^^^^^^^^^^^^ + +For the time being, Greybus must remain outside of the main Zephyr repository. +Currently, it is just in a Zephyr fork, but it should be converted to a +proper `Module (External Project) <https://docs.zephyrproject.org/latest/guides/modules.html>`_. +This is for a number of reasons, but mainly there must be: + +* specifications for authentication and encryption + +* specifications for joining and rejoining wireless networks + +* specifications for discovery + +Therefore, in order to reproduce this example, please run the following. + +.. code-block:: bash + + cd ~/beagleconnect/sw/zephyrproject/zephyr + west update + +Build and Flash Zephyr +^^^^^^^^^^^^^^^^^^^^^^ + +Here, we will build and flash the Zephyr +`greybus_net sample <https://github.com/cfriedt/zephyr/tree/greybus-sockets/samples/subsys/greybus/net>`_ +to our device. + +#. Edit the file :code:`~/.zephyrrc` and place the following text inside of it + +.. code-block:: bash + + export ZEPHYR_TOOLCHAIN_VARIANT=zephyr + export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.11.2 + +#. Set up the required Zephyr environment variables via + +.. code-block:: bash + + source zephyr-env.sh + +#. Build the project + +.. code-block:: bash + + BOARD=cc1352r1_launchxl west build samples/subsys/greybus/net --pristine \ + --build-dir build/greybus_launchpad -- -DCONF_FILE="prj.conf overlay-802154.conf" + +#. Ensure that the last part of the build process looks somewhat like this: + +.. code-block:: bash + + ... + [221/226] Linking C executable zephyr/zephyr_prebuilt.elf + Memory region Used Size Region Size %age Used + FLASH: 155760 B 360360 B 43.22% + FLASH_CCFG: 88 B 88 B 100.00% + SRAM: 58496 B 80 KB 71.41% + IDT_LIST: 184 B 2 KB 8.98% + [226/226] Linking C executable zephyr/zephyr.elf + +#. Flash the firmware to your device using + +.. code-block:: bash + + BOARD=cc1352r1_launchxl west flash --build-dir build/greybus_launchpad + +Linux +----- + +Warning: If you aren't comfortable building and installing a Linux kernel on +your computer, you should probably just stop here. I'll assume you know the +basics of building and installing a Linux kernel from here on out. + +Clone, patch, and build the kernel +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For this demo, I used the 5.8.4 stable kernel. Also, I've applied the +:code:`mikrobus` kernel driver, though it isn't strictly required for greybus. + +Note: The parent directory :code:`~` is simply used as a placeholder for testing. +Please use whatever parent directory you see fit. + +TODO: The patches for gb-netlink will eventually be applied here until pushed into mainline. + +.. code-block:: bash + + cd ~ + git clone --branch v5.8.4 --single-branch git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git + cd linux + git checkout -b v5.8.4-greybus + git am ~/beagleconnect/sw/linux/v2-0001-RFC-mikroBUS-driver-for-add-on-boards.patch + git am ~/beagleconnect/sw/linux/0001-mikroBUS-build-fixes.patch + cp /boot/config-`uname -r` .config + yes "" | make oldconfig + ./scripts/kconfig/merge_config.sh .config ~/beagleconnect/sw/linux/mikrobus.config + ./scripts/kconfig/merge_config.sh .config ~/beagleconnect/sw/linux/atusb.config + make -j`nproc --all` + sudo make modules_install + sudo make install + +Reboot and select your new kernel. + +Probe the IEEE 802.15.4 Device Driver +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +On the Linux machine, make sure the :code:`atusb` driver is loaded. This should +happen automatically when the adapter is inserted or when the machine is booted +while the adapter is installed. + +.. code-block:: bash + + $ dmesg | grep -i ATUSB + [ 6.512154] usb 1-1: ATUSB: AT86RF231 version 2 + [ 6.512492] usb 1-1: Firmware: major: 0, minor: 3, hardware type: ATUSB (2) + [ 6.525357] usbcore: registered new interface driver atusb + ... + + + +We should now be able to see the IEEE 802.15.4 network device by entering :code:`ip a show wpan0`. + +.. code-block:: bash + + $ ip a show wpan0 + 36: wpan0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 123 qdisc fq_codel state UNKNOWN group default qlen 300 + link/ieee802.15.4 3e:7d:90:4d:8f:00:76:a2 brd ff:ff:ff:ff:ff:ff:ff:ff + + +But wait, that is not an IP address! It's the hardware address of the 802.15.4 +device. So, in order to associate it with an IP address, we need to run a +couple of other commands (thanks to wpan.cakelab.org). + +Set the 802.15.4 Physical and Link-Layer Parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. First, get the phy number for the :code:`wpan0` device + +.. code-block:: bash + + $ iwpan list + wpan_phy phy0 + supported channels: + page 0: 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 + current_page: 0 + current_channel: 26, 2480 MHz + cca_mode: (1) Energy above threshold + cca_ed_level: -77 + tx_power: 3 + capabilities: + iftypes: node,monitor + channels: + page 0: + [11] 2405 MHz, [12] 2410 MHz, [13] 2415 MHz, + [14] 2420 MHz, [15] 2425 MHz, [16] 2430 MHz, + [17] 2435 MHz, [18] 2440 MHz, [19] 2445 MHz, + [20] 2450 MHz, [21] 2455 MHz, [22] 2460 MHz, + [23] 2465 MHz, [24] 2470 MHz, [25] 2475 MHz, + [26] 2480 MHz + tx_powers: + 3 dBm, 2.8 dBm, 2.3 dBm, 1.8 dBm, 1.3 dBm, 0.7 dBm, + 0 dBm, -1 dBm, -2 dBm, -3 dBm, -4 dBm, -5 dBm, + -7 dBm, -9 dBm, -12 dBm, -17 dBm, + cca_ed_levels: + -91 dBm, -89 dBm, -87 dBm, -85 dBm, -83 dBm, -81 dBm, + -79 dBm, -77 dBm, -75 dBm, -73 dBm, -71 dBm, -69 dBm, + -67 dBm, -65 dBm, -63 dBm, -61 dBm, + cca_modes: + (1) Energy above threshold + (2) Carrier sense only + (3, cca_opt: 0) Carrier sense with energy above threshold (logical operator is 'and') + (3, cca_opt: 1) Carrier sense with energy above threshold (logical operator is 'or') + min_be: 0,1,2,3,4,5,6,7,8 + max_be: 3,4,5,6,7,8 + csma_backoffs: 0,1,2,3,4,5 + frame_retries: 3 + lbt: false + +#. Next, set the Channel for the 802.15.4 device on the Linux machine + +.. code-block:: bash + + sudo iwpan phy phy0 set channel 0 26 + +#. Then, set the PAN identifier for the 802.15.4 device on the Linux machine :code:`sudo iwpan dev wpan0 set pan_id 0xabcd` + +#. Associate the :code:`wpan0` device to a new, 6lowpan network interface + +.. code-block:: bash + + sudo ip link add link wpan0 name lowpan0 type lowpan + +#. Finally, set the links up for both :code:`wpan0` and :code:`lowpan0` + +.. code-block:: bash + + sudo ip link set wpan0 up + sudo ip link set lowpan0 up + + + +We should observe something like the following when we run :code:`ip a show lowpan0`. + +.. code-block:: bash + + ip a show lowpan0 + 37: lowpan0@wpan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000 + link/6lowpan 9e:0b:a4:e8:00:d3:45:53 brd ff:ff:ff:ff:ff:ff:ff:ff + inet6 fe80::9c0b:a4e8:d3:4553/64 scope link + valid_lft forever preferred_lft forever + +Ping Pong +--------- + +Broadcast Ping +^^^^^^^^^^^^^^ + +Now, perform a broadcast ping to see what else is listening on :code:`lowpan0`. + +.. code-block:: + + $ ping6 -I lowpan0 ff02::1 + PING ff02::1(ff02::1) from fe80::9c0b:a4e8:d3:4553%lowpan0 lowpan0: 56 data bytes + 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=1 ttl=64 time=0.099 ms + 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=2 ttl=64 time=0.125 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=2 ttl=64 time=17.3 ms (DUP!) + 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=3 ttl=64 time=0.126 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=3 ttl=64 time=9.60 ms (DUP!) + 64 bytes from fe80::9c0b:a4e8:d3:4553%lowpan0: icmp_seq=4 ttl=64 time=0.131 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=4 ttl=64 time=14.9 ms (DUP!) + +Yay! We have pinged (pung?) the Zephyr device over IEEE 802.15.4 using 6LowPAN! + +Ping Zephyr +^^^^^^^^^^^ + +We can ping the Zephyr device directly without a broadcast ping too, of course. + +.. code-block:: + + $ ping6 -I lowpan0 fe80::cf99:a11c:4b:1200 + PING fe80::cf99:a11c:4b:1200(fe80::cf99:a11c:4b:1200) from fe80::9c0b:a4e8:d3:4553%lowpan0 lowpan0: 56 data bytes + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=1 ttl=64 time=16.0 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=2 ttl=64 time=13.8 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=3 ttl=64 time=9.77 ms + 64 bytes from fe80::cf99:a11c:4b:1200%lowpan0: icmp_seq=5 ttl=64 time=11.5 ms + +Ping Linux +^^^^^^^^^^ + +Similarly, we can ping the Linux host from the Zephyr shell. + +.. code-block:: + + uart:~$ net ping --help + ping - Ping a network host. + Subcommands: + --help :'net ping [-c count] [-i interval ms] <host>' Send ICMPv4 or ICMPv6 + Echo-Request to a network host. + $ net ping -c 5 fe80::9c0b:a4e8:d3:4553 + PING fe80::9c0b:a4e8:d3:4553 + 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=0 ttl=64 rssi=110 time=11 ms + 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=1 ttl=64 rssi=126 time=9 ms + 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=2 ttl=64 rssi=128 time=13 ms + 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=3 ttl=64 rssi=126 time=10 ms + 8 bytes from fe80::9c0b:a4e8:d3:4553 to fe80::cf99:a11c:4b:1200: icmp_seq=4 ttl=64 rssi=126 time=7 ms + +Assign a Static Address +^^^^^^^^^^^^^^^^^^^^^^^ + +So far, we have been using IPv6 Link-Local addressing. However, the Zephyr +application is configured to use a statically configured IPv6 address as well +which is, namely :code:`2001:db8::1`. + +If we add a similar static IPv6 address to our Linux IEEE 802.15.4 network +interface, :code:`lowpan0`, then we should expect to be able to reach that as +well. + +In Linux, run the following + +.. code-block:: bash + + sudo ip -6 addr add 2001:db8::2/64 dev lowpan0 + +We can verify that the address has been set by examining the :code:`lowpan0` +network interface again. + +.. code-block:: bash + + $ ip a show lowpan0 + 37: lowpan0@wpan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1280 qdisc noqueue state UNKNOWN group default qlen 1000 + link/6lowpan 9e:0b:a4:e8:00:d3:45:53 brd ff:ff:ff:ff:ff:ff:ff:ff + inet6 2001:db8::2/64 scope global + valid_lft forever preferred_lft forever + inet6 fe80::9c0b:a4e8:d3:4553/64 scope link + valid_lft forever preferred_lft forever + +Lastly, ping the statically configured IPv6 address of the Zephyr device. + +.. code-block:: + + $ ping6 2001:db8::1 + PING 2001:db8::1(2001:db8::1) 56 data bytes + 64 bytes from 2001:db8::1: icmp_seq=2 ttl=64 time=53.7 ms + 64 bytes from 2001:db8::1: icmp_seq=3 ttl=64 time=13.1 ms + 64 bytes from 2001:db8::1: icmp_seq=4 ttl=64 time=22.0 ms + 64 bytes from 2001:db8::1: icmp_seq=5 ttl=64 time=22.7 ms + 64 bytes from 2001:db8::1: icmp_seq=6 ttl=64 time=18.4 ms + +Now that we have set up a reliable transport, let's move on to the application +layer. + + +Greybus +------- + +Hopefully the videos listed earlier provide a sufficient foundation to +understand what will happen shortly. However, there is still a bit more +preparation required. + +Build and probe Greybus Kernel Modules +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Greybus was originally intended to work exclusively on the UniPro physical +layer. However, we're using RF as our physical layer and TCP/IP as our +transport. As such, there was need to be able to communicate with the Linux +Greybus facilities through userspace, and out of that need arose gb-netlink. +The Netlink Greybus module actually does not care about the physical layer, but +is happy to usher Greybus messages back and forth between the kernel and +userspace. + +Build and probe the gb-netlink modules (as well as the other Greybus modules) +with the following: + +.. code-block:: bash + + cd ${WORKSPACE}/sw/greybus + make -j`nproc --all` + sudo make install + ../load_gb_modules.sh + +Build and Run Gbridge +^^^^^^^^^^^^^^^^^^^^^ + +The gbridge utility was created as a proof of concept to abstract the Greybus +Netlink datapath among several reliable transports. For the purposes of this +tutorial, we'll be using it as a TCP/IP bridge. + +To run :code:`gbridge`, perform the following: + +.. code-block:: bash + + sudo apt install -y libnl-3-dev libnl-genl-3-dev libbluetooth-dev libavahi-client-dev + cd gbridge + autoreconf -vfi + GBNETLINKDIR=${PWD}/../greybus \ + ./configure --enable-uart --enable-tcpip --disable-gbsim --enable-netlink --disable-bluetooth + make -j`nproc --all` + sudo make install + gbridge + + +Blinky! +------- + +Now that we have set up a reliable TCP transport, and set up the Greybus +modules in the Linux kernel, and used Gbridge to connect a Greybus node to the +Linux kernel via TCP/IP, we can now get to the heart of the demonstration! + +First, save the following script as :code:`blinky.sh`. + +.. code-block:: bash + + #!/bin/bash + + # Blinky Demo for CC1352R SensorTag + + # /dev/gpiochipN that Greybus created + CHIP="$(gpiodetect | grep greybus_gpio | head -n 1 | awk '{print $1}')" + + # red, green, blue LED pins + RED=6 + GREEN=7 + BLUE=21 + + # Bash array for pins and values + PINS=($RED $GREEN $BLUE) + NPINS=${#PINS[@]} + + for ((;;)); do + for i in ${!PINS[@]}; do + # turn off previous pin + if [ $i -eq 0 ]; then + PREV=2 + else + PREV=$((i-1)) + fi + gpioset $CHIP ${PINS[$PREV]}=0 + + # turn on current pin + gpioset $CHIP ${PINS[$i]}=1 + + # wait a sec + sleep 1 + done + done + + +Second, run the script with root privileges: :code:`sudo bash blinky.sh` + +The output of your minicom session should resemble the following. + +.. code-block:: + + $ *** Booting Zephyr OS build zephyr-v2.3.0-1435-g40c0ed940d71 *** + [00:00:00.011,932] <inf> net_config: Initializing network + [00:00:00.111,938] <inf> net_config: IPv6 address: fe80::6c42:bc1c:4b:1200 + [00:00:00.112,121] <dbg> greybus_service.greybus_service_init: Greybus initializing.. + [00:00:00.112,426] <dbg> greybus_transport_tcpip.gb_transport_backend_init: Greybus TCP/IP Transport initializing.. + [00:00:00.112,579] <dbg> greybus_transport_tcpip.netsetup: created server socket 0 for cport 0 + [00:00:00.112,579] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 0 + [00:00:00.112,609] <dbg> greybus_transport_tcpip.netsetup: binding socket 0 (cport 0) to port 4242 + [00:00:00.112,640] <dbg> greybus_transport_tcpip.netsetup: listening on socket 0 (cport 0) + [00:00:00.112,823] <dbg> greybus_transport_tcpip.netsetup: created server socket 1 for cport 1 + [00:00:00.112,823] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 1 + [00:00:00.112,854] <dbg> greybus_transport_tcpip.netsetup: binding socket 1 (cport 1) to port 4243 + [00:00:00.112,854] <dbg> greybus_transport_tcpip.netsetup: listening on socket 1 (cport 1) + [00:00:00.113,037] <inf> net_config: IPv6 address: fe80::6c42:bc1c:4b:1200 + [00:00:00.113,250] <dbg> greybus_transport_tcpip.netsetup: created server socket 2 for cport 2 + [00:00:00.113,250] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 2 + [00:00:00.113,281] <dbg> greybus_transport_tcpip.netsetup: binding socket 2 (cport 2) to port 4244 + [00:00:00.113,311] <dbg> greybus_transport_tcpip.netsetup: listening on socket 2 (cport 2) + [00:00:00.113,494] <dbg> greybus_transport_tcpip.netsetup: created server socket 3 for cport 3 + [00:00:00.113,494] <dbg> greybus_transport_tcpip.netsetup: setting socket options for socket 3 + [00:00:00.113,525] <dbg> greybus_transport_tcpip.netsetup: binding socket 3 (cport 3) to port 4245 + [00:00:00.113,555] <dbg> greybus_transport_tcpip.netsetup: listening on socket 3 (cport 3) + [00:00:00.113,861] <inf> greybus_transport_tcpip: Greybus TCP/IP Transport initialized + [00:00:00.116,149] <inf> greybus_service: Greybus is active + [00:00:00.116,546] <dbg> greybus_transport_tcpip.accept_loop: calling poll + [00:45:08.397,399] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 + [00:45:08.397,399] <dbg> greybus_transport_tcpip.accept_loop: socket 0 (cport 0) has traffic + [00:45:08.397,491] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:39638 as fd 4 + [00:45:08.397,491] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. + [00:45:08.397,735] <dbg> greybus_transport_tcpip.accept_loop: calling poll + [00:45:08.491,363] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 + [00:45:08.491,363] <dbg> greybus_transport_tcpip.accept_loop: socket 3 (cport 3) has traffic + [00:45:08.491,455] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:39890 as fd 5 + [00:45:08.491,455] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. + [00:45:08.491,699] <dbg> greybus_transport_tcpip.accept_loop: calling poll + [00:45:08.620,056] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 + [00:45:08.620,086] <dbg> greybus_transport_tcpip.accept_loop: socket 2 (cport 2) has traffic + [00:45:08.620,147] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:42422 as fd 6 + [00:45:08.620,147] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. + [00:45:08.620,422] <dbg> greybus_transport_tcpip.accept_loop: calling poll + [00:45:08.679,504] <dbg> greybus_transport_tcpip.accept_loop: poll returned 1 + [00:45:08.679,534] <dbg> greybus_transport_tcpip.accept_loop: socket 1 (cport 1) has traffic + [00:45:08.679,595] <dbg> greybus_transport_tcpip.accept_loop: accepted connection from [2001:db8::2]:48286 as fd 7 + [00:45:08.679,595] <dbg> greybus_transport_tcpip.accept_loop: spawning client thread.. + [00:45:08.679,870] <dbg> greybus_transport_tcpip.accept_loop: calling poll + ... + +Read I2C Registers +^^^^^^^^^^^^^^^^^^ + +The SensorTag comes with an opt3001 ambient light sensor as well as an hdc2080 +temperature & humidity sensor. + +First, find which i2c device corresponds to the SensorTag: + +.. code-block:: bash + + ls -la /sys/bus/i2c/devices/* | grep "greybus" + lrwxrwxrwx 1 root root 0 Aug 15 11:24 /sys/bus/i2c/devices/i2c-8 -> ../../../devices/virtual/gb_nl/gn_nl/greybus1/1-2/1-2.2/1-2.2.2/gbphy2/i2c-8 + +On my machine, the i2c device node that Greybus creates is :code:`/dev/i2c-8`. + +Read the ID registers (at the i2c register address 0x7e) of the opt3001 sensor +(at i2c bus address 0x44) as shown below: + +.. code-block:: bash + + i2cget -y 8 0x44 0x7e w + 0x4954 + +Read the ID registers (at the i2c register address 0xfc) of the hdc2080 sensor +(at i2c bus address 0x41) as shown below: + +.. code-block:: bash + + i2cget -y 8 0x41 0xfc w + 0x5449 + +Conclusion +---------- + +The blinking LED can and poking i2c registers can be a somewhat anticlimactic, +but hopefully it illustrates the potential for Greybus as an IoT application layer +protocol. + +What is nice about this demo, is that we're using Device Tree to describe our +Greybus Peripheral declaratively, they Greybus Manifest is automatically +generated, and the Greybus Service is automatically started in Zephyr. + +In other words, all that is required to replicate this for other IoT devices is +simply an appropriate Device Tree overlay file. + +The proof-of-concept involving Linux, Zephyr, and IEEE 802.15.4 was actually +fairly straight forward and was accomplished with mostly already-upstream +source. + +For Greybus in Zephyr, there is still a considerable amount of integration work +to be done, including * converting the fork to a proper Zephyr module * adding +security and authentication * automatic detection, joining, and rejoining of +devices. + +Thanks for reading, and we hope you've enjoyed this tutorial. -- GitLab From 3731f9e5c54059ec9c0f493b5ac201a59285bef2 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 13:53:36 -0400 Subject: [PATCH 13/83] WIP fix capitalization --- books/index.rst | 4 ++-- projects/index.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/books/index.rst b/books/index.rst index e78bb4ed..348d95f3 100644 --- a/books/index.rst +++ b/books/index.rst @@ -1,5 +1,5 @@ -BOOKS -******** +Books +***** This is a collection of open-source books written to help Beagle developers. diff --git a/projects/index.rst b/projects/index.rst index 506d836f..d86b7bf2 100644 --- a/projects/index.rst +++ b/projects/index.rst @@ -1,4 +1,4 @@ -PROJECTS +Projects ******** This is a collection of reasonably well-supported projects useful to Beagle developers. -- GitLab From 94002113b271312610aa899354ceadf43bc36fe8 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 14:38:37 -0400 Subject: [PATCH 14/83] WIP experiments with TOC --- books/index.rst | 1 - index.rst | 17 +++++------------ intro/index.rst | 2 +- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/books/index.rst b/books/index.rst index 348d95f3..1cf8a938 100644 --- a/books/index.rst +++ b/books/index.rst @@ -15,7 +15,6 @@ Links to additional books available for purchase can be found on the .. toctree:: :maxdepth: 1 - :caption: Books beaglebone-cookbook/index.rst pru-cookbook/index.rst diff --git a/index.rst b/index.rst index 3f2ace49..77cf2e7c 100644 --- a/index.rst +++ b/index.rst @@ -15,22 +15,15 @@ Sections :maxdepth: 2 intro/index.rst - -.. toctree:: - :maxdepth: 2 - boards/index.rst - -.. toctree:: - :maxdepth: 2 - + boards/beaglebone/index.rst + boards/beaglebone/black/index.rst + boards/beaglebone/ai-64/index.rst + projects/index.rst projects/index.rst - -.. toctree:: - :maxdepth: 2 - books/index.rst + Indices and tables ******************** diff --git a/intro/index.rst b/intro/index.rst index 96900e60..e845887b 100644 --- a/intro/index.rst +++ b/intro/index.rst @@ -12,7 +12,7 @@ to contribute to the BeagleBoard documentation project and any of the many open- projects on-going on our `Contribution Page <contribution>`__. .. toctree:: - :maxdepth: 1 + :maxdepth: 2 support/index.rst contribution/index.rst -- GitLab From 8a61d01923cbfc2637c8de1628061d5e2ff8af9e Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 21:56:47 -0400 Subject: [PATCH 15/83] WIP mostly reorganized --- boards/beaglebone/ai-64/index.rst | 18 +-- boards/beaglebone/black/index.rst | 22 +-- boards/beaglebone/blue/index.rst | 22 ++- boards/beaglebone/blue/rev-c-priorities.rst | 144 -------------------- boards/beaglebone/index.rst | 6 +- boards/beagleconnect/index.rst | 6 +- boards/index.rst | 17 ++- boards/pocketbeagle/original/index.rst | 22 +-- index.rst | 81 +++++++++-- intro/contribution/index.rst | 4 +- intro/index.rst | 4 +- intro/support/getting-started.rst | 53 +++---- intro/support/index.rst | 43 ++++-- 13 files changed, 191 insertions(+), 251 deletions(-) delete mode 100644 boards/beaglebone/blue/rev-c-priorities.rst diff --git a/boards/beaglebone/ai-64/index.rst b/boards/beaglebone/ai-64/index.rst index 21e1063f..598431af 100644 --- a/boards/beaglebone/ai-64/index.rst +++ b/boards/beaglebone/ai-64/index.rst @@ -8,12 +8,12 @@ BeagleBone® AI-64 brings a complete system for developing artificial intelligen .. toctree:: :maxdepth: 1 - ch01.rst - ch02.rst - ch03.rst - ch04.rst - ch05.rst - ch09.rst - ch10.rst - ch11.rst - edge_ai_apps/index.rst + /boards/beaglebone/ai-64/ch01.rst + /boards/beaglebone/ai-64/ch02.rst + /boards/beaglebone/ai-64/ch03.rst + /boards/beaglebone/ai-64/ch04.rst + /boards/beaglebone/ai-64/ch05.rst + /boards/beaglebone/ai-64/ch09.rst + /boards/beaglebone/ai-64/ch10.rst + /boards/beaglebone/ai-64/ch11.rst + /boards/beaglebone/ai-64/edge_ai_apps/index.rst diff --git a/boards/beaglebone/black/index.rst b/boards/beaglebone/black/index.rst index 8a3b9395..f0e9b24e 100644 --- a/boards/beaglebone/black/index.rst +++ b/boards/beaglebone/black/index.rst @@ -15,15 +15,15 @@ Boot Linux in under 10 seconds and get started on development in less than 5 min .. toctree:: :maxdepth: 1 - ch01.rst - ch02.rst - ch03.rst - ch04.rst - ch05.rst - ch06.rst - ch07.rst - ch08.rst - ch09.rst - ch10.rst - ch11.rst + /boards/beaglebone/black/ch01.rst + /boards/beaglebone/black/ch02.rst + /boards/beaglebone/black/ch03.rst + /boards/beaglebone/black/ch04.rst + /boards/beaglebone/black/ch05.rst + /boards/beaglebone/black/ch06.rst + /boards/beaglebone/black/ch07.rst + /boards/beaglebone/black/ch08.rst + /boards/beaglebone/black/ch09.rst + /boards/beaglebone/black/ch10.rst + /boards/beaglebone/black/ch11.rst diff --git a/boards/beaglebone/blue/index.rst b/boards/beaglebone/blue/index.rst index 879609dc..bcd1b519 100644 --- a/boards/beaglebone/blue/index.rst +++ b/boards/beaglebone/blue/index.rst @@ -19,16 +19,12 @@ and of course the `BeagleBoard.org Foundation <https://beagleboard.org/about>`_. .. toctree:: :maxdepth: 1 - pinouts.rst - ssh.rst - wifi.rst - ip-settings.rst - flashing-firmware.rst - code.rst - tests.rst - accessories.rst - faq.rst - rev-c-priorities.rst - - - + /boards/beaglebone/blue/pinouts.rst + /boards/beaglebone/blue/ssh.rst + /boards/beaglebone/blue/wifi.rst + /boards/beaglebone/blue/ip-settings.rst + /boards/beaglebone/blue/flashing-firmware.rst + /boards/beaglebone/blue/code.rst + /boards/beaglebone/blue/tests.rst + /boards/beaglebone/blue/accessories.rst + /boards/beaglebone/blue/faq.rst diff --git a/boards/beaglebone/blue/rev-c-priorities.rst b/boards/beaglebone/blue/rev-c-priorities.rst deleted file mode 100644 index e7f50eb2..00000000 --- a/boards/beaglebone/blue/rev-c-priorities.rst +++ /dev/null @@ -1,144 +0,0 @@ -.. _beaglebone-blue-rev-c-updates: - -Rev-C updates: -############## - -Priorities -=========== - -- Update to dual-A53 processor -- Protect serial ports, QEP and others that could drive inputs while - power is off (at least 5V tolerance) -- Switch USB type-microB to USB type-C -- Add 5Gbps (SS) to USB type-C -- Add mux to support USB type-C host mode (cable flip support) -- Perform PD on USB type-C to enable charging when 20V is available, - drop barrel jack -- `Move MPU9250 to - SPI <https://github.com/beagleboard/beaglebone-blue/issues/43>`__ -- Swap out motor connectors -- Move up to 3S LiPo battery and 12V motors -- Add support for quad 3-phase motors -- Add BeagleConnect-compatible subG wireless -- Add +/- 12V support on ADC -- Add Pi-compatible CSI connector for camera -- Add 5GHz WiFi -- Add PCIe as alt-mode to USB type-C -- Add RS-485 -- Switch to push-pull microSD card cage -- Use gold plated pins -- Power motors when running on USB type-C -- TODO: Consider 28V 3-phase motors -- Switch some connectors to Click Shuttle ribbon header -- Support I3C -- Support FD-CAN -- ~Switch to Atheros9K for WiFi~ Consider going with WiLink8 discrete - and 5GHz -- On-board audio codec - -Wishlist -=========== - -- PoE expansion -- MIDI expansion -- Multi-channel audio expansion - -Features suitable to remove -============================== - -- Bluetooth (not commonly used, whereas BLE and SubG can be more - useful) -- 2.4GHz WiFi (too much interference) - -Example motors to drive -======================= - -Brushed DC ----------- - -- `DFRobot - FIT0441 <https://www.digikey.com/product-detail/en/dfrobot/FIT0441/1738-1157-ND/6588579?utm_adgroup=Motors%20-%20AC,%20DC&utm_source=google&utm_medium=cpc&utm_campaign=Shopping_Product_Motors,%20Solenoids,%20Driver%20Boards/Modules&utm_term=&utm_content=Motors%20-%20AC,%20DC&gclid=CjwKCAjw26H3BRB2EiwAy32zhVs5Yf-JZ6fIOZlI79NlxhSv1wkXs-ZDEyYi8ZD7XIP9H9fyWHnxQxoCAmEQAvD_BwE>`__ -- `Geartisan 12V - DC <https://smile.amazon.com/Greartisan-Electric-Reduction-Eccentric-Diameter/dp/B072R5QSRG>`__ - -3 phase (BLDC, 3 phase stepper, etc.) -------------------------------------- - -- `Moon NEMA 17 3 phase - stepper <https://www.moonsindustries.com/series/nema-17-smooth-hybrid-stepper-motors-b020302>`__ -- `Primopal NEMA 17 3 phase - stepper <http://www.primopal.com/web/Product4_GoodsID_25.html>`__ [ - `$6 on - Alibaba <https://primopal.en.alibaba.com/product/60637037880-811771415/1_2_degree_3_phase_dc_hybrid_china_bipolar_control_step_valve_flat_nema_17_stepper_motor_for_3d_printer_robot_arm_cnc_kit.html>`__ - ] -- `XXD A2212 KV1000 - BLDC <https://usa.banggood.com/Wholesale-XXD-A2212-KV1000-Brushless-Motor-H363-For-RC-Airplane-Quadcopter-p-57432.html?cur_warehouse=CN>`__ -- `OMC NEMA 23 3 phase - stepper <https://www.omc-stepperonline.com/3-phase-stepper-motor/p-series-nema-23-1-2deg-3-phase-stepper-motor-5-5a-1nm-141-64oz-in.html>`__ - -Proposed motor drive circuit ----------------------------- - -- Driver: https://www.ti.com/product/DRV8316 -- [STRIKEOUT:Reference design: https://www.ti.com/tool/TIDA-01516] -- [STRIKEOUT:Gate driver, shunt amp: - https://www.ti.com/product/DRV8323] -- [STRIKEOUT:FET pairs (1/2 H-bridge): - https://www.ti.com/product/CSD87353Q5D] -- Temperature sensor: https://www.ti.com/product/LM95071 - -Issues to review -================ - -- https://github.com/beagleboard/beaglebone-blue/issues?q=is%3Aissue+is%3Aopen+label%3Afix-in-rev-b -- https://github.com/beagleboard/beaglebone-blue/issues?q=is%3Aissue+is%3Aopen+label%3Afix-in-rev-c - -Integrate feedback from -======================= - -- TAMU - https://mxet.github.io/SCUTTLE/ - - https://docs.google.com/document/d/1LxO_4hpFQ1i4Vw9NmBai6ByAXrzt0i4g4wozqWoz0x4/edit?usp=sharing -- GT - https://fis.gatech.edu/multisensor-kit-mechanical-assembly/ - -GT --- - -Blue GT feedback - -- 24V DC input option in cabinets -- 24V/12V/5V DC output helpful for sensors -- 4-20mA loop (definitely!) -- ADC (big bottleneck) (brings to NI DAQ level) -- -12V to 12V -- Current measurement (currently rectifying) - - 12/14-bit is good enough as is SAR max - - 7/8 channels is good enough - - Flexible software configuration ideal - - How much tolerance? (not seen as much more than 12V) -- Enclosure is important -- Look at Automation Direct Productivity Open -- Look at ncd.io - - Nice to have a block without doing extra jump - - Wired version would be more determinisitc - - OPC-UA, etc. when is time 0? -- 5GHz WiFi - - Better stock WiFi antennas - - Pi has better? - - USB dongle did better - - Better WiFi config -- Better PRU support - - High-school/undergrad-level - - Example code and interpreters -- Better support on image management - - eMMC to microSD - - Need to advertise it! -- Better community on-boarding -- Build on PRU and ADC advantages over Pi - -IoT workshop in November - -Review the GT cape - -Linear position sensor cape just done - -Thoughts on ribbon cables? diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index 6140bc4e..f67b8752 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -26,7 +26,7 @@ of your screen. :maxdepth: 1 :caption: Boards - black/index.rst - ai-64/index.rst - blue/index.rst + /boards/beaglebone/black/index + /boards/beaglebone/ai-64/index + /boards/beaglebone/blue/index diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst index c16e47cb..7c2ee09f 100644 --- a/boards/beagleconnect/index.rst +++ b/boards/beagleconnect/index.rst @@ -96,8 +96,8 @@ Learn about the technology behind BeagleConnect. .. toctree:: :maxdepth: 2 - technology/index.rst - technology/story.rst + /boards/beagleconnect/technology/index.rst + /boards/beagleconnect/technology/story.rst BeagleConnect Boards @@ -108,5 +108,5 @@ Get started using your BeagleConnect. .. toctree:: :maxdepth: 2 - freedom/index.rst + /boards/beagleconnect/freedom/index.rst diff --git a/boards/index.rst b/boards/index.rst index e81bf363..b4659047 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -1,5 +1,5 @@ Boards -######### +###### `BeagleBone <beaglebone>`__ is a family of ARM-based, Linux-capable boards intended to be bare-bones, with a balance of features to enable rapid prototyping and provide a solid @@ -19,12 +19,11 @@ options that enable almost endless sensing and actuation expansion. started. .. toctree:: - :maxdepth: 2 - - beaglebone/index.rst - capes/index.rst - pocketbeagle/original/index.rst - capes/index.rst - beagleconnect/index.rst - beagleboard/index.rst + :maxdepth: 1 + + /boards/beaglebone/index + /boards/pocketbeagle/original/index + /boards/capes/index + /boards/beagleconnect/index + /boards/beagleboard/index diff --git a/boards/pocketbeagle/original/index.rst b/boards/pocketbeagle/original/index.rst index 0521c710..a1e39ded 100644 --- a/boards/pocketbeagle/original/index.rst +++ b/boards/pocketbeagle/original/index.rst @@ -23,14 +23,14 @@ making PocketBeagle the ideal development board for beginners and professionals .. toctree:: :maxdepth: 1 - ch01.rst - ch02.rst - ch03.rst - ch04.rst - ch05.rst - ch06.rst - ch07.rst - ch08.rst - ch09.rst - ch10.rst - ch11.rst \ No newline at end of file + /boards/boards/pocketbeagle/original/ch01.rst + /boards/boards/pocketbeagle/original/ch02.rst + /boards/boards/pocketbeagle/original/ch03.rst + /boards/boards/pocketbeagle/original/ch04.rst + /boards/boards/pocketbeagle/original/ch05.rst + /boards/boards/pocketbeagle/original/ch06.rst + /boards/boards/pocketbeagle/original/ch07.rst + /boards/boards/pocketbeagle/original/ch08.rst + /boards/boards/pocketbeagle/original/ch09.rst + /boards/boards/pocketbeagle/original/ch10.rst + /boards/boards/pocketbeagle/original/ch11.rst diff --git a/index.rst b/index.rst index 77cf2e7c..c98ff056 100644 --- a/index.rst +++ b/index.rst @@ -8,20 +8,81 @@ BeagleBoard Documentation Welcome to the `BeagleBoard project documentation <https://git.beagleboard.org/docs/docs.beagleboard.io>`__. -Sections -******** +.. note:: BeagleBoard.org is a US-based 501(c)3 non-profit organization providing open hardware + computing solutions for a community of makers, educators and professionals that enable + rapid prototyping without barriers to creating real-world embedded systems. + +Introduction +************ + +Get started by `engaging the BealgeBoard.org developer community </intro/>`__. + +* Read about how to: `get started and get help </intro/support>`__ +* Learn how to: `contribute to the project </intro/contribution>`__ .. toctree:: :maxdepth: 2 + :hidden: + :caption: Introduction + + /intro/support/index + /intro/contribution/index + + +Boards +****** + +This is is where you will find the System Reference Manuals (SRMs) for all of the boards. + +All Beagles are `open-hardware <https://www.oshwa.org/definition/>`__ with documentation on the +design, including the +`materials <https://git.beagleboard.org/explore/projects/topics/boards>`__ to modify the designs +from source using appropriate design tools. + +* Check out our most popular board at: `BeagleBone Black </boards/beaglebone/black>`__ +* Check out our latest board at: `BeagleBone AI-64 </boards/beaglebone/ai-64>`__ +* Find all of our on: `our boards page </boards/index>`__ + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: Boards + + /boards/beaglebone/black/index + /boards/beaglebone/ai-64/index + more... </boards/index.rst> + + +Projects +******** + +A number of software projects, like `SimpPRU </projects/simppru/index>`__ exist to help Beagle +developers. Some developers choose to host documentation for their projects `here </projects/index>`__. + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: Projects + + /projects/simppru/index + more... </projects/index.rst> + +Books +***** + +This project hosts a +`collection of open-source books written to help Beagle developers </books/index>`__. + +* Find a great introduction to BeagleBone at: `BeagleBone Cookbook </books/beaglebone-cookbook>`__ +* Learn one of the most amazing Beagle features at: `PRU Cookbook </books/pru-cookbook>`__ + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: Books - intro/index.rst - boards/index.rst - boards/beaglebone/index.rst - boards/beaglebone/black/index.rst - boards/beaglebone/ai-64/index.rst - projects/index.rst - projects/index.rst - books/index.rst + /books/beaglebone-cookbook/index + /books/pru-cookbook/index Indices and tables diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index bcea82b8..3a1cb77a 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -8,5 +8,5 @@ Contribution .. toctree:: :maxdepth: 1 - git-usage.rst - style.rst + /intro/contribution/git-usage + /intro/contribution/style diff --git a/intro/index.rst b/intro/index.rst index e845887b..2e2e5e91 100644 --- a/intro/index.rst +++ b/intro/index.rst @@ -14,6 +14,6 @@ projects on-going on our `Contribution Page <contribution>`__. .. toctree:: :maxdepth: 2 - support/index.rst - contribution/index.rst + /intro/support/index + /intro/contribution/index diff --git a/intro/support/getting-started.rst b/intro/support/getting-started.rst index dd9fc695..a1890993 100644 --- a/intro/support/getting-started.rst +++ b/intro/support/getting-started.rst @@ -1,19 +1,20 @@ .. _beagleboard-getting-started: -Getting Started -================== +Getting Started Guide +##################### Beagles are tiny computers ideal for learning and prototyping with electronics. Read the step-by-step getting started tutorial below to begin developing with your Beagle in minutes. Update board with latest software ------------------------------------- +************************************ This step may or may not be necessary, depending on how old a software image you already have, -but executing this, the longest, step will ensure the rest will go as smooth as possible. +but executing this step, the longest step, will ensure the rest will go as smooth as possible. Download the latest software image -******************************************** +============================================ + Download the lastest Debian image from `beagleboard.org/latest-images <https://beagleboard.org/latest-images>`_. The "IoT" images provide more free disk space if you don't need to use a graphical user interface (GUI). @@ -26,19 +27,20 @@ This is a compressed sector-by-sector image of the SD card. |image0| Install SD card programming utility -********************************************* +============================================= + Download and install `balenaEtcher <https://www.balena.io/etcher/>`_. |image1| |image2| Connect SD card to your computer -******************************************* +=========================================== Use your computer's SD slot or a USB adapter to connect the SD card to your computer. Write the image to your SD card -***************************************** +========================================= Use Etcher to write the image to your SD card. Etcher will transparently decompress the image on-the-fly before writing it to the SD card. @@ -46,32 +48,35 @@ image on-the-fly before writing it to the SD card. |image3| Eject the SD card -**************************** +============================ + Eject the newly programmed SD card. Boot your board off of the SD card -******************************************** +============================================ + Insert SD card into your (powered-down) board, hold down the USER/BOOT button and apply power, either by the USB cable or 5V adapter. If using an original BeagleBone or PocketBeagle, you are done. - -If using BeagleBone Black, BeagleBone Blue, BeagleBone AI, BeagleBone AI-64 or other board with on-board eMMC -flash and you desire to write the image to your on-board eMMC, you'll need to follow the -instructions at http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#Flashing_eMMC. -When the flashing is complete, all 4 USRx LEDs will be steady on or off. The latest Debian -flasher images automatically power down the board upon completion. This can take up to 45 minutes. -Power-down your board, remove the SD card and apply power again to finish. + +.. note:: + If using BeagleBone Black, BeagleBone Blue, BeagleBone AI, BeagleBone AI-64 or other board with on-board eMMC + flash and you desire to write the image to your on-board eMMC, you'll need to follow the + instructions at http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#Flashing_eMMC. + When the flashing is complete, all 4 USRx LEDs will be steady on or off. The latest Debian + flasher images automatically power down the board upon completion. This can take up to 45 minutes. + Power-down your board, remove the SD card and apply power again to finish. Start your Beagle ------------------- +***************** If any step fails, it is recommended to update to the `latest software image <https://beagleboard.org/latest-images>`_ using the instructions above. Power and boot ----------------- +================ Most Beagles can be powered via a USB cable, providing a convenient way to provide both power to your Beagle and connectivity to your computer. Be sure the cable is of good quality and your source can provide enough power. @@ -95,7 +100,7 @@ Manual (SRM) for your board to locate these LEDs. - USR4/WIFI is typically configured at boot to light with WiFi (client) network association (BeagleBone Blue and BeagleBone AI only). Enable a network connection ----------------------------- +============================ If connected via USB, a network adapter should show up on your computer. Your Beagle should be running a DHCP server that will provide your computer @@ -115,7 +120,7 @@ Non-BeagleBone boards will utilize alternate names. Multiple BeagleBone boards o network will add a suffix such as beaglebone-2.local. Browse to your Beagle ----------------------- +============================ A web server with an IDE should be running on your Beagle. Point your browser to it to begin development. @@ -149,7 +154,7 @@ The below table summarizes the typical addresses. - mDNS enabled Troubleshooting ------------------- +*************** Do not use Internet Explorer. @@ -198,14 +203,14 @@ an older operating system or need additional drivers for serial access to older Visit https://beagleboard.org/support for additional debugging tips. Hardware documentation --------------------------- +********************** Be sure to check check the latest hardware documentation for your board at https://docs.beagleboard.org. Detailed design materials for various boards can be found at https://git.beagleboard.org/explore/projects/topics/boards. Books ------ +***** For a complete list of books on BeagleBone, see `beagleboard.org/books <https://beagleboard.org/books>`_. diff --git a/intro/support/index.rst b/intro/support/index.rst index a40c10a7..40ec9248 100644 --- a/intro/support/index.rst +++ b/intro/support/index.rst @@ -6,16 +6,20 @@ Support .. note:: #TODO# all the links need updating and content moved into this repo, especially bone101. Getting started -=============== +*************** The starting experience for all Beagles has been made to be as consistent as is possible. For any of the Beagle Linux-based open hardware computers, visit our `getting started guide <getting-started>`__. -- `Getting Started Guide <getting-started>`__ +.. toctree:: + :maxdepth: 2 + + /intro/support/getting-started + Getting support -=============== +*************** BeagleBoard.org products and `open hardware <https://www.oshwa.org/definition/>`__ designs are supported @@ -29,13 +33,33 @@ to provide a link to your questions on the `community forums <https://forum.beagleboard.org>`__ as answers will be provided there. +Be sure to ask `smart questions <http://www.catb.org/~esr/faqs/smart-questions.html>`__ +that provide the following: + +* What am I trying to accomplish? +* What did find when researching how to accomplish it? +* What are the detailed results of what I tried? +* How did these results differ from what I expected? +* What would I consider to be a success? + +.. note:: + Remember that community developers are volunteering their expertise. If you + want paid support, there are options for that. Respect developers time and + expertise and they might be happy to share with you. + Diagnostic tools ================ Best to be prepared with good diagnostic information to aide with support. -- Output of ‘beagle-version’ script needed for support requests +.. todo:: + Need a reference to how to run `beagle-version`. + +.. note:: + #TODO#: Need a reference to how to run `beagle-version`. + +- Output of `beagle-version` script needed for support requests - `Beagle Tester source <https://git.beagleboard.org/jkridner/beagle-tester>`__ Community resources @@ -71,13 +95,11 @@ form: - `RMA request <https://beagleboard.org/support/rma>`__ Understanding Your Beagle -========================= +************************* - `BeagleBone Introduction <https://beagleboard.org/Support/bone101>`__ - `Hardware <https://beagleboard.org/Support/Hardware+Support>`__ - `Software <https://beagleboard.org/Support/Software+Support>`__ -- `BoneScript JavaScript - library <https://beagleboard.org/Support/bonescript>`__ - `Books <https://beagleboard.org/books>`__ - `Exploring BeagleBone <https://beagleboard.org/ebb>`__ @@ -85,8 +107,9 @@ Understanding Your Beagle - `Bad to the Bone <https://beagleboard.org/bad-to-the-bone>`__ Working with Cape Add-on Boards -=============================== +******************************* + +- `Cape Documentation </boards/capes/>`__ +- `BeagleBone Cape Interface Specification </boards/capes/cape-interface-spec.html>`__ -- `Cape Documentation <../../boards/capes>`__ -- `BeagleBone Cape Interface Specification <../../boards/capes/cape-interface-spec>`__ -- GitLab From f3804f4e23d1d66b5eba3ae4358ee26d00f0ab22 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 22:07:20 -0400 Subject: [PATCH 16/83] pru-cookbook: fix critical error --- books/pru-cookbook/03details/details.rst | 25 ++++++++++++++---------- books/pru-cookbook/04debug/debug.rst | 4 +++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/books/pru-cookbook/03details/details.rst b/books/pru-cookbook/03details/details.rst index 78ece373..d7ba2058 100644 --- a/books/pru-cookbook/03details/details.rst +++ b/books/pru-cookbook/03details/details.rst @@ -10,15 +10,13 @@ compile code and also start and stop the PRUs. The following are resources used in this chapter. -Resources -~~~~~~~~~~ - -* `PRU Code Generation Tools - Compiler <http://software-dl.ti.com/codegen/esd/cgt_ai_64_lic_sw/PRU/2.1.5/ti_cgt_pru_2.1.5_armlinuxa8hf_busybox_installer.sh>`_ -* `PRU Software Support Package <http://git.ti.com/pru-software-support-package>`_ -* `PRU Optimizing C/C++ Compiler <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ -* `PRU Assembly Language Tools <http://www.ti.com/lit/ug/spruhv6b/spruhv6b.pdf>`_ -* `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) -* `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) +.. note:: + * `PRU Code Generation Tools - Compiler <http://software-dl.ti.com/codegen/esd/cgt_ai_64_lic_sw/PRU/2.1.5/ti_cgt_pru_2.1.5_armlinuxa8hf_busybox_installer.sh>`_ + * `PRU Software Support Package <http://git.ti.com/pru-software-support-package>`_ + * `PRU Optimizing C/C++ Compiler <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ + * `PRU Assembly Language Tools <http://www.ti.com/lit/ug/spruhv6b/spruhv6b.pdf>`_ + * `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) + * `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) Getting Example Code ===================== @@ -37,6 +35,13 @@ It's all on a GitHub repository. bone$ git clone https://github.com/MarkAYoder/PRUCookbook.git + +.. note:: + #TODO#: There needs to be a code-only repo that is validated against the documentation + code to be identical for specific version. The version needs to be noted in the + documentation. + + Compiling with clpru and lnkpru ================================ @@ -255,7 +260,7 @@ It's easy, if you already have ``TARGET`` set up: - Starting PRU 0 start -See :ref:`../04debug/debug.html#_dmesg_hw,dmesg -Hw` to see how to tell if the PRU +See :ref:`_dmesg_hw` to see how to tell if the PRU is stopped. This assumes ``TARGET`` is set to the PRU you are using. diff --git a/books/pru-cookbook/04debug/debug.rst b/books/pru-cookbook/04debug/debug.rst index a9f0edfb..7887b96c 100644 --- a/books/pru-cookbook/04debug/debug.rst +++ b/books/pru-cookbook/04debug/debug.rst @@ -47,6 +47,8 @@ see what's happening. Another useful tool that let's you see the contents of the registers and RAM is discussed in :ref:`debug_prudebug`. +.. _dmesg_hw: + dmesg Hw ========= @@ -529,4 +531,4 @@ copyright.c .. rubric:: Footnotes -.. [#debug1] FTDI images are from the BeagleBone Cookbook http://shop.oreilly.com/product/0636920033899.do \ No newline at end of file +.. [#debug1] FTDI images are from the BeagleBone Cookbook http://shop.oreilly.com/product/0636920033899.do -- GitLab From 5e55990393ad094a559e3c214c2bdd091baaf212 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 29 Aug 2022 22:56:59 -0400 Subject: [PATCH 17/83] WIP remove a bunch of warnings --- .gitignore | 3 +- boards/beaglebone/ai-64/ch06.rst | 4 +- boards/beaglebone/ai-64/ch07.rst | 209 +++++++++--------- boards/pocketbeagle/original/index.rst | 24 +- books/beaglebone-cookbook/10parts/parts.rst | 139 ++++++------ books/beaglebone-cookbook/index.rst | 1 + .../03details/code/am335x_pru.cmd | 87 ++++++++ books/pru-cookbook/03details/details.rst | 9 +- projects/simppru/examples/index.rst | 1 + 9 files changed, 283 insertions(+), 194 deletions(-) create mode 100644 books/pru-cookbook/03details/code/am335x_pru.cmd diff --git a/.gitignore b/.gitignore index d73984bb..d5e56122 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ *.o *.a *.d -*.cmd *.log *.pyc *.swp @@ -43,4 +42,4 @@ GPATH GRTAGS GTAGS TAGS -tags \ No newline at end of file +tags diff --git a/boards/beaglebone/ai-64/ch06.rst b/boards/beaglebone/ai-64/ch06.rst index 7a27aa2a..22a616fb 100644 --- a/boards/beaglebone/ai-64/ch06.rst +++ b/boards/beaglebone/ai-64/ch06.rst @@ -114,7 +114,7 @@ DC Input .. _figure-23,Figure 23: -.. figure:: :media/image38.png +.. figure:: media/image38.png :width: 400px :align: center :alt: Fig: TPS65217 DC Connection @@ -651,7 +651,7 @@ Full documentation for the processor can be found on the TI website at `https:// Crystal Circuitry *********************** -:ref:`figure-30`is the crystal circuitry for the TDA4VM processor. +:ref:`figure-30` is the crystal circuitry for the TDA4VM processor. .. _figure-30,Figure 30: diff --git a/boards/beaglebone/ai-64/ch07.rst b/boards/beaglebone/ai-64/ch07.rst index ca546ba7..699101b1 100644 --- a/boards/beaglebone/ai-64/ch07.rst +++ b/boards/beaglebone/ai-64/ch07.rst @@ -68,109 +68,110 @@ THE BOARD. IT WILL DAMAGE THE PROCESSOR AND VOID THE WARRANTY.* *NO PINS ARE TO BE DRIVEN UNTIL AFTER THE SYS_RESET LINE GOES HIGH.* - -| *PIN No.* | *ADDRESS* | *REGISTER NAME* | *BALL NUMBER* | *MUXMODE[14:0] SETTINGS*||||||||||||||| -| *PIN No.* | *ADDRESS* | *REGISTER NAME* | *BALL NUMBER* |*0* | *1* | *2* | *3* | *4* | *5* | *6* | *7* | *8* | *9* | *10* | *11* | *12* | *13* | *14* | *Bootstrap* - |P8_03|0x00011C054 | PADCONFIG21 | AH21 | PRG1_PRU0_GPO19 | PRG1_PRU0_GPI19 | PRG1_IEP0_EDC_SYNC_OUT0 | PRG1_PWM0_TZ_OUT | | RMII5_TXD0 | MCAN6_TX | GPIO0_20 | | | VOUT0_EXTPCLKIN | VPFE0_PCLK | MCASP4_AFSX | | | - |P8_04 |0x00011C0C4 | PADCONFIG49 | AC29 | PRG0_PRU0_GPO5 | PRG0_PRU0_GPI5 | | PRG0_PWM3_B2 | | RMII3_TXD0 | | GPIO0_48 | GPMC0_AD0 | | | | MCASP0_AXR3 | | | BOOTMODE2 - |P8_05 |0x00011C088 | PADCONFIG34 | AH25 | PRG1_PRU1_GPO12 | PRG1_PRU1_GPI12 | PRG1_RGMII2_TD1 | PRG1_PWM1_A0 | RGMII2_TD1 | | MCAN7_TX | GPIO0_33 | RGMII8_TD1 | | VOUT0_DATA12 | | MCASP9_AFSX | | | - |P8_06 |0x00011C08C | PADCONFIG35 | AG25 | PRG1_PRU1_GPO13 | PRG1_PRU1_GPI13 | PRG1_RGMII2_TD2 | PRG1_PWM1_B0 | RGMII2_TD2 | | MCAN7_RX | GPIO0_34 | RGMII8_TD2 | | VOUT0_DATA13 | VPFE0_DATA8 | MCASP9_AXR0 | MCASP4_ACLKR | | - |P8_07 |0x00011C03C | PADCONFIG15 | AD24 | PRG1_PRU0_GPO14 | PRG1_PRU0_GPI14 | PRG1_RGMII1_TD3 | PRG1_PWM0_A1 | RGMII1_TD3 | | MCAN5_RX | GPIO0_15 | | RGMII7_TD3 | VOUT0_DATA19 | VPFE0_DATA3 | MCASP7_AXR1 | | | - |P8_08 |0x00011C038 | PADCONFIG14 | AG24 | PRG1_PRU0_GPO13 | PRG1_PRU0_GPI13 | PRG1_RGMII1_TD2 | PRG1_PWM0_B0 | RGMII1_TD2 | | MCAN5_TX | GPIO0_14 | | RGMII7_TD2 | VOUT0_DATA18 | VPFE0_DATA2 | MCASP7_AXR0 | | | - |P8_09 |0x00011C044 | PADCONFIG17 | AE24 | PRG1_PRU0_GPO16 | PRG1_PRU0_GPI16 | PRG1_RGMII1_TXC | PRG1_PWM0_A2 | RGMII1_TXC | | MCAN6_RX | GPIO0_17 | | RGMII7_TXC | VOUT0_DATA21 | VPFE0_DATA5 | MCASP7_AXR3 | MCASP7_AFSR | | - |P8_10 |0x00011C040 | PADCONFIG16 | AC24 | PRG1_PRU0_GPO15 | PRG1_PRU0_GPI15 | PRG1_RGMII1_TX_CTL | PRG1_PWM0_B1 | RGMII1_TX_CTL | | MCAN6_TX | GPIO0_16 | | RGMII7_TX_CTL | VOUT0_DATA20 | VPFE0_DATA4 | MCASP7_AXR2 | MCASP7_ACLKR | | - |P8_11 |0x00011C0F4 | PADCONFIG61 | AB24 | PRG0_PRU0_GPO17 | PRG0_PRU0_GPI17 | PRG0_IEP0_EDC_SYNC_OUT1 | PRG0_PWM0_B2 | PRG0_ECAP0_SYNC_OUT | | | GPIO0_60 | GPMC0_AD5 | OBSCLK1 | | | MCASP0_AXR13 | | | BOOTMODE7 - |P8_12 |0x00011C0F0 | PADCONFIG60 | AH28 | PRG0_PRU0_GPO16 | PRG0_PRU0_GPI16 | PRG0_RGMII1_TXC | PRG0_PWM0_A2 | RGMII3_TXC | | | GPIO0_59 | | | DSS_FSYNC1 | | MCASP0_AXR12 | | | - |P8_13 |0x00011C168 | PADCONFIG90 | V27 | RGMII5_TD1 | RMII7_TXD1 | I2C3_SCL | | VOUT1_DATA4 | TRC_DATA2 | EHRPWM0_B | GPIO0_89 | GPMC0_A5 | | | | MCASP11_ACLKX | | | - |P8_14 |0x00011C130 | PADCONFIG76 | AF27 | PRG0_PRU1_GPO12 | PRG0_PRU1_GPI12 | PRG0_RGMII2_TD1 | PRG0_PWM1_A0 | RGMII4_TD1 | | | GPIO0_75 | | | | | MCASP1_AXR8 | | UART8_CTSn | - |P8_15 |0x00011C0F8 | PADCONFIG62 | AB29 | PRG0_PRU0_GPO18 | PRG0_PRU0_GPI18 | PRG0_IEP0_EDC_LATCH_IN0 | PRG0_PWM0_TZ_IN | PRG0_ECAP0_IN_APWM_OUT | | | GPIO0_61 | GPMC0_AD6 | | | | MCASP0_AXR14 | | | - |P8_16 |0x00011C0FC | PADCONFIG63 | AB28 | PRG0_PRU0_GPO19 | PRG0_PRU0_GPI19 | PRG0_IEP0_EDC_SYNC_OUT0 | PRG0_PWM0_TZ_OUT | | | | GPIO0_62 | GPMC0_AD7 | | | | MCASP0_AXR15 | | | - |P8_17 |0x00011C00C | PADCONFIG3 | AF22 | PRG1_PRU0_GPO2 | PRG1_PRU0_GPI2 | PRG1_RGMII1_RD2 | PRG1_PWM2_A0 | RGMII1_RD2 | RMII1_CRS_DV | | GPIO0_3 | GPMC0_WAIT1 | RGMII7_RD2 | | | MCASP6_AXR0 | | UART1_RXD | - |P8_18 |0x00011C010 | PADCONFIG4 | AJ23 | PRG1_PRU0_GPO3 | PRG1_PRU0_GPI3 | PRG1_RGMII1_RD3 | PRG1_PWM3_A2 | RGMII1_RD3 | RMII1_RX_ER | | GPIO0_4 | GPMC0_DIR | RGMII7_RD3 | | | MCASP6_AXR1 | | UART1_TXD | - |P8_19 |0x00011C164 | PADCONFIG89 | V29 | RGMII5_TD2 | UART3_TXD | | SYNC3_OUT | VOUT1_DATA3 | TRC_DATA1 | EHRPWM0_A | GPIO0_88 | GPMC0_A4 | | | | MCASP10_AXR1 | | | - |P8_20 |0x00011C134 | PADCONFIG77 | AF26 | PRG0_PRU1_GPO13 | PRG0_PRU1_GPI13 | PRG0_RGMII2_TD2 | PRG0_PWM1_B0 | RGMII4_TD2 | | | GPIO0_76 | | | | | MCASP1_AXR9 | | UART8_RTSn | - |P8_21 |0x00011C07C | PADCONFIG31 | AF21 | PRG1_PRU1_GPO9 | PRG1_PRU1_GPI9 | PRG1_UART0_RXD | | SPI6_CS3 | RMII6_RXD1 | MCAN8_TX | GPIO0_30 | GPMC0_CSn0 | PRG1_IEP0_EDIO_DATA_IN_OUT30 | VOUT0_DATA9 | | MCASP4_AXR3 | | | - |P8_22 |0x00011C014 | PADCONFIG5 | AH23 | PRG1_PRU0_GPO4 | PRG1_PRU0_GPI4 | PRG1_RGMII1_RX_CTL | PRG1_PWM2_B0 | RGMII1_RX_CTL | RMII1_TXD0 | | GPIO0_5 | GPMC0_CSn2 | RGMII7_RX_CTL | | | MCASP6_AXR2 | MCASP6_ACLKR | UART2_RXD | - |P8_23 |0x00011C080 | PADCONFIG32 | AB23 | PRG1_PRU1_GPO10 | PRG1_PRU1_GPI10 | PRG1_UART0_TXD | PRG1_PWM2_TZ_IN | | RMII6_CRS_DV | MCAN8_RX | GPIO0_31 | GPMC0_CLKOUT | PRG1_IEP0_EDIO_DATA_IN_OUT31 | VOUT0_DATA10 | GPMC0_FCLK_MUX | MCASP5_ACLKX | | | - |P8_24 |0x00011C018 | PADCONFIG6 | AD20 | PRG1_PRU0_GPO5 | PRG1_PRU0_GPI5 | | PRG1_PWM3_B2 | | RMII1_TX_EN | | GPIO0_6 | GPMC0_WEn | | | | MCASP3_AXR0 | | | BOOTMODE0 - |P8_25 |0x00011C090 | PADCONFIG36 | AH26 | PRG1_PRU1_GPO14 | PRG1_PRU1_GPI14 | PRG1_RGMII2_TD3 | PRG1_PWM1_A1 | RGMII2_TD3 | | MCAN8_TX | GPIO0_35 | RGMII8_TD3 | | VOUT0_DATA14 | | MCASP9_AXR1 | MCASP4_AFSR | | - |P8_26 |0x00011C0D0 | PADCONFIG52 | AC27 | PRG0_PRU0_GPO8 | PRG0_PRU0_GPI8 | | PRG0_PWM2_A1 | | | MCAN9_RX | GPIO0_51 | GPMC0_AD2 | | | | MCASP0_AXR6 | | UART6_RXD | - |P8_27 |0x00011C120 | PADCONFIG72 | AA28 | PRG0_PRU1_GPO8 | PRG0_PRU1_GPI8 | | PRG0_PWM2_TZ_OUT | | | MCAN11_RX | GPIO0_71 | GPMC0_AD10 | | | | MCASP1_AFSX | | | - |P8_28 |0x00011C124 | PADCONFIG73 | Y24 | PRG0_PRU1_GPO9 | PRG0_PRU1_GPI9 | PRG0_UART0_RXD | | SPI3_CS3 | | PRG0_IEP0_EDIO_DATA_IN_OUT30 | GPIO0_72 | GPMC0_AD11 | | DSS_FSYNC3 | | MCASP1_AXR5 | | UART8_RXD | - |P8_29 |0x00011C128 | PADCONFIG74 | AA25 | PRG0_PRU1_GPO10 | PRG0_PRU1_GPI10 | PRG0_UART0_TXD | PRG0_PWM2_TZ_IN | | | PRG0_IEP0_EDIO_DATA_IN_OUT31 | GPIO0_73 | GPMC0_AD12 | CLKOUT | | | MCASP1_AXR6 | | UART8_TXD | - |P8_30 |0x00011C12C | PADCONFIG75 | AG26 | PRG0_PRU1_GPO11 | PRG0_PRU1_GPI11 | PRG0_RGMII2_TD0 | | RGMII4_TD0 | RMII4_TX_EN | | GPIO0_74 | GPMC0_A26 | | | | MCASP1_AXR7 | | | - |P8_31A |0x00011C084 | PADCONFIG33 | AJ25 | PRG1_PRU1_GPO11 | PRG1_PRU1_GPI11 | PRG1_RGMII2_TD0 | | RGMII2_TD0 | RMII2_TX_EN | | GPIO0_32 | RGMII8_TD0 | EQEP1_I | VOUT0_DATA11 | | MCASP9_ACLKX | | | - |P8_31B |0x00011C100 | PADCONFIG64 | AE29 | PRG0_PRU1_GPO0 | PRG0_PRU1_GPI0 | PRG0_RGMII2_RD0 | | RGMII4_RD0 | RMII4_RXD0 | | GPIO0_63 | UART4_CTSn | | | | MCASP1_AXR0 | | UART5_RXD | - |P8_32A |0x00011C06C | PADCONFIG27 | AG21 | PRG1_PRU1_GPO5 | PRG1_PRU1_GPI5 | | | | RMII5_TX_EN | MCAN6_RX | GPIO0_26 | GPMC0_WPn | EQEP1_S | VOUT0_DATA5 | | MCASP4_AXR0 | | TIMER_IO4 | - |P8_32B |0x00011C104 | PADCONFIG65 | AD28 | PRG0_PRU1_GPO1 | PRG0_PRU1_GPI1 | PRG0_RGMII2_RD1 | | RGMII4_RD1 | RMII4_RXD1 | | GPIO0_64 | UART4_RTSn | | | | MCASP1_AXR1 | | UART5_TXD | - |P8_33A |0x00011C068 | PADCONFIG26 | AH24 | PRG1_PRU1_GPO4 | PRG1_PRU1_GPI4 | PRG1_RGMII2_RX_CTL | PRG1_PWM2_B2 | RGMII2_RX_CTL | RMII2_TXD0 | | GPIO0_25 | RGMII8_RX_CTL | EQEP1_B | VOUT0_DATA4 | VPFE0_DATA13 | MCASP8_AXR2 | MCASP8_ACLKR | TIMER_IO3 | - |P8_33B |0x00011C1C0 | PADCONFIG112 | AA2 | SPI0_CS0 | UART0_RTSn | | | | | | GPIO0_111 | | | | | | | | - |P8_34 |0x00011C01C | PADCONFIG7 | AD22 | PRG1_PRU0_GPO6 | PRG1_PRU0_GPI6 | PRG1_RGMII1_RXC | PRG1_PWM3_A1 | RGMII1_RXC | RMII1_TXD1 | AUDIO_EXT_REFCLK0 | GPIO0_7 | GPMC0_CSn3 | RGMII7_RXC | | | MCASP6_AXR3 | MCASP6_AFSR | UART2_TXD | - |P8_35A |0x00011C064 | PADCONFIG25 | AD23 | PRG1_PRU1_GPO3 | PRG1_PRU1_GPI3 | PRG1_RGMII2_RD3 | | RGMII2_RD3 | RMII2_RX_ER | | GPIO0_24 | RGMII8_RD3 | EQEP1_A | VOUT0_DATA3 | VPFE0_WEN | MCASP8_AXR1 | MCASP3_AFSR | TIMER_IO2 | - |P8_35B |0x00011C1D4 | PADCONFIG117 | Y3 | SPI1_CS0 | UART0_CTSn | | UART5_RXD | | | PRG0_IEP0_EDIO_OUTVALID | GPIO0_116 | PRG0_IEP0_EDC_LATCH_IN0 | | | | | | | - |P8_36 |0x00011C020 | PADCONFIG8 | AE20 | PRG1_PRU0_GPO7 | PRG1_PRU0_GPI7 | PRG1_IEP0_EDC_LATCH_IN1 | PRG1_PWM3_B1 | | AUDIO_EXT_REFCLK1 | MCAN4_TX | GPIO0_8 | | | | | MCASP3_AXR1 | | | - |P8_37A |0x00011C1AC | PADCONFIG107 | Y27 | RGMII6_RD2 | UART4_RTSn | | UART5_TXD | | TRC_DATA19 | EHRPWM5_A | GPIO0_106 | GPMC0_A22 | | | | MCASP11_AXR5 | | | - |P8_37B |0x00011C02C | PADCONFIG11 | AD21 | PRG1_PRU0_GPO10 | PRG1_PRU0_GPI10 | PRG1_UART0_RTSn | PRG1_PWM2_B1 | SPI6_CS2 | RMII5_CRS_DV | | GPIO0_11 | GPMC0_BE0n_CLE | PRG1_IEP0_EDIO_DATA_IN_OUT29 | OBSCLK2 | | MCASP3_AFSX | | | - |P8_38A |0x00011C1A8 | PADCONFIG106 | Y29 | RGMII6_RD3 | UART4_CTSn | | UART5_RXD | CLKOUT | TRC_DATA18 | EHRPWM_TZn_IN4 | GPIO0_105 | GPMC0_A21 | | | | MCASP11_AXR4 | | | - |P8_38B |0x00011C024 | PADCONFIG9 | AJ20 | PRG1_PRU0_GPO8 | PRG1_PRU0_GPI8 | | PRG1_PWM2_A1 | | RMII5_RXD0 | MCAN4_RX | GPIO0_9 | GPMC0_OEn_REn | | VOUT0_DATA22 | | MCASP3_AXR2 | | | - |P8_39 |0x00011C118 | PADCONFIG70 | AC26 | PRG0_PRU1_GPO6 | PRG0_PRU1_GPI6 | PRG0_RGMII2_RXC | | RGMII4_RXC | RMII4_TXD0 | | GPIO0_69 | GPMC0_A25 | | | | MCASP1_AXR3 | | | - |P8_40 |0x00011C11C | PADCONFIG71 | AA24 | PRG0_PRU1_GPO7 | PRG0_PRU1_GPI7 | PRG0_IEP1_EDC_LATCH_IN1 | | SPI3_CS0 | | MCAN11_TX | GPIO0_70 | GPMC0_AD9 | | | | MCASP1_AXR4 | | UART2_TXD | - |P8_41 |0x00011C110 | PADCONFIG68 | AD29 | PRG0_PRU1_GPO4 | PRG0_PRU1_GPI4 | PRG0_RGMII2_RX_CTL | PRG0_PWM2_B2 | RGMII4_RX_CTL | RMII4_TXD1 | | GPIO0_67 | GPMC0_A24 | | | | MCASP1_AXR2 | | | - |P8_42 |0x00011C114 | PADCONFIG69 | AB27 | PRG0_PRU1_GPO5 | PRG0_PRU1_GPI5 | | | | | | GPIO0_68 | GPMC0_AD8 | | | | MCASP1_ACLKX | | | BOOTMODE6 - |P8_43 |0x00011C108 | PADCONFIG66 | AD27 | PRG0_PRU1_GPO2 | PRG0_PRU1_GPI2 | PRG0_RGMII2_RD2 | PRG0_PWM2_A2 | RGMII4_RD2 | RMII4_CRS_DV | | GPIO0_65 | GPMC0_A23 | | | | MCASP1_ACLKR | MCASP1_AXR10 | | - |P8_44 |0x00011C10C | PADCONFIG67 | AC25 | PRG0_PRU1_GPO3 | PRG0_PRU1_GPI3 | PRG0_RGMII2_RD3 | | RGMII4_RD3 | RMII4_RX_ER | | GPIO0_66 | | | | | MCASP1_AFSR | MCASP1_AXR11 | | - |P8_45 |0x00011C140 | PADCONFIG80 | AG29 | PRG0_PRU1_GPO16 | PRG0_PRU1_GPI16 | PRG0_RGMII2_TXC | PRG0_PWM1_A2 | RGMII4_TXC | | | GPIO0_79 | | | | | MCASP2_AXR2 | | | - |P8_46 |0x00011C144 | PADCONFIG81 | Y25 | PRG0_PRU1_GPO17 | PRG0_PRU1_GPI17 | PRG0_IEP1_EDC_SYNC_OUT1 | PRG0_PWM1_B2 | SPI3_CLK | | | GPIO0_80 | GPMC0_AD13 | | | | MCASP2_AXR3 | | | BOOTMODE3 - |P9_11 |0x00011C004 | PADCONFIG1 | AC23 | PRG1_PRU0_GPO0 | PRG1_PRU0_GPI0 | PRG1_RGMII1_RD0 | PRG1_PWM3_A0 | RGMII1_RD0 | RMII1_RXD0 | | GPIO0_1 | GPMC0_BE1n | RGMII7_RD0 | | | MCASP6_ACLKX | | UART0_RXD | - |P9_12 |0x00011C0B8 | PADCONFIG46 | AE27 | PRG0_PRU0_GPO2 | PRG0_PRU0_GPI2 | PRG0_RGMII1_RD2 | PRG0_PWM2_A0 | RGMII3_RD2 | RMII3_CRS_DV | | GPIO0_45 | UART3_RXD | | | | MCASP0_ACLKR | | | - |P9_13 |0x00011C008 | PADCONFIG2 | AG22 | PRG1_PRU0_GPO1 | PRG1_PRU0_GPI1 | PRG1_RGMII1_RD1 | PRG1_PWM3_B0 | RGMII1_RD1 | RMII1_RXD1 | | GPIO0_2 | GPMC0_WAIT0 | RGMII7_RD1 | | | MCASP6_AFSX | | UART0_TXD | - |P9_14 |0x00011C178 | PADCONFIG94 | U27 | RGMII5_RD3 | UART3_CTSn | | UART6_RXD | VOUT1_DATA8 | TRC_DATA6 | EHRPWM2_A | GPIO0_93 | GPMC0_A9 | | | | MCASP11_AXR0 | | | - |P9_15 |0x00011C0C0 | PADCONFIG48 | AD25 | PRG0_PRU0_GPO4 | PRG0_PRU0_GPI4 | PRG0_RGMII1_RX_CTL | PRG0_PWM2_B0 | RGMII3_RX_CTL | RMII3_TXD1 | | GPIO0_47 | | | | | MCASP0_AXR2 | | | - |P9_16A |0x00011C17C | PADCONFIG95 | U24 | RGMII5_RD2 | UART3_RTSn | | UART6_TXD | VOUT1_DATA9 | TRC_DATA7 | EHRPWM2_B | GPIO0_94 | GPMC0_A10 | | | | MCASP11_AXR1 | | | - |P9_16B |0x00011C1DC | PADCONFIG119 | Y1 | SPI1_CLK | UART5_CTSn | I2C4_SDA | UART2_RXD | | | | GPIO0_118 | PRG0_IEP0_EDC_SYNC_OUT0 | | | | | | | - |P9_17A |0x00011C074 | PADCONFIG29 | AC21 | PRG1_PRU1_GPO7 | PRG1_PRU1_GPI7 | PRG1_IEP1_EDC_LATCH_IN1 | | SPI6_CS0 | RMII6_RX_ER | MCAN7_TX | GPIO0_28 | | | VOUT0_DATA7 | VPFE0_DATA15 | MCASP4_AXR1 | | UART3_TXD | - |P9_17B |0x00011C1D0 | PADCONFIG116 | AA3 | SPI0_D1 | | I2C6_SCL | | | | | GPIO0_115 | | | | | | | | - |P9_18A |0x00011C0A4 | PADCONFIG41 | AH22 | PRG1_PRU1_GPO19 | PRG1_PRU1_GPI19 | PRG1_IEP1_EDC_SYNC_OUT0 | PRG1_PWM1_TZ_OUT | SPI6_D1 | RMII6_TXD1 | PRG1_ECAP0_IN_APWM_OUT | GPIO0_40 | | | VOUT0_PCLK | | MCASP5_AXR1 | | | - |P9_18B |0x00011C1E4 | PADCONFIG121 | Y2 | SPI1_D1 | | I2C6_SDA | | | | | GPIO0_120 | PRG0_IEP1_EDC_SYNC_OUT0 | | | | | | | - |P9_19A |0x00011C208 | PADCONFIG130 | W5 | MCAN0_RX | | | | I2C2_SCL | | | GPIO1_1 | | | | | | | | - |P9_19B |0x00011C13C | PADCONFIG79 | AF29 | PRG0_PRU1_GPO15 | PRG0_PRU1_GPI15 | PRG0_RGMII2_TX_CTL | PRG0_PWM1_B1 | RGMII4_TX_CTL | | | GPIO0_78 | | | | | MCASP2_AXR1 | | UART2_RTSn | - |P9_20A |0x00011C20C | PADCONFIG131 | W6 | MCAN0_TX | | | | I2C2_SDA | | | GPIO1_2 | | | | | | | | - |P9_21A |0x00011C0A0 | PADCONFIG40 | AJ22 | PRG1_PRU1_GPO18 | PRG1_PRU1_GPI18 | PRG1_IEP1_EDC_LATCH_IN0 | PRG1_PWM1_TZ_IN | SPI6_D0 | RMII6_TXD0 | PRG1_ECAP0_SYNC_IN | GPIO0_39 | | VOUT0_VP2_VSYNC | VOUT0_VSYNC | | MCASP5_AXR0 | | VOUT0_VP0_VSYNC | - |P9_22A |0x00011C09C | PADCONFIG39 | AC22 | PRG1_PRU1_GPO17 | PRG1_PRU1_GPI17 | PRG1_IEP1_EDC_SYNC_OUT1 | PRG1_PWM1_B2 | SPI6_CLK | RMII6_TX_EN | PRG1_ECAP0_SYNC_OUT | GPIO0_38 | | VOUT0_VP2_DE | VOUT0_DE | VPFE0_DATA10 | MCASP5_AFSX | | VOUT0_VP0_DE | BOOTMODE1 - |P9_22B |0x00011C170 | PADCONFIG92 | U29 | RGMII5_TXC | RMII7_TX_EN | I2C6_SCL | | VOUT1_DATA6 | TRC_DATA4 | EHRPWM1_B | GPIO0_91 | GPMC0_A7 | | | | MCASP10_AXR2 | | | - |P9_23 |0x00011C028 | PADCONFIG10 | AG20 | PRG1_PRU0_GPO9 | PRG1_PRU0_GPI9 | PRG1_UART0_CTSn | PRG1_PWM3_TZ_IN | SPI6_CS1 | RMII5_RXD1 | | GPIO0_10 | GPMC0_ADVn_ALE | PRG1_IEP0_EDIO_DATA_IN_OUT28 | VOUT0_DATA23 | | MCASP3_ACLKX | | | - |P9_24A |0x00011C034 | PADCONFIG13 | AJ24 | PRG1_PRU0_GPO12 | PRG1_PRU0_GPI12 | PRG1_RGMII1_TD1 | PRG1_PWM0_A0 | RGMII1_TD1 | | MCAN4_RX | GPIO0_13 | | RGMII7_TD1 | VOUT0_DATA17 | VPFE0_DATA1 | MCASP7_AFSX | | | - |P9_24B |0x00011C1E0 | PADCONFIG120 | Y5 | SPI1_D0 | UART5_RTSn | I2C4_SCL | UART2_TXD | | | | GPIO0_119 | PRG0_IEP1_EDC_LATCH_IN0 | | | | | | | - |P9_25A |0x00011C200 | PADCONFIG128 | AC4 | UART1_CTSn | MCAN3_RX | | | SPI2_D0 | EQEP0_S | | GPIO0_127 | | | | | | | | - |P9_25B |0x00011C1A4 | PADCONFIG105 | W26 | RGMII6_RXC | | | AUDIO_EXT_REFCLK2 | VOUT1_DE | TRC_DATA17 | EHRPWM4_B | GPIO0_104 | GPMC0_A20 | VOUT1_VP0_DE | | | MCASP10_AXR7 | | | - |P9_26A |0x00011C030 | PADCONFIG12 | AF24 | PRG1_PRU0_GPO11 | PRG1_PRU0_GPI11 | PRG1_RGMII1_TD0 | PRG1_PWM3_TZ_OUT | RGMII1_TD0 | | MCAN4_TX | GPIO0_12 | | RGMII7_TD0 | VOUT0_DATA16 | VPFE0_DATA0 | MCASP7_ACLKX | | | - |P9_27A |0x00011C0BC | PADCONFIG47 | AD26 | PRG0_PRU0_GPO3 | PRG0_PRU0_GPI3 | PRG0_RGMII1_RD3 | PRG0_PWM3_A2 | RGMII3_RD3 | RMII3_RX_ER | | GPIO0_46 | UART3_TXD | | | | MCASP0_AFSR | | | - |P9_27B |0x00011C1F4 | PADCONFIG125 | AB1 | UART0_RTSn | TIMER_IO7 | SPI0_CS3 | MCAN2_TX | SPI2_CLK | EQEP0_B | | GPIO0_124 | | | | | | | | - |P9_28A |0x00011C230 | PADCONFIG140 | U2 | ECAP0_IN_APWM_OUT | SYNC0_OUT | CPTS0_RFT_CLK | | SPI2_CS3 | I3C0_SDAPULLEN | SPI7_CS0 | GPIO1_11 | | | | | | | | - |P9_28B |0x00011C0B0 | PADCONFIG44 | AF28 | PRG0_PRU0_GPO0 | PRG0_PRU0_GPI0 | PRG0_RGMII1_RD0 | PRG0_PWM3_A0 | RGMII3_RD0 | RMII3_RXD1 | | GPIO0_43 | | | | | MCASP0_AXR0 | | | - |P9_29A |0x00011C0D8 | PADCONFIG54 | AB25 | PRG0_PRU0_GPO10 | PRG0_PRU0_GPI10 | PRG0_UART0_RTSn | PRG0_PWM2_B1 | SPI3_CS2 | PRG0_IEP0_EDIO_DATA_IN_OUT29 | MCAN10_RX | GPIO0_53 | GPMC0_AD4 | | | | MCASP0_AFSX | | | - |P9_29B |0x00011C23C | PADCONFIG143 | V5 | TIMER_IO1 | ECAP2_IN_APWM_OUT | OBSCLK0 | | | | SPI7_D1 | GPIO1_14 | | | | | | | | BOOTMODE5 - |P9_30A |0x00011C0B4 | PADCONFIG45 | AE28 | PRG0_PRU0_GPO1 | PRG0_PRU0_GPI1 | PRG0_RGMII1_RD1 | PRG0_PWM3_B0 | RGMII3_RD1 | RMII3_RXD0 | | GPIO0_44 | | | | | MCASP0_AXR1 | | | - |P9_30B |0x00011C238 | PADCONFIG142 | V6 | TIMER_IO0 | ECAP1_IN_APWM_OUT | SYSCLKOUT0 | | | | SPI7_D0 | GPIO1_13 | | | | | | | | BOOTMODE4 - |P9_31A |0x00011C0D4 | PADCONFIG53 | AB26 | PRG0_PRU0_GPO9 | PRG0_PRU0_GPI9 | PRG0_UART0_CTSn | PRG0_PWM3_TZ_IN | SPI3_CS1 | PRG0_IEP0_EDIO_DATA_IN_OUT28 | MCAN10_TX | GPIO0_52 | GPMC0_AD3 | | | | MCASP0_ACLKX | | UART6_TXD | - |P9_31B |0x00011C234 | PADCONFIG141 | U3 | EXT_REFCLK1 | SYNC1_OUT | | | | | SPI7_CLK | GPIO1_12 | | | | | | | | - |P9_33A |0x00011C0CC | PADCONFIG51 | AC28 | PRG0_PRU0_GPO7 | PRG0_PRU0_GPI7 | PRG0_IEP0_EDC_LATCH_IN1 | PRG0_PWM3_B1 | PRG0_ECAP0_SYNC_IN | | MCAN9_TX | GPIO0_50 | GPMC0_AD1 | | | | MCASP0_AXR5 | | | - |P9_33B |0x04301C140 | WKUP_PADCONFIG80 | K24 | MCU_ADC0_AIN4 | | | | | | | | | | | | | | | - |P9_35A |0x00011C0E0 | PADCONFIG56 | AH27 | PRG0_PRU0_GPO12 | PRG0_PRU0_GPI12 | PRG0_RGMII1_TD1 | PRG0_PWM0_A0 | RGMII3_TD1 | | | GPIO0_55 | | | DSS_FSYNC0 | | MCASP0_AXR8 | | | - |P9_35B |0x04301C148 | WKUP_PADCONFIG82 | K29 | MCU_ADC0_AIN6 | | | | | | | | | | | | | | | - |P9_36A |0x00011C0E4 | PADCONFIG57 | AH29 | PRG0_PRU0_GPO13 | PRG0_PRU0_GPI13 | PRG0_RGMII1_TD2 | PRG0_PWM0_B0 | RGMII3_TD2 | | | GPIO0_56 | | | DSS_FSYNC2 | | MCASP0_AXR9 | | | - |P9_36B |0x04301C144 | WKUP_PADCONFIG81 | K27 | MCU_ADC0_AIN5 | | | | | | | | | | | | | | | - |P9_37A |0x00011C0E8 | PADCONFIG58 | AG28 | PRG0_PRU0_GPO14 | PRG0_PRU0_GPI14 | PRG0_RGMII1_TD3 | PRG0_PWM0_A1 | RGMII3_TD3 | | | GPIO0_57 | UART4_RXD | | | | MCASP0_AXR10 | | | - |P9_37B |0x04301C138 | WKUP_PADCONFIG78 | K28 | MCU_ADC0_AIN2 | | | | | | | | | | | | | | | - |P9_38A |0x00011C0EC | PADCONFIG59 | AG27 | PRG0_PRU0_GPO15 | PRG0_PRU0_GPI15 | PRG0_RGMII1_TX_CTL | PRG0_PWM0_B1 | RGMII3_TX_CTL | | | GPIO0_58 | UART4_TXD | | DSS_FSYNC3 | | MCASP0_AXR11 | | | - |P9_38B |0x04301C13C | WKUP_PADCONFIG79 | L28 | MCU_ADC0_AIN3 | | | | | | | | | | | | | | | - |P9_39A |0x04301C130 | WKUP_PADCONFIG76 | K25 | MCU_ADC0_AIN0 | | | | | | | | | | | | | | | - |P9_39B |0x00011C0DC | PADCONFIG55 | AJ28 | PRG0_PRU0_GPO11 | PRG0_PRU0_GPI11 | PRG0_RGMII1_TD0 | PRG0_PWM3_TZ_OUT | RGMII3_TD0 | | | GPIO0_54 | | CLKOUT | | | MCASP0_AXR7 | | | - |P9_40A |0x00011C148 | PADCONFIG82 | AA26 | PRG0_PRU1_GPO18 | PRG0_PRU1_GPI18 | PRG0_IEP1_EDC_LATCH_IN0 | PRG0_PWM1_TZ_IN | SPI3_D0 | | MCAN12_TX | GPIO0_81 | GPMC0_AD14 | | | | MCASP2_AFSX | | UART2_RXD | - |P9_40B |0x04301C134 | WKUP_PADCONFIG77 | K26 | MCU_ADC0_AIN1 | | | | | | | | | | | | | | | - |P9_41 |0x00011C204 | PADCONFIG129 | AD5 | UART1_RTSn | MCAN3_TX | | | SPI2_D1 | EQEP0_I | | GPIO1_0 | | | | | | | | - |P9_42A |0x00011C1F0 | PADCONFIG124 | AC2 | UART0_CTSn | TIMER_IO6 | SPI0_CS2 | MCAN2_RX | SPI2_CS0 | EQEP0_A | | GPIO0_123 | | | | | | | | - |P9_42B |0x00011C04C | PADCONFIG19 | AJ21 | PRG1_PRU0_GPO17 | PRG1_PRU0_GPI17 | PRG1_IEP0_EDC_SYNC_OUT1 | PRG1_PWM0_B2 | | RMII5_TXD1 | MCAN5_TX | GPIO0_18 | | | | VPFE0_DATA6 | MCASP3_AXR3 | | | | +.. + #TODO# this is a total mess! + | *PIN No.* | *ADDRESS* | *REGISTER NAME* | *BALL NUMBER* | *MUXMODE[14:0] SETTINGS* ||||||||||||||| + | *PIN No.* | *ADDRESS* | *REGISTER NAME* | *BALL NUMBER* | *0* | *1* | *2* | *3* | *4* | *5* | *6* | *7* | *8* | *9* | *10* | *11* | *12* | *13* | *14* | *Bootstrap* | + | P8_03 | 0x00011C054 | PADCONFIG21 | AH21 | PRG1_PRU0_GPO19 | PRG1_PRU0_GPI19 | PRG1_IEP0_EDC_SYNC_OUT0 | PRG1_PWM0_TZ_OUT | | RMII5_TXD0 | MCAN6_TX | GPIO0_20 | | | VOUT0_EXTPCLKIN | VPFE0_PCLK | MCASP4_AFSX | | | + |P8_04 |0x00011C0C4 | PADCONFIG49 | AC29 | PRG0_PRU0_GPO5 | PRG0_PRU0_GPI5 | | PRG0_PWM3_B2 | | RMII3_TXD0 | | GPIO0_48 | GPMC0_AD0 | | | | MCASP0_AXR3 | | | BOOTMODE2 + |P8_05 |0x00011C088 | PADCONFIG34 | AH25 | PRG1_PRU1_GPO12 | PRG1_PRU1_GPI12 | PRG1_RGMII2_TD1 | PRG1_PWM1_A0 | RGMII2_TD1 | | MCAN7_TX | GPIO0_33 | RGMII8_TD1 | | VOUT0_DATA12 | | MCASP9_AFSX | | | + |P8_06 |0x00011C08C | PADCONFIG35 | AG25 | PRG1_PRU1_GPO13 | PRG1_PRU1_GPI13 | PRG1_RGMII2_TD2 | PRG1_PWM1_B0 | RGMII2_TD2 | | MCAN7_RX | GPIO0_34 | RGMII8_TD2 | | VOUT0_DATA13 | VPFE0_DATA8 | MCASP9_AXR0 | MCASP4_ACLKR | | + |P8_07 |0x00011C03C | PADCONFIG15 | AD24 | PRG1_PRU0_GPO14 | PRG1_PRU0_GPI14 | PRG1_RGMII1_TD3 | PRG1_PWM0_A1 | RGMII1_TD3 | | MCAN5_RX | GPIO0_15 | | RGMII7_TD3 | VOUT0_DATA19 | VPFE0_DATA3 | MCASP7_AXR1 | | | + |P8_08 |0x00011C038 | PADCONFIG14 | AG24 | PRG1_PRU0_GPO13 | PRG1_PRU0_GPI13 | PRG1_RGMII1_TD2 | PRG1_PWM0_B0 | RGMII1_TD2 | | MCAN5_TX | GPIO0_14 | | RGMII7_TD2 | VOUT0_DATA18 | VPFE0_DATA2 | MCASP7_AXR0 | | | + |P8_09 |0x00011C044 | PADCONFIG17 | AE24 | PRG1_PRU0_GPO16 | PRG1_PRU0_GPI16 | PRG1_RGMII1_TXC | PRG1_PWM0_A2 | RGMII1_TXC | | MCAN6_RX | GPIO0_17 | | RGMII7_TXC | VOUT0_DATA21 | VPFE0_DATA5 | MCASP7_AXR3 | MCASP7_AFSR | | + |P8_10 |0x00011C040 | PADCONFIG16 | AC24 | PRG1_PRU0_GPO15 | PRG1_PRU0_GPI15 | PRG1_RGMII1_TX_CTL | PRG1_PWM0_B1 | RGMII1_TX_CTL | | MCAN6_TX | GPIO0_16 | | RGMII7_TX_CTL | VOUT0_DATA20 | VPFE0_DATA4 | MCASP7_AXR2 | MCASP7_ACLKR | | + |P8_11 |0x00011C0F4 | PADCONFIG61 | AB24 | PRG0_PRU0_GPO17 | PRG0_PRU0_GPI17 | PRG0_IEP0_EDC_SYNC_OUT1 | PRG0_PWM0_B2 | PRG0_ECAP0_SYNC_OUT | | | GPIO0_60 | GPMC0_AD5 | OBSCLK1 | | | MCASP0_AXR13 | | | BOOTMODE7 + |P8_12 |0x00011C0F0 | PADCONFIG60 | AH28 | PRG0_PRU0_GPO16 | PRG0_PRU0_GPI16 | PRG0_RGMII1_TXC | PRG0_PWM0_A2 | RGMII3_TXC | | | GPIO0_59 | | | DSS_FSYNC1 | | MCASP0_AXR12 | | | + |P8_13 |0x00011C168 | PADCONFIG90 | V27 | RGMII5_TD1 | RMII7_TXD1 | I2C3_SCL | | VOUT1_DATA4 | TRC_DATA2 | EHRPWM0_B | GPIO0_89 | GPMC0_A5 | | | | MCASP11_ACLKX | | | + |P8_14 |0x00011C130 | PADCONFIG76 | AF27 | PRG0_PRU1_GPO12 | PRG0_PRU1_GPI12 | PRG0_RGMII2_TD1 | PRG0_PWM1_A0 | RGMII4_TD1 | | | GPIO0_75 | | | | | MCASP1_AXR8 | | UART8_CTSn | + |P8_15 |0x00011C0F8 | PADCONFIG62 | AB29 | PRG0_PRU0_GPO18 | PRG0_PRU0_GPI18 | PRG0_IEP0_EDC_LATCH_IN0 | PRG0_PWM0_TZ_IN | PRG0_ECAP0_IN_APWM_OUT | | | GPIO0_61 | GPMC0_AD6 | | | | MCASP0_AXR14 | | | + |P8_16 |0x00011C0FC | PADCONFIG63 | AB28 | PRG0_PRU0_GPO19 | PRG0_PRU0_GPI19 | PRG0_IEP0_EDC_SYNC_OUT0 | PRG0_PWM0_TZ_OUT | | | | GPIO0_62 | GPMC0_AD7 | | | | MCASP0_AXR15 | | | + |P8_17 |0x00011C00C | PADCONFIG3 | AF22 | PRG1_PRU0_GPO2 | PRG1_PRU0_GPI2 | PRG1_RGMII1_RD2 | PRG1_PWM2_A0 | RGMII1_RD2 | RMII1_CRS_DV | | GPIO0_3 | GPMC0_WAIT1 | RGMII7_RD2 | | | MCASP6_AXR0 | | UART1_RXD | + |P8_18 |0x00011C010 | PADCONFIG4 | AJ23 | PRG1_PRU0_GPO3 | PRG1_PRU0_GPI3 | PRG1_RGMII1_RD3 | PRG1_PWM3_A2 | RGMII1_RD3 | RMII1_RX_ER | | GPIO0_4 | GPMC0_DIR | RGMII7_RD3 | | | MCASP6_AXR1 | | UART1_TXD | + |P8_19 |0x00011C164 | PADCONFIG89 | V29 | RGMII5_TD2 | UART3_TXD | | SYNC3_OUT | VOUT1_DATA3 | TRC_DATA1 | EHRPWM0_A | GPIO0_88 | GPMC0_A4 | | | | MCASP10_AXR1 | | | + |P8_20 |0x00011C134 | PADCONFIG77 | AF26 | PRG0_PRU1_GPO13 | PRG0_PRU1_GPI13 | PRG0_RGMII2_TD2 | PRG0_PWM1_B0 | RGMII4_TD2 | | | GPIO0_76 | | | | | MCASP1_AXR9 | | UART8_RTSn | + |P8_21 |0x00011C07C | PADCONFIG31 | AF21 | PRG1_PRU1_GPO9 | PRG1_PRU1_GPI9 | PRG1_UART0_RXD | | SPI6_CS3 | RMII6_RXD1 | MCAN8_TX | GPIO0_30 | GPMC0_CSn0 | PRG1_IEP0_EDIO_DATA_IN_OUT30 | VOUT0_DATA9 | | MCASP4_AXR3 | | | + |P8_22 |0x00011C014 | PADCONFIG5 | AH23 | PRG1_PRU0_GPO4 | PRG1_PRU0_GPI4 | PRG1_RGMII1_RX_CTL | PRG1_PWM2_B0 | RGMII1_RX_CTL | RMII1_TXD0 | | GPIO0_5 | GPMC0_CSn2 | RGMII7_RX_CTL | | | MCASP6_AXR2 | MCASP6_ACLKR | UART2_RXD | + |P8_23 |0x00011C080 | PADCONFIG32 | AB23 | PRG1_PRU1_GPO10 | PRG1_PRU1_GPI10 | PRG1_UART0_TXD | PRG1_PWM2_TZ_IN | | RMII6_CRS_DV | MCAN8_RX | GPIO0_31 | GPMC0_CLKOUT | PRG1_IEP0_EDIO_DATA_IN_OUT31 | VOUT0_DATA10 | GPMC0_FCLK_MUX | MCASP5_ACLKX | | | + |P8_24 |0x00011C018 | PADCONFIG6 | AD20 | PRG1_PRU0_GPO5 | PRG1_PRU0_GPI5 | | PRG1_PWM3_B2 | | RMII1_TX_EN | | GPIO0_6 | GPMC0_WEn | | | | MCASP3_AXR0 | | | BOOTMODE0 + |P8_25 |0x00011C090 | PADCONFIG36 | AH26 | PRG1_PRU1_GPO14 | PRG1_PRU1_GPI14 | PRG1_RGMII2_TD3 | PRG1_PWM1_A1 | RGMII2_TD3 | | MCAN8_TX | GPIO0_35 | RGMII8_TD3 | | VOUT0_DATA14 | | MCASP9_AXR1 | MCASP4_AFSR | | + |P8_26 |0x00011C0D0 | PADCONFIG52 | AC27 | PRG0_PRU0_GPO8 | PRG0_PRU0_GPI8 | | PRG0_PWM2_A1 | | | MCAN9_RX | GPIO0_51 | GPMC0_AD2 | | | | MCASP0_AXR6 | | UART6_RXD | + |P8_27 |0x00011C120 | PADCONFIG72 | AA28 | PRG0_PRU1_GPO8 | PRG0_PRU1_GPI8 | | PRG0_PWM2_TZ_OUT | | | MCAN11_RX | GPIO0_71 | GPMC0_AD10 | | | | MCASP1_AFSX | | | + |P8_28 |0x00011C124 | PADCONFIG73 | Y24 | PRG0_PRU1_GPO9 | PRG0_PRU1_GPI9 | PRG0_UART0_RXD | | SPI3_CS3 | | PRG0_IEP0_EDIO_DATA_IN_OUT30 | GPIO0_72 | GPMC0_AD11 | | DSS_FSYNC3 | | MCASP1_AXR5 | | UART8_RXD | + |P8_29 |0x00011C128 | PADCONFIG74 | AA25 | PRG0_PRU1_GPO10 | PRG0_PRU1_GPI10 | PRG0_UART0_TXD | PRG0_PWM2_TZ_IN | | | PRG0_IEP0_EDIO_DATA_IN_OUT31 | GPIO0_73 | GPMC0_AD12 | CLKOUT | | | MCASP1_AXR6 | | UART8_TXD | + |P8_30 |0x00011C12C | PADCONFIG75 | AG26 | PRG0_PRU1_GPO11 | PRG0_PRU1_GPI11 | PRG0_RGMII2_TD0 | | RGMII4_TD0 | RMII4_TX_EN | | GPIO0_74 | GPMC0_A26 | | | | MCASP1_AXR7 | | | + |P8_31A |0x00011C084 | PADCONFIG33 | AJ25 | PRG1_PRU1_GPO11 | PRG1_PRU1_GPI11 | PRG1_RGMII2_TD0 | | RGMII2_TD0 | RMII2_TX_EN | | GPIO0_32 | RGMII8_TD0 | EQEP1_I | VOUT0_DATA11 | | MCASP9_ACLKX | | | + |P8_31B |0x00011C100 | PADCONFIG64 | AE29 | PRG0_PRU1_GPO0 | PRG0_PRU1_GPI0 | PRG0_RGMII2_RD0 | | RGMII4_RD0 | RMII4_RXD0 | | GPIO0_63 | UART4_CTSn | | | | MCASP1_AXR0 | | UART5_RXD | + |P8_32A |0x00011C06C | PADCONFIG27 | AG21 | PRG1_PRU1_GPO5 | PRG1_PRU1_GPI5 | | | | RMII5_TX_EN | MCAN6_RX | GPIO0_26 | GPMC0_WPn | EQEP1_S | VOUT0_DATA5 | | MCASP4_AXR0 | | TIMER_IO4 | + |P8_32B |0x00011C104 | PADCONFIG65 | AD28 | PRG0_PRU1_GPO1 | PRG0_PRU1_GPI1 | PRG0_RGMII2_RD1 | | RGMII4_RD1 | RMII4_RXD1 | | GPIO0_64 | UART4_RTSn | | | | MCASP1_AXR1 | | UART5_TXD | + |P8_33A |0x00011C068 | PADCONFIG26 | AH24 | PRG1_PRU1_GPO4 | PRG1_PRU1_GPI4 | PRG1_RGMII2_RX_CTL | PRG1_PWM2_B2 | RGMII2_RX_CTL | RMII2_TXD0 | | GPIO0_25 | RGMII8_RX_CTL | EQEP1_B | VOUT0_DATA4 | VPFE0_DATA13 | MCASP8_AXR2 | MCASP8_ACLKR | TIMER_IO3 | + |P8_33B |0x00011C1C0 | PADCONFIG112 | AA2 | SPI0_CS0 | UART0_RTSn | | | | | | GPIO0_111 | | | | | | | | + |P8_34 |0x00011C01C | PADCONFIG7 | AD22 | PRG1_PRU0_GPO6 | PRG1_PRU0_GPI6 | PRG1_RGMII1_RXC | PRG1_PWM3_A1 | RGMII1_RXC | RMII1_TXD1 | AUDIO_EXT_REFCLK0 | GPIO0_7 | GPMC0_CSn3 | RGMII7_RXC | | | MCASP6_AXR3 | MCASP6_AFSR | UART2_TXD | + |P8_35A |0x00011C064 | PADCONFIG25 | AD23 | PRG1_PRU1_GPO3 | PRG1_PRU1_GPI3 | PRG1_RGMII2_RD3 | | RGMII2_RD3 | RMII2_RX_ER | | GPIO0_24 | RGMII8_RD3 | EQEP1_A | VOUT0_DATA3 | VPFE0_WEN | MCASP8_AXR1 | MCASP3_AFSR | TIMER_IO2 | + |P8_35B |0x00011C1D4 | PADCONFIG117 | Y3 | SPI1_CS0 | UART0_CTSn | | UART5_RXD | | | PRG0_IEP0_EDIO_OUTVALID | GPIO0_116 | PRG0_IEP0_EDC_LATCH_IN0 | | | | | | | + |P8_36 |0x00011C020 | PADCONFIG8 | AE20 | PRG1_PRU0_GPO7 | PRG1_PRU0_GPI7 | PRG1_IEP0_EDC_LATCH_IN1 | PRG1_PWM3_B1 | | AUDIO_EXT_REFCLK1 | MCAN4_TX | GPIO0_8 | | | | | MCASP3_AXR1 | | | + |P8_37A |0x00011C1AC | PADCONFIG107 | Y27 | RGMII6_RD2 | UART4_RTSn | | UART5_TXD | | TRC_DATA19 | EHRPWM5_A | GPIO0_106 | GPMC0_A22 | | | | MCASP11_AXR5 | | | + |P8_37B |0x00011C02C | PADCONFIG11 | AD21 | PRG1_PRU0_GPO10 | PRG1_PRU0_GPI10 | PRG1_UART0_RTSn | PRG1_PWM2_B1 | SPI6_CS2 | RMII5_CRS_DV | | GPIO0_11 | GPMC0_BE0n_CLE | PRG1_IEP0_EDIO_DATA_IN_OUT29 | OBSCLK2 | | MCASP3_AFSX | | | + |P8_38A |0x00011C1A8 | PADCONFIG106 | Y29 | RGMII6_RD3 | UART4_CTSn | | UART5_RXD | CLKOUT | TRC_DATA18 | EHRPWM_TZn_IN4 | GPIO0_105 | GPMC0_A21 | | | | MCASP11_AXR4 | | | + |P8_38B |0x00011C024 | PADCONFIG9 | AJ20 | PRG1_PRU0_GPO8 | PRG1_PRU0_GPI8 | | PRG1_PWM2_A1 | | RMII5_RXD0 | MCAN4_RX | GPIO0_9 | GPMC0_OEn_REn | | VOUT0_DATA22 | | MCASP3_AXR2 | | | + |P8_39 |0x00011C118 | PADCONFIG70 | AC26 | PRG0_PRU1_GPO6 | PRG0_PRU1_GPI6 | PRG0_RGMII2_RXC | | RGMII4_RXC | RMII4_TXD0 | | GPIO0_69 | GPMC0_A25 | | | | MCASP1_AXR3 | | | + |P8_40 |0x00011C11C | PADCONFIG71 | AA24 | PRG0_PRU1_GPO7 | PRG0_PRU1_GPI7 | PRG0_IEP1_EDC_LATCH_IN1 | | SPI3_CS0 | | MCAN11_TX | GPIO0_70 | GPMC0_AD9 | | | | MCASP1_AXR4 | | UART2_TXD | + |P8_41 |0x00011C110 | PADCONFIG68 | AD29 | PRG0_PRU1_GPO4 | PRG0_PRU1_GPI4 | PRG0_RGMII2_RX_CTL | PRG0_PWM2_B2 | RGMII4_RX_CTL | RMII4_TXD1 | | GPIO0_67 | GPMC0_A24 | | | | MCASP1_AXR2 | | | + |P8_42 |0x00011C114 | PADCONFIG69 | AB27 | PRG0_PRU1_GPO5 | PRG0_PRU1_GPI5 | | | | | | GPIO0_68 | GPMC0_AD8 | | | | MCASP1_ACLKX | | | BOOTMODE6 + |P8_43 |0x00011C108 | PADCONFIG66 | AD27 | PRG0_PRU1_GPO2 | PRG0_PRU1_GPI2 | PRG0_RGMII2_RD2 | PRG0_PWM2_A2 | RGMII4_RD2 | RMII4_CRS_DV | | GPIO0_65 | GPMC0_A23 | | | | MCASP1_ACLKR | MCASP1_AXR10 | | + |P8_44 |0x00011C10C | PADCONFIG67 | AC25 | PRG0_PRU1_GPO3 | PRG0_PRU1_GPI3 | PRG0_RGMII2_RD3 | | RGMII4_RD3 | RMII4_RX_ER | | GPIO0_66 | | | | | MCASP1_AFSR | MCASP1_AXR11 | | + |P8_45 |0x00011C140 | PADCONFIG80 | AG29 | PRG0_PRU1_GPO16 | PRG0_PRU1_GPI16 | PRG0_RGMII2_TXC | PRG0_PWM1_A2 | RGMII4_TXC | | | GPIO0_79 | | | | | MCASP2_AXR2 | | | + |P8_46 |0x00011C144 | PADCONFIG81 | Y25 | PRG0_PRU1_GPO17 | PRG0_PRU1_GPI17 | PRG0_IEP1_EDC_SYNC_OUT1 | PRG0_PWM1_B2 | SPI3_CLK | | | GPIO0_80 | GPMC0_AD13 | | | | MCASP2_AXR3 | | | BOOTMODE3 + |P9_11 |0x00011C004 | PADCONFIG1 | AC23 | PRG1_PRU0_GPO0 | PRG1_PRU0_GPI0 | PRG1_RGMII1_RD0 | PRG1_PWM3_A0 | RGMII1_RD0 | RMII1_RXD0 | | GPIO0_1 | GPMC0_BE1n | RGMII7_RD0 | | | MCASP6_ACLKX | | UART0_RXD | + |P9_12 |0x00011C0B8 | PADCONFIG46 | AE27 | PRG0_PRU0_GPO2 | PRG0_PRU0_GPI2 | PRG0_RGMII1_RD2 | PRG0_PWM2_A0 | RGMII3_RD2 | RMII3_CRS_DV | | GPIO0_45 | UART3_RXD | | | | MCASP0_ACLKR | | | + |P9_13 |0x00011C008 | PADCONFIG2 | AG22 | PRG1_PRU0_GPO1 | PRG1_PRU0_GPI1 | PRG1_RGMII1_RD1 | PRG1_PWM3_B0 | RGMII1_RD1 | RMII1_RXD1 | | GPIO0_2 | GPMC0_WAIT0 | RGMII7_RD1 | | | MCASP6_AFSX | | UART0_TXD | + |P9_14 |0x00011C178 | PADCONFIG94 | U27 | RGMII5_RD3 | UART3_CTSn | | UART6_RXD | VOUT1_DATA8 | TRC_DATA6 | EHRPWM2_A | GPIO0_93 | GPMC0_A9 | | | | MCASP11_AXR0 | | | + |P9_15 |0x00011C0C0 | PADCONFIG48 | AD25 | PRG0_PRU0_GPO4 | PRG0_PRU0_GPI4 | PRG0_RGMII1_RX_CTL | PRG0_PWM2_B0 | RGMII3_RX_CTL | RMII3_TXD1 | | GPIO0_47 | | | | | MCASP0_AXR2 | | | + |P9_16A |0x00011C17C | PADCONFIG95 | U24 | RGMII5_RD2 | UART3_RTSn | | UART6_TXD | VOUT1_DATA9 | TRC_DATA7 | EHRPWM2_B | GPIO0_94 | GPMC0_A10 | | | | MCASP11_AXR1 | | | + |P9_16B |0x00011C1DC | PADCONFIG119 | Y1 | SPI1_CLK | UART5_CTSn | I2C4_SDA | UART2_RXD | | | | GPIO0_118 | PRG0_IEP0_EDC_SYNC_OUT0 | | | | | | | + |P9_17A |0x00011C074 | PADCONFIG29 | AC21 | PRG1_PRU1_GPO7 | PRG1_PRU1_GPI7 | PRG1_IEP1_EDC_LATCH_IN1 | | SPI6_CS0 | RMII6_RX_ER | MCAN7_TX | GPIO0_28 | | | VOUT0_DATA7 | VPFE0_DATA15 | MCASP4_AXR1 | | UART3_TXD | + |P9_17B |0x00011C1D0 | PADCONFIG116 | AA3 | SPI0_D1 | | I2C6_SCL | | | | | GPIO0_115 | | | | | | | | + |P9_18A |0x00011C0A4 | PADCONFIG41 | AH22 | PRG1_PRU1_GPO19 | PRG1_PRU1_GPI19 | PRG1_IEP1_EDC_SYNC_OUT0 | PRG1_PWM1_TZ_OUT | SPI6_D1 | RMII6_TXD1 | PRG1_ECAP0_IN_APWM_OUT | GPIO0_40 | | | VOUT0_PCLK | | MCASP5_AXR1 | | | + |P9_18B |0x00011C1E4 | PADCONFIG121 | Y2 | SPI1_D1 | | I2C6_SDA | | | | | GPIO0_120 | PRG0_IEP1_EDC_SYNC_OUT0 | | | | | | | + |P9_19A |0x00011C208 | PADCONFIG130 | W5 | MCAN0_RX | | | | I2C2_SCL | | | GPIO1_1 | | | | | | | | + |P9_19B |0x00011C13C | PADCONFIG79 | AF29 | PRG0_PRU1_GPO15 | PRG0_PRU1_GPI15 | PRG0_RGMII2_TX_CTL | PRG0_PWM1_B1 | RGMII4_TX_CTL | | | GPIO0_78 | | | | | MCASP2_AXR1 | | UART2_RTSn | + |P9_20A |0x00011C20C | PADCONFIG131 | W6 | MCAN0_TX | | | | I2C2_SDA | | | GPIO1_2 | | | | | | | | + |P9_21A |0x00011C0A0 | PADCONFIG40 | AJ22 | PRG1_PRU1_GPO18 | PRG1_PRU1_GPI18 | PRG1_IEP1_EDC_LATCH_IN0 | PRG1_PWM1_TZ_IN | SPI6_D0 | RMII6_TXD0 | PRG1_ECAP0_SYNC_IN | GPIO0_39 | | VOUT0_VP2_VSYNC | VOUT0_VSYNC | | MCASP5_AXR0 | | VOUT0_VP0_VSYNC | + |P9_22A |0x00011C09C | PADCONFIG39 | AC22 | PRG1_PRU1_GPO17 | PRG1_PRU1_GPI17 | PRG1_IEP1_EDC_SYNC_OUT1 | PRG1_PWM1_B2 | SPI6_CLK | RMII6_TX_EN | PRG1_ECAP0_SYNC_OUT | GPIO0_38 | | VOUT0_VP2_DE | VOUT0_DE | VPFE0_DATA10 | MCASP5_AFSX | | VOUT0_VP0_DE | BOOTMODE1 + |P9_22B |0x00011C170 | PADCONFIG92 | U29 | RGMII5_TXC | RMII7_TX_EN | I2C6_SCL | | VOUT1_DATA6 | TRC_DATA4 | EHRPWM1_B | GPIO0_91 | GPMC0_A7 | | | | MCASP10_AXR2 | | | + |P9_23 |0x00011C028 | PADCONFIG10 | AG20 | PRG1_PRU0_GPO9 | PRG1_PRU0_GPI9 | PRG1_UART0_CTSn | PRG1_PWM3_TZ_IN | SPI6_CS1 | RMII5_RXD1 | | GPIO0_10 | GPMC0_ADVn_ALE | PRG1_IEP0_EDIO_DATA_IN_OUT28 | VOUT0_DATA23 | | MCASP3_ACLKX | | | + |P9_24A |0x00011C034 | PADCONFIG13 | AJ24 | PRG1_PRU0_GPO12 | PRG1_PRU0_GPI12 | PRG1_RGMII1_TD1 | PRG1_PWM0_A0 | RGMII1_TD1 | | MCAN4_RX | GPIO0_13 | | RGMII7_TD1 | VOUT0_DATA17 | VPFE0_DATA1 | MCASP7_AFSX | | | + |P9_24B |0x00011C1E0 | PADCONFIG120 | Y5 | SPI1_D0 | UART5_RTSn | I2C4_SCL | UART2_TXD | | | | GPIO0_119 | PRG0_IEP1_EDC_LATCH_IN0 | | | | | | | + |P9_25A |0x00011C200 | PADCONFIG128 | AC4 | UART1_CTSn | MCAN3_RX | | | SPI2_D0 | EQEP0_S | | GPIO0_127 | | | | | | | | + |P9_25B |0x00011C1A4 | PADCONFIG105 | W26 | RGMII6_RXC | | | AUDIO_EXT_REFCLK2 | VOUT1_DE | TRC_DATA17 | EHRPWM4_B | GPIO0_104 | GPMC0_A20 | VOUT1_VP0_DE | | | MCASP10_AXR7 | | | + |P9_26A |0x00011C030 | PADCONFIG12 | AF24 | PRG1_PRU0_GPO11 | PRG1_PRU0_GPI11 | PRG1_RGMII1_TD0 | PRG1_PWM3_TZ_OUT | RGMII1_TD0 | | MCAN4_TX | GPIO0_12 | | RGMII7_TD0 | VOUT0_DATA16 | VPFE0_DATA0 | MCASP7_ACLKX | | | + |P9_27A |0x00011C0BC | PADCONFIG47 | AD26 | PRG0_PRU0_GPO3 | PRG0_PRU0_GPI3 | PRG0_RGMII1_RD3 | PRG0_PWM3_A2 | RGMII3_RD3 | RMII3_RX_ER | | GPIO0_46 | UART3_TXD | | | | MCASP0_AFSR | | | + |P9_27B |0x00011C1F4 | PADCONFIG125 | AB1 | UART0_RTSn | TIMER_IO7 | SPI0_CS3 | MCAN2_TX | SPI2_CLK | EQEP0_B | | GPIO0_124 | | | | | | | | + |P9_28A |0x00011C230 | PADCONFIG140 | U2 | ECAP0_IN_APWM_OUT | SYNC0_OUT | CPTS0_RFT_CLK | | SPI2_CS3 | I3C0_SDAPULLEN | SPI7_CS0 | GPIO1_11 | | | | | | | | + |P9_28B |0x00011C0B0 | PADCONFIG44 | AF28 | PRG0_PRU0_GPO0 | PRG0_PRU0_GPI0 | PRG0_RGMII1_RD0 | PRG0_PWM3_A0 | RGMII3_RD0 | RMII3_RXD1 | | GPIO0_43 | | | | | MCASP0_AXR0 | | | + |P9_29A |0x00011C0D8 | PADCONFIG54 | AB25 | PRG0_PRU0_GPO10 | PRG0_PRU0_GPI10 | PRG0_UART0_RTSn | PRG0_PWM2_B1 | SPI3_CS2 | PRG0_IEP0_EDIO_DATA_IN_OUT29 | MCAN10_RX | GPIO0_53 | GPMC0_AD4 | | | | MCASP0_AFSX | | | + |P9_29B |0x00011C23C | PADCONFIG143 | V5 | TIMER_IO1 | ECAP2_IN_APWM_OUT | OBSCLK0 | | | | SPI7_D1 | GPIO1_14 | | | | | | | | BOOTMODE5 + |P9_30A |0x00011C0B4 | PADCONFIG45 | AE28 | PRG0_PRU0_GPO1 | PRG0_PRU0_GPI1 | PRG0_RGMII1_RD1 | PRG0_PWM3_B0 | RGMII3_RD1 | RMII3_RXD0 | | GPIO0_44 | | | | | MCASP0_AXR1 | | | + |P9_30B |0x00011C238 | PADCONFIG142 | V6 | TIMER_IO0 | ECAP1_IN_APWM_OUT | SYSCLKOUT0 | | | | SPI7_D0 | GPIO1_13 | | | | | | | | BOOTMODE4 + |P9_31A |0x00011C0D4 | PADCONFIG53 | AB26 | PRG0_PRU0_GPO9 | PRG0_PRU0_GPI9 | PRG0_UART0_CTSn | PRG0_PWM3_TZ_IN | SPI3_CS1 | PRG0_IEP0_EDIO_DATA_IN_OUT28 | MCAN10_TX | GPIO0_52 | GPMC0_AD3 | | | | MCASP0_ACLKX | | UART6_TXD | + |P9_31B |0x00011C234 | PADCONFIG141 | U3 | EXT_REFCLK1 | SYNC1_OUT | | | | | SPI7_CLK | GPIO1_12 | | | | | | | | + |P9_33A |0x00011C0CC | PADCONFIG51 | AC28 | PRG0_PRU0_GPO7 | PRG0_PRU0_GPI7 | PRG0_IEP0_EDC_LATCH_IN1 | PRG0_PWM3_B1 | PRG0_ECAP0_SYNC_IN | | MCAN9_TX | GPIO0_50 | GPMC0_AD1 | | | | MCASP0_AXR5 | | | + |P9_33B |0x04301C140 | WKUP_PADCONFIG80 | K24 | MCU_ADC0_AIN4 | | | | | | | | | | | | | | | + |P9_35A |0x00011C0E0 | PADCONFIG56 | AH27 | PRG0_PRU0_GPO12 | PRG0_PRU0_GPI12 | PRG0_RGMII1_TD1 | PRG0_PWM0_A0 | RGMII3_TD1 | | | GPIO0_55 | | | DSS_FSYNC0 | | MCASP0_AXR8 | | | + |P9_35B |0x04301C148 | WKUP_PADCONFIG82 | K29 | MCU_ADC0_AIN6 | | | | | | | | | | | | | | | + |P9_36A |0x00011C0E4 | PADCONFIG57 | AH29 | PRG0_PRU0_GPO13 | PRG0_PRU0_GPI13 | PRG0_RGMII1_TD2 | PRG0_PWM0_B0 | RGMII3_TD2 | | | GPIO0_56 | | | DSS_FSYNC2 | | MCASP0_AXR9 | | | + |P9_36B |0x04301C144 | WKUP_PADCONFIG81 | K27 | MCU_ADC0_AIN5 | | | | | | | | | | | | | | | + |P9_37A |0x00011C0E8 | PADCONFIG58 | AG28 | PRG0_PRU0_GPO14 | PRG0_PRU0_GPI14 | PRG0_RGMII1_TD3 | PRG0_PWM0_A1 | RGMII3_TD3 | | | GPIO0_57 | UART4_RXD | | | | MCASP0_AXR10 | | | + |P9_37B |0x04301C138 | WKUP_PADCONFIG78 | K28 | MCU_ADC0_AIN2 | | | | | | | | | | | | | | | + |P9_38A |0x00011C0EC | PADCONFIG59 | AG27 | PRG0_PRU0_GPO15 | PRG0_PRU0_GPI15 | PRG0_RGMII1_TX_CTL | PRG0_PWM0_B1 | RGMII3_TX_CTL | | | GPIO0_58 | UART4_TXD | | DSS_FSYNC3 | | MCASP0_AXR11 | | | + |P9_38B |0x04301C13C | WKUP_PADCONFIG79 | L28 | MCU_ADC0_AIN3 | | | | | | | | | | | | | | | + |P9_39A |0x04301C130 | WKUP_PADCONFIG76 | K25 | MCU_ADC0_AIN0 | | | | | | | | | | | | | | | + |P9_39B |0x00011C0DC | PADCONFIG55 | AJ28 | PRG0_PRU0_GPO11 | PRG0_PRU0_GPI11 | PRG0_RGMII1_TD0 | PRG0_PWM3_TZ_OUT | RGMII3_TD0 | | | GPIO0_54 | | CLKOUT | | | MCASP0_AXR7 | | | + |P9_40A |0x00011C148 | PADCONFIG82 | AA26 | PRG0_PRU1_GPO18 | PRG0_PRU1_GPI18 | PRG0_IEP1_EDC_LATCH_IN0 | PRG0_PWM1_TZ_IN | SPI3_D0 | | MCAN12_TX | GPIO0_81 | GPMC0_AD14 | | | | MCASP2_AFSX | | UART2_RXD | + |P9_40B |0x04301C134 | WKUP_PADCONFIG77 | K26 | MCU_ADC0_AIN1 | | | | | | | | | | | | | | | + |P9_41 |0x00011C204 | PADCONFIG129 | AD5 | UART1_RTSn | MCAN3_TX | | | SPI2_D1 | EQEP0_I | | GPIO1_0 | | | | | | | | + |P9_42A |0x00011C1F0 | PADCONFIG124 | AC2 | UART0_CTSn | TIMER_IO6 | SPI0_CS2 | MCAN2_RX | SPI2_CS0 | EQEP0_A | | GPIO0_123 | | | | | | | | + |P9_42B |0x00011C04C | PADCONFIG19 | AJ21 | PRG1_PRU0_GPO17 | PRG1_PRU0_GPI17 | PRG1_IEP0_EDC_SYNC_OUT1 | PRG1_PWM0_B2 | | RMII5_TXD1 | MCAN5_TX | GPIO0_18 | | | | VPFE0_DATA6 | MCASP3_AXR3 | | | | .. _power-jack: @@ -390,4 +391,4 @@ board. To use this, a connector will need to be soldered onto the board. If you need the JTAG connector you can solder it on yourself. No other components are needed. The connector is made by Samtec and the part -number is FTR-110-03-G-D-06. You can purchase it from `www.digikey.com <http://www.digikey.com/>`_ \ No newline at end of file +number is FTR-110-03-G-D-06. You can purchase it from `www.digikey.com <http://www.digikey.com/>`_ diff --git a/boards/pocketbeagle/original/index.rst b/boards/pocketbeagle/original/index.rst index a1e39ded..47e5cc18 100644 --- a/boards/pocketbeagle/original/index.rst +++ b/boards/pocketbeagle/original/index.rst @@ -18,19 +18,17 @@ making PocketBeagle the ideal development board for beginners and professionals :height: 400 :alt: PocketBeagle - - .. toctree:: :maxdepth: 1 - /boards/boards/pocketbeagle/original/ch01.rst - /boards/boards/pocketbeagle/original/ch02.rst - /boards/boards/pocketbeagle/original/ch03.rst - /boards/boards/pocketbeagle/original/ch04.rst - /boards/boards/pocketbeagle/original/ch05.rst - /boards/boards/pocketbeagle/original/ch06.rst - /boards/boards/pocketbeagle/original/ch07.rst - /boards/boards/pocketbeagle/original/ch08.rst - /boards/boards/pocketbeagle/original/ch09.rst - /boards/boards/pocketbeagle/original/ch10.rst - /boards/boards/pocketbeagle/original/ch11.rst + /boards/pocketbeagle/original/ch01.rst + /boards/pocketbeagle/original/ch02.rst + /boards/pocketbeagle/original/ch03.rst + /boards/pocketbeagle/original/ch04.rst + /boards/pocketbeagle/original/ch05.rst + /boards/pocketbeagle/original/ch06.rst + /boards/pocketbeagle/original/ch07.rst + /boards/pocketbeagle/original/ch08.rst + /boards/pocketbeagle/original/ch09.rst + /boards/pocketbeagle/original/ch10.rst + /boards/pocketbeagle/original/ch11.rst diff --git a/books/beaglebone-cookbook/10parts/parts.rst b/books/beaglebone-cookbook/10parts/parts.rst index ea216041..2e6e6faf 100644 --- a/books/beaglebone-cookbook/10parts/parts.rst +++ b/books/beaglebone-cookbook/10parts/parts.rst @@ -3,7 +3,8 @@ Parts and Suppliers #################### -// Do we really need this? +.. note:: + #TODO#: (Mark) Do we really need this? (Jason) Yeah, I think it is helpful. Parts ---------- @@ -108,11 +109,11 @@ If you don't need an entire kit of resistors, you can order a la carte from a nu `RadioShack has 5-packs <http://shack.net/1E5NoIC>`_, and DigiKey has more than a quarter million `through-hole resistors <http://bit.ly/1C6WQjZ>`_ at good prices, but make sure you are ordering the right one. -You can find the 10 k trimpot (or variable resistor) at `SparkFun <http://bit.ly/18ACvpm>`_, -`Adafruit <http://bit.ly/1NKg1Tv>`_, or `RadioShack <http://shack.net/1Ag286e>`_. +You can find the 10 k trimpot (or variable resistor) at `SparkFun 10k POT <http://bit.ly/18ACvpm>`_, +`Adafruit 10k POT <http://bit.ly/1NKg1Tv>`_, or `RadioShack 10k POT <http://shack.net/1Ag286e>`_. Flex resistors (sometimes called *flex sensors* or *bend sensors*) are available at -`SparkFun <http://bit.ly/1Br7HD2>`_ and `Adafruit <http://bit.ly/1HCGoql>`_. +`SparkFun flex resistors <http://bit.ly/1Br7HD2>`_ and `Adafruit flex resistors <http://bit.ly/1HCGoql>`_. .. _app_transistor: @@ -120,13 +121,13 @@ Transistors and Diodes ----------------------- The `2N3904 <http://bit.ly/1B4J8H4>`_ is a common NPN transistor that you can get almost anywhere. -Even `Amazon <http://amzn.to/1AjvcsD>`_ has it. `Adafruit <http://bit.ly/1b2dgxT>`_ has a nice 10-pack. -`SparkFun <http://bit.ly/1GrZj5P>`_ lets you buy them one at a time. `DigiKey <http://bit.ly/1GF8H9K>`_ +Even `Amazon NPN transitor <http://amzn.to/1AjvcsD>`_ has it. `Adafruit NPN transitor <http://bit.ly/1b2dgxT>`_ has a nice 10-pack. +`SparkFun NPN transitor <http://bit.ly/1GrZj5P>`_ lets you buy them one at a time. `DigiKey NPN transitor <http://bit.ly/1GF8H9K>`_ will gladly sell you 100,000. -The `1N4001 <http://bit.ly/1EbRzF6>`_ is a popular 1A diode. Buy one at `SparkFun <http://bit.ly/1Ajw54G>`_, -10 at `Adafruit <http://bit.ly/1Gs05zP>`_, 25 at `RadioShack <http://shack.net/1E5OTXi>`_, -or 40,000 at `DigiKey <http://bit.ly/18ADlT2>`_. +The `1N4001 <http://bit.ly/1EbRzF6>`_ is a popular 1A diode. Buy one at `SparkFun diode <http://bit.ly/1Ajw54G>`_, +10 at `Adafruit diode <http://bit.ly/1Gs05zP>`_, 25 at `RadioShack diode <http://shack.net/1E5OTXi>`_, +or 40,000 at `DigiKey diode <http://bit.ly/18ADlT2>`_. .. _app_ic: @@ -134,23 +135,23 @@ Integrated Circuits --------------------- The PCA9306 is a small integrated circuit (IC) that converts voltage levels between 3.3 V and 5 V. You can get it -cheaply in large quantities from `DigiKey <http://bit.ly/1Fb8REd>`_, but it's in a very small, hard-to-use, surface-mount -package. Instead, you can get it from `SparkFun on a Breakout board <http://bit.ly/19ceTsd>`_, which plugs into a breadboard. +cheaply in large quantities from `DigiKey PCA9306 <http://bit.ly/1Fb8REd>`_, but it's in a very small, hard-to-use, surface-mount +package. Instead, you can get it from `SparkFun PCA9306 on a Breakout board <http://bit.ly/19ceTsd>`_, which plugs into a breadboard. The L293D is an `H-bridge IC <http://bit.ly/1wujQqk>`_ with which you can control large loads (such as motors) in -both directions. `SparkFun <http://bit.ly/18bXChR>`_, `Adafruit <http://bit.ly/1xd43Yh>`_, and -`DigiKey <http://bit.ly/18bXKOk>`_ all have it in a DIP package that easily plugs into a breadboard. +both directions. `SparkFun L393D <http://bit.ly/18bXChR>`_, `Adafruit L393D <http://bit.ly/1xd43Yh>`_, and +`DigiKey L393D <http://bit.ly/18bXKOk>`_ all have it in a DIP package that easily plugs into a breadboard. The ULN2003 is a 7 darlington NPN transistor IC array used to drive motors one way. You can get it from -`DigiKey <http://bit.ly/1D5UQIB>`_. A possible substitution is ULN2803 available from -`SparkFun <http://bit.ly/1xd4oKy>`_ and `Adafruit <http://bit.ly/1EXWhaU>`_. +`DigiKey ULN2003 <http://bit.ly/1D5UQIB>`_. A possible substitution is ULN2803 available from +`SparkFun ULN2003 <http://bit.ly/1xd4oKy>`_ and `Adafruit ULN2003 <http://bit.ly/1EXWhaU>`_. The TMP102 is an I^2^C-based digital temperature sensor. You can buy them in bulk from -`DigiKey <http://bit.ly/1EA02Vx>`_, but it's too small for a breadboard. `SparkFun <http://bit.ly/1GFafAE>`_ +`DigiKey TMP102 <http://bit.ly/1EA02Vx>`_, but it's too small for a breadboard. `SparkFun TMP102 <http://bit.ly/1GFafAE>`_ sells it on a breakout board that works well with a breadboard. The DS18B20 is a one-wire digital temperature sensor that looks like a three-terminal transistor. -Both `SparkFun <http://bit.ly/1Fba7Hv>`_ and `Adafruit <http://bit.ly/1EbSYvC>`_ carry it. +Both `SparkFun DS18B20 <http://bit.ly/1Fba7Hv>`_ and `Adafruit DS18B20 <http://bit.ly/1EbSYvC>`_ carry it. .. _app_opto: @@ -158,11 +159,11 @@ Opto-Electronics ----------------- `LEDs <http://bit.ly/1BwZvQj>`_ are *light-emitting diodes*. LEDs come in a wide range of colors, -brightnesses, and styles. You can get a basic red LED at `SparkFun <http://bit.ly/1GFaHPi>`_, -`Adafuit <http://bit.ly/1GFaH1M>`_, `RadioShack <http://shack.net/1KWVVGE>`_, and `DigiKey <http://bit.ly/1b2f2PD>`_. +brightnesses, and styles. You can get a basic red LED at `SparkFun red LED <http://bit.ly/1GFaHPi>`_, +`Adafuit red LED <http://bit.ly/1GFaH1M>`_, `RadioShack red LED <http://shack.net/1KWVVGE>`_, and `DigiKey red LED <http://bit.ly/1b2f2PD>`_. Many places carry bicolor LED matrices, but be sure to get one with an I^2^C interface. -`Adafruit <http://bit.ly/18AENVn>`_ is where I got mine. +`Adafruit LED matrix <http://bit.ly/18AENVn>`_ is where I got mine. .. _app_capes: @@ -170,7 +171,7 @@ Capes ------ There are a number of sources for capes for BeagleBone Black. -`BeagleBoard.org <http://bit.ly/1AjlXJ9>`_ keeps a current list. +`eLinux.org BeagleBoard.org capes page <http://bit.ly/1AjlXJ9>`_ keeps a current list. .. _app_misc: @@ -185,83 +186,83 @@ Here are some things that don't fit in the other categories. .. table:: +-----------------------------------------------------+---------------------------------------------------------------------------+ - | 3.3 V FTDI cable | `SparkFun <http://bit.ly/1FMeXsG>`_, | - | | `Adafruit <http://bit.ly/18AF1Mm>`_ | + | 3.3 V FTDI cable | `SparkFun FTDI cable <http://bit.ly/1FMeXsG>`_, | + | | `Adafruit FTDI cable <http://bit.ly/18AF1Mm>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | USB WiFi adapter | `Adafruit <http://www.adafruit.com/products/814>`_ | + | USB WiFi adapter | `Adafruit WiFi adapter <http://www.adafruit.com/products/814>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Female HDMI to male microHDMI adapter | `Amazon <http://amzn.to/1C5BcLp>`_ | + | Female HDMI to male microHDMI adapter | `Amazon HDMI to microHDMI adapter <http://amzn.to/1C5BcLp>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | HDMI cable | `SparkFun <https://www.sparkfun.com/products/11572>`_ | + | HDMI cable | `SparkFun HDMI cable <https://www.sparkfun.com/products/11572>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Micro HDMI to HDMI cable | `Adafruit <http://www.adafruit.com/products/1322>`_ | + | Micro HDMI to HDMI cable | `Adafruit HDMI to microHDMI cable <http://www.adafruit.com/products/1322>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | HDMI to DVI Cable | `SparkFun <https://www.sparkfun.com/products/12612>`_ | + | HDMI to DVI Cable | `SparkFun HDMI to DVI cable <https://www.sparkfun.com/products/12612>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | HDMI monitor | `Amazon <http://amzn.to/1B4MABD>`_ | + | HDMI monitor | `Amazon HDMI monitor <http://amzn.to/1B4MABD>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Powered USB hub | `Amazon <http://amzn.to/1NKm2zB>`_, | - | | `Adafruit <http://www.adafruit.com/products/961>`_ | + | Powered USB hub | `Amazon power USB hub <http://amzn.to/1NKm2zB>`_, | + | | `Adafruit power USB hub <http://www.adafruit.com/products/961>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Keyboard with USB hub | `Amazon <http://amzn.to/1FbblSX>`_ | + | Keyboard with USB hub | `Amazon keyboard with USB hub <http://amzn.to/1FbblSX>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Soldering iron | `SparkFun <http://bit.ly/1FMfUkP>`_, | - | | `Adafruit <http://bit.ly/1EXZ6J1>`_ | + | Soldering iron | `SparkFun soldering iron <http://bit.ly/1FMfUkP>`_, | + | | `Adafruit soldering iron <http://bit.ly/1EXZ6J1>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Oscilloscope | `Adafruit <https://www.adafruit.com/products/468>`_ | + | Oscilloscope | `Adafruit oscilloscope <https://www.adafruit.com/products/468>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Multimeter | `SparkFun <http://bit.ly/1C5BUbu>`_, | - | | `Adafruit <http://bit.ly/1wXX3np>`_ | + | Multimeter | `SparkFun multimeter <http://bit.ly/1C5BUbu>`_, | + | | `Adafruit multimeter <http://bit.ly/1wXX3np>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | PowerSwitch Tail II | `SparkFun <http://bit.ly/1Ag5bLP>`_, | - | | `Adafruit <http://bit.ly/1wXX8aF>`_ | + | PowerSwitch Tail II | `SparkFun PowerSwitch Tail II <http://bit.ly/1Ag5bLP>`_, | + | | `Adafruit PowerSwitch Tail II <http://bit.ly/1wXX8aF>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Servo motor | `SparkFun <http://bit.ly/1C72cvw>`_, | - | | `Adafruit <http://bit.ly/1HCPQdl>`_ | + | Servo motor | `SparkFun servo motor <http://bit.ly/1C72cvw>`_, | + | | `Adafruit servo motor <http://bit.ly/1HCPQdl>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | 5 V power supply | `SparkFun <http://bit.ly/1C72q5C>`_, | - | | `Adafruit <http://bit.ly/18c0n2D>`_ | + | 5 V power supply | `SparkFun 5V power supply <http://bit.ly/1C72q5C>`_, | + | | `Adafruit 5V power supply <http://bit.ly/18c0n2D>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | 3 V to 5 V motor | `SparkFun <http://bit.ly/1b2g65Y>`_, | - | | `Adafruit <http://bit.ly/1C72DWF>`_ | + | 3 V to 5 V motor | `SparkFun 3V-5V motor <http://bit.ly/1b2g65Y>`_, | + | | `Adafruit 3V-5V motor <http://bit.ly/1C72DWF>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | 3 V to 5 V bipolar stepper motor | `SparkFun <http://bit.ly/1Bx2hVU>`_, | - | | `Adafruit <http://bit.ly/18c0HhV>`_ | + | 3 V to 5 V bipolar stepper motor | `SparkFun 3V-5V bipolar stepper motor <http://bit.ly/1Bx2hVU>`_, | + | | `Adafruit 3V-5V bipolar stepper motor <http://bit.ly/18c0HhV>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | 3 V to 5 V unipolar stepper motor | `Adafruit <http://www.adafruit.com/products/858>`_ | + | 3 V to 5 V unipolar stepper motor | `Adafruit 3V-5V unipolar stepper motor <http://www.adafruit.com/products/858>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Pushbutton switch | `SparkFun <http://bit.ly/1AjDf90>`_, | - | | `Adafruit <http://bit.ly/1b2glhw>`_ | + | Pushbutton switch | `SparkFun pushbutton switch <http://bit.ly/1AjDf90>`_, | + | | `Adafruit pushbutton switch <http://bit.ly/1b2glhw>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Magnetic reed switch | `SparkFun <https://www.sparkfun.com/products/8642>`_ | + | Magnetic reed switch | `SparkFun magnetic reed switch <https://www.sparkfun.com/products/8642>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | LV-MaxSonar-EZ1 Sonar Range Finder | `SparkFun <http://bit.ly/1C73dDH>`_, | - | | `Amazon <http://amzn.to/1wXXvlP>`_ | + | LV-MaxSonar-EZ1 Sonar Range Finder | `SparkFun LV-MaxSonar-EZ1 <http://bit.ly/1C73dDH>`_, | + | | `Amazon LV-MaxSonar-EZ1 <http://amzn.to/1wXXvlP>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | HC-SR04 Ultrsonic Range Sensor | `Amazon <http://amzn.to/1FbcPNa>`_ | + | HC-SR04 Ultrsonic Range Sensor | `Amazon HC-SR04 <http://amzn.to/1FbcPNa>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Rotary encoder | `SparkFun <http://bit.ly/1D5ZypK>`_, | - | | `Adafruit <http://bit.ly/1D5ZGp3>`_ | + | Rotary encoder | `SparkFun rotary encoder <http://bit.ly/1D5ZypK>`_, | + | | `Adafruit rotary encoder <http://bit.ly/1D5ZGp3>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | GPS receiver | `SparkFun <http://bit.ly/1EA2sn0>`_, | - | | `Adafruit <http://bit.ly/1MrS2VV>`_ | + | GPS receiver | `SparkFun GPS <http://bit.ly/1EA2sn0>`_, | + | | `Adafruit GPS <http://bit.ly/1MrS2VV>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | BLE USB dongle | `Adafruit <http://www.adafruit.com/products/1327>`_ | + | BLE USB dongle | `Adafruit BLE USB dongle <http://www.adafruit.com/products/1327>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | SensorTag | `DigiKey <http://bit.ly/18AGPVt>`_, | - | | `Amazon <http://amzn.to/1EA2B9U>`_, | - | | `TI <https://store.ti.com/CC2541-SensorTag-Development-Kit-P3192.aspx>`_ | + | SensorTag | `DigiKey SensorTag <http://bit.ly/18AGPVt>`_, | + | | `Amazon SensorTag <http://amzn.to/1EA2B9U>`_, | + | | `TI SensorTag <https://store.ti.com/CC2541-SensorTag-Development-Kit-P3192.aspx>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Syba SD-CM-UAUD USB Stereo Audio Adapter | `Amazon <http://amzn.to/1EA2GdI>`_ | + | Syba SD-CM-UAUD USB Stereo Audio Adapter | `Amazon USB audio adapter <http://amzn.to/1EA2GdI>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Sabrent External Sound Box USB-SBCV | `Amazon <http://amzn.to/1C74kTU>`_ | + | Sabrent External Sound Box USB-SBCV | `Amazon USB audio adapter (alt) <http://amzn.to/1C74kTU>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Vantec USB External 7.1 Channel Audio Adapter | `Amazon <http://amzn.to/19cinev>`_ | + | Vantec USB External 7.1 Channel Audio Adapter | `Amazon USB audio adapter (alt2) <http://amzn.to/19cinev>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | Nokia 5110 LCD | `Adafruit <http://bit.ly/1Ag6LgG>`_, | - | | `SparkFun <http://bit.ly/19cizdu>`_ | + | Nokia 5110 LCD | `Adafruit 5110 LCD <http://bit.ly/1Ag6LgG>`_, | + | | `SparkFun 5110 LCD <http://bit.ly/19cizdu>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | BeagleBone LCD7 | `eLinux <http://elinux.org/CircuitCo:BeagleBone_LCD7#Distributors>`_ | + | BeagleBone LCD7 | `eLinux LCD7 <http://elinux.org/CircuitCo:BeagleBone_LCD7#Distributors>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ - | MiniDisplay Cape | `eLinux <http://elinux.org/CircuitCo:MiniDisplay_Cape>`_ | + | MiniDisplay Cape | `eLinux minidisplay <http://elinux.org/CircuitCo:MiniDisplay_Cape>`_ | +-----------------------------------------------------+---------------------------------------------------------------------------+ diff --git a/books/beaglebone-cookbook/index.rst b/books/beaglebone-cookbook/index.rst index f8f394ae..ebc0977f 100644 --- a/books/beaglebone-cookbook/index.rst +++ b/books/beaglebone-cookbook/index.rst @@ -22,3 +22,4 @@ A cookbook for programming Beagles 07kernel/kernel.rst 08realtime/realtime.rst 09capes/capes.rst + 10parts/parts.rst diff --git a/books/pru-cookbook/03details/code/am335x_pru.cmd b/books/pru-cookbook/03details/code/am335x_pru.cmd new file mode 100644 index 00000000..67005475 --- /dev/null +++ b/books/pru-cookbook/03details/code/am335x_pru.cmd @@ -0,0 +1,87 @@ +/****************************************************************************/ +/* AM335x_PRU.cmd */ +/* Copyright (c) 2015 Texas Instruments Incorporated */ +/* */ +/* Description: This file is a linker command file that can be used for */ +/* linking PRU programs built with the C compiler and */ +/* the resulting .out file on an AM335x device. */ +/****************************************************************************/ + +-cr /* Link using C conventions */ + +/* Specify the System Memory Map */ +MEMORY +{ + PAGE 0: + PRU_IMEM : org = 0x00000000 len = 0x00002000 /* 8kB PRU0 Instruction RAM */ + + PAGE 1: + + /* RAM */ + + PRU_DMEM_0_1 : org = 0x00000000 len = 0x00002000 CREGISTER=24 /* 8kB PRU Data RAM 0_1 */ + PRU_DMEM_1_0 : org = 0x00002000 len = 0x00002000 CREGISTER=25 /* 8kB PRU Data RAM 1_0 */ + + PAGE 2: + PRU_SHAREDMEM : org = 0x00010000 len = 0x00003000 CREGISTER=28 /* 12kB Shared RAM */ + + DDR : org = 0x80000000 len = 0x00000100 CREGISTER=31 + L3OCMC : org = 0x40000000 len = 0x00010000 CREGISTER=30 + + + /* Peripherals */ + + PRU_CFG : org = 0x00026000 len = 0x00000044 CREGISTER=4 + PRU_ECAP : org = 0x00030000 len = 0x00000060 CREGISTER=3 + PRU_IEP : org = 0x0002E000 len = 0x0000031C CREGISTER=26 + PRU_INTC : org = 0x00020000 len = 0x00001504 CREGISTER=0 + PRU_UART : org = 0x00028000 len = 0x00000038 CREGISTER=7 + + DCAN0 : org = 0x481CC000 len = 0x000001E8 CREGISTER=14 + DCAN1 : org = 0x481D0000 len = 0x000001E8 CREGISTER=15 + DMTIMER2 : org = 0x48040000 len = 0x0000005C CREGISTER=1 + PWMSS0 : org = 0x48300000 len = 0x000002C4 CREGISTER=18 + PWMSS1 : org = 0x48302000 len = 0x000002C4 CREGISTER=19 + PWMSS2 : org = 0x48304000 len = 0x000002C4 CREGISTER=20 + GEMAC : org = 0x4A100000 len = 0x0000128C CREGISTER=9 + I2C1 : org = 0x4802A000 len = 0x000000D8 CREGISTER=2 + I2C2 : org = 0x4819C000 len = 0x000000D8 CREGISTER=17 + MBX0 : org = 0x480C8000 len = 0x00000140 CREGISTER=22 + MCASP0_DMA : org = 0x46000000 len = 0x00000100 CREGISTER=8 + MCSPI0 : org = 0x48030000 len = 0x000001A4 CREGISTER=6 + MCSPI1 : org = 0x481A0000 len = 0x000001A4 CREGISTER=16 + MMCHS0 : org = 0x48060000 len = 0x00000300 CREGISTER=5 + SPINLOCK : org = 0x480CA000 len = 0x00000880 CREGISTER=23 + TPCC : org = 0x49000000 len = 0x00001098 CREGISTER=29 + UART1 : org = 0x48022000 len = 0x00000088 CREGISTER=11 + UART2 : org = 0x48024000 len = 0x00000088 CREGISTER=12 + + RSVD10 : org = 0x48318000 len = 0x00000100 CREGISTER=10 + RSVD13 : org = 0x48310000 len = 0x00000100 CREGISTER=13 + RSVD21 : org = 0x00032400 len = 0x00000100 CREGISTER=21 + RSVD27 : org = 0x00032000 len = 0x00000100 CREGISTER=27 + +} + +/* Specify the sections allocation into memory */ +SECTIONS { + /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading + an ELF file, but useful when loading a binary */ + .text:_c_int00* > 0x0, PAGE 0 + + .text > PRU_IMEM, PAGE 0 + .stack > PRU_DMEM_0_1, PAGE 1 + .bss > PRU_DMEM_0_1, PAGE 1 + .cio > PRU_DMEM_0_1, PAGE 1 + .data > PRU_DMEM_0_1, PAGE 1 + .switch > PRU_DMEM_0_1, PAGE 1 + .sysmem > PRU_DMEM_0_1, PAGE 1 + .cinit > PRU_DMEM_0_1, PAGE 1 + .rodata > PRU_DMEM_0_1, PAGE 1 + .rofardata > PRU_DMEM_0_1, PAGE 1 + .farbss > PRU_DMEM_0_1, PAGE 1 + .fardata > PRU_DMEM_0_1, PAGE 1 + + .resource_table > PRU_DMEM_0_1, PAGE 1 + .init_pins > PRU_DMEM_0_1, PAGE 1 +} \ No newline at end of file diff --git a/books/pru-cookbook/03details/details.rst b/books/pru-cookbook/03details/details.rst index d7ba2058..24aa20a4 100644 --- a/books/pru-cookbook/03details/details.rst +++ b/books/pru-cookbook/03details/details.rst @@ -8,9 +8,9 @@ Fortunately those details are captured in a common `Makefile` that is used througout this book. This chapter shows how to use the `Makefile` to compile code and also start and stop the PRUs. -The following are resources used in this chapter. - .. note:: + The following are resources used in this chapter: + * `PRU Code Generation Tools - Compiler <http://software-dl.ti.com/codegen/esd/cgt_ai_64_lic_sw/PRU/2.1.5/ti_cgt_pru_2.1.5_armlinuxa8hf_busybox_installer.sh>`_ * `PRU Software Support Package <http://git.ti.com/pru-software-support-package>`_ * `PRU Optimizing C/C++ Compiler <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ @@ -18,6 +18,7 @@ The following are resources used in this chapter. * `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) * `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) + Getting Example Code ===================== @@ -260,7 +261,7 @@ It's easy, if you already have ``TARGET`` set up: - Starting PRU 0 start -See :ref:`_dmesg_hw` to see how to tell if the PRU +See :ref:`dmesg_hw` to see how to tell if the PRU is stopped. This assumes ``TARGET`` is set to the PRU you are using. @@ -350,7 +351,7 @@ AM335x_PRU.cmd important things |Line | Explanation | +=====+=========================================================================================+ |16 | This is where the instructions are stored. See page 206 of the | - | | `AM335x Technical Reference Manual <https://www.ti.com/lit/ug/spruh73p/spruh73p.pdf>`_ | + | | `AM335x Technical Reference Manual rev. P <https://www.ti.com/lit/ug/spruh73p/spruh73p.pdf>`_ | | | Or see page 417 of | | | `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ for the AI. | +-----+-----------------------------------------------------------------------------------------+ diff --git a/projects/simppru/examples/index.rst b/projects/simppru/examples/index.rst index d5d5fcf6..0b1b49e1 100644 --- a/projects/simppru/examples/index.rst +++ b/projects/simppru/examples/index.rst @@ -26,6 +26,7 @@ These are the examples which have been tested on simpPRU.These examples will ser led_blink_for.rst led_blink_while.rst led_blink.rst + led_blink_counter.rst read_counter.rst rpmsg_example.rst rpmsg_pru_calculator.rst -- GitLab From ef4f094b1460f00cabb2ba82932ad4eccaf2914b Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 10:01:47 -0400 Subject: [PATCH 18/83] WIP reorganize * List all boards in top-level ToC * Fix BeagleConnect headings and general clean-up --- boards/beagleboard/index.rst | 2 +- boards/beaglebone/index.rst | 16 +-- boards/beagleconnect/freedom/index.rst | 82 +++++++------- boards/beagleconnect/freedom/usage.rst | 124 ++++++++++++---------- boards/beagleconnect/freedom/zephyr.rst | 25 +++-- boards/beagleconnect/technology/index.rst | 6 +- index.rst | 11 +- projects/index.rst | 4 +- 8 files changed, 135 insertions(+), 135 deletions(-) diff --git a/boards/beagleboard/index.rst b/boards/beagleboard/index.rst index f17a613c..beb56cd1 100644 --- a/boards/beagleboard/index.rst +++ b/boards/beagleboard/index.rst @@ -1,4 +1,4 @@ -BeagleBoard +BeagleBoard (all) ################### BeagleBoard boards are low-cost, ARM-based development boards suitable for rapid prototyping and diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index f67b8752..958bf1fb 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -1,4 +1,4 @@ -BeagleBone +BeagleBone (all) ################### BeagleBone boards are intended to be bare-bones, with a balance of features to enable @@ -19,14 +19,8 @@ with links to their latest PDF-formatted System Reference Manual and the latest included both here and in the downloadable beagleboard-docs.pdf linked on the bottom-left of your screen. -* `BeagleBone (original) <https://git.beagleboard.org/beagleboard/beaglebone/-/blob/master/BeagleBone_SRM_A6_0_1.pdf>`_ - - -.. toctree:: - :maxdepth: 1 - :caption: Boards - - /boards/beaglebone/black/index - /boards/beaglebone/ai-64/index - /boards/beaglebone/blue/index +* `BeagleBone (original) <https://git.beagleboard.org/beagleboard/beaglebone/-/blob/master/BeagleBone_SRM_A6_0_1.pdf>`__ +* `BeagleBone Black </boards/beaglebone/black/index.html>`__ +* `BeagleBone Blue </boards/beaglebone/blue/index.html>`__ +* `BeagleBone AI-64 </boards/beaglebone/ai-64/index.html>`__ diff --git a/boards/beagleconnect/freedom/index.rst b/boards/beagleconnect/freedom/index.rst index 79ce3fec..bd602d22 100644 --- a/boards/beagleconnect/freedom/index.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -1,4 +1,4 @@ -BeagleConnectâ„¢ Freedom +BeagleConnect Freedom ###################### .. image:: media/image1.jpg @@ -7,10 +7,6 @@ BeagleConnectâ„¢ Freedom :height: 400 :alt: BeagleConnect-Freedom-C5-HandPhoto -Important: BeagleConnectâ„¢ Freedom enables wirelessly adding new device nodes -and is targeted to cost initially around US$20 with a roadmap to variants as -low as US$1. - The initial BeagleConnectâ„¢ Freedom production release will: * Support at least 100 mikroBUS-based Click boards from Mikroelectronika @@ -25,41 +21,14 @@ Future releases will be collaborated with the community, evolve dynamically, and contain additional functionality. The goal is to support over 500 add-on devices within the first year after the initial release. -BeagleConnectâ„¢ Freedom beta kit -******************************* - -A small number of beta kits have been assembled with BeagleConnectâ„¢ Freedom -rev C5 boards, which is the version that should be taken to production. - -The kit includes: - -* 1x `Seeed BeagleBone® Green Gateway <https://wiki.seeedstudio.com/BeagleBone-Green-Gateway/>`_ (board, USB cable) -* 3x BeagleConnectâ„¢ Freedom (board, attenna, USB cable) -* 1x `Mikroelectronika Click ID Board <https://www.mikroe.com/unique-id-click>`_ - -To get started with this kit, see [demo-1]. - - -BeagleConnectâ„¢ Mobile Gateway -############################# - -This is a work-in-progress that will be released as the first integrated -BeagleConnectâ„¢ gateway. It is possible to assemble a gateway with any Linux -computer, but this computer will ship setup and ready to go. - -The gateway is built from: - -* BeagleBoard.org PocketBeagle, -* BeagleConnectâ„¢ Freedom, -* a cellular modem, -* a USB WiFi dongle, -* antennas, and -* an enclosure. +.. important:: + BeagleConnectâ„¢ Freedom enables wirelessly adding new device nodes + and is targeted to cost initially around US$20 with a roadmap to variants as + low as US$1. -Architecture -************ BeagleConnectâ„¢ Freedom ********************** + BeagleConnectâ„¢ Freedom is based on the `TI CC1352 <https://www.ti.com/product/CC1352R>`_ and is the first available BeagleConnectâ„¢ solution. It implements: @@ -73,13 +42,30 @@ and is the first available BeagleConnectâ„¢ solution. It implements: #TODO: provide image of BeagleConnectâ„¢ Freedom in a case with a hand for size perspective +BeagleConnectâ„¢ Freedom beta kit +******************************* + +A small number of beta kits have been assembled with BeagleConnectâ„¢ Freedom +rev C5 boards, which is the version that should be taken to production. + +The kit includes: + +* 1x `Seeed BeagleBone® Green Gateway <https://wiki.seeedstudio.com/BeagleBone-Green-Gateway/>`_ (board, USB cable) +* 3x BeagleConnectâ„¢ Freedom (board, attenna, USB cable) +* 1x `Mikroelectronika Click ID Board <https://www.mikroe.com/unique-id-click>`_ + +To get started with this kit, see [demo-1]. + + What makes BeagleConnectâ„¢ new and different? ******************************************** -Important: BeagleConnectâ„¢ solves IoT in a different and better way than any -previous solution. + +.. important:: + BeagleConnectâ„¢ solves IoT in a different and better way than any + previous solution. The device interface software is already done -********************************************* +============================================= BeagleConnectâ„¢ uses the collaboratively developed Linux kernel to contain the intelligence required to speak to these devices (sensors, actuators, and @@ -108,7 +94,7 @@ microcontroller firmware and the Linux kernel, which is highly peer reviewed under a `highly-regarded governance model <https://wiki.p2pfoundation.net/Linux_-_Governance>`_. On-going maintenance -******************** +==================== Because there isn't code specific to any given network-of-devices configuration , we can all leverage the same software code base. This means that when someone @@ -122,7 +108,7 @@ potential for bugs is kept low. With large user base, the potential for discovering and resolving bugs is high. Rapid prototyping without wiring -******************************** +================================ BeagleConnectâ„¢ utilizes the `mikroBUS standard <https://elinux.org/Mikrobus>`_. The mikroBUS standard interface is flexible enough for almost any typical @@ -136,7 +122,7 @@ available Click mikroBUS add-on boards will be supported as well as the hundreds of compliant boards developed every year. Long-range, low-power wireless -****************************** +============================== BeagleConnectâ„¢ Freedom wireless hardware is built around a `TI CC1352 <http://www.ti.com/product/CC1352R>`_ multiprotocol and multi-band @@ -146,7 +132,7 @@ ultra-low leakage SRAM, and `Over-the-Air <https://en.wikipedia.org/wiki/Over-th upgrades (OTA). Full customization possible -*************************** +=========================== BeagleConnectâ„¢ utilizes `open source hardware <https://www.oshwa.org/definition/>`_ and `open source software <https://en.wikipedia.org/wiki/Open-source_software>`_, @@ -171,9 +157,15 @@ Each BeagleBoard.org BeagleConnectâ„¢ solution will be: to secure your own network, and * Fully FCC/CE certified. +Getting Started +*************** + +* `Typical usage with a Linux host </boards/beagleconnect/freedom/usage.html>`__ +* `Programming with Zephyr </boards/beagleconnect/freedom/zephyr.html>`__ + .. toctree:: :maxdepth: 1 + :hidden: usage.rst zephyr.rst - diff --git a/boards/beagleconnect/freedom/usage.rst b/boards/beagleconnect/freedom/usage.rst index 6b71fc20..b55d5dd5 100644 --- a/boards/beagleconnect/freedom/usage.rst +++ b/boards/beagleconnect/freedom/usage.rst @@ -1,122 +1,132 @@ .. _beagleconnect-Usage: -******************** -BeagleConnectâ„¢ Usage -******************** +BeagleConnect Freedom Usage +########################### - - -This section describes the usage model we are developing. To use the current +This section describes the usage model we are developing. To use the current code in development, please refer to the [development] section. -BeagleConnectâ„¢ wireless user experience -####################################### - -Enable a Linux host with BeagleConnectâ„¢ +BeagleConnect wireless user experience *************************************** + +Enable a Linux host with BeagleConnect +======================================= .. image:: media/ProvStep1.jpg :width: 600 :align: center :height: 400 :alt: ProvStep1 -Log into a host system running Linux that is BeagleConnectâ„¢ enabled. Enable a -Linux host with BeagleConnectâ„¢ by plugging a **BeagleConnectâ„¢ gateway device** -into it’s USB port. You’ll also want to have a **BeagleConnectâ„¢ node device** +Log into a host system running Linux that is BeagleConnectâ„¢ enabled. Enable a +Linux host with BeagleConnectâ„¢ by plugging a **BeagleConnectâ„¢ gateway device** +into it’s USB port. You’ll also want to have a **BeagleConnectâ„¢ node device** with a sensor, actuator or indicator device connected. -Note: BeagleConnectâ„¢ Freedom can act as either a BeagleConnectâ„¢ gateway device -or a BeagleConnectâ„¢ node device. +.. note:: + BeagleConnectâ„¢ Freedom can act as either a BeagleConnectâ„¢ gateway device + or a BeagleConnectâ„¢ node device. -Important: The Linux host will need to run the BeagleConnectâ„¢ management -software, most of which is incorporated into the Linux kernel. Support will be -provided for BeagleBoard and BeagleBone boards, x86 hosts, and Raspberry Pi. +.. important:: + The Linux host will need to run the BeagleConnectâ„¢ management + software, most of which is incorporated into the Linux kernel. Support will be + provided for BeagleBoard and BeagleBone boards, x86 hosts, and Raspberry Pi. -TODO: Clean up images +#TODO#: Clean up images Connect host and device -*********************** +======================= + .. image:: media/ProvStep2.jpg :width: 600 :align: center :height: 400 :alt: ProvStep2 -Initiate a connection between the host and devices by pressing the discovery + +Initiate a connection between the host and devices by pressing the discovery button(s). Device data shows up as files -***************************** +============================= + .. image:: media/ProvStep3.jpg :width: 600 :align: center :height: 400 :alt: ProvStep3 -New streams of self-describing data show up on the host system using native + +New streams of self-describing data show up on the host system using native device drivers. -High-level applications, like Node-RED, can directly read/write these -high-level data streams (including data-type information) to Internet-based -`MQTT <https://mqtt.org/>`_ brokers, live dashboards, or other logical -operations without requiring any sensor-specific coding. Business logic can be -applied using simple if-this-then-that style operations or be made as complex +High-level applications, like Node-RED, can directly read/write these +high-level data streams (including data-type information) to Internet-based +`MQTT <https://mqtt.org/>`_ brokers, live dashboards, or other logical +operations without requiring any sensor-specific coding. Business logic can be +applied using simple if-this-then-that style operations or be made as complex as desired using virtually any programming language or environment. Components -########## -BeagleConnectâ„¢ enabled host Linux computer, possibly single-board computer -(SBC), with BeagleConnectâ„¢ management software and BeagleConnectâ„¢ gateway -function. BeagleConnectâ„¢ gateway function can be provided by a BeagleConnectâ„¢ -compatible interface or by connecting a BeagleConnectâ„¢ gateway device over USB. +********** + +BeagleConnectâ„¢ enabled host Linux computer, possibly single-board computer +(SBC), with BeagleConnectâ„¢ management software and BeagleConnectâ„¢ gateway +function. BeagleConnectâ„¢ gateway function can be provided by a BeagleConnectâ„¢ +compatible interface or by connecting a BeagleConnectâ„¢ **gateway** device over USB. -Note: If the Linux host has BLE, the BeagleConnectâ„¢ is optional for short -distances +.. note:: + If the Linux host has BLE, the BeagleConnectâ„¢ **gateway** is optional for short + distances BeagleConnectâ„¢ Freedom Board, case, and wireless MCU with Zephyr based firmware -for acting as either a BeagleConnectâ„¢ gateway device or BeagleConnectâ„¢ node -device. -* In BeagleConnectâ„¢ gateway device mode: Provides long-range, low-power - wireless communications, Connects with the host via USB and an associated - Linux kernel driver, and is powered by the USB connector. -* In BeagleConnectâ„¢ node device mode: Powered by a battery or USB connector - Provides 2 mikroBUS connectors for connecting any of hundreds of `Click Board <https://bbb.io/click>`_ - mikroBUS add-on devices Provides new Linux host controllers for SPI, I2C, +for acting as either a BeagleConnectâ„¢ gateway device or BeagleConnectâ„¢ node +device. + +* In BeagleConnectâ„¢ **gateway** device mode: Provides long-range, low-power + wireless communications, Connects with the host via USB and an associated + Linux kernel driver, and is powered by the USB connector. +* In BeagleConnectâ„¢ **node** device mode: Powered by a battery or USB connector + Provides 2 mikroBUS connectors for connecting any of hundreds of `Click Board <https://bbb.io/click>`_ + mikroBUS add-on devices Provides new Linux host controllers for SPI, I2C, UART, PWM, ADC, and GPIO with interrupts via Greybus -**BeagleConnectâ„¢ gateway device** +BeagleConnect **gateway** device +================================== -Provides a BeagleConnectâ„¢ compatible interface to a host. This could be a +Provides a BeagleConnectâ„¢ compatible interface to a host. This could be a built-in interface device or one connected over USB. BeagleConnectâ„¢ Freedom can provide this function. -**BeagleConnectâ„¢ node device** +BeagleConnect **node** device +============================== Utilizes a BeagleConnectâ„¢ compatible interface and TODO -**BeagleConnectâ„¢ compatible interface** +BeagleConnect compatible interface +================================== Immediate plans are to support Bluetooth Low Energy (BLE), 2.4GHz IEEE 802.15.4 -, and Sub-GHz IEEE 802.15.4 wireless interfaces. A built-in BLE interface is -suitable for this at short range, whereas IEEE 802.15.4 is typically -significantly better at long ranges. Other wired interfaces, such as CAN and -RS-485, are being considered for future BeagleConnectâ„¢ gateway device and +, and Sub-GHz IEEE 802.15.4 wireless interfaces. A built-in BLE interface is +suitable for this at short range, whereas IEEE 802.15.4 is typically +significantly better at long ranges. Other wired interfaces, such as CAN and +RS-485, are being considered for future BeagleConnectâ„¢ gateway device and BeagleConnectâ„¢ node device designs. -**Greybus** +Greybus +------- TODO #TODO: Find a place for the following notes: -* The device interfaces get exposed to the host via Greybus BRIDGED_PHY +* The device interfaces get exposed to the host via Greybus BRIDGED_PHY protocol -* The I2C bus is probed for a an identifier EEPROM and appropriate device +* The I2C bus is probed for a an identifier EEPROM and appropriate device drivers are loaded on the host -* Unsupported Click Boards connected are exposed via userspace drivers on the +* Unsupported Click Boards connected are exposed via userspace drivers on the host for development -What’s different -################ +What’s different? +***************** So, in summary, what is so different with this approach? diff --git a/boards/beagleconnect/freedom/zephyr.rst b/boards/beagleconnect/freedom/zephyr.rst index 8edad82f..2836c00a 100644 --- a/boards/beagleconnect/freedom/zephyr.rst +++ b/boards/beagleconnect/freedom/zephyr.rst @@ -1,11 +1,10 @@ .. _beagleconnect-connectivity: -******************************* -BeagleConnectâ„¢ Freedom & Zephyr -******************************* +BeagleConnect Freedom & Zephyr +############################### -Develop for BeagleConnectâ„¢ Freedom with Zephyr -############################################## +Develop for BeagleConnect Freedom with Zephyr +********************************************** Developing directly in Zephyr will not be ultimately required for end-users who won't touch the firmware running on BeagleConnectâ„¢ Freedom and will instead @@ -15,7 +14,7 @@ source design. If you are one of those people, this is a good place to get started. Equipment to begin development -****************************** +============================== There are many options, but let's get started with one recommended set for the beta users. @@ -55,7 +54,7 @@ Optional Install the latest software image for BeagleBone Green Gateway -************************************************************** +============================================================== Download and install the Debian Linux operating system image for the Seeed BeagleBone® Green Gateway host. @@ -75,7 +74,7 @@ BeagleBone® Green Gateway host. #TODO: describe how to know it is working Log into BeagleBone Green Gateway -********************************* +================================= These instructions assume an x86_64 computer runing Ubuntu 20.04.3 LTS, but any computer can be used to connect to your BeagleBone Green Gateway. @@ -128,7 +127,7 @@ establishment procedure easy. TODO: Simplify and elaborate on this section, add boot session debugging walkthrough Install Zephyr development tools on BeagleBone Green Gateway -************************************************************ +============================================================ #. Update the system. .. code-block:: bash @@ -189,7 +188,7 @@ Install Zephyr development tools on BeagleBone Green Gateway source $HOME/.bashrc Build applications for BeagleConnect Freedom on BeagleBone Green Gateway -************************************************************************ +======================================================================== Now you can build various Zephyr applications @@ -226,7 +225,7 @@ Now you can build various Zephyr applications Flash applications to BeagleConnect Freedom from BeagleBone Green Gateway -************************************************************************* +========================================================================= And then you can flash the BeagleConnect Freedom boards over USB @@ -241,6 +240,6 @@ And then you can flash the BeagleConnect Freedom boards over USB cc2538-bsl.py build/blinky Debug applications over the serial terminal -******************************************* +=========================================== -#TODO +#TODO# diff --git a/boards/beagleconnect/technology/index.rst b/boards/beagleconnect/technology/index.rst index b224c487..3f24588d 100644 --- a/boards/beagleconnect/technology/index.rst +++ b/boards/beagleconnect/technology/index.rst @@ -1,9 +1,9 @@ .. _beagleconnect-overview: -BeagleConnect Overview -####################### +BeagleConnect Technology +######################## -This is the deep-dive introduction to BeagleConnect technology and software +This is the deep-dive introduction to BeagleConnectâ„¢ technology and software architecture. .. note:: diff --git a/index.rst b/index.rst index c98ff056..a3d14cdd 100644 --- a/index.rst +++ b/index.rst @@ -48,9 +48,14 @@ from source using appropriate design tools. :hidden: :caption: Boards - /boards/beaglebone/black/index /boards/beaglebone/ai-64/index - more... </boards/index.rst> + /boards/beaglebone/black/index + /boards/beaglebone/blue/index + /boards/beaglebone/index + /boards/capes/index + /boards/pocketbeagle/original/index + /boards/beagleconnect/freedom/index + /boards/beagleboard/index Projects @@ -65,7 +70,7 @@ developers. Some developers choose to host documentation for their projects `her :caption: Projects /projects/simppru/index - more... </projects/index.rst> + /boards/beagleconnect/technology/index Books ***** diff --git a/projects/index.rst b/projects/index.rst index d86b7bf2..78b5def7 100644 --- a/projects/index.rst +++ b/projects/index.rst @@ -6,5 +6,5 @@ This is a collection of reasonably well-supported projects useful to Beagle deve .. toctree:: :maxdepth: 1 - simppru/index.rst - + /projects/simppru/index.rst + /boards/beagleconnect/technology/index.rst -- GitLab From 4cdd0fc36fd944957863c87d4c7475d2ba84a7c7 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 12:02:10 -0400 Subject: [PATCH 19/83] missed capes index --- boards/capes/index.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 boards/capes/index.rst diff --git a/boards/capes/index.rst b/boards/capes/index.rst new file mode 100644 index 00000000..d2fba272 --- /dev/null +++ b/boards/capes/index.rst @@ -0,0 +1,17 @@ +Capes +##### + +.. note:: + This page is under development. + +Capes are add-on boards for BeagleBone or PocketBeagle families of boards. + +* Learn about our compatibility layer on: `BeagleBone Cape Interface Specification </boards/capes/cape-interface-spec.html>`__ + + +.. toctree:: + :maxdepth: 2 + :hidden: + + /boards/capes/cape-interface-spec + -- GitLab From 86c19c6ad86054dd103ea0968d71f40593ce2a75 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 14:52:31 -0400 Subject: [PATCH 20/83] Link to contribution page in the docs Tried to move the outline over and get some stuff started. This is pretty rough. --- CONTRIBUTING.md | 28 ++++++------------- intro/contribution/index.rst | 53 +++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7946a6f5..5ca37905 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,30 +2,20 @@ **First off, thanks for taking the time to think about contributing!** -The following is a set of guidelines for contributing to docs.beagleboard.io, which is hosted by the BeagleBoard.org Foundation at https://git.beagleboard.org/docs/docs.beagleboard.io. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. +The following is a set of guidelines for contributing to docs.beagleboard.io, which is hosted by +the BeagleBoard.org Foundation at https://git.beagleboard.org/docs/docs.beagleboard.io. These are +mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this +document in a pull request. ## Code of Conduct -This project and everyone participating in it is governed by the [BeagleBoard.org Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [coc@bbb.io](mailto:coc@bbb.io) or contact one of the administrators on https://forum.beagleboard.org. +This project and everyone participating in it is governed by +the [BeagleBoard.org Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to +uphold this code. Please report unacceptable behavior to [coc@bbb.io](mailto:coc@bbb.io) or +contact one of the administrators on https://forum.beagleboard.org. ## FAQ * [Frequently Asked Questions category on the BeagleBoard.org Forum](https://forum.beagleboard.org/c/faq/19) -## What should I know before I get started? - -## How can I contribute? - -### Reporting bugs - -### Suggesting enhancements - -### Submitting pull requests - -## Style guides - -### Git commit messages - -### RST style guide - -## Additional notes +See more at https://docs.beagleboard.org/en/latest/intro/contribution/. diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 3a1cb77a..83fedd49 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -3,7 +3,58 @@ Contribution ############### -.. note:: This section is under developmement right now. +.. note:: + This section is under developmement right now. + +.. important:: + First off, thanks for taking the time to think about contributing! + +The BeagleBoard.org Foundation maintains source for many open source projects. + +Example projects suitable for first contributions: +* `BeagleBoard project documentation <https://git.beagleboard.org/docs/docs.beagleboard.io>`__ +* `Debian image bug repository <https://git.beagleboard.org/beagleboard/Latest-Images>`__ +* `Debian image builder <https://git.beagleboard.org/beagleboard/image-builder>`__ + +These guidelines are mostly suggestions, not hard-set rules. Use your best judgment, and feel free +to propose changes to this document in a pull request. + +Code of Conduct +*************** + +This project and everyone participating in it is governed by +the `BeagleBoard.org Code of Conduct </intro/contribution/code_of_conduct.html>`. By +participating, you are expected to +uphold this code. Please report unacceptable behavior to [coc@bbb.io](mailto:coc@bbb.io) or +contact one of the administrators on https://forum.beagleboard.org. + +## FAQ + +* [Frequently Asked Questions category on the BeagleBoard.org Forum](https://forum.beagleboard.org/c/faq/19) + +What should I know before I get started? +**************************************** + +How can I contribute? +********************* + +Reporting bugs +=============== + +Suggesting enhancements +======================= + +Submitting pull requests +======================== + +Style guides +************ + +* Git commit messages +* `RST style guide </intro/contribution/style.html>`__ + +Additional notes +**************** .. toctree:: :maxdepth: 1 -- GitLab From 0bf25131d8d202fca2b514d308250cfb390080fb Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 15:06:38 -0400 Subject: [PATCH 21/83] link coc and contact to forum --- intro/contribution/index.rst | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 83fedd49..52f8cef2 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -12,6 +12,7 @@ Contribution The BeagleBoard.org Foundation maintains source for many open source projects. Example projects suitable for first contributions: + * `BeagleBoard project documentation <https://git.beagleboard.org/docs/docs.beagleboard.io>`__ * `Debian image bug repository <https://git.beagleboard.org/beagleboard/Latest-Images>`__ * `Debian image builder <https://git.beagleboard.org/beagleboard/image-builder>`__ @@ -22,15 +23,19 @@ to propose changes to this document in a pull request. Code of Conduct *************** -This project and everyone participating in it is governed by -the `BeagleBoard.org Code of Conduct </intro/contribution/code_of_conduct.html>`. By -participating, you are expected to -uphold this code. Please report unacceptable behavior to [coc@bbb.io](mailto:coc@bbb.io) or -contact one of the administrators on https://forum.beagleboard.org. +This project and everyone participating in it is governed by the same code of conduct. + +.. note:: + Check out https://forum.beagleboard.org/faq as a starting place to unify our code of conduct. + +By participating, you are expected to +uphold this code. Please report unacceptable behavior to +contact one of our administrators or moderators on https://forum.beagleboard.org/about. -## FAQ +Frequently Asked Questions +************************** -* [Frequently Asked Questions category on the BeagleBoard.org Forum](https://forum.beagleboard.org/c/faq/19) +* `Frequently asked questions contribution category on the BeagleBoard.org Forum <https://forum.beagleboard.org/c/faq/19>`__ What should I know before I get started? **************************************** -- GitLab From a6cfee69c09ce997d4572ab9fb86684216881dae Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 15:44:57 -0400 Subject: [PATCH 22/83] Update note index about BeagleBoard.org Foundation --- index.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.rst b/index.rst index a3d14cdd..8054b03d 100644 --- a/index.rst +++ b/index.rst @@ -8,9 +8,11 @@ BeagleBoard Documentation Welcome to the `BeagleBoard project documentation <https://git.beagleboard.org/docs/docs.beagleboard.io>`__. -.. note:: BeagleBoard.org is a US-based 501(c)3 non-profit organization providing open hardware +.. note:: + The BeagleBoard.org Foundation is a US-based 501(c)3 non-profit organization providing open hardware computing solutions for a community of makers, educators and professionals that enable - rapid prototyping without barriers to creating real-world embedded systems. + rapid prototyping without barriers to creating real-world embedded systems. The BeagleBoard.org Foundation + supports the BeagleBoard community through efforts like developing this documentation. Introduction ************ -- GitLab From 2a3fa93fcc60a9fbc3c2a6ff1c151c3ed73a205a Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 30 Aug 2022 19:46:02 -0400 Subject: [PATCH 23/83] boards/beaglebone: quick link addition This link won't work on the PDF. :-( --- boards/beaglebone/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index 3956a3bf..4ccbda47 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -10,7 +10,7 @@ embedded Linux single board computer. `BeagleBone AI-64 <ai-64>`__ is our most powerful design with tremendous machine learning inference performance and -For simplicity of developing small, mobile robotics, check out BeagleBone Blue, a highly +For simplicity of developing small, mobile robotics, check out `BeagleBone Blue <blue>`__, a highly integrated board with motor drivers, battery support, altimeter, gyroscope, accelerometer, and much more to get started developing quickly. -- GitLab From 706ab213293f1e6a88a10a40934b6821e063470b Mon Sep 17 00:00:00 2001 From: Deepak Khatri <lorforlinux@beagleboard.org> Date: Wed, 31 Aug 2022 10:39:37 +0530 Subject: [PATCH 24/83] Add 0.0.7 build --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3b6c2965..25ea47e0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,5 +12,6 @@ pages: artifacts: paths: - public - rules: - - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH + only: + - main + - 0.0.7 -- GitLab From 7cfd5fe9f2436571cedba2fa15336b729aaa2ecb Mon Sep 17 00:00:00 2001 From: Deepak Khatri <lorforlinux@beagleboard.org> Date: Wed, 31 Aug 2022 10:57:25 +0530 Subject: [PATCH 25/83] chache files --- .gitlab-ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 25ea47e0..22bd52b3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,11 @@ image: beagle/sphinx-build-env:latest stages: - deploy +cache: + paths: + - public + - public/0.0.7 + pages: stage: deploy script: -- GitLab From 21a4c24392d06a8828341a49de1ac56361262d29 Mon Sep 17 00:00:00 2001 From: Dhruva Gole <d-gole@ti.com> Date: Fri, 12 Aug 2022 21:25:20 +0530 Subject: [PATCH 26/83] docs: contribution: Start writing linux contrib Also create index.rst inside /intro/contribution/. Add Linux kernel (upstream) contribution guidelines. This will help newcomers to understand in a much more friendly and simpler manner about the process of upstreaming. Signed-off-by: Dhruva Gole <goledhruva@gmail.com> --- intro/contribution/index.rst | 1 + intro/contribution/upstream-guidelines.rst | 100 +++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 intro/contribution/upstream-guidelines.rst diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 3a1cb77a..ce028561 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -10,3 +10,4 @@ Contribution /intro/contribution/git-usage /intro/contribution/style + /intro/contribution/upstream-guidelines \ No newline at end of file diff --git a/intro/contribution/upstream-guidelines.rst b/intro/contribution/upstream-guidelines.rst new file mode 100644 index 00000000..188c31b1 --- /dev/null +++ b/intro/contribution/upstream-guidelines.rst @@ -0,0 +1,100 @@ +.. _beagleboard-contribute: + +Upstream Kernel Contributions +######### + +.. note:: + For detailed information on Kernel Developmement checkout the official + `kernel.org <https://www.kernel.org/doc/html/latest/>`_ + kernel docs. + +For a person or company who wishes to submit a change to the Linux kernel, +the process can sometimes be daunting if you’re not familiar with “the system.†+This text is a collection of suggestions which can help you get started and greatly increase the chances +of your change being accepted. + +.. note:: This version is an unofficial draft and is subject to change. + +Pre-requisites +--------------- + +The following are the skills that are needed before you actually start to contribute to the linux kernel: + - git + - C-Programming + - Cross-arch Development + - Basics of embedded buses (I2C, UART, SPI, etc.) + - Device Trees + - Drivers in Embedded Systems + +More Git! +--------- + +It is highly recommended that you go through +`Git Usage <https://docs.beagleboard.io/contribution/git-usage.html>`_ before starting +to read and follow these guidelines. You will need to have a proper git setup on your +computer inorder to effectively follow these steps. + +Creating your first patch +************************* + +When you first enter the world of Linux Kernel development from a background in +contributing over gitlab or github, the terminologies slightly change. + +Your Pull Requests (PRs) now become Patches or Patch Series. You no longer just +go to some website and click on a "Create Pull Request" button. Whatever code/changes you +want to add will have to be sent as patches via emails. + +As an example, let's consider a commit to add the git section to these docs. +I stage these changes first using ``git add -p``. + +.. code-block:: + + diff --git a/contribution/contribute.rst b/contribution/contribute.rst + index def100b..0af08c5 100644 + --- a/contribution/contribute.rst + +++ b/contribution/contribute.rst + +Then, commit the above changes. + +**Note:** Don't forget to make your commit message descriptive of the feature +you are adding or the work that you have done in that commit. The commit +has to be self explanatory in itself. Link any references if you have used +and paste any logs to prove your code works or if there is a fix. + +.. code-block:: + + git commit -vs + + [linux-contrib 3bc0821] contribute.rst: Add git section + 1 file changed, 27 insertions(+), 1 deletion(-) + +Now, let's say we want to send this new feature to upstream kernel. You then have to create +a patch file using the following command: + +.. code-block:: + + git format-patch -1 HEAD + + 0001-contribute.rst-Add-git-section.patch + +This will generate one file that is generally referred to as the patch file. +This is what you will now be sending upstream inorder to get your patch merged. +But wait, there are a few more things we need to setup for sending a patch via e-mail. +That is, ofcourse your email! + +For configuring your email ID for sending patches refer to this excellent stackoverflow thread, +`configure git-send-email +<https://stackoverflow.com/questions/68238912/how-to-configure-and-use-git-send-email-to-work-with-gmail-to-email-patches-to>`_. + +Finally, after you have configured you email properly, you can send out a patch using: + +.. code-block:: + git send-email 0001-contribute.rst-Add-git-section.patch + +replacing ofcourse the above patchfile name with whatever was your own patch. +This command will then ask you ``To whom should the emails be sent (if anyone)?`` +Here, you have to write the email address of the list you want to send out the patch to. + +``git send-email`` also has command line options like ``--to`` and ``--cc`` that you can also use +to add more email addresses of whoever you want to keep in CC. Generally it is a good idea to keep yourself +in CC. \ No newline at end of file -- GitLab From 98ca3e6442d8dd92850dd4fa47fed3258d155c5c Mon Sep 17 00:00:00 2001 From: Dhruva Gole <goledhruva@gmail.com> Date: Wed, 31 Aug 2022 21:43:23 +0530 Subject: [PATCH 27/83] Add more sections Also added extra reference links Signed-off-by: Dhruva Gole <goledhruva@gmail.com> --- intro/contribution/upstream-guidelines.rst | 72 +++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/intro/contribution/upstream-guidelines.rst b/intro/contribution/upstream-guidelines.rst index 188c31b1..c2e3f847 100644 --- a/intro/contribution/upstream-guidelines.rst +++ b/intro/contribution/upstream-guidelines.rst @@ -97,4 +97,74 @@ Here, you have to write the email address of the list you want to send out the p ``git send-email`` also has command line options like ``--to`` and ``--cc`` that you can also use to add more email addresses of whoever you want to keep in CC. Generally it is a good idea to keep yourself -in CC. \ No newline at end of file +in CC. + +C-Programming +------------- + +It is highly recommended that you have proficiency in C-Programming, because well the kernel is mostly +written in C! For starters, you can go through Dennis Ritchie's C Programming book to understand +the language and also solve the excercises given there for getting hands on. + +Cross-arch Development +---------------------- + +While working with the kernel, you'll most likely not be compiling it on the machine +that you intend to actually boot it on. +For example if you are compiling the Kernel for BeageBone Black it's probably not ideal +for you to actually clone the entire kernel on BBB and then compile it there. +What you'd do instead is pick a much powerful machine like a Desktop PC or laptop and +then use cross arch compilers like the arm-gcc for instance to compile the kernel for your +target device. + +Embedded buses +-------------- + +In the world of embedded, you often need to communicate with peripherals over very low level protocols. +To name a few, I2C, UART, SPI, etc. are all serial protocols used to communicate with a variety of devices and +peripherals. + +It's recommended to understand atleast the basics of each of the protocol so you know what's actually going +on when you write for instance an I2C or SPI driver to communicate with let's say a sensor. + +Device Drivers +------- + +I used the term "Drivers" in the above section, but what does it really mean? + +**Why "device" drivers?** + +TODO + +**Why do we need drivers?** + +TODO + +**What do drivers look like?** + +TODO + +Device Trees +------------ + +We just learned about drivers, and it's time that once you have written a driver in the kernel, +you obviously want it to work! So how do we really tell the kernel which drivers to load? +How do we, at boot time, instruct which devices are present on the board you are booting on? + +The kernel does not contain the description of the hardware, +it is located in a separate binary: the device tree blob. + +**What is a Device Tree?** + +A device tree is used to describe system hardware. A boot program loads a device tree into a +client program’s memory and passes a pointer to the device tree to the client. + +A device tree is a tree data structure with nodes that describe +the physical devices in a system. + +Additional Resources +-------------------- + +1. `Device Trees for Dummies PDF <https://elinux.org/images/f/f9/Petazzoni-device-tree-dummies_0.pdf>`_ +2. `What are Device Drivers <https://tldp.org/LDP/tlk/dd/drivers.html>`_ +3. `Submitting your patches upstream <https://www.kernel.org/doc/html/v4.17/process/submitting-patches.html>`_ -- GitLab From 4e124b58c7bb2fd0c0e4301c333462136201bdbf Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 13:21:14 -0400 Subject: [PATCH 28/83] attempt to name directories --- .gitlab-ci.yml | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 22bd52b3..d4bcc3b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,22 +1,49 @@ image: beagle/sphinx-build-env:latest stages: - - deploy + - deploy-main + - deploy-branch + - deploy-tag -cache: - paths: +pages: + stage: deploy-main + script: + - sphinx-build -b html . public/latest/ + - sphinx-build -M latexpdf . public/latest/ + - mv public/latex/beagleboard-docs.pdf public/latest/ + - echo "/ /latest/ 302" > public/latest/_redirects + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + when: always + +pages: + stage: deploy-branch + script: + - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ + - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ + - mv public/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ + artifacts: + paths: - public - - public/0.0.7 + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + when: never + - if: $CI_COMMIT_BRANCH + when: always pages: - stage: deploy + stage: deploy-tag script: - - sphinx-build -b html . public - - sphinx-build -M latexpdf . public - - mv public/latex/beagleboard-docs.pdf public/ + - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///'` + - sphinx-build -b html . public/$GIT_BRANCH/ + - sphinx-build -M latexpdf . public/$GIT_BRANCH/ + - mv public/latex/beagleboard-docs.pdf public/$GIT_BRANCH/ artifacts: paths: - public - only: - - main - - 0.0.7 + rules: + - if: $CI_COMMIT_TAG + when: always -- GitLab From 5d8f702941b8801bbe84497156c833b6ff05d2e7 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 13:28:41 -0400 Subject: [PATCH 29/83] Update .gitlab-ci.yml --- .gitlab-ci.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d4bcc3b1..1b41e83c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,12 @@ image: beagle/sphinx-build-env:latest stages: - - deploy-main + - deploy-latest - deploy-branch - deploy-tag pages: - stage: deploy-main + stage: deploy-latest script: - sphinx-build -b html . public/latest/ - sphinx-build -M latexpdf . public/latest/ @@ -16,7 +16,7 @@ pages: paths: - public rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' when: always pages: @@ -29,7 +29,7 @@ pages: paths: - public rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' when: never - if: $CI_COMMIT_BRANCH when: always @@ -40,7 +40,8 @@ pages: - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///'` - sphinx-build -b html . public/$GIT_BRANCH/ - sphinx-build -M latexpdf . public/$GIT_BRANCH/ - - mv public/latex/beagleboard-docs.pdf public/$GIT_BRANCH/ + - mv public/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf + - ln -s public/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf artifacts: paths: - public -- GitLab From 33c97713d8244e7563d9f566555330915c08cb08 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 13:33:50 -0400 Subject: [PATCH 30/83] Update .gitlab-ci.yml --- .gitlab-ci.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b41e83c..c045c2e8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,8 +16,7 @@ pages: paths: - public rules: - - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - when: always + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH pages: stage: deploy-branch @@ -29,10 +28,7 @@ pages: paths: - public rules: - - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - when: never - - if: $CI_COMMIT_BRANCH - when: always + - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) pages: stage: deploy-tag @@ -47,4 +43,3 @@ pages: - public rules: - if: $CI_COMMIT_TAG - when: always -- GitLab From 0e056d44429ca172b80524634589141ff562aa14 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 13:36:53 -0400 Subject: [PATCH 31/83] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c045c2e8..3607e16c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ stages: - deploy-branch - deploy-tag -pages: +pages-latest: stage: deploy-latest script: - sphinx-build -b html . public/latest/ @@ -18,7 +18,7 @@ pages: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -pages: +pages-deploy: stage: deploy-branch script: - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ @@ -30,7 +30,7 @@ pages: rules: - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) -pages: +pages-tag: stage: deploy-tag script: - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///'` -- GitLab From 2645344b951c8c429a19d8ae070f71449dd29823 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 13:48:35 -0400 Subject: [PATCH 32/83] Update .gitlab-ci.yml --- .gitlab-ci.yml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3607e16c..08d64864 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,10 @@ image: beagle/sphinx-build-env:latest -stages: - - deploy-latest - - deploy-branch - - deploy-tag - -pages-latest: - stage: deploy-latest +on_latest: script: - sphinx-build -b html . public/latest/ - sphinx-build -M latexpdf . public/latest/ - - mv public/latex/beagleboard-docs.pdf public/latest/ + - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - echo "/ /latest/ 302" > public/latest/_redirects artifacts: paths: @@ -18,25 +12,23 @@ pages-latest: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -pages-deploy: - stage: deploy-branch +on_branch: script: - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ - - mv public/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ + - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ artifacts: paths: - public rules: - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) -pages-tag: - stage: deploy-tag +pm_tag: script: - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///'` - sphinx-build -b html . public/$GIT_BRANCH/ - sphinx-build -M latexpdf . public/$GIT_BRANCH/ - - mv public/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf + - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf - ln -s public/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf artifacts: paths: -- GitLab From 9ede065e7b68929d7a89c5710ff523b401101c25 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 14:18:55 -0400 Subject: [PATCH 33/83] CI fix _redirects --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 08d64864..fc8608f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ on_latest: - sphinx-build -b html . public/latest/ - sphinx-build -M latexpdf . public/latest/ - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - - echo "/ /latest/ 302" > public/latest/_redirects + - echo "/ /latest/ 302" > public/_redirects artifacts: paths: - public -- GitLab From 689638f82a10c5e8888b0d559d331653922a1277 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 14:39:51 -0400 Subject: [PATCH 34/83] CI: at least 'on_tag' is likely to be broken --- .gitlab-ci.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fc8608f1..e81eabb9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ on_latest: - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - echo "/ /latest/ 302" > public/_redirects artifacts: + name: "latest" paths: - public rules: @@ -18,19 +19,21 @@ on_branch: - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ artifacts: + name: "$CI_COMMIT_BRANCH" paths: - public rules: - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) -pm_tag: +on_tag: script: - - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///'` + - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') - sphinx-build -b html . public/$GIT_BRANCH/ - sphinx-build -M latexpdf . public/$GIT_BRANCH/ - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf - ln -s public/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf artifacts: + name: "$GIT_BRANCH" paths: - public rules: -- GitLab From e52750af2788b5194d0e8b958b70b9c6620225fe Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 15:44:52 -0400 Subject: [PATCH 35/83] Add a bone101 placeholder and qwiic article --- intro/bone101/index.rst | 27 ++++ intro/bone101/qwiic-stemma-grove-addons.rst | 146 ++++++++++++++++++++ intro/index.rst | 1 + 3 files changed, 174 insertions(+) create mode 100644 intro/bone101/index.rst create mode 100644 intro/bone101/qwiic-stemma-grove-addons.rst diff --git a/intro/bone101/index.rst b/intro/bone101/index.rst new file mode 100644 index 00000000..bd1bab0b --- /dev/null +++ b/intro/bone101/index.rst @@ -0,0 +1,27 @@ +.. _intro_bone101: + +bone101 +####### + +.. note:: + This page is under construction. Most of the information here is drastically out of date. + +I don't want to completely lose the useful documentation we had at: + +* https://beagleboard.github.io/bone101/Support/bone101/ + +Most of the useful information has moved to :ref:`_bone-cook-book-home`, but this has been +the place I've most brainstormed free-form about introducing people to BeagleBone. For now, +it can serve as a place to put some introductory information that is meant to be +from a bit of a different approach. + +Articles under construction: + +* `QWIIC, STEMMA, and Grove add-ons under Linux <quiic-stemma-grove-addons>`__ + +.. toctree:: + :maxdepth: 1 + :hidden: + + qwiic-stemma-grove-addons.rst + diff --git a/intro/bone101/qwiic-stemma-grove-addons.rst b/intro/bone101/qwiic-stemma-grove-addons.rst new file mode 100644 index 00000000..617e33bf --- /dev/null +++ b/intro/bone101/qwiic-stemma-grove-addons.rst @@ -0,0 +1,146 @@ +QWIIC, STEMMA and Grove on Linux +################################ + +.. note:: + + This article is under construction. + +I'm creating a place for me to start taking notes on how to load drivers for I2C devices (mostly), but also other Grove add-ons. + +For simplicity sake, I'll use these definitions + +* **add-on**: the QWIIC, STEMMA (QT) or Grove add-on separate from your Linux computer +* **device**: the "smart" IC on the add-on to which we will interface from your Linux computer +* **board**: the Linux single board computer with the embedded interface controller you are using +* **module**: a kernel module that might contain the driver + +I2C +*** + +Linux has a ton of drivers for I2C devices. We just need a few parameters to load them. + +Using a Linux I2C kernel driver module can be super simple, like in the below example for +monitoring a digital light sensor. + +.. code-block:: bash + + cd /sys/bus/i2c/devices/i2c-1 + echo tsl2561 0x29 > new_device + watch -n0 cat "1-0029/iio:device0/in_illuminance0_input" + +Once you issue this, your screen continuously refresh with luminance values from the +add-on sensor. + +In the above example, `/sys/bus/i2c/devices/i2c-1` comes from which I2C controller +we are using on the board and there are specific pins on the board where you can +access it. + +`tsl2561` is the name of the driver we want to load and `0x29` is the address of the +device on the I2C bus. If you want to know about I2C device addresses, the +`Sparkfun I2C tutorial <https://learn.sparkfun.com/tutorials/i2c>`__ isn't a bad +place to start. The `new_device` virtual file is documented in the +`Linux kernel documentation on instantiating I2C devices <https://www.kernel.org/doc/html/v5.19/i2c/instantiating-devices.html>`__. + +On the last line, `watch <https://manpages.debian.org/bullseye/procps/watch.1.en.html>`__ +is a program that will repeatedly run the command that follows. The `-n0` sets the refresh +rate. The program `cat <https://manpages.debian.org/bullseye/coreutils/cat.1.en.html>`__ +will share the contents of the file `1-0029/iio\:device0/in_illuminance0_input`. + +`1-0029/iio:device0/in_illuminance0_input` is not a file on a disk, but output directly +from the driver. The 1 in `1-0029` represents the I2C controller index. The `0029` +represents the device I2C address. Most small sensor and actuator drivers will show up as +`Industrial I/O (IIO) devices <https://www.kernel.org/doc/html/v5.19/driver-api/iio/index.html>`__. +New IIO devices get incrementing indexes. In this case, `iio:device0` is the first IIO device +driver loaded. Finally, `in_illuminance0_input` comes from the +`SYSFS <https://www.kernel.org/doc/html/v5.19/filesystems/sysfs.html>`__ +`application binary interface <https://www.kernel.org/doc/html/v5.19/admin-guide/abi.html>`__ +for this type of device, a light sensor. The +`Linux kernel ABI documentation for sysfs-bus-iio <https://www.kernel.org/doc/html/v5.19/admin-guide/abi-testing.html#abi-sys-iio-devicex-in-illuminance-input>`__ provides the definition of available data often provided by light sensor drivers. + +.. code-block:: + + What: /sys/.../iio:deviceX/in_illuminance_input + What: /sys/.../iio:deviceX/in_illuminance_raw + What: /sys/.../iio:deviceX/in_illuminanceY_input + What: /sys/.../iio:deviceX/in_illuminanceY_raw + What: /sys/.../iio:deviceX/in_illuminanceY_mean_raw + What: /sys/.../iio:deviceX/in_illuminance_ir_raw + What: /sys/.../iio:deviceX/in_illuminance_clear_raw + KernelVersion: 3.4 + Contact: linux-iio@vger.kernel.org + Description: + Illuminance measurement, units after application of scale + and offset are lux. + +Read further to discover how to find these bits of magic text used above. + +Loading the Linux driver +======================== + +The generic steps are fairly simple: + +1. Identify the name and address used to load the appropriate driver for your add-on +2. Ensure the driver is included in your kernel build +3. Identify the location of the I2C signals on the board and the controller link in Linux +4. Ensure the board pinmux is set properly to expose the I2C peripheral +5. Ensure the board to add-on connection is good +6. Issue the Linux command to load the driver +7. Identify and utilize the interface provided by the driver + +Driver name +----------- + +One resource that is very helpful is the list that Vaishnav put together for supporting +Mikroelektronika Click add-ons. His `list of Click add-ons with driver information <https://git.beagleboard.org/jkridner/manifesto/-/blob/main/click_info.csv>`__ can help a lot with matching +a device to the driver name, device address, and kernel configuration setting. + +.. note:: + + Documentation for your particular add-on might indicate a different device address than is + configured on Click add-ons. + +I'm not aware of a trivial way of discovering the mapping that Vaishnav created outside +of looking at the kernel sources. As an example, let's look at the +`Grove Digital Light Sensor add-on <https://wiki.seeedstudio.com/Grove-Digital_Light_Sensor/>`__ +which is documented to utilize a TSL2561. + +Searching through the kernel sources, we can find the driver code at +`drivers/iio/light/tsl2563.c`. There is a list of driver names in a +`i2c_device_id table <https://elixir.bootlin.com/linux/v5.19.5/source/drivers/iio/light/tsl2563.c#L862>`__: + +.. code-block:: + + static const struct i2c_device_id tsl2563_id[] = { + { "tsl2560", 0 }, + { "tsl2561", 1 }, + { "tsl2562", 2 }, + { "tsl2563", 3 }, + {} + }; + +.. important:: + + Don't miss that the driver is a superset (tsl253) + + +Kernel configuration +-------------------- + +Devices +======= + +.. note:: + + There are some great resources out there: + + * `Adafruit list of I2C devices <https://learn.adafruit.com/i2c-addresses/the-list>`__ + * `Sparkfun list of QWIIC devices <https://www.sparkfun.com/qwiic>`__ + * `Adafruit STEMMA QT introduction <https://learn.adafruit.com/introducing-adafruit-stemma-qt/sparkfun-qwiic>`__ + + +Pitfalls +======== + +Not all I2C devices with drivers in the Linux kernel can be loaded this way. The most common +reason is that the device driver expects an interrupt signal or other GPIO along with the I2C +communication. In these cases, a device tree overlay or driver modification may be necessary. diff --git a/intro/index.rst b/intro/index.rst index 2e2e5e91..939be496 100644 --- a/intro/index.rst +++ b/intro/index.rst @@ -15,5 +15,6 @@ projects on-going on our `Contribution Page <contribution>`__. :maxdepth: 2 /intro/support/index + /intro/bone101/index /intro/contribution/index -- GitLab From 30f3f2fddb03a9d49fc79730e9f6d07ecf0b96b6 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 16:39:36 -0400 Subject: [PATCH 36/83] link to bone101/qwiic --- .gitlab-ci.yml | 5 ++++- index.rst | 1 + intro/bone101/index.rst | 11 ++++++----- intro/bone101/qwiic-stemma-grove-addons.rst | 7 +++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e81eabb9..a81067aa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ on_latest: - sphinx-build -M latexpdf . public/latest/ - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - echo "/ /latest/ 302" > public/_redirects + - rm -rf public/latest/latex artifacts: name: "latest" paths: @@ -18,6 +19,7 @@ on_branch: - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ + - rm -rf public/$CI_COMMIT_BRANCH/latex artifacts: name: "$CI_COMMIT_BRANCH" paths: @@ -31,7 +33,8 @@ on_tag: - sphinx-build -b html . public/$GIT_BRANCH/ - sphinx-build -M latexpdf . public/$GIT_BRANCH/ - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf - - ln -s public/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf + - ln -s public/$GIT_BRANCH/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf + - rm -rf public/$GIT_BRANCH/latex artifacts: name: "$GIT_BRANCH" paths: diff --git a/index.rst b/index.rst index 783f87c0..92aa5513 100644 --- a/index.rst +++ b/index.rst @@ -28,6 +28,7 @@ Get started by `engaging the BealgeBoard.org developer community </intro/>`__. :caption: Introduction /intro/support/index + /intro/bone101/index /intro/contribution/index diff --git a/intro/bone101/index.rst b/intro/bone101/index.rst index bd1bab0b..01c69124 100644 --- a/intro/bone101/index.rst +++ b/intro/bone101/index.rst @@ -10,18 +10,19 @@ I don't want to completely lose the useful documentation we had at: * https://beagleboard.github.io/bone101/Support/bone101/ -Most of the useful information has moved to :ref:`_bone-cook-book-home`, but this has been -the place I've most brainstormed free-form about introducing people to BeagleBone. For now, -it can serve as a place to put some introductory information that is meant to be +Most of the useful information has moved to :ref:`bone-cook-book-home` , but this has been +the place I've most brainstormed free-form to make articles introducing people to BeagleBone. +For now, it can serve as a place to put some introductory information that is meant to be from a bit of a different approach. Articles under construction: -* `QWIIC, STEMMA, and Grove add-ons under Linux <quiic-stemma-grove-addons>`__ +* :ref:`qwiic_stemma_grove_addons` + .. toctree:: :maxdepth: 1 :hidden: - qwiic-stemma-grove-addons.rst + /intro/bone101/qwiic-stemma-grove-addons.rst diff --git a/intro/bone101/qwiic-stemma-grove-addons.rst b/intro/bone101/qwiic-stemma-grove-addons.rst index 617e33bf..ac446b81 100644 --- a/intro/bone101/qwiic-stemma-grove-addons.rst +++ b/intro/bone101/qwiic-stemma-grove-addons.rst @@ -1,5 +1,8 @@ -QWIIC, STEMMA and Grove on Linux -################################ +.. _qwiic_stemma_grove_addons: + + +QWIIC, STEMMA and Grove Add-ons in Linux +######################################## .. note:: -- GitLab From 51b46bc808864ed66f99110b2fd26e9b50d16327 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 18:34:10 -0400 Subject: [PATCH 37/83] CI: disable /latest link for now It isn't working --- .gitlab-ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a81067aa..3254ba58 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,11 +2,11 @@ image: beagle/sphinx-build-env:latest on_latest: script: - - sphinx-build -b html . public/latest/ - - sphinx-build -M latexpdf . public/latest/ - - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - - echo "/ /latest/ 302" > public/_redirects - - rm -rf public/latest/latex + - rm -rf public + - sphinx-build -b html . public + - sphinx-build -M latexpdf . public + - mv public/latex/beagleboard-docs.pdf public + - rm -rf public/latex artifacts: name: "latest" paths: -- GitLab From 7667b304600259f305e35274015b6f036301df4a Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 18:45:06 -0400 Subject: [PATCH 38/83] CI: remove artifact name --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3254ba58..bfeea1cb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,6 @@ on_latest: - mv public/latex/beagleboard-docs.pdf public - rm -rf public/latex artifacts: - name: "latest" paths: - public rules: -- GitLab From edc272e42ee66076b9d88698e754d2be3824d411 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 20:42:26 -0400 Subject: [PATCH 39/83] CI add stage: deploy --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bfeea1cb..71cc938c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ image: beagle/sphinx-build-env:latest on_latest: + stage: deploy script: - rm -rf public - sphinx-build -b html . public @@ -14,6 +15,7 @@ on_latest: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH on_branch: + stage: deploy script: - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ @@ -27,6 +29,7 @@ on_branch: - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) on_tag: + stage: deploy script: - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') - sphinx-build -b html . public/$GIT_BRANCH/ -- GitLab From 27eaf29a6d7f5fca94169a84f0bfc8b3689b0f61 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 21:07:16 -0400 Subject: [PATCH 40/83] CI .gitlab-ci.yml hacking --- .gitlab-ci.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 71cc938c..985608b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,20 +1,25 @@ image: beagle/sphinx-build-env:latest -on_latest: +stages: + - deploy + +pages: stage: deploy script: - rm -rf public - - sphinx-build -b html . public - - sphinx-build -M latexpdf . public - - mv public/latex/beagleboard-docs.pdf public - - rm -rf public/latex + - sphinx-build -b html . public/latest/ + - sphinx-build -M latexpdf . public/latest/ + - mv public/latest/latex/beagleboard-docs.pdf public/latest + - rm -rf public/latest/latex + - echo "/ /latest 302" > public/_redirects artifacts: + name: "latest" paths: - public rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -on_branch: +pages: stage: deploy script: - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ @@ -28,7 +33,7 @@ on_branch: rules: - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) -on_tag: +pages: stage: deploy script: - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') -- GitLab From 66c90eebcd8bc5d8b9d2e25130eb4c88d9eeb1df Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 21:10:16 -0400 Subject: [PATCH 41/83] Update .gitlab-ci.yml file Comment out non-latest. --- .gitlab-ci.yml | 62 +++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 985608b1..19064691 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,9 +9,9 @@ pages: - rm -rf public - sphinx-build -b html . public/latest/ - sphinx-build -M latexpdf . public/latest/ - - mv public/latest/latex/beagleboard-docs.pdf public/latest + - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - rm -rf public/latest/latex - - echo "/ /latest 302" > public/_redirects + - echo "/ /latest/ 302" > public/_redirects artifacts: name: "latest" paths: @@ -19,32 +19,32 @@ pages: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH -pages: - stage: deploy - script: - - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ - - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ - - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ - - rm -rf public/$CI_COMMIT_BRANCH/latex - artifacts: - name: "$CI_COMMIT_BRANCH" - paths: - - public - rules: - - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) - -pages: - stage: deploy - script: - - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') - - sphinx-build -b html . public/$GIT_BRANCH/ - - sphinx-build -M latexpdf . public/$GIT_BRANCH/ - - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf - - ln -s public/$GIT_BRANCH/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf - - rm -rf public/$GIT_BRANCH/latex - artifacts: - name: "$GIT_BRANCH" - paths: - - public - rules: - - if: $CI_COMMIT_TAG +#pages: +# stage: deploy +# script: +# - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ +# - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ +# - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ +# - rm -rf public/$CI_COMMIT_BRANCH/latex +# artifacts: +# name: "$CI_COMMIT_BRANCH" +# paths: +# - public +# rules: +# - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) +# +#pages: +# stage: deploy +# script: +# - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') +# - sphinx-build -b html . public/$GIT_BRANCH/ +# - sphinx-build -M latexpdf . public/$GIT_BRANCH/ +# - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf +# - ln -s public/$GIT_BRANCH/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf +# - rm -rf public/$GIT_BRANCH/latex +# artifacts: +# name: "$GIT_BRANCH" +# paths: +# - public +# rules: +# - if: $CI_COMMIT_TAG \ No newline at end of file -- GitLab From 72c2d8718c8559139d8abb63d4a673db57beb0fe Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 21:14:32 -0400 Subject: [PATCH 42/83] fix path for pru-cookbook code files --- .../pru-cookbook}/04debug/code/AM335x_PRU.cmd | 0 .../pru-cookbook/common}/am335x_pru.cmd | 0 .../pru-cookbook}/common/am57xx_pru.cmd | 0 pru-cookbook/common/am335x_pru.cmd | 87 ------------------- 4 files changed, 87 deletions(-) rename {pru-cookbook => books/pru-cookbook}/04debug/code/AM335x_PRU.cmd (100%) rename {pru-cookbook/03details/code => books/pru-cookbook/common}/am335x_pru.cmd (100%) rename {pru-cookbook => books/pru-cookbook}/common/am57xx_pru.cmd (100%) delete mode 100644 pru-cookbook/common/am335x_pru.cmd diff --git a/pru-cookbook/04debug/code/AM335x_PRU.cmd b/books/pru-cookbook/04debug/code/AM335x_PRU.cmd similarity index 100% rename from pru-cookbook/04debug/code/AM335x_PRU.cmd rename to books/pru-cookbook/04debug/code/AM335x_PRU.cmd diff --git a/pru-cookbook/03details/code/am335x_pru.cmd b/books/pru-cookbook/common/am335x_pru.cmd similarity index 100% rename from pru-cookbook/03details/code/am335x_pru.cmd rename to books/pru-cookbook/common/am335x_pru.cmd diff --git a/pru-cookbook/common/am57xx_pru.cmd b/books/pru-cookbook/common/am57xx_pru.cmd similarity index 100% rename from pru-cookbook/common/am57xx_pru.cmd rename to books/pru-cookbook/common/am57xx_pru.cmd diff --git a/pru-cookbook/common/am335x_pru.cmd b/pru-cookbook/common/am335x_pru.cmd deleted file mode 100644 index 67005475..00000000 --- a/pru-cookbook/common/am335x_pru.cmd +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************/ -/* AM335x_PRU.cmd */ -/* Copyright (c) 2015 Texas Instruments Incorporated */ -/* */ -/* Description: This file is a linker command file that can be used for */ -/* linking PRU programs built with the C compiler and */ -/* the resulting .out file on an AM335x device. */ -/****************************************************************************/ - --cr /* Link using C conventions */ - -/* Specify the System Memory Map */ -MEMORY -{ - PAGE 0: - PRU_IMEM : org = 0x00000000 len = 0x00002000 /* 8kB PRU0 Instruction RAM */ - - PAGE 1: - - /* RAM */ - - PRU_DMEM_0_1 : org = 0x00000000 len = 0x00002000 CREGISTER=24 /* 8kB PRU Data RAM 0_1 */ - PRU_DMEM_1_0 : org = 0x00002000 len = 0x00002000 CREGISTER=25 /* 8kB PRU Data RAM 1_0 */ - - PAGE 2: - PRU_SHAREDMEM : org = 0x00010000 len = 0x00003000 CREGISTER=28 /* 12kB Shared RAM */ - - DDR : org = 0x80000000 len = 0x00000100 CREGISTER=31 - L3OCMC : org = 0x40000000 len = 0x00010000 CREGISTER=30 - - - /* Peripherals */ - - PRU_CFG : org = 0x00026000 len = 0x00000044 CREGISTER=4 - PRU_ECAP : org = 0x00030000 len = 0x00000060 CREGISTER=3 - PRU_IEP : org = 0x0002E000 len = 0x0000031C CREGISTER=26 - PRU_INTC : org = 0x00020000 len = 0x00001504 CREGISTER=0 - PRU_UART : org = 0x00028000 len = 0x00000038 CREGISTER=7 - - DCAN0 : org = 0x481CC000 len = 0x000001E8 CREGISTER=14 - DCAN1 : org = 0x481D0000 len = 0x000001E8 CREGISTER=15 - DMTIMER2 : org = 0x48040000 len = 0x0000005C CREGISTER=1 - PWMSS0 : org = 0x48300000 len = 0x000002C4 CREGISTER=18 - PWMSS1 : org = 0x48302000 len = 0x000002C4 CREGISTER=19 - PWMSS2 : org = 0x48304000 len = 0x000002C4 CREGISTER=20 - GEMAC : org = 0x4A100000 len = 0x0000128C CREGISTER=9 - I2C1 : org = 0x4802A000 len = 0x000000D8 CREGISTER=2 - I2C2 : org = 0x4819C000 len = 0x000000D8 CREGISTER=17 - MBX0 : org = 0x480C8000 len = 0x00000140 CREGISTER=22 - MCASP0_DMA : org = 0x46000000 len = 0x00000100 CREGISTER=8 - MCSPI0 : org = 0x48030000 len = 0x000001A4 CREGISTER=6 - MCSPI1 : org = 0x481A0000 len = 0x000001A4 CREGISTER=16 - MMCHS0 : org = 0x48060000 len = 0x00000300 CREGISTER=5 - SPINLOCK : org = 0x480CA000 len = 0x00000880 CREGISTER=23 - TPCC : org = 0x49000000 len = 0x00001098 CREGISTER=29 - UART1 : org = 0x48022000 len = 0x00000088 CREGISTER=11 - UART2 : org = 0x48024000 len = 0x00000088 CREGISTER=12 - - RSVD10 : org = 0x48318000 len = 0x00000100 CREGISTER=10 - RSVD13 : org = 0x48310000 len = 0x00000100 CREGISTER=13 - RSVD21 : org = 0x00032400 len = 0x00000100 CREGISTER=21 - RSVD27 : org = 0x00032000 len = 0x00000100 CREGISTER=27 - -} - -/* Specify the sections allocation into memory */ -SECTIONS { - /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading - an ELF file, but useful when loading a binary */ - .text:_c_int00* > 0x0, PAGE 0 - - .text > PRU_IMEM, PAGE 0 - .stack > PRU_DMEM_0_1, PAGE 1 - .bss > PRU_DMEM_0_1, PAGE 1 - .cio > PRU_DMEM_0_1, PAGE 1 - .data > PRU_DMEM_0_1, PAGE 1 - .switch > PRU_DMEM_0_1, PAGE 1 - .sysmem > PRU_DMEM_0_1, PAGE 1 - .cinit > PRU_DMEM_0_1, PAGE 1 - .rodata > PRU_DMEM_0_1, PAGE 1 - .rofardata > PRU_DMEM_0_1, PAGE 1 - .farbss > PRU_DMEM_0_1, PAGE 1 - .fardata > PRU_DMEM_0_1, PAGE 1 - - .resource_table > PRU_DMEM_0_1, PAGE 1 - .init_pins > PRU_DMEM_0_1, PAGE 1 -} \ No newline at end of file -- GitLab From 7c3717bb98f2572505bef8a95468dadbc4bfa1af Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 21:58:11 -0400 Subject: [PATCH 43/83] CI: add CI build script --- .gitlab-ci.yml | 40 +--------------------------------------- conf.py | 3 +++ gitlab-build.sh | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 39 deletions(-) create mode 100755 gitlab-build.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 19064691..35888673 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,45 +6,7 @@ stages: pages: stage: deploy script: - - rm -rf public - - sphinx-build -b html . public/latest/ - - sphinx-build -M latexpdf . public/latest/ - - mv public/latest/latex/beagleboard-docs.pdf public/latest/ - - rm -rf public/latest/latex - - echo "/ /latest/ 302" > public/_redirects + - ./gitlab_build.sh artifacts: - name: "latest" paths: - public - rules: - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - -#pages: -# stage: deploy -# script: -# - sphinx-build -b html . public/$CI_COMMIT_BRANCH/ -# - sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ -# - mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ -# - rm -rf public/$CI_COMMIT_BRANCH/latex -# artifacts: -# name: "$CI_COMMIT_BRANCH" -# paths: -# - public -# rules: -# - if: ($CI_COMMIT_BRANCH && ($CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH)) -# -#pages: -# stage: deploy -# script: -# - export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') -# - sphinx-build -b html . public/$GIT_BRANCH/ -# - sphinx-build -M latexpdf . public/$GIT_BRANCH/ -# - mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf -# - ln -s public/$GIT_BRANCH/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf -# - rm -rf public/$GIT_BRANCH/latex -# artifacts: -# name: "$GIT_BRANCH" -# paths: -# - public -# rules: -# - if: $CI_COMMIT_TAG \ No newline at end of file diff --git a/conf.py b/conf.py index f09fb5ec..6e713339 100644 --- a/conf.py +++ b/conf.py @@ -126,6 +126,9 @@ latex_documents = [ vcs_link_version = f"v{version}" if is_release else "main" vcs_link_base_url = f"https://git.beagleboard.org/docs/docs.beagleboard.io/blob/{vcs_link_version}" +#language = 'en' +#locales_dir = ['locale/'] +#gettext_compact = True def setup(app): # theme customizations diff --git a/gitlab-build.sh b/gitlab-build.sh new file mode 100755 index 00000000..7890a3d4 --- /dev/null +++ b/gitlab-build.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +env + +if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then + +rm -rf public +sphinx-build -b html . public/latest/ +sphinx-build -M latexpdf . public/latest/ +mv public/latest/latex/beagleboard-docs.pdf public/latest/ +rm -rf public/latest/latex +cat <<HERE > public/index.html +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="refresh" content="7; url='https://www.w3docs.com'" /> + </head> + <body> + <p>Please follow <a href="https://www.w3docs.com">this link</a>.</p> + </body> +</html> +HERE + +elif [ "$CI_COMMIT_BRANCH" != "" ]; then + +sphinx-build -b html . public/$CI_COMMIT_BRANCH/ +sphinx-build -M latexpdf . public/$CI_COMMIT_BRANCH/ +mv public/$CI_COMMIT_BRANCH/latex/beagleboard-docs.pdf public/$CI_COMMIT_BRANCH/ +rm -rf public/$CI_COMMIT_BRANCH/latex + +elif [ "$CI_COMMIT_TAG" != "" ]; then + +export GIT_BRANCH=$(git branch -a --contains tags/$CI_COMMIT_TAG | grep origin | sed 's/.*origin\///') +sphinx-build -b html . public/$GIT_BRANCH/ +sphinx-build -M latexpdf . public/$GIT_BRANCH/ +mv public/$GIT_BRANCH/latex/beagleboard-docs.pdf public/$GIT_BRANCH/beagleboard-docs-$CI_COMMIT_TAG.pdf +ln -s public/$GIT_BRANCH/latex/beagleboard-docs-$CI_COMMIT_TAG.pdf public/$GIT_BRANCH/beagleboard-docs.pdf +rm -rf public/$GIT_BRANCH/latex + +fi + -- GitLab From d4618ca0ba7210fe904066675aedd2fac2478ccf Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 21:59:06 -0400 Subject: [PATCH 44/83] CI: fix path to script --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 35888673..abf6e568 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: pages: stage: deploy script: - - ./gitlab_build.sh + - ./gitlab-build.sh artifacts: paths: - public -- GitLab From 57e3cf17f99e50d4c87fe051541bddd154a05a64 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 22:08:13 -0400 Subject: [PATCH 45/83] fix latest redirect link --- gitlab-build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gitlab-build.sh b/gitlab-build.sh index 7890a3d4..c7f39c08 100755 --- a/gitlab-build.sh +++ b/gitlab-build.sh @@ -13,10 +13,10 @@ cat <<HERE > public/index.html <!DOCTYPE html> <html> <head> - <meta http-equiv="refresh" content="7; url='https://www.w3docs.com'" /> + <meta http-equiv="refresh" content="0; url='latest/'" /> </head> <body> - <p>Please follow <a href="https://www.w3docs.com">this link</a>.</p> + <p>Please follow <a href="latest/">this link</a>.</p> </body> </html> HERE -- GitLab From 9bc9a04c42901a8ae760bceb510faa33be371931 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 22:15:01 -0400 Subject: [PATCH 46/83] bone101: capitalize --- intro/bone101/index.rst | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/intro/bone101/index.rst b/intro/bone101/index.rst index 01c69124..05794524 100644 --- a/intro/bone101/index.rst +++ b/intro/bone101/index.rst @@ -1,24 +1,22 @@ .. _intro_bone101: -bone101 +Bone101 ####### .. note:: This page is under construction. Most of the information here is drastically out of date. -I don't want to completely lose the useful documentation we had at: - -* https://beagleboard.github.io/bone101/Support/bone101/ - -Most of the useful information has moved to :ref:`bone-cook-book-home` , but this has been -the place I've most brainstormed free-form to make articles introducing people to BeagleBone. -For now, it can serve as a place to put some introductory information that is meant to be -from a bit of a different approach. +Most of the useful information has moved to :ref:`bone-cook-book-home` , but this can be +to be a place for nice introductory articles on using Bealges and Linux from a different +approach. Articles under construction: * :ref:`qwiic_stemma_grove_addons` +Also, I don't want to completely lose the useful documentation we had at: + +* https://beagleboard.github.io/bone101/Support/bone101/ .. toctree:: :maxdepth: 1 -- GitLab From 09c778f7123e341b276c9d57f6f0b8e79d5de777 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 22:35:17 -0400 Subject: [PATCH 47/83] intro/bone101/qwiic: add inner links --- intro/bone101/qwiic-stemma-grove-addons.rst | 54 ++++++++++++++++----- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/intro/bone101/qwiic-stemma-grove-addons.rst b/intro/bone101/qwiic-stemma-grove-addons.rst index ac446b81..98e9c4b3 100644 --- a/intro/bone101/qwiic-stemma-grove-addons.rst +++ b/intro/bone101/qwiic-stemma-grove-addons.rst @@ -1,6 +1,5 @@ .. _qwiic_stemma_grove_addons: - QWIIC, STEMMA and Grove Add-ons in Linux ######################################## @@ -82,13 +81,15 @@ Loading the Linux driver The generic steps are fairly simple: -1. Identify the name and address used to load the appropriate driver for your add-on -2. Ensure the driver is included in your kernel build -3. Identify the location of the I2C signals on the board and the controller link in Linux -4. Ensure the board pinmux is set properly to expose the I2C peripheral -5. Ensure the board to add-on connection is good -6. Issue the Linux command to load the driver -7. Identify and utilize the interface provided by the driver +1. :ref:`Identify the name and address used to load the appropriate driver for your add-on <bone101_i2c_driver_name>` +2. :ref:`Ensure the driver is included in your kernel build <bone101_i2c_kernel_cfg>` +3. :ref:`Identify the location of the I2C signals on the board and the controller link in Linux <bone101_i2c_dev>` +4. :ref:`Ensure the board pinmux is set properly to expose the I2C peripheral <bone101_i2c_pinmux>` +5. :ref:`Ensure the board to add-on connection is good <bone101_i2c_wiring>` +6. :ref:`Issue the Linux command to load the driver <bone101_i2c_command>` +7. :ref:`Identify and utilize the interface provided by the driver <bone101_i2c_iio>` + +.. _bone101_i2c_driver_name: Driver name ----------- @@ -123,14 +124,44 @@ Searching through the kernel sources, we can find the driver code at .. important:: - Don't miss that the driver is a superset (tsl253) + Don't miss that the driver, `tsl2561` , is actually part of a a superset driver, `tsl2563` . This can make things a bit trickier to find, so you have to look + within the text of the driver source, not just the filenames. +.. _bone101_i2c_kernel_cfg: + Kernel configuration -------------------- -Devices -======= +.. _bone101_i2c_dev: + +I2C signals and controller +-------------------------- + +.. _bone101_i2c_pinmux: + +Pinmuxing +--------- + +.. _bone101_i2c_wiring: + +Wiring +------ + +.. _bone101_i2c_command: + +Load driver +----------- + +.. _bone101_i2c_iio: + +Interface +--------- + +.. _bone101_i2c_addons: + +Add-on modules +============== .. note:: @@ -140,6 +171,7 @@ Devices * `Sparkfun list of QWIIC devices <https://www.sparkfun.com/qwiic>`__ * `Adafruit STEMMA QT introduction <https://learn.adafruit.com/introducing-adafruit-stemma-qt/sparkfun-qwiic>`__ +.. _bone101_i2c_pitfalls: Pitfalls ======== -- GitLab From 58522cdcd635714b0ed844ae0abf418914f61e42 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 22:40:09 -0400 Subject: [PATCH 48/83] intro/bone101/i2c reduce heading depth --- intro/bone101/qwiic-stemma-grove-addons.rst | 27 ++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/intro/bone101/qwiic-stemma-grove-addons.rst b/intro/bone101/qwiic-stemma-grove-addons.rst index 98e9c4b3..ad11a0cd 100644 --- a/intro/bone101/qwiic-stemma-grove-addons.rst +++ b/intro/bone101/qwiic-stemma-grove-addons.rst @@ -16,8 +16,10 @@ For simplicity sake, I'll use these definitions * **board**: the Linux single board computer with the embedded interface controller you are using * **module**: a kernel module that might contain the driver -I2C -*** +.. _bone101_i2c: + +Using I2C with Linux drivers +**************************** Linux has a ton of drivers for I2C devices. We just need a few parameters to load them. @@ -76,9 +78,6 @@ for this type of device, a light sensor. The Read further to discover how to find these bits of magic text used above. -Loading the Linux driver -======================== - The generic steps are fairly simple: 1. :ref:`Identify the name and address used to load the appropriate driver for your add-on <bone101_i2c_driver_name>` @@ -92,7 +91,7 @@ The generic steps are fairly simple: .. _bone101_i2c_driver_name: Driver name ------------ +=========== One resource that is very helpful is the list that Vaishnav put together for supporting Mikroelektronika Click add-ons. His `list of Click add-ons with driver information <https://git.beagleboard.org/jkridner/manifesto/-/blob/main/click_info.csv>`__ can help a lot with matching @@ -131,37 +130,37 @@ Searching through the kernel sources, we can find the driver code at .. _bone101_i2c_kernel_cfg: Kernel configuration --------------------- +==================== .. _bone101_i2c_dev: I2C signals and controller --------------------------- +========================== .. _bone101_i2c_pinmux: Pinmuxing ---------- +========= .. _bone101_i2c_wiring: Wiring ------- +====== .. _bone101_i2c_command: Load driver ------------ +=========== .. _bone101_i2c_iio: Interface ---------- +========= .. _bone101_i2c_addons: -Add-on modules -============== +Finding I2C add-on modules +========================== .. note:: -- GitLab From cc082d373c35a60517627d215bfeb87f877443bd Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 31 Aug 2022 22:52:36 -0400 Subject: [PATCH 49/83] intro/contribution: cleanup --- intro/contribution/index.rst | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 52f8cef2..bd4ecc99 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -52,17 +52,16 @@ Suggesting enhancements Submitting pull requests ======================== -Style guides -************ +Style and usage guidelines +************************** +* :ref:`beagleboard-git-usage` * Git commit messages -* `RST style guide </intro/contribution/style.html>`__ - -Additional notes -**************** +* :ref:`beagleboard-doc-style` .. toctree:: :maxdepth: 1 + :hidden: /intro/contribution/git-usage /intro/contribution/style -- GitLab From 7f688329acf04909c83fc2cc6db15d4f67ccd8d3 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 12:41:56 -0400 Subject: [PATCH 50/83] cookbook: remove introduction headers * All of the subsequent headers are at the wrong level. Fix by simply removing the first header which is superfluous anyway. --- books/beaglebone-cookbook/01basics/basics.rst | 3 --- books/beaglebone-cookbook/02sensors/sensors.rst | 3 --- books/beaglebone-cookbook/03displays/displays.rst | 3 --- books/beaglebone-cookbook/04motors/motors.rst | 3 --- books/beaglebone-cookbook/05tips/tips.rst | 3 --- books/beaglebone-cookbook/06iot/iot.rst | 3 --- books/beaglebone-cookbook/07kernel/kernel.rst | 3 --- books/beaglebone-cookbook/08realtime/realtime.rst | 3 --- books/beaglebone-cookbook/09capes/capes.rst | 3 --- books/beaglebone-cookbook/10parts/parts.rst | 3 --- 10 files changed, 30 deletions(-) diff --git a/books/beaglebone-cookbook/01basics/basics.rst b/books/beaglebone-cookbook/01basics/basics.rst index e60dcd0a..8ff3dddc 100644 --- a/books/beaglebone-cookbook/01basics/basics.rst +++ b/books/beaglebone-cookbook/01basics/basics.rst @@ -3,9 +3,6 @@ Basics ####### -Introduction -************* - When you buy BeagleBone Black, pretty much everything you need to get going comes with it. You can just plug it into the USB of a host computer, and it works. The goal of this chapter is to show what you can do with your Bone, right out of the box. It has enough diff --git a/books/beaglebone-cookbook/02sensors/sensors.rst b/books/beaglebone-cookbook/02sensors/sensors.rst index 6a80812e..9ddb94d7 100644 --- a/books/beaglebone-cookbook/02sensors/sensors.rst +++ b/books/beaglebone-cookbook/02sensors/sensors.rst @@ -3,9 +3,6 @@ Sensors ######## -Introduction -************* - In this chapter, you will learn how to sense the physical world with BeagleBone Black. Various types of electronic sensors, such as cameras and microphones, can be connected to the Bone using one or more interfaces provided by the standard USB 2.0 host port, diff --git a/books/beaglebone-cookbook/03displays/displays.rst b/books/beaglebone-cookbook/03displays/displays.rst index a4d56809..2ce70cef 100644 --- a/books/beaglebone-cookbook/03displays/displays.rst +++ b/books/beaglebone-cookbook/03displays/displays.rst @@ -3,9 +3,6 @@ Displays and Other Outputs ########################### -Introduction -************* - In this chapter, you will learn how to control physical hardware via BeagleBone Black's general-purpose input/output (GPIO) pins. The Bone has 65 GPIO pins that are brought out on two 46-pin headers, called diff --git a/books/beaglebone-cookbook/04motors/motors.rst b/books/beaglebone-cookbook/04motors/motors.rst index eff2f3e0..481a684f 100644 --- a/books/beaglebone-cookbook/04motors/motors.rst +++ b/books/beaglebone-cookbook/04motors/motors.rst @@ -3,9 +3,6 @@ Motors ######## -Introduction -************** - One of the many fun things about embedded computers is that you can move physical things with motors. But there are so many different kinds of motors (``servo``, ``stepper``, ``DC``), so how do you select the right one? diff --git a/books/beaglebone-cookbook/05tips/tips.rst b/books/beaglebone-cookbook/05tips/tips.rst index a78e2dcf..1e3e0b27 100644 --- a/books/beaglebone-cookbook/05tips/tips.rst +++ b/books/beaglebone-cookbook/05tips/tips.rst @@ -3,9 +3,6 @@ Beyond the Basics ################## -Introduction -************* - In :ref:`beaglebone-cookbook-basics`, you learned how to set up BeagleBone Black, and :ref:`beaglebone-cookbook-sensors`, :ref:`beaglebone-cookbook-displays`, and :ref:`beaglebone-cookbook-motors` showed how to diff --git a/books/beaglebone-cookbook/06iot/iot.rst b/books/beaglebone-cookbook/06iot/iot.rst index 8c1f61e4..4886a0e8 100644 --- a/books/beaglebone-cookbook/06iot/iot.rst +++ b/books/beaglebone-cookbook/06iot/iot.rst @@ -3,9 +3,6 @@ Internet of Things #################### -Introduction -************* - You can easily connect BeagleBone Black to the Internet via a wire (:ref:`networking_wired`), wirelessly (:ref:`networking_wireless`), or through the USB to a host and then to the Internet (:ref:`networking_usb`). Either way, it opens up a world of possibilities for the "Internet of Things" (IoT). diff --git a/books/beaglebone-cookbook/07kernel/kernel.rst b/books/beaglebone-cookbook/07kernel/kernel.rst index 88cf1e10..c18a91ef 100644 --- a/books/beaglebone-cookbook/07kernel/kernel.rst +++ b/books/beaglebone-cookbook/07kernel/kernel.rst @@ -3,9 +3,6 @@ The Kernel ########### -Introduction -************* - The kernel is the heart of the Linux operating system. It's the software that takes the low-level requests, such as reading or writing files, or reading and writing general-purpose input/output (GPIO) pins, and maps them to the hardware. When you install a new version of the diff --git a/books/beaglebone-cookbook/08realtime/realtime.rst b/books/beaglebone-cookbook/08realtime/realtime.rst index 4f894ee4..79fe98b2 100644 --- a/books/beaglebone-cookbook/08realtime/realtime.rst +++ b/books/beaglebone-cookbook/08realtime/realtime.rst @@ -3,9 +3,6 @@ Real-Time I/O ############### -Introduction -************* - Sometimes, when BeagleBone Black interacts with the physical world, it needs to respond in a timely manner. For example, your robot has just detected that one of the driving motors needs to turn a bit faster. Systems that can respond quickly to a real event are known as ``real-time`` systems. There are two broad diff --git a/books/beaglebone-cookbook/09capes/capes.rst b/books/beaglebone-cookbook/09capes/capes.rst index 0285e96f..d4ce5f73 100644 --- a/books/beaglebone-cookbook/09capes/capes.rst +++ b/books/beaglebone-cookbook/09capes/capes.rst @@ -3,9 +3,6 @@ Capes ##### -Introduction -************** - Previous chapters of this book show a variety of ways to interface BeagleBone Black to the physical world by using a breadboard and wiring to the +P8+ and +P9+ headers. This is a great approach because it's easy to modify your circuit to debug it or try diff --git a/books/beaglebone-cookbook/10parts/parts.rst b/books/beaglebone-cookbook/10parts/parts.rst index 18e1f84c..a952cf1d 100644 --- a/books/beaglebone-cookbook/10parts/parts.rst +++ b/books/beaglebone-cookbook/10parts/parts.rst @@ -3,9 +3,6 @@ Parts and Suppliers #################### -Parts -****** - The following tables list where you can find the parts used in this book. We have listed only one or two sources here, but you can often find a given part in many places. -- GitLab From 7139931a1ece04e654f4f980a6553068883c2f4c Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 20:28:40 -0400 Subject: [PATCH 51/83] Fix a number of links --- boards/beagleboard/index.rst | 2 ++ boards/beaglebone/index.rst | 2 +- boards/capes/index.rst | 2 ++ boards/index.rst | 12 +++++++----- books/index.rst | 2 ++ index.rst | 19 +++++++++---------- intro/contribution/index.rst | 2 +- intro/index.rst | 6 ++++-- 8 files changed, 28 insertions(+), 19 deletions(-) diff --git a/boards/beagleboard/index.rst b/boards/beagleboard/index.rst index beb56cd1..bcd643cd 100644 --- a/boards/beagleboard/index.rst +++ b/boards/beagleboard/index.rst @@ -1,3 +1,5 @@ +.. _beagleboard-boards-home: + BeagleBoard (all) ################### diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index cd47c0d1..7e8b32ef 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -1,4 +1,4 @@ -.. _beaglebone-blue-home:: +.. _beaglebone-all-home: BeagleBone (all) ################### diff --git a/boards/capes/index.rst b/boards/capes/index.rst index d2fba272..18631319 100644 --- a/boards/capes/index.rst +++ b/boards/capes/index.rst @@ -1,3 +1,5 @@ +.. _capes: + Capes ##### diff --git a/boards/index.rst b/boards/index.rst index b4659047..519d98e1 100644 --- a/boards/index.rst +++ b/boards/index.rst @@ -1,21 +1,23 @@ +.. _boards: + Boards ###### -`BeagleBone <beaglebone>`__ is a family of ARM-based, Linux-capable boards intended to be +:ref:`BeagleBone <beaglebone-all-home>` is a family of ARM-based, Linux-capable boards intended to be bare-bones, with a balance of features to enable rapid prototyping and provide a solid reference for building end products. -`PocketBeagle <pocketbeagle>`__ boards are ultra-tiny ARM-based, Linux-capable boards intended to be +:ref:`pocketbeagle-home` boards are ultra-tiny ARM-based, Linux-capable boards intended to be very low cost, with minimal features suitable for beginners and attractive to professionals looking for a more minimal starting point. -`BeagleBone and PocketBeagle Capes <capes>`__ are add-on boards for BeagleBone and PocketBeagle boards. +BeagleBone and PocketBeagle :ref:`capes` are add-on boards for BeagleBone and PocketBeagle boards. -`BeagleConnect <beagleconnect>`__ boards are ARM microcontroller-based, Zephyr-capable boards meant +:ref:`beagleconnect-home` boards are ARM microcontroller-based, Zephyr-capable boards meant to act as ultra low cost smart peripherals to their Linux-capable counterparts, with connectivity options that enable almost endless sensing and actuation expansion. -`BeagleBoard <beagleboard>`__ is a family of ARM-based, Linux-capable boards where this project +:ref:`BeagleBoard <beagleboard-boards-home>` is a family of ARM-based, Linux-capable boards where this project started. .. toctree:: diff --git a/books/index.rst b/books/index.rst index 1cf8a938..4640aed0 100644 --- a/books/index.rst +++ b/books/index.rst @@ -1,3 +1,5 @@ +.. _books-home: + Books ***** diff --git a/index.rst b/index.rst index 5bf6fc53..258aa959 100644 --- a/index.rst +++ b/index.rst @@ -17,10 +17,10 @@ Welcome to the `BeagleBoard project documentation <https://git.beagleboard.org/d Introduction ************ -Get started by `engaging the BealgeBoard.org developer community </intro/>`__. +Get started engaging the BeagleBoard.org developer community by reading our :ref:`introduction` page. -* Read about how to: `get started and get help </intro/support>`__ -* Learn how to: `contribute to the project </intro/contribution>`__ +* Read about how to get started and get help on our :ref:`support` page. +* Learn how to contribute to the project on our :ref:`contribution` page. .. toctree:: :maxdepth: 2 @@ -42,9 +42,9 @@ design, including the `materials <https://git.beagleboard.org/explore/projects/topics/boards>`__ to modify the designs from source using appropriate design tools. -* Check out our most popular board at: `BeagleBone Black </boards/beaglebone/black>`__ -* Check out our latest board at: `BeagleBone AI-64 </boards/beaglebone/ai-64>`__ -* Find all of our on: `our boards page </boards/index>`__ +* Check out our most popular board at: :ref:`beagleboneblack-home` +* Check out our latest board at: :ref:`bbai64-home` +* Find all of our on: :ref:`boards` .. grid:: 1 1 1 2 :margin: 4 4 0 0 @@ -322,11 +322,10 @@ developers. Some developers choose to host documentation for their projects `her Books ***** -This project hosts a -`collection of open-source books written to help Beagle developers </books/index>`__. +This project hosts a collection of open-source :ref:`books-home` books written to help Beagle developers. -* Find a great introduction to BeagleBone at: `BeagleBone Cookbook </books/beaglebone-cookbook>`__ -* Learn one of the most amazing Beagle features at: `PRU Cookbook </books/pru-cookbook>`__ +* Find a great introduction to BeagleBone at: :ref:`bone-cook-book-home` +* Learn one of the most amazing Beagle features at: :ref:`pru-cookbook-home` .. toctree:: :maxdepth: 1 diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index bd4ecc99..d2dd9ad5 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -1,4 +1,4 @@ -.. _beagleboard-contributoin: +.. _contribution: Contribution ############### diff --git a/intro/index.rst b/intro/index.rst index 939be496..22fbdbc7 100644 --- a/intro/index.rst +++ b/intro/index.rst @@ -1,15 +1,17 @@ +.. _introduction: + Introduction ############# Welcome to the BeagleBoard documentation project. If you are looking for help with your Beagle open-hardware development platform, you've found the right place! -Please check out our `Support Page <support>`__ to find out how to get started, resolve issues, +Please check out our :ref:`support` page` to find out how to get started, resolve issues, and engage the developer community. Don't forget that this is an open-source project! Your contributions are welcome. Learn about how to contribute to the BeagleBoard documentation project and any of the many open-source Beagle -projects on-going on our `Contribution Page <contribution>`__. +projects on-going on our :ref:`contribution` page. .. toctree:: :maxdepth: 2 -- GitLab From 5c179936966aa4ff973dddc4c1a58ace44cdf448 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 20:34:29 -0400 Subject: [PATCH 52/83] Refer to releases as stable --- _templates/layout.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_templates/layout.html b/_templates/layout.html index cd42441b..c6be8a80 100644 --- a/_templates/layout.html +++ b/_templates/layout.html @@ -7,9 +7,9 @@ </div> {% else %} <div class="wy-alert wy-alert-danger"> - This is the latest (main) BeagleBoard documentation. - If you are looking for the previous releases, use the - drop-down menu on the left and select the desired version. + This is the latest (main) BeagleBoard documentation. + If you are looking for stable releases, use the + drop-down menu on the bottom-left and select the desired version. </div> {% endif %} {{ super() }} -- GitLab From 6f6c5b135e1c64927fb468d104309ef4354b9d23 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 20:38:37 -0400 Subject: [PATCH 53/83] Fix FAQ link --- conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf.py b/conf.py index 5a04178d..ab559160 100644 --- a/conf.py +++ b/conf.py @@ -120,8 +120,8 @@ html_context = { "versions": ("latest", "0.0", "0.1"), "reference_links": { "About": "https://beagleboard.org/about", - "Donate": "https://beagleboard.org/donate/", - "FAQ": "https://beagleboard.org/Support/FAQ" + "Donate": "https://beagleboard.org/donate", + "FAQ": "forum.beagleboard.org/c/faq" } } -- GitLab From 226be8ccd1071a9713a2f5d9275e43bf4b74b957 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 22:39:55 -0400 Subject: [PATCH 54/83] Fixing more links --- index.rst | 6 +++--- projects/index.rst | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/index.rst b/index.rst index 258aa959..0e288395 100644 --- a/index.rst +++ b/index.rst @@ -308,8 +308,8 @@ Capes Projects ******** -A number of software projects, like `SimpPRU </projects/simppru/index>`__ exist to help Beagle -developers. Some developers choose to host documentation for their projects `here </projects/index>`__. +A number of software projects, like :ref:`simppru_home` exist to help Beagle +developers. Some developers choose to host documentation for their :ref:`projects-home` . .. toctree:: :maxdepth: 1 @@ -317,7 +317,7 @@ developers. Some developers choose to host documentation for their projects `her :caption: Projects /projects/simppru/index - /boards/beagleconnect/technology/index + /boards/beagleconnect/index Books ***** diff --git a/projects/index.rst b/projects/index.rst index 78b5def7..4e583175 100644 --- a/projects/index.rst +++ b/projects/index.rst @@ -1,3 +1,5 @@ +.. _projects-home: + Projects ******** @@ -7,4 +9,4 @@ This is a collection of reasonably well-supported projects useful to Beagle deve :maxdepth: 1 /projects/simppru/index.rst - /boards/beagleconnect/technology/index.rst + /boards/beagleconnect/index.rst -- GitLab From c2e5399611a8457fd17287e1e399d2cdf865ee08 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 22:47:12 -0400 Subject: [PATCH 55/83] beagleconnect: update --- boards/beagleconnect/technology/index.rst | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/boards/beagleconnect/technology/index.rst b/boards/beagleconnect/technology/index.rst index 3f24588d..a01e4ad5 100644 --- a/boards/beagleconnect/technology/index.rst +++ b/boards/beagleconnect/technology/index.rst @@ -15,12 +15,8 @@ architecture. :height: 400 :alt: BeagleConnect -BeagleConnectâ„¢ Greybus Stack -**************************** - -Work in progress -================ - +BeagleConnectâ„¢ is built using `Greybus <https://kernel-recipes.org/en/2015/talks/an-introduction-to-greybus/>`__ +code in the Linux kernel originally designed for mobile phones. To understand a bit more about how the BeagleConnectâ„¢ Greybus stack is being built, this section helps describe the development currently in progress and the principles of operation. @@ -65,16 +61,18 @@ Software architecture TODO items ---------- -* Linux kernel driver +* :strike:`Linux kernel driver` (wpanusb and bcfserial still need to be upstreamed) * Provisioning -* Firmware for host CC13x +* :strike:`Firmware for host CC13x` + +* :strike:`Firmware for device CC13x` -* Firmware for device CC13x +* Unify firmware for host/device CC13x -* Click Board drivers and device tree formatted metadata for 100 or so Click - Boards +* :strike:`Click Board drivers and device tree formatted metadata for 100 or so Click + Boards` * Click Board plug-ins for node-red for the same 100 or so Click Boards @@ -110,7 +108,7 @@ User experience concerns provisioning is completed BeagleConnectâ„¢ Greybus demo using BeagleConnectâ„¢ Freedom -======================================================== +######################################################## BeagleConnectâ„¢ Freedom runs a subGHz IEEE 802.15.4 network. This BeagleConnectâ„¢ Greybus demo shows how to interact with GPIO, I2C and mikroBUS add-on boards remotely connected over a BeagleConnectâ„¢ Freedom. -- GitLab From 44be7c35e3d2ffa942920895e67d07b7e691e660 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 23:08:05 -0400 Subject: [PATCH 56/83] beagleconnect: fix some links --- boards/beagleconnect/freedom/index.rst | 8 ++++---- boards/beagleconnect/freedom/usage.rst | 2 +- boards/beagleconnect/freedom/zephyr.rst | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/boards/beagleconnect/freedom/index.rst b/boards/beagleconnect/freedom/index.rst index bd602d22..e4199e02 100644 --- a/boards/beagleconnect/freedom/index.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -160,12 +160,12 @@ Each BeagleBoard.org BeagleConnectâ„¢ solution will be: Getting Started *************** -* `Typical usage with a Linux host </boards/beagleconnect/freedom/usage.html>`__ -* `Programming with Zephyr </boards/beagleconnect/freedom/zephyr.html>`__ +* :ref:`Typical BeagleConnect Freedom usage with a Linux host <beagleconnect-usage>` +* :ref:`Programming BeagleConnect Freedom with Zephyr <beagleconnect-zephyr>` .. toctree:: :maxdepth: 1 :hidden: - usage.rst - zephyr.rst + /boards/beagleconnect/freedom/usage.rst + /boards/beagleconnect/freedom/zephyr.rst diff --git a/boards/beagleconnect/freedom/usage.rst b/boards/beagleconnect/freedom/usage.rst index b55d5dd5..862e8974 100644 --- a/boards/beagleconnect/freedom/usage.rst +++ b/boards/beagleconnect/freedom/usage.rst @@ -1,4 +1,4 @@ -.. _beagleconnect-Usage: +.. _beagleconnect-usage: BeagleConnect Freedom Usage ########################### diff --git a/boards/beagleconnect/freedom/zephyr.rst b/boards/beagleconnect/freedom/zephyr.rst index 2836c00a..f08d7e4a 100644 --- a/boards/beagleconnect/freedom/zephyr.rst +++ b/boards/beagleconnect/freedom/zephyr.rst @@ -1,4 +1,4 @@ -.. _beagleconnect-connectivity: +.. _beagleconnect-zephyr: BeagleConnect Freedom & Zephyr ############################### -- GitLab From 2c8b0205a64ba30bd16892a0ef417caed401438c Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 23:10:48 -0400 Subject: [PATCH 57/83] beagleconnect: note usage of CC1352P7 --- boards/beagleconnect/freedom/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boards/beagleconnect/freedom/index.rst b/boards/beagleconnect/freedom/index.rst index e4199e02..f78d9d9e 100644 --- a/boards/beagleconnect/freedom/index.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -29,7 +29,7 @@ devices within the first year after the initial release. BeagleConnectâ„¢ Freedom ********************** -BeagleConnectâ„¢ Freedom is based on the `TI CC1352 <https://www.ti.com/product/CC1352R>`_ +BeagleConnectâ„¢ Freedom is based on the `TI CC1352 <https://www.ti.com/product/CC1352P7>`_ and is the first available BeagleConnectâ„¢ solution. It implements: * BeagleConnectâ„¢ gateway device function for Sub-GHz 802.15.4 long-range @@ -125,9 +125,9 @@ Long-range, low-power wireless ============================== BeagleConnectâ„¢ Freedom wireless hardware is built around a -`TI CC1352 <http://www.ti.com/product/CC1352R>`_ multiprotocol and multi-band +`TI CC1352 <http://www.ti.com/product/CC1352P7>`_ multiprotocol and multi-band Sub-1 GHz and 2.4-GHz wireless microcontroller (MCU). CC1352R includes a 48-MHz -Arm® Cortex®-M4F processor, 352KB Flash, 256KB ROM, 8KB Cache SRAM, 80KB of +Arm® Cortex®-M4F processor, 704KB Flash, 256KB ROM, 8KB Cache SRAM, 144KB of ultra-low leakage SRAM, and `Over-the-Air <https://en.wikipedia.org/wiki/Over-the-air_programming>`_ upgrades (OTA). -- GitLab From 89ca167ef18a2ad163405bf26c48f2d540a0f999 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 6 Sep 2022 23:11:30 -0400 Subject: [PATCH 58/83] beagleconnect: note usage of CC1352P7 --- boards/beagleconnect/freedom/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/beagleconnect/freedom/index.rst b/boards/beagleconnect/freedom/index.rst index f78d9d9e..48115ae3 100644 --- a/boards/beagleconnect/freedom/index.rst +++ b/boards/beagleconnect/freedom/index.rst @@ -126,7 +126,7 @@ Long-range, low-power wireless BeagleConnectâ„¢ Freedom wireless hardware is built around a `TI CC1352 <http://www.ti.com/product/CC1352P7>`_ multiprotocol and multi-band -Sub-1 GHz and 2.4-GHz wireless microcontroller (MCU). CC1352R includes a 48-MHz +Sub-1 GHz and 2.4-GHz wireless microcontroller (MCU). CC1352P7 includes a 48-MHz Arm® Cortex®-M4F processor, 704KB Flash, 256KB ROM, 8KB Cache SRAM, 144KB of ultra-low leakage SRAM, and `Over-the-Air <https://en.wikipedia.org/wiki/Over-the-air_programming>`_ upgrades (OTA). -- GitLab From 40db3d1ff4fbf51f5d20306405fb5b8df25da98d Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 7 Sep 2022 14:26:23 -0400 Subject: [PATCH 59/83] beagleconnect: adjust ToC again --- _static/css/custom.css | 6 +++++- boards/beagleconnect/index.rst | 18 ++++++------------ boards/beagleconnect/technology/index.rst | 3 +++ boards/beagleconnect/technology/story.rst | 2 +- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/_static/css/custom.css b/_static/css/custom.css index 20417d54..0a0f69e9 100644 --- a/_static/css/custom.css +++ b/_static/css/custom.css @@ -64,4 +64,8 @@ * fixing larger font size for paragraphs in the kconfig tables */ .wy-table-responsive td p { font-size: 100%; -} \ No newline at end of file +} + +span.strike { + text-decoration: line-through; +} diff --git a/boards/beagleconnect/index.rst b/boards/beagleconnect/index.rst index 7c2ee09f..8172f053 100644 --- a/boards/beagleconnect/index.rst +++ b/boards/beagleconnect/index.rst @@ -38,6 +38,12 @@ BeagleConnectâ„¢ technology solves: * The need to produce high-volume custom hardware cost-optimized for your requirements. +.. toctree:: + :maxdepth: 2 + + /boards/beagleconnect/technology/index.rst + /boards/beagleconnect/technology/story.rst + BeagleConnect Experience ************************* @@ -88,18 +94,6 @@ For home automaters, integration into WebThings… :alt: BeagleConnect -BeagleConnect Technology -************************ - -Learn about the technology behind BeagleConnect. - -.. toctree:: - :maxdepth: 2 - - /boards/beagleconnect/technology/index.rst - /boards/beagleconnect/technology/story.rst - - BeagleConnect Boards ******************** diff --git a/boards/beagleconnect/technology/index.rst b/boards/beagleconnect/technology/index.rst index a01e4ad5..06196ee5 100644 --- a/boards/beagleconnect/technology/index.rst +++ b/boards/beagleconnect/technology/index.rst @@ -1,3 +1,6 @@ +.. role:: strike + :class: strike + .. _beagleconnect-overview: BeagleConnect Technology diff --git a/boards/beagleconnect/technology/story.rst b/boards/beagleconnect/technology/story.rst index 4a907c06..a4f77d55 100644 --- a/boards/beagleconnect/technology/story.rst +++ b/boards/beagleconnect/technology/story.rst @@ -1,4 +1,4 @@ -.. _beagleconnect-home: +.. _beagleconnect-story: BeagleConnectâ„¢ Story ********************* -- GitLab From 6b9503a58498824f17433f5b9677673909eba107 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 7 Sep 2022 14:37:28 -0400 Subject: [PATCH 60/83] pru-cookbook: remove redundant heading --- books/pru-cookbook/projects.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/books/pru-cookbook/projects.rst b/books/pru-cookbook/projects.rst index 39263b91..808d06b1 100644 --- a/books/pru-cookbook/projects.rst +++ b/books/pru-cookbook/projects.rst @@ -7,9 +7,6 @@ Users of TI processors with PRU-ICSS have created application for many different A list of a few are shared below. For additional support resources, software and documentation visit the PRU-ICSS wiki. -PRU projects -~~~~~~~~~~~~~~ - .. dropdown:: **LEDscape** :open: @@ -308,4 +305,4 @@ PRU projects **Type:** Code Library **References:** - * https://github.com/deepakkarki/pruspeak \ No newline at end of file + * https://github.com/deepakkarki/pruspeak -- GitLab From dbb5b615abd57b372c3fd5033ec23d18260b51d1 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 7 Sep 2022 14:38:00 -0400 Subject: [PATCH 61/83] fix FAQ link --- conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf.py b/conf.py index ab559160..448c9712 100644 --- a/conf.py +++ b/conf.py @@ -121,7 +121,7 @@ html_context = { "reference_links": { "About": "https://beagleboard.org/about", "Donate": "https://beagleboard.org/donate", - "FAQ": "forum.beagleboard.org/c/faq" + "FAQ": "https://forum.beagleboard.org/c/faq" } } -- GitLab From 29cc4015752f886355b759bce18715f2057efaf4 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Wed, 7 Sep 2022 16:23:57 -0400 Subject: [PATCH 62/83] pru-cookbook: some indentation and external references --- books/pru-cookbook/01case/case.rst | 4 ++-- books/pru-cookbook/05blocks/blocks.rst | 17 +++++++++-------- books/pru-cookbook/06io/io.rst | 17 +++++++++-------- books/pru-cookbook/07more/more.rst | 11 ++++++----- books/pru-cookbook/08ai/ai.rst | 9 +++++---- books/pru-cookbook/projects.rst | 2 +- 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/books/pru-cookbook/01case/case.rst b/books/pru-cookbook/01case/case.rst index 5f5cbd44..27b035e7 100644 --- a/books/pru-cookbook/01case/case.rst +++ b/books/pru-cookbook/01case/case.rst @@ -35,7 +35,7 @@ Here we present: .. TODO Switch from LEDscape to FPP -* `Robotics Control Library <http://strawsondesign.com/docs/roboticscape/>`_ +* `Robotics Control Library <https://beagleboard.org/librobotcontrol>`_ * `BeagleLogic <https://github.com/abhishek-kakkar/BeagleLogic/wiki>`_ * `NeoPixels -- 5050 RGB LEDs with Integrated Drivers (Falcon Christmas) <http://falconchristmas.com>`_ * `RGB LED Matrix (Falcon Christmas) <http://falconchristmas.com>`_ @@ -77,7 +77,7 @@ in :ref:`case_blue`. Blue balancing -The `Robotics Control Library <http://strawsondesign.com/docs/roboticscape/>`_ is a +The `Robotics Control Library <https://beagleboard.org/librobotcontrol>`_ is a package that is already installed on the Beagle that contains a C library and example/testing programs. It uses the PRU to extend the real-time hardware of the Bone by adding eight addional servo channels and one diff --git a/books/pru-cookbook/05blocks/blocks.rst b/books/pru-cookbook/05blocks/blocks.rst index 1b62a966..f675235c 100644 --- a/books/pru-cookbook/05blocks/blocks.rst +++ b/books/pru-cookbook/05blocks/blocks.rst @@ -7,14 +7,15 @@ Here are some examples that use the basic PRU building blocks. The following are resources used in this chapter. -Resources -~~~~~~~~~~ - -* `PRU Optimizing C/C++ Compiler, v2.2, User's Guide <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ -* `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) -* `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) -* `Exploring BeagleBone by Derek Molloy <http://exploringbeaglebone.com/>`_ -* `WS2812 Data Sheet <https://cdn-shop.adafruit.com/datasheets/WS2812.pdf>`_ +.. note:: + + *Resources* + + * `PRU Optimizing C/C++ Compiler, v2.2, User's Guide <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ + * `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) + * `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) + * `Exploring BeagleBone by Derek Molloy <http://exploringbeaglebone.com/>`_ + * `WS2812 Data Sheet <https://cdn-shop.adafruit.com/datasheets/WS2812.pdf>`_ .. _memory_allocation: diff --git a/books/pru-cookbook/06io/io.rst b/books/pru-cookbook/06io/io.rst index 2d019de0..80f20a53 100644 --- a/books/pru-cookbook/06io/io.rst +++ b/books/pru-cookbook/06io/io.rst @@ -8,14 +8,15 @@ through the ``pass:[__]R30`` register. Below shows how more GPIO pins can be ac The following are resources used in this chapter. -Resources -~~~~~~~~~~ - -* `P8 Header Table <https://github.com/derekmolloy/exploringBB/blob/master/chp06/docs/BeagleboneBlackP8HeaderTable.pdf>`_ -* `P9 Header Table <https://github.com/derekmolloy/exploringBB/blob/master/chp06/docs/BeagleboneBlackP9HeaderTable.pdf>`_ -* `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) -* `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) -* `PRU Assembly Language Tools <http://www.ti.com/lit/ug/spruhv6a/spruhv6a.pdf>`_ +.. note:: + + *Resources* + + * `P8 Header Table <https://github.com/derekmolloy/exploringBB/blob/master/chp06/docs/BeagleboneBlackP8HeaderTable.pdf>`_ + * `P9 Header Table <https://github.com/derekmolloy/exploringBB/blob/master/chp06/docs/BeagleboneBlackP9HeaderTable.pdf>`_ + * `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) + * `AM335x Technical Reference Manual <http://www.ti.com/lit/pdf/spruh73>`_ (All others) + * `PRU Assembly Language Tools <http://www.ti.com/lit/ug/spruhv6a/spruhv6a.pdf>`_ Editing /boot/uEnv.txt to Access the P8 Header on the Black ************************************************************ diff --git a/books/pru-cookbook/07more/more.rst b/books/pru-cookbook/07more/more.rst index 4bae78b1..f70501a8 100644 --- a/books/pru-cookbook/07more/more.rst +++ b/books/pru-cookbook/07more/more.rst @@ -14,12 +14,13 @@ C. Detailing on how to program in assembly are beyond the scope of this text. The following are resources used in this chapter. -Resources -~~~~~~~~~~ +.. note:: -* `PRU Optimizing C/C++ Compiler, v2.2, User's Guide <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ -* `PRU Assembly Language Tools User's Guide <http://www.ti.com/lit/ug/spruhv6b/spruhv6b.pdf>`_ -* `PRU Assembly Instruction User Guide <http://www.ti.com/lit/ug/spruij2/spruij2.pdf>`_ + *Resources* + + * `PRU Optimizing C/C++ Compiler, v2.2, User's Guide <http://www.ti.com/lit/ug/spruhv7b/spruhv7b.pdf>`_ + * `PRU Assembly Language Tools User's Guide <http://www.ti.com/lit/ug/spruhv6b/spruhv6b.pdf>`_ + * `PRU Assembly Instruction User Guide <http://www.ti.com/lit/ug/spruij2/spruij2.pdf>`_ Calling Assembly from C ************************ diff --git a/books/pru-cookbook/08ai/ai.rst b/books/pru-cookbook/08ai/ai.rst index ca507562..d2e055c0 100644 --- a/books/pru-cookbook/08ai/ai.rst +++ b/books/pru-cookbook/08ai/ai.rst @@ -11,11 +11,12 @@ four PRUs. The following are resources used in this chapter. -Resources -~~~~~~~~~~~ +.. note:: -* `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) -* `BeagleBone AI PRU pins <https://docs.google.com/spreadsheets/d/1dFSBVem86vAUD7MLXvqdS-N0Efi8_g_O1iTqzql8DAo/edit#gid=0>`_ + *Resources* + + * `AM572x Technical Reference Manual <http://www.ti.com/lit/pdf/spruhz6l>`_ (AI) + * `BeagleBone AI PRU pins <https://docs.google.com/spreadsheets/d/1dFSBVem86vAUD7MLXvqdS-N0Efi8_g_O1iTqzql8DAo/edit#gid=0>`_ Moving from two to four PRUs ***************************** diff --git a/books/pru-cookbook/projects.rst b/books/pru-cookbook/projects.rst index 808d06b1..60a2482b 100644 --- a/books/pru-cookbook/projects.rst +++ b/books/pru-cookbook/projects.rst @@ -155,7 +155,7 @@ documentation visit the PRU-ICSS wiki. **Type:** Code Library Reference **References:** - * http://processors.wiki.ti.com/index.php/Soft-UART_Implementation_on_AM335X_PRU_-_Software_Users_Guide + * https://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components/PRU-ICSS/Linux_Drivers/pru-sw-uart.html .. dropdown:: **Deviant LCD** :open: -- GitLab From af02c80200561ed71cf578951ca7c60c465369e7 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:11:50 -0400 Subject: [PATCH 63/83] beaglebone-cookbook: try to fix I2C superscript --- books/beaglebone-cookbook/02sensors/sensors.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/books/beaglebone-cookbook/02sensors/sensors.rst b/books/beaglebone-cookbook/02sensors/sensors.rst index 9ddb94d7..6f15d0ad 100644 --- a/books/beaglebone-cookbook/02sensors/sensors.rst +++ b/books/beaglebone-cookbook/02sensors/sensors.rst @@ -648,7 +648,7 @@ Solution The TMP101 sensor is a common digital temperature sensor that uses a standard |I2C|-based serial protocol. -.. |I2C| replace:: I\ :sub:`2`\ C +.. |I2C| replace:: I\ :sup:`2`\ C To make this recipe, you will need: -- GitLab From 88f534c6b4fac0d6e6369321dc94303638e922f8 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:12:27 -0400 Subject: [PATCH 64/83] beaglebone-cookbook: try to fix I2C superscript --- books/beaglebone-cookbook/03displays/displays.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/books/beaglebone-cookbook/03displays/displays.rst b/books/beaglebone-cookbook/03displays/displays.rst index 2ce70cef..3abec72f 100644 --- a/books/beaglebone-cookbook/03displays/displays.rst +++ b/books/beaglebone-cookbook/03displays/displays.rst @@ -315,7 +315,7 @@ The LED matrix is a 5 V device, but you can drive it from 3.3 V. Wire, as shown :ref:`sensors_i2c_temp` shows how to use *i2cdetect* to discover the address of an |I2C| device. -.. |I2C| replace:: I\ :sub:`2`\ C +.. |I2C| replace:: I\ :sup:`2`\ C Run the *i2cdetect -y -r 2* command to discover the address of the display on |I2C| bus 2, as shown in :ref:`displays_i2cdetect`. -- GitLab From a6990900e4812d1f79c978257364ce7dd67bfcca Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:19:47 -0400 Subject: [PATCH 65/83] boards/beaglebone: fix references --- boards/beaglebone/index.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/boards/beaglebone/index.rst b/boards/beaglebone/index.rst index 7e8b32ef..a63ca813 100644 --- a/boards/beaglebone/index.rst +++ b/boards/beaglebone/index.rst @@ -22,8 +22,8 @@ included both here and in the downloadable beagleboard-docs.pdf linked on the bo of your screen. * `BeagleBone (original) <https://git.beagleboard.org/beagleboard/beaglebone/-/blob/master/BeagleBone_SRM_A6_0_1.pdf>`__ -* `BeagleBone Black </boards/beaglebone/black/index.html>`__ -* `BeagleBone Blue </boards/beaglebone/blue/index.html>`__ -* `BeagleBone AI-64 </boards/beaglebone/ai-64/index.html>`__ -* `BeagleBone AI </boards/beaglebone/ai/index.html>`__ +* :ref:`beagleboneblack-home` +* :ref:`beaglebone-blue-home` +* :ref:`bbai64-home` +* :ref:`beaglebone-ai-home` -- GitLab From 28eef498ac6594ce0654856fc6140a1ce67f2df2 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:22:46 -0400 Subject: [PATCH 66/83] boards/capes: fix reference --- boards/capes/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/capes/index.rst b/boards/capes/index.rst index 18631319..9b1adeb6 100644 --- a/boards/capes/index.rst +++ b/boards/capes/index.rst @@ -8,7 +8,7 @@ Capes Capes are add-on boards for BeagleBone or PocketBeagle families of boards. -* Learn about our compatibility layer on: `BeagleBone Cape Interface Specification </boards/capes/cape-interface-spec.html>`__ +* Learn about our compatibility layer on: :ref:`beaglebone-cape-interface-spec` .. toctree:: -- GitLab From 537c8c6eb8b4812d5bb43df21541ceb0aeabb9dc Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:23:41 -0400 Subject: [PATCH 67/83] intro/contribution: simplify FAQ URL --- intro/contribution/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index d2dd9ad5..c7f1818b 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -35,7 +35,7 @@ contact one of our administrators or moderators on https://forum.beagleboard.org Frequently Asked Questions ************************** -* `Frequently asked questions contribution category on the BeagleBoard.org Forum <https://forum.beagleboard.org/c/faq/19>`__ +* `Frequently asked questions contribution category on the BeagleBoard.org Forum <https://forum.beagleboard.org/c/faq>`__ What should I know before I get started? **************************************** -- GitLab From fcbad9a38ed8ce735ce828befdf828e54f7d7e2a Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Fri, 9 Sep 2022 13:26:15 -0400 Subject: [PATCH 68/83] intro/support: fix some references --- intro/support/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/intro/support/index.rst b/intro/support/index.rst index 40ec9248..1e49197f 100644 --- a/intro/support/index.rst +++ b/intro/support/index.rst @@ -10,7 +10,7 @@ Getting started The starting experience for all Beagles has been made to be as consistent as is possible. For any of the Beagle Linux-based open -hardware computers, visit our `getting started guide <getting-started>`__. +hardware computers, visit :ref:`beagleboard-getting-started`. .. toctree:: :maxdepth: 2 @@ -109,7 +109,7 @@ Understanding Your Beagle Working with Cape Add-on Boards ******************************* -- `Cape Documentation </boards/capes/>`__ -- `BeagleBone Cape Interface Specification </boards/capes/cape-interface-spec.html>`__ +- :ref:`capes` +- :ref:`beaglebone-cape-interface-spec` -- GitLab From 34cfce890a055d8dbb41dd52e01c0e53fa458021 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 18:23:51 -0400 Subject: [PATCH 69/83] boards/capes/overlays: move --- {capes => boards/capes}/overlays/basics.rst | 0 {capes => boards/capes}/overlays/index.rst | 0 {capes => boards/capes}/overlays/relay.rst | 0 index.rst | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename {capes => boards/capes}/overlays/basics.rst (100%) rename {capes => boards/capes}/overlays/index.rst (100%) rename {capes => boards/capes}/overlays/relay.rst (100%) diff --git a/capes/overlays/basics.rst b/boards/capes/overlays/basics.rst similarity index 100% rename from capes/overlays/basics.rst rename to boards/capes/overlays/basics.rst diff --git a/capes/overlays/index.rst b/boards/capes/overlays/index.rst similarity index 100% rename from capes/overlays/index.rst rename to boards/capes/overlays/index.rst diff --git a/capes/overlays/relay.rst b/boards/capes/overlays/relay.rst similarity index 100% rename from capes/overlays/relay.rst rename to boards/capes/overlays/relay.rst diff --git a/index.rst b/index.rst index 14375446..9b5ebe11 100644 --- a/index.rst +++ b/index.rst @@ -300,7 +300,7 @@ Capes /boards/beaglebone/blue/index /boards/beaglebone/index /boards/capes/index - cape/overlays/index.rst + /boards/capes/overlays/index /boards/pocketbeagle/original/index /boards/beagleconnect/freedom/index /boards/beagleboard/index -- GitLab From 7db29b47432dca5fd77587302aeb01624d133d7a Mon Sep 17 00:00:00 2001 From: Kai Yamada <gpioblink@gmail.com> Date: Thu, 11 Aug 2022 02:12:57 +0900 Subject: [PATCH 70/83] fix full path --- boards/capes/overlays/relay.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/boards/capes/overlays/relay.rst b/boards/capes/overlays/relay.rst index 7f133a44..85e99be1 100644 --- a/boards/capes/overlays/relay.rst +++ b/boards/capes/overlays/relay.rst @@ -36,9 +36,8 @@ by adding the following to the U-Boot options .. code-block:: - uboot_overlay_addr0=/boot/dtbs/X.XX.XXX-ti-rXX/overlays/BBORG_RELAY-00A2.dtbo + uboot_overlay_addr0=BBORG_RELAY-00A2.dtbo -Enter the kernel version specified by uname in the `X.XX.XXX-ti-rXX` part. Usage ****** -- GitLab From 8d030cf3a29c11a9245ca175ce1a54129700605c Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 18:28:53 -0400 Subject: [PATCH 71/83] capes/overlays/relay: fix headers --- boards/capes/overlays/relay.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boards/capes/overlays/relay.rst b/boards/capes/overlays/relay.rst index 85e99be1..834aef36 100644 --- a/boards/capes/overlays/relay.rst +++ b/boards/capes/overlays/relay.rst @@ -1,7 +1,7 @@ .. _bone-cape-relay: BeagleBoard.org BeagleBone Relay Cape -######### +##################################### Relay Cape, as the name suggests, is a simple Cape with a relay on it. It contains four relays, each of which can be operated independently from the BeagleBone. @@ -16,7 +16,7 @@ How to Use --------------- Installation -****** +************ No special configuration is required. When you plug Cape into your BeagleBoard, it is automatically recognized by the Cape Universal function. @@ -57,4 +57,4 @@ This allows you to adjust the brightness; entering 1 for brightness turns it ON, and entering 0 for OFF. The four relays can be changed individually -by changing the number after "relay. \ No newline at end of file +by changing the number after "relay. -- GitLab From 5af996bd3d2b4ed3deab7a9de4df0152b32cc8a4 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 18:29:40 -0400 Subject: [PATCH 72/83] intro/support: remove todo directive --- intro/support/index.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/intro/support/index.rst b/intro/support/index.rst index 1e49197f..f374c31c 100644 --- a/intro/support/index.rst +++ b/intro/support/index.rst @@ -53,9 +53,6 @@ Diagnostic tools Best to be prepared with good diagnostic information to aide with support. -.. todo:: - Need a reference to how to run `beagle-version`. - .. note:: #TODO#: Need a reference to how to run `beagle-version`. -- GitLab From 4f7b87ada410497ce0770ec5afc4c5ce2bb39772 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 21:09:49 -0400 Subject: [PATCH 73/83] boards/capes/overlays: integrated it a bit better with our current documentation --- boards/capes/index.rst | 22 ++++++++++++++++++++-- boards/capes/overlays/basics.rst | 25 ------------------------- boards/capes/{overlays => }/relay.rst | 5 +---- 3 files changed, 21 insertions(+), 31 deletions(-) delete mode 100644 boards/capes/overlays/basics.rst rename boards/capes/{overlays => }/relay.rst (93%) diff --git a/boards/capes/index.rst b/boards/capes/index.rst index 9b1adeb6..c33d5166 100644 --- a/boards/capes/index.rst +++ b/boards/capes/index.rst @@ -6,14 +6,32 @@ Capes .. note:: This page is under development. -Capes are add-on boards for BeagleBone or PocketBeagle families of boards. +Capes are add-on boards for BeagleBone or PocketBeagle families of boards. Using a Cape add-on board, you can easily add +sensors, communication peripherals, and more. -* Learn about our compatibility layer on: :ref:`beaglebone-cape-interface-spec` +Please visit `BeagleBoard.org - Cape <https://beagleboard.org/capes>`_ for the list of currently available Cape add-on boards. +In the BeagleBone board family, there are many variants, such as :ref:`beagleboneblack-home`, :ref:`beaglebone-ai-home`, +:ref:`bbai64-home` and compatibles such as `SeeedStudio BeagleBone Green <https://beagleboard.org/green>`_, +`SeeedStudio BeagleBone Green Wireless <https://beagleboard.org/green-wireless>`_, `SeeedStudio BeagleBone Green Gateway +<https://wiki.seeedstudio.com/BeagleBone-Green-Gateway/>`_ and more. + +The :ref:`beaglebone-cape-interface-spec` enables a common set of device tree overlays and software to be utilized +on each of these different BeagleBone boards. + +Each hardware has different internal pin assignments +and the number of peripherals in the SoC, but the device tree overlay absorbs these differences. + +The user of the Cape add-on boards are essentially able to use it +across the corresponding Boards without changing any code at all. + +Find the instructions below on using each cape: +* :ref:`bone-cape-relay` .. toctree:: :maxdepth: 2 :hidden: /boards/capes/cape-interface-spec + /boards/capes/relay diff --git a/boards/capes/overlays/basics.rst b/boards/capes/overlays/basics.rst deleted file mode 100644 index a9ae5d04..00000000 --- a/boards/capes/overlays/basics.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. _bone-cape-basics: - -Basics -####### - -BeagleBone has sold a module called Cape, which connects to the BeagleBoard and the PocketBeagle. - -Using Cape, you can easily add sensors, communication peripherals, etc. with ease. - -Please see below for Cape available to date. - -`BeagleBoard.org - Cape <https://beagleboard.org/capes>`_ - -Features -============= - -For example, BeagleBoard has various variants such as Black, Green, and AI. -The device tree overlay feature allows BeagleBone capes -to be identical across these different pieces of hardware. - -Each hardware has different internal pin assignments -and the number of peripherals in the SoC, but the device tree overlay absorbs these differences. - -The user of Cape are essentially able to use it -across the corresponding Boards without changing any code at all. \ No newline at end of file diff --git a/boards/capes/overlays/relay.rst b/boards/capes/relay.rst similarity index 93% rename from boards/capes/overlays/relay.rst rename to boards/capes/relay.rst index 834aef36..f44d1e24 100644 --- a/boards/capes/overlays/relay.rst +++ b/boards/capes/relay.rst @@ -6,15 +6,12 @@ BeagleBoard.org BeagleBone Relay Cape Relay Cape, as the name suggests, is a simple Cape with a relay on it. It contains four relays, each of which can be operated independently from the BeagleBone. -`Schematic <https://github.com/beagleboard/capes/tree/master/beaglebone/Relay>`_ +`Schematic <https://git.beagleboard.org/beagleboard/capes/-/tree/master/beaglebone/Relay>`_ .. note:: The following describes how to use the device tree overlay under development. The description may not be suitable for those using older firmware. -How to Use ---------------- - Installation ************ -- GitLab From 80c0812331a7e037741bddd7b5fe4240dccdb5d7 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 21:17:23 -0400 Subject: [PATCH 74/83] boards/capes: cleanup --- boards/capes/index.rst | 1 + boards/capes/overlays/index.rst | 12 ------------ boards/capes/relay.rst | 6 +++++- index.rst | 1 - 4 files changed, 6 insertions(+), 14 deletions(-) delete mode 100644 boards/capes/overlays/index.rst diff --git a/boards/capes/index.rst b/boards/capes/index.rst index c33d5166..e675e038 100644 --- a/boards/capes/index.rst +++ b/boards/capes/index.rst @@ -26,6 +26,7 @@ The user of the Cape add-on boards are essentially able to use it across the corresponding Boards without changing any code at all. Find the instructions below on using each cape: + * :ref:`bone-cape-relay` .. toctree:: diff --git a/boards/capes/overlays/index.rst b/boards/capes/overlays/index.rst deleted file mode 100644 index 9b01043a..00000000 --- a/boards/capes/overlays/index.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. _beagleboard-cape: - -Capes Overlays -############### - -.. note:: This section is under developmement right now. - -.. toctree:: - :maxdepth: 1 - - basics.rst - relay.rst diff --git a/boards/capes/relay.rst b/boards/capes/relay.rst index f44d1e24..6f09fdfc 100644 --- a/boards/capes/relay.rst +++ b/boards/capes/relay.rst @@ -3,10 +3,14 @@ BeagleBoard.org BeagleBone Relay Cape ##################################### +.. image:: images/BeagleBoneRelayCapeA2-400x274.png + :align: center + Relay Cape, as the name suggests, is a simple Cape with a relay on it. It contains four relays, each of which can be operated independently from the BeagleBone. -`Schematic <https://git.beagleboard.org/beagleboard/capes/-/tree/master/beaglebone/Relay>`_ +* `Order page <https://beagleboard.org/capes#relay>`_ +* `Schematic <https://git.beagleboard.org/beagleboard/capes/-/tree/master/beaglebone/Relay>`_ .. note:: The following describes how to use the device tree overlay under development. diff --git a/index.rst b/index.rst index 9b5ebe11..0e288395 100644 --- a/index.rst +++ b/index.rst @@ -300,7 +300,6 @@ Capes /boards/beaglebone/blue/index /boards/beaglebone/index /boards/capes/index - /boards/capes/overlays/index /boards/pocketbeagle/original/index /boards/beagleconnect/freedom/index /boards/beagleboard/index -- GitLab From a0332cd81fd4600c707a18c16c3aa93301cdb264 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sat, 10 Sep 2022 21:27:52 -0400 Subject: [PATCH 75/83] boards/capes/relay: moved picture down so it looks better --- boards/capes/relay.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boards/capes/relay.rst b/boards/capes/relay.rst index 6f09fdfc..fe9b9b6a 100644 --- a/boards/capes/relay.rst +++ b/boards/capes/relay.rst @@ -3,12 +3,12 @@ BeagleBoard.org BeagleBone Relay Cape ##################################### -.. image:: images/BeagleBoneRelayCapeA2-400x274.png - :align: center - Relay Cape, as the name suggests, is a simple Cape with a relay on it. It contains four relays, each of which can be operated independently from the BeagleBone. +.. image:: images/BeagleBoneRelayCapeA2-400x274.png + :align: center + * `Order page <https://beagleboard.org/capes#relay>`_ * `Schematic <https://git.beagleboard.org/beagleboard/capes/-/tree/master/beaglebone/Relay>`_ -- GitLab From 4b7edc2d217038c848adad084485abe3a32308bc Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 13:55:55 -0400 Subject: [PATCH 76/83] link to relay cape --- index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.rst b/index.rst index 0e288395..872f7eea 100644 --- a/index.rst +++ b/index.rst @@ -183,6 +183,8 @@ Capes movement, sensing, power management and communication .. grid-item-card:: + :link: bone-cape-relay + :link-type: ref **BeagleBone® Relay Cape** ^^^ -- GitLab From 4171c16a8db6edaa928de23ae5c8cbb86d182ae9 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 14:34:58 -0400 Subject: [PATCH 77/83] intro/contribution: add donate link --- intro/contribution/index.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index c7f1818b..843fa001 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -9,6 +9,9 @@ Contribution .. important:: First off, thanks for taking the time to think about contributing! +.. note:: + For donations, see `BeagleBoard.org - Donate <https://beagleboard.org/donate>`__. + The BeagleBoard.org Foundation maintains source for many open source projects. Example projects suitable for first contributions: -- GitLab From 44db389d706a8e6ca44bee4848702ef87d6fcc67 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 14:51:16 -0400 Subject: [PATCH 78/83] contribution: WIP fixes with errors --- intro/contribution/index.rst | 2 +- ...ream-guidelines.rst => linux-upstream.rst} | 59 ++++++++++++------- 2 files changed, 39 insertions(+), 22 deletions(-) rename intro/contribution/{upstream-guidelines.rst => linux-upstream.rst} (85%) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 7278650c..f9e0ce82 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -68,4 +68,4 @@ Style and usage guidelines /intro/contribution/git-usage /intro/contribution/style - /intro/contribution/upstream-guidelines \ No newline at end of file + /intro/contribution/linux-upstream diff --git a/intro/contribution/upstream-guidelines.rst b/intro/contribution/linux-upstream.rst similarity index 85% rename from intro/contribution/upstream-guidelines.rst rename to intro/contribution/linux-upstream.rst index c2e3f847..267f4698 100644 --- a/intro/contribution/upstream-guidelines.rst +++ b/intro/contribution/linux-upstream.rst @@ -1,7 +1,7 @@ -.. _beagleboard-contribute: +.. _beagleboard-linux-upstream: Upstream Kernel Contributions -######### +############################# .. note:: For detailed information on Kernel Developmement checkout the official @@ -16,26 +16,30 @@ of your change being accepted. .. note:: This version is an unofficial draft and is subject to change. Pre-requisites ---------------- +*************** The following are the skills that are needed before you actually start to contribute to the linux kernel: - - git - - C-Programming - - Cross-arch Development - - Basics of embedded buses (I2C, UART, SPI, etc.) - - Device Trees - - Drivers in Embedded Systems + + - :ref:`linux-upstream-more-git` + - :ref:`linux-upstream-c-programming` + - :ref:`linux-upstream-cross-arch` + - :ref:`linux-upstream-embedded-busses` + - :ref:`linux-upstream-drivers` + - :ref:`linux-upstream-device-trees` + +For more guidance, check out the :ref:`linux-upstream-additional-resources`. + +.. _linux-upstream-more-git: More Git! ---------- +********* -It is highly recommended that you go through -`Git Usage <https://docs.beagleboard.io/contribution/git-usage.html>`_ before starting +It is highly recommended that you go through :ref:`beagleboard-git-usage` before starting to read and follow these guidelines. You will need to have a proper git setup on your computer inorder to effectively follow these steps. Creating your first patch -************************* +========================= When you first enter the world of Linux Kernel development from a background in contributing over gitlab or github, the terminologies slightly change. @@ -89,6 +93,7 @@ For configuring your email ID for sending patches refer to this excellent stacko Finally, after you have configured you email properly, you can send out a patch using: .. code-block:: + git send-email 0001-contribute.rst-Add-git-section.patch replacing ofcourse the above patchfile name with whatever was your own patch. @@ -99,15 +104,19 @@ Here, you have to write the email address of the list you want to send out the p to add more email addresses of whoever you want to keep in CC. Generally it is a good idea to keep yourself in CC. +.. _linux-upstream-c-programming: + C-Programming -------------- +************* It is highly recommended that you have proficiency in C-Programming, because well the kernel is mostly written in C! For starters, you can go through Dennis Ritchie's C Programming book to understand the language and also solve the excercises given there for getting hands on. +.. _linux-upstream-cross-arch: + Cross-arch Development ----------------------- +********************** While working with the kernel, you'll most likely not be compiling it on the machine that you intend to actually boot it on. @@ -117,8 +126,10 @@ What you'd do instead is pick a much powerful machine like a Desktop PC or lapto then use cross arch compilers like the arm-gcc for instance to compile the kernel for your target device. -Embedded buses --------------- +.. _linux-upstream-embedded-busses: + +Basics of embedded busses (I2C, UART, SPI, etc.) +************************************************ In the world of embedded, you often need to communicate with peripherals over very low level protocols. To name a few, I2C, UART, SPI, etc. are all serial protocols used to communicate with a variety of devices and @@ -127,8 +138,10 @@ peripherals. It's recommended to understand atleast the basics of each of the protocol so you know what's actually going on when you write for instance an I2C or SPI driver to communicate with let's say a sensor. -Device Drivers -------- +.. _linux-upstream-drivers: + +Device Drivers in Embedded Systems +********************************** I used the term "Drivers" in the above section, but what does it really mean? @@ -144,8 +157,10 @@ TODO TODO +.. _linux-upstream-device-trees: + Device Trees ------------- +************ We just learned about drivers, and it's time that once you have written a driver in the kernel, you obviously want it to work! So how do we really tell the kernel which drivers to load? @@ -162,8 +177,10 @@ client program’s memory and passes a pointer to the device tree to the client. A device tree is a tree data structure with nodes that describe the physical devices in a system. +.. _linux-upstream-additional-resources: + Additional Resources --------------------- +******************** 1. `Device Trees for Dummies PDF <https://elinux.org/images/f/f9/Petazzoni-device-tree-dummies_0.pdf>`_ 2. `What are Device Drivers <https://tldp.org/LDP/tlk/dd/drivers.html>`_ -- GitLab From a01c8ef98c7923651463e2aa35712c7dd7876da4 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 19:43:53 -0400 Subject: [PATCH 79/83] intro: fixes, elaborations --- intro/contribution/index.rst | 29 ++++++++++++++++++++++++----- intro/support/index.rst | 19 +++++++++++-------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index f9e0ce82..2905bce1 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -26,10 +26,10 @@ to propose changes to this document in a pull request. Code of Conduct *************** -This project and everyone participating in it is governed by the same code of conduct. +This project and everyone participating are governed by the same code of conduct. .. note:: - Check out https://forum.beagleboard.org/faq as a starting place to unify our code of conduct. + Check out https://forum.beagleboard.org/faq as a starting place for our code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to @@ -38,22 +38,42 @@ contact one of our administrators or moderators on https://forum.beagleboard.org Frequently Asked Questions ************************** +Please refer to the technical and contribution frequently asked questions pages before posting any of your own questions. Please +feel encouraged to ask follow-up questions if any of the answers are not clear enough. + * `Frequently asked questions contribution category on the BeagleBoard.org Forum <https://forum.beagleboard.org/c/faq>`__ What should I know before I get started? **************************************** +The more you know about Linux and contributing to upstream projects, the better, but this knowledge isn't strictly required. Simply +reading about contributing to Linux and upstream projects can help build your vocabulary in a meaningful way to help out. Learn about +Linux contributions in the :ref:`beagleboard-linux-upstream` section. + +The most useful thing to know is how to ask smart questions. Read about this in the :ref:`intro-getting-support` section. If you ask +smart questions on the issue trackers and forum, you'll be doing a lot to help us improve the designs and documentation. + +.. toctree:: + :maxdepth: 1 + :hidden: + + /intro/contribution/linux-upstream + How can I contribute? ********************* +The most obvious way to contribute is using the `git.beagleboard.org Gitlab server <https://git.beagleboard.org>`_ to report +bugs, suggest enhancements and providing merge requests, also called pull requests, the provide fixes to software, hardware +designs and documentation. + Reporting bugs =============== Suggesting enhancements ======================= -Submitting pull requests -======================== +Submitting merge requests +========================= Style and usage guidelines ************************** @@ -68,4 +88,3 @@ Style and usage guidelines /intro/contribution/git-usage /intro/contribution/style - /intro/contribution/linux-upstream diff --git a/intro/support/index.rst b/intro/support/index.rst index f374c31c..99265041 100644 --- a/intro/support/index.rst +++ b/intro/support/index.rst @@ -17,6 +17,7 @@ hardware computers, visit :ref:`beagleboard-getting-started`. /intro/support/getting-started +.. _intro-getting-support: Getting support *************** @@ -36,16 +37,16 @@ there. Be sure to ask `smart questions <http://www.catb.org/~esr/faqs/smart-questions.html>`__ that provide the following: -* What am I trying to accomplish? -* What did find when researching how to accomplish it? -* What are the detailed results of what I tried? -* How did these results differ from what I expected? -* What would I consider to be a success? +* What are you trying to accomplish? +* What did you find when researching how to accomplish it? +* What are the detailed results of what you tried? +* How did these results differ from what you expected? +* What would you consider to be a success? -.. note:: +.. important:: Remember that community developers are volunteering their expertise. If you - want paid support, there are options for that. Respect developers time and - expertise and they might be happy to share with you. + want paid support, there are :ref:`consulting-resources` options for that. Respect + developers time and expertise and they might be happy to share with you. Diagnostic tools ================ @@ -72,6 +73,8 @@ of the entire community. - `Mailing List <https://forum.beagleboard.org>`__ - `Live Chat <https://beagleboard.org/chat>`__ +.. _consulting-resources: + Consulting and other resources ============================== -- GitLab From 04cfab263e4632a7175bed7a35b1c6dc9f3dffb4 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 19:46:32 -0400 Subject: [PATCH 80/83] intro/contribution: linux prerequisites --- intro/contribution/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intro/contribution/index.rst b/intro/contribution/index.rst index 2905bce1..642543c0 100644 --- a/intro/contribution/index.rst +++ b/intro/contribution/index.rst @@ -48,7 +48,7 @@ What should I know before I get started? The more you know about Linux and contributing to upstream projects, the better, but this knowledge isn't strictly required. Simply reading about contributing to Linux and upstream projects can help build your vocabulary in a meaningful way to help out. Learn about -Linux contributions in the :ref:`beagleboard-linux-upstream` section. +the skills required for Linux contributions in the :ref:`beagleboard-linux-upstream` section. The most useful thing to know is how to ask smart questions. Read about this in the :ref:`intro-getting-support` section. If you ask smart questions on the issue trackers and forum, you'll be doing a lot to help us improve the designs and documentation. -- GitLab From 9ea9a0287485c240c324ecb1f88b1d362094fde5 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 20:05:06 -0400 Subject: [PATCH 81/83] books/beaglebone-cookbook: quick capes page fixes --- books/beaglebone-cookbook/09capes/capes.rst | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/books/beaglebone-cookbook/09capes/capes.rst b/books/beaglebone-cookbook/09capes/capes.rst index d4ce5f73..47eeb513 100644 --- a/books/beaglebone-cookbook/09capes/capes.rst +++ b/books/beaglebone-cookbook/09capes/capes.rst @@ -292,7 +292,7 @@ In most cases, the same pin should never be used on two different capes, though - I2C2_SCL and I2C2_SDA - |I2C| is a shared bus, and the *I2C2_SCL* and *I2C2_SDA* pins default to having this bus enabled for use by cape expansion ID EEPROMs. -.. |I2C| replace:: I\ :sub:`2`\ C +.. |I2C| replace:: I\ :sup:`2`\ C .. _capes_soldering: @@ -667,7 +667,7 @@ Outline SVG for BeagleBone cape (beaglebone_cape_boardoutline.svg) .. </dl> .. ++++ -The measurements are taken from the `BeagleBone Black System Reference Manual <http://bit.ly/1C5rSa8>`_, as shown in :ref:`capes_dimensions_fig`. +The measurements are taken from the :ref:`beagleboneblack-mechanical` section of the :ref:`BeagleBone Black System Reference Manual <beagleboneblack-home>`, as shown in :ref:`capes_dimensions_fig`. .. _capes_dimensions_fig: @@ -1227,15 +1227,10 @@ There's no real substitute for getting to know your contract manufacturer, its c communication style, strengths, and weaknesses. Look around your town to see if anyone is doing this type of work and see if they'll give you a tour. -.. note:: ? - -.. To DO - fix this - -Don't confuse CircuitHub and CircuitCo. CircuitCo is the official contract manufacturer of -BeagleBoard.org and not the same company as CircuitHub, the online contract manufacturing -service. CircuitCo would be an excellent choice for you to consider to perform your contract -manufacturing, but it doesn't offer an online quote service at this point, so it isn't as easy -to include details on how to engage with it in this book. - +.. note:: + Don't confuse CircuitHub and CircuitCo. CircuitCo is the official contract manufacturer of + BeagleBoard.org and not the same company as CircuitHub, the online contract manufacturing + service. CircuitCo would be an excellent choice for you to consider to perform your contract + manufacturing, but it doesn't offer an online quote service at this point, so it isn't as easy + to include details on how to engage with it in this book. -- GitLab From 4051a3bf52f96b1854af4eb83c3dba3c21024c45 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Sun, 11 Sep 2022 20:38:00 -0400 Subject: [PATCH 82/83] beaglebone-cookbook: circuitco updates --- books/beaglebone-cookbook/09capes/capes.rst | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/books/beaglebone-cookbook/09capes/capes.rst b/books/beaglebone-cookbook/09capes/capes.rst index 47eeb513..1843037d 100644 --- a/books/beaglebone-cookbook/09capes/capes.rst +++ b/books/beaglebone-cookbook/09capes/capes.rst @@ -31,6 +31,8 @@ You want to display the Bone's desktop on a portable LCD. Solution -------- +.. note:: #TODO# The 4D Systems LCD capes would make a better example. CircuitCo is out of business. + A number of `LCD capes <http://bit.ly/1AjlXJ9>`_ are built for the Bone, ranging in size from three to seven inches. This recipe attaches a seven-inch `BeagleBone LCD7 <http://bit.ly/1NK8Hra>`_ from `CircuitCo <http://circuitco.com/>`_ (shown in :ref:`capes_7inLCD_fig`) to the Bone. @@ -257,6 +259,8 @@ LCD Backside Back side of LCD7 cape, :ref:`capes_lcd_backside` was originally posted by CircuitCo at http://elinux.org/File:BeagleBone-LCD-Backside.jpg under a `Creative Commons Attribution-ShareAlike 3.0 Unported License <http://creativecommons.org/licenses/by-sa/3.0/>`_. +.. note:: #TODO# One of the 4D Systems LCD capes would make a better example for an LCD cape. The CircuitCo cape is no longer available. + .. figure:: figures/LCD7back.png :align: center :alt: @@ -264,6 +268,8 @@ LCD Backside Next, take a note of each pin utilized by each cape. The `BeagleBone Capes catalog <http://beaglebonecapes.com>`_ provides a graphical representation for the pin usage of most capes, as shown in :ref:`Audio_cape_pins_fig` for the Circuitco Audio Cape. +.. note:: #TODO# Bela would make a better example for an audio cape. The CircuitCo cape is no longer available. + .. _Audio_cape_pins_fig: Audio cape pins @@ -1229,8 +1235,4 @@ doing this type of work and see if they'll give you a tour. .. note:: - Don't confuse CircuitHub and CircuitCo. CircuitCo is the official contract manufacturer of - BeagleBoard.org and not the same company as CircuitHub, the online contract manufacturing - service. CircuitCo would be an excellent choice for you to consider to perform your contract - manufacturing, but it doesn't offer an online quote service at this point, so it isn't as easy - to include details on how to engage with it in this book. + Don't confuse CircuitHub and CircuitCo. CircuitCo is closed. -- GitLab From 7fc0b6465018bbe7c861174f94a532e49d1a226b Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Tue, 13 Sep 2022 15:20:13 -0400 Subject: [PATCH 83/83] books/beaglebone-cookbook/capes: update callouts Using style from https://github.com/ray-project/ray/pull/28376 The extension code would need to be added for this to work. --- books/beaglebone-cookbook/09capes/capes.rst | 332 ++++++++++---------- 1 file changed, 166 insertions(+), 166 deletions(-) diff --git a/books/beaglebone-cookbook/09capes/capes.rst b/books/beaglebone-cookbook/09capes/capes.rst index 1843037d..0e38696e 100644 --- a/books/beaglebone-cookbook/09capes/capes.rst +++ b/books/beaglebone-cookbook/09capes/capes.rst @@ -85,7 +85,7 @@ You want to use a small LCD to display things other than the desktop. Solution --------- -The `MiniDisplay <http://bit.ly/1xd0r8>`p_ is a 128 x 128 full-color LCD cape that just fits on the +The `MiniDisplay <http://bit.ly/1xd0r8p>`_ is a 128 x 128 full-color LCD cape that just fits on the Bone, as shown in :ref:`capes_miniDisplay_fig`. .. _capes_miniDisplay_fig: @@ -122,7 +122,7 @@ Attach to the Bone and apply power. Then run the following commands: The MiniDisplay uses the Serial Peripheral Interface (SPI) interface, and it's not initialized. The `manufacturer's website <http://bit.ly/1xd0r8p>`_ suggests enabling SPI0 by using the following commands: -.. code-block:: bash +.. code-block:: shell-session bone$ export SLOTS=/sys/devices/bone_capemgr.*/slots bone$ echo BB-SPIDEV0 > $SLOTS @@ -130,53 +130,54 @@ The `manufacturer's website <http://bit.ly/1xd0r8p>`_ suggests enabling SPI0 by Hmmm, something isn't working here. Here's how to see what happened: -.. code-block:: bash +.. callout:: + + .. code-block:: shell-session - bone$ dmesg | tail - [ 625.334497] bone_capemgr.9: part_number 'BB-SPIDEV0', version 'N/A' - [ 625.334673] bone_capemgr.9: slot #11: generic override - [ 625.334720] bone_capemgr.9: bone: Using override eeprom data at slot 11 - [ 625.334769] bone_capemgr.9: slot #11: 'Override Board Name,00A0,Override \ - Manuf,BB-SPIDEV0' - [ 625.335026] bone_capemgr.9: slot #11: \Requesting part number/version based \ - 'BB-SPIDEV0-00A0.dtbo - [ 625.335076] bone_capemgr.9: slot #11: Requesting firmware \ - 'BB-SPIDEV0-00A0.dtbo' \ - for board-name 'Override Board Name', version '00A0' - [ 625.335144] bone_capemgr.9: slot #11: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; \ - converting to live tree - [ 625.341842] bone_capemgr.9: slot #11: BB-SPIDEV0 conflict P9.21 \ - (#10:bspwm_P9_21_b) <a class="co" id="capemgr_conflict_co" href="#capemgr_conflict" ><img src="callouts/1.png" alt="1"/></a> - [ 625.351296] bone_capemgr.9: slot #11: Failed verification + bone$ dmesg | tail + [ 625.334497] bone_capemgr.9: part_number 'BB-SPIDEV0', version 'N/A' + [ 625.334673] bone_capemgr.9: slot #11: generic override + [ 625.334720] bone_capemgr.9: bone: Using override eeprom data at slot 11 + [ 625.334769] bone_capemgr.9: slot #11: 'Override Board Name,00A0,Override \ + Manuf,BB-SPIDEV0' + [ 625.335026] bone_capemgr.9: slot #11: \Requesting part number/version based \ + 'BB-SPIDEV0-00A0.dtbo + [ 625.335076] bone_capemgr.9: slot #11: Requesting firmware \ + 'BB-SPIDEV0-00A0.dtbo' \ + for board-name 'Override Board Name', version '00A0' + [ 625.335144] bone_capemgr.9: slot #11: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; \ + converting to live tree + [ 625.341842] bone_capemgr.9: slot #11: BB-SPIDEV0 conflict P9.21 \ + (#10:bspwm_P9_21_b) # <1> + [ 625.351296] bone_capemgr.9: slot #11: Failed verification + + .. annotations:: + + <1> Shows there is a conflict for pin <code>P9_21</code>: it's already configured for pulse width modulation (PWM). +Here's how to see what's already configured: -.. <dl class="calloutlist"> -.. <dt><a class="co" id="capemgr_conflict" href="#capemgr_conflict_co"><img src="callouts/1.png" alt="1"/></a></dt> -.. <dd>Shows there is a conflict for pin <code>P9_21</code>: it's already configured for pulse width modulation (PWM).</dd> -.. </dl> -Here's how to see what's already configured: +.. callout:: -.. code-block:: bash + .. code-block:: shell-session - bone$ cat $SLOTS - 0: 54:PF--- - 1: 55:PF--- - 2: 56:PF--- - 3: 57:PF--- - 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G - 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI - 7: ff:P-O-L Override Board Name,00A0,Override Manuf,bspm_P9_42_27 - 8: ff:P-O-L Override Board Name,00A0,Override Manuf,bspm_P9_41_27 - 9: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm - 10: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P9_21_b <a class="co" id="capemgr_load_co" href="#capemgr_load"><img src="callouts/1.png" alt="1"/></a> + bone$ cat $SLOTS + 0: 54:PF--- + 1: 55:PF--- + 2: 56:PF--- + 3: 57:PF--- + 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G + 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI + 7: ff:P-O-L Override Board Name,00A0,Override Manuf,bspm_P9_42_27 + 8: ff:P-O-L Override Board Name,00A0,Override Manuf,bspm_P9_41_27 + 9: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm + 10: ff:P-O-L Override Board Name,00A0,Override Manuf,bspwm_P9_21_b # <1> + .. annotations:: -.. <dl class="calloutlist"> -.. <dt><a id="capemgr_load" href="#capemgr_load_co"><img src="callouts/1.png" alt="1"/></a></dt> -.. <dd>You can see the eMMC, HDMI, and three PWMs are already using some of the pins. Slot 10 shows <code>P9_21</code> is in use by a PWM.</dd> -.. </dl> + <1> You can see the eMMC, HDMI, and three PWMs are already using some of the pins. Slot 10 shows <code>P9_21</code> is in use by a PWM. You can unconfigure it by using the following commands: @@ -431,147 +432,146 @@ the test status with the code in :ref:`capes_quickBot_motor_test_code`. Testing the quickBot motors interface (quickBot_motor_test.js) ============================================================== -.. code-block:: bash +.. callout:: + + .. code-block:: javascript + + #!/usr/bin/env node + var b = require('bonescript'); + var M1_SPEED = 'P9_16'; // <1> + var M1_FORWARD = 'P8_15'; + var M1_BACKWARD = 'P8_13'; + var M2_SPEED = 'P9_14'; + var M2_FORWARD = 'P8_9'; + var M2_BACKWARD = 'P8_11'; + var freq = 50; // <2> + var fast = 0.95; + var slow = 0.7; + var state = 0; // <3> + + b.pinMode(M1_FORWARD, b.OUTPUT); // <4> + b.pinMode(M1_BACKWARD, b.OUTPUT); + b.pinMode(M2_FORWARD, b.OUTPUT); + b.pinMode(M2_BACKWARD, b.OUTPUT); + b.analogWrite(M1_SPEED, 0, freq); // <5> + b.analogWrite(M2_SPEED, 0, freq); + + updateMotors(); // <6> + + function updateMotors() { + //console.log("Setting state = " + state); // <7> + updateLEDs(state); + switch(state) { // <3> + case 0: + default: + M1_set(0); // <8> + M2_set(0); + state = 1; // <3> + break; + case 1: + M1_set(slow); + M2_set(slow); + state = 2; + break; + case 2: + M1_set(slow); + M2_set(-slow); + state = 3; + break; + case 3: + M1_set(-slow); + M2_set(slow); + state = 4; + break; + case 4: + M1_set(fast); + M2_set(fast); + state = 0; + break; + } + setTimeout(updateMotors, 2000); // <3> + } - #!/usr/bin/env node - var b = require('bonescript'); - var M1_SPEED = 'P9_16'; <a class="co" id="co_hello_CO1-1_unique" href="#callout_hello_CO1-1_unique"><img src="callouts/1.png" alt="1"/></a> - var M1_FORWARD = 'P8_15'; - var M1_BACKWARD = 'P8_13'; - var M2_SPEED = 'P9_14'; - var M2_FORWARD = 'P8_9'; - var M2_BACKWARD = 'P8_11'; - var freq = 50; <a class="co" id="co_hello_CO1-2_unique" href="#callout_hello_CO1-2_unique"><img src="callouts/2.png" alt="2"/></a> - var fast = 0.95; - var slow = 0.7; - var state = 0; <a class="co" id="co_hello_CO1-3_unique" href="#callout_hello_CO1-3_unique"><img src="callouts/3.png" alt="3"/></a> - - b.pinMode(M1_FORWARD, b.OUTPUT); <a class="co" id="co_hello_CO1-4_unique" href="#callout_hello_CO1-4_unique"><img src="callouts/4.png" alt="4"/></a> - b.pinMode(M1_BACKWARD, b.OUTPUT); - b.pinMode(M2_FORWARD, b.OUTPUT); - b.pinMode(M2_BACKWARD, b.OUTPUT); - b.analogWrite(M1_SPEED, 0, freq); <a class="co" id="co_hello_CO1-5_unique" href="#callout_hello_CO1-5_unique"><img src="callouts/5.png" alt="5"/></a> - b.analogWrite(M2_SPEED, 0, freq); - - updateMotors(); <a class="co" id="co_hello_CO1-6_unique" href="#callout_hello_CO1-6_unique"><img src="callouts/6.png" alt="6"/></a> - - function updateMotors() { <img src="callouts/6.png" alt="6"/> - //console.log("Setting state = " + state); <a class="co" id="co_hello_CO1-7_unique" href="#callout_hello_CO1-7_unique"><img src="callouts/7.png" alt="7"/></a> - updateLEDs(state); <img src="callouts/7.png" alt="7"/> - switch(state) { <img src="callouts/3.png" alt="3"/> + function updateLEDs(state) { // <7> + switch(state) { case 0: - default: - M1_set(0); <a class="co" id="co_hello_CO1-8_unique" href="#callout_hello_CO1-8_unique"><img src="callouts/8.png" alt="8"/></a> - M2_set(0); - state = 1; <img src="callouts/3.png" alt="3"/> + b.digitalWrite("USR0", b.LOW); + b.digitalWrite("USR1", b.LOW); + b.digitalWrite("USR2", b.LOW); + b.digitalWrite("USR3", b.LOW); break; case 1: - M1_set(slow); - M2_set(slow); - state = 2; + b.digitalWrite("USR0", b.HIGH); + b.digitalWrite("USR1", b.LOW); + b.digitalWrite("USR2", b.LOW); + b.digitalWrite("USR3", b.LOW); break; case 2: - M1_set(slow); - M2_set(-slow); - state = 3; + b.digitalWrite("USR0", b.LOW); + b.digitalWrite("USR1", b.HIGH); + b.digitalWrite("USR2", b.LOW); + b.digitalWrite("USR3", b.LOW); break; case 3: - M1_set(-slow); - M2_set(slow); - state = 4; + b.digitalWrite("USR0", b.LOW); + b.digitalWrite("USR1", b.LOW); + b.digitalWrite("USR2", b.HIGH); + b.digitalWrite("USR3", b.LOW); break; case 4: - M1_set(fast); - M2_set(fast); - state = 0; + b.digitalWrite("USR0", b.LOW); + b.digitalWrite("USR1", b.LOW); + b.digitalWrite("USR2", b.LOW); + b.digitalWrite("USR3", b.HIGH); break; + } } - setTimeout(updateMotors, 2000); <img src="callouts/3.png" alt="3"/> - } - - function updateLEDs(state) { <img src="callouts/7.png" alt="7"/> - switch(state) { - case 0: - b.digitalWrite("USR0", b.LOW); - b.digitalWrite("USR1", b.LOW); - b.digitalWrite("USR2", b.LOW); - b.digitalWrite("USR3", b.LOW); - break; - case 1: - b.digitalWrite("USR0", b.HIGH); - b.digitalWrite("USR1", b.LOW); - b.digitalWrite("USR2", b.LOW); - b.digitalWrite("USR3", b.LOW); - break; - case 2: - b.digitalWrite("USR0", b.LOW); - b.digitalWrite("USR1", b.HIGH); - b.digitalWrite("USR2", b.LOW); - b.digitalWrite("USR3", b.LOW); - break; - case 3: - b.digitalWrite("USR0", b.LOW); - b.digitalWrite("USR1", b.LOW); - b.digitalWrite("USR2", b.HIGH); - b.digitalWrite("USR3", b.LOW); - break; - case 4: - b.digitalWrite("USR0", b.LOW); - b.digitalWrite("USR1", b.LOW); - b.digitalWrite("USR2", b.LOW); - b.digitalWrite("USR3", b.HIGH); - break; - } - } - - function M1_set(speed) { <img src="callouts/8.png" alt="8"/> - speed = (speed > 1) ? 1 : speed; <a class="co" id="co_hello_CO1-9_unique" href="#callout_hello_CO1-9_unique"><img src="callouts/9.png" alt="9"/></a> - speed = (speed < -1) ? -1 : speed; - b.digitalWrite(M1_FORWARD, b.LOW); - b.digitalWrite(M1_BACKWARD, b.LOW); - if(speed > 0) { - b.digitalWrite(M1_FORWARD, b.HIGH); - } else if(speed < 0) { - b.digitalWrite(M1_BACKWARD, b.HIGH); - } - b.analogWrite(M1_SPEED, Math.abs(speed), freq); <a class="co" id="co_hello_CO1-10_unique" href="#callout_hello_CO1-10_unique"><img src="callouts/10.png" alt="10"/></a> - } - - function M2_set(speed) { - speed = (speed > 1) ? 1 : speed; - speed = (speed < -1) ? -1 : speed; - b.digitalWrite(M2_FORWARD, b.LOW); - b.digitalWrite(M2_BACKWARD, b.LOW); - if(speed > 0) { - b.digitalWrite(M2_FORWARD, b.HIGH); - } else if(speed < 0) { - b.digitalWrite(M2_BACKWARD, b.HIGH); + + function M1_set(speed) { <img src="callouts/8.png" alt="8"/> + speed = (speed > 1) ? 1 : speed; // <9> + speed = (speed < -1) ? -1 : speed; + b.digitalWrite(M1_FORWARD, b.LOW); + b.digitalWrite(M1_BACKWARD, b.LOW); + if(speed > 0) { + b.digitalWrite(M1_FORWARD, b.HIGH); + } else if(speed < 0) { + b.digitalWrite(M1_BACKWARD, b.HIGH); + } + b.analogWrite(M1_SPEED, Math.abs(speed), freq); // <10> } - b.analogWrite(M2_SPEED, Math.abs(speed), freq); + function M2_set(speed) { + speed = (speed > 1) ? 1 : speed; + speed = (speed < -1) ? -1 : speed; + b.digitalWrite(M2_FORWARD, b.LOW); + b.digitalWrite(M2_BACKWARD, b.LOW); + if(speed > 0) { + b.digitalWrite(M2_FORWARD, b.HIGH); + } else if(speed < 0) { + b.digitalWrite(M2_BACKWARD, b.HIGH); + } + b.analogWrite(M2_SPEED, Math.abs(speed), freq); -.. <dl class="calloutlist"> -.. <dt><a class="co" id="callout_hello_CO1-1_unique" href="#co_hello_CO1-1_unique"><img src="callouts/1.png" alt="1"/></a></dt> -.. <dd><p>Define each pin as a variable. This makes it easy to change to another pin if you decide that is necessary.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-2_unique" href="#co_hello_CO1-2_unique"><img src="callouts/2.png" alt="2"/></a></dt> -.. <dd><p>Make other simple parameters variables. Again, this makes it easy to update them. When creating this test, I found that the PWM frequency to drive the motors needed to be relatively low to get over the kickback shown in <a data-type="xref" href="#quickBot_motor_kickback"/>. I also found that I needed to get up to about 70 percent duty cycle for my circuit to reliably start the motors turning.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-3_unique" href="#co_hello_CO1-3_unique"><img src="callouts/3.png" alt="3"/></a></dt> -.. <dd><p>Use a simple variable such as <code>state</code> to keep track of the test phase. This is used in a <code>switch</code> statement to jump to the code to configure for that test phase and updated after configuring for the current phase in order to select the next phase. Note that the next phase isn’t entered until after a two-second delay, as specified in the call to <code>setTimeout()</code>.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-4_unique" href="#co_hello_CO1-4_unique"><img src="callouts/4.png" alt="4"/></a></dt> -.. <dd><p>Perform the initial setup of all the pins.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-5_unique" href="#co_hello_CO1-5_unique"><img src="callouts/5.png" alt="5"/></a></dt> -.. <dd><p>The first time a PWM pin is used, it is configured with the update frequency. It is important to set this just once to the right frequency, because other PWM channels might use the same PWM controller, and attempts to reset the PWM frequency might fail. The <code>pinMode()</code> function doesn’t have an argument for providing the update frequency, so use the <code>analogWrite()</code> function, instead. You can review using the PWM in <a data-type="xref" href="#motors_servo"/>.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-6_unique" href="#co_hello_CO1-6_unique"><img src="callouts/6.png" alt="6"/></a></dt> -.. <dd><p><code>updateMotors()</code> is the test function for the motors and is defined after all the setup and initialization code. The code calls this function every two seconds using the <code>setTimeout()</code> JavaScript function. The first call is used to prime the loop.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-7_unique" href="#co_hello_CO1-7_unique"><img src="callouts/7.png" alt="7"/></a></dt> -.. <dd><p>The call to <code>console.log()</code> was initially here to observe the state transitions in the debug console, but it was replaced with the <code>updateLEDs()</code> call. Using the <code>USER</code> LEDs makes it possible to note the state transitions without having visibility of the debug console. <code>updateLEDs()</code> is defined later.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-8_unique" href="#co_hello_CO1-8_unique"><img src="callouts/8.png" alt="8"/></a></dt> -.. <dd><p>The <code>M1_set()</code> and <code>M2_set()</code> functions are defined near the bottom and do the work of configuring the motor drivers into a particular state. They take a single argument of <code>speed</code>, as defined between <code>-1</code> (maximum reverse), <code>0</code> (stop), and <code>1</code> (maximum forward).</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-9_unique" href="#co_hello_CO1-9_unique"><img src="callouts/9.png" alt="9"/></a></dt> -.. <dd><p>Perform simple bounds checking to ensure that speed values are between <code>-1</code> and <code>1</code>.</p></dd> -.. <dt><a class="co" id="callout_hello_CO1-10_unique" href="#co_hello_CO1-10_unique"><img src="callouts/10.png" alt="10"/></a></dt> -.. <dd><p>The <code>analogWrite()</code> call uses the absolute value of <code>speed</code>, making any negative numbers a positive magnitude.</p></dd> -.. </dl> + + <1> Define each pin as a variable. This makes it easy to change to another pin if you decide that is necessary. + + <2> Make other simple parameters variables. Again, this makes it easy to update them. When creating this test, I found that the PWM frequency to drive the motors needed to be relatively low to get over the kickback shown in :ref:`quickBot_motor_kickback`. I also found that I needed to get up to about 70 percent duty cycle for my circuit to reliably start the motors turning. + + <3> Use a simple variable such as `state` to keep track of the test phase. This is used in a `switch` statement to jump to the code to configure for that test phase and updated after configuring for the current phase in order to select the next phase. Note that the next phase isn’t entered until after a two-second delay, as specified in the call to `setTimeout()`. + + <4> Perform the initial setup of all the pins. + + <5> The first time a PWM pin is used, it is configured with the update frequency. It is important to set this just once to the right frequency, because other PWM channels might use the same PWM controller, and attempts to reset the PWM frequency might fail. The <code>pinMode()</code> function doesn’t have an argument for providing the update frequency, so use the <code>analogWrite()</code> function, instead. You can review using the PWM in :ref:`motors_servo`. + + <6> `updateMotors()` is the test function for the motors and is defined after all the setup and initialization code. The code calls this function every two seconds using the `setTimeout()` JavaScript function. The first call is used to prime the loop. + + <7> The call to `console.log()` was initially here to observe the state transitions in the debug console, but it was replaced with the `updateLEDs()` call. Using the `USER` LEDs makes it possible to note the state transitions without having visibility of the debug console. `updateLEDs()` is defined later. + + <8> The `M1_set()` and `M2_set()` functions are defined near the bottom and do the work of configuring the motor drivers into a particular state. They take a single argument of `speed`, as defined between `-1` (maximum reverse), `0` (stop), and `1` (maximum forward). + + <9> Perform simple bounds checking to ensure that speed values are between `-1` and `1`. + + <10> The `analogWrite()` call uses the absolute value of `speed`, making any negative numbers a positive magnitude. .. _quickBot_motor_kickback: -- GitLab