diff --git a/boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst b/boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst
index 0240021e1c59922bd613e5c941edf677d78daed3..db49042ea88c7adfe30c98c8433f0314c5812b1b 100644
--- a/boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst
+++ b/boards/beaglebone/ai-64/edge_ai_apps/getting_started.rst
@@ -134,8 +134,8 @@ flash it to SD card using `Balena etcher <https://www.balena.io/etcher/>`_ tool.
 
 .. todo: Images should be on https://files.debian.cc and linked from https://www.beagleboard.org/distros
 
-- To use via SD card: `TDA4VM Debian 11.5 2022-11-01 10GB SD XFCE EDGEAI <https://www.beagleboard.org/distros/tda4vm-debian-11-5-2022-11-01-10gb-sd-xfce-edgeai>`_
-- To flash on eMMC: `bbai64-emmc-flasher-debian-11.4-xfce-edgeai-arm64-2022-08-02-10gb.img.xz <https://rcn-ee.net/rootfs/bb.org/testing/2022-08-02/bullseye-xfce-edgeai-arm64/bbai64-emmc-flasher-debian-11.4-xfce-edgeai-arm64-2022-08-02-10gb.img.xz>`_
+- To use via SD card: `bbai64-debian-11.7-xfce-edgeai-arm64-2023-08-05-10gb.img.xz <https://rcn-ee.com/rootfs/release/2023-08-05/bullseye-xfce-edgeai-arm64/bbai64-debian-11.7-xfce-edgeai-arm64-2023-08-05-10gb.img.xz>`_
+- To flash on eMMC: `bbai64-emmc-flasher-debian-11.7-xfce-edgeai-arm64-2023-08-05-10gb.img.xz <https://rcn-ee.com/rootfs/release/2023-08-05/bullseye-xfce-edgeai-arm64/bbai64-emmc-flasher-debian-11.7-xfce-edgeai-arm64-2023-08-05-10gb.img.xz>`_
 
 
 The Balena etcher tool can be installed either on Windows/Linux. Just download the
diff --git a/boards/beaglebone/ai/System-Reference-Manual.asciidoc b/boards/beaglebone/ai/System-Reference-Manual.asciidoc
index a931d87613780ce5a8761d2ebcc3c50d28f8e2dc..e71e08377c7b1dfb2f66bc6a19bc0678a646a7f2 100644
--- a/boards/beaglebone/ai/System-Reference-Manual.asciidoc
+++ b/boards/beaglebone/ai/System-Reference-Manual.asciidoc
@@ -192,10 +192,8 @@ image:images/BB_AI_asadrive_500px.jpg[BeagleBone AI Overview]
 image:images/BB_AI_starthtm_500px.png[BeagleBone AI Overview]
 8. Follow the instructions in the browser window.
 image:images/BB_AI_connectedscreen_500px.jpg[BeagleBone AI Overview]
-9. Go to Cloud9 IDE
-image:images/BB_AI_ss_cloud9_500px.jpg[BeagleBone AI Overview]
-10. Open the directories in the left navigation of Cloud9
-image:images/BB_AI_ss_cloud9_dir_500px.jpg[BeagleBone AI Overview]
+9. Go to Visual Studio Code IDE
+image:images/vscode.png[BeagleBone AI Overview]
 
 [[standalone-wdisplay-and-keyboardmouse]]
 ==== 3.2.2 Standalone w/Display and Keyboard/Mouse
@@ -654,7 +652,7 @@ where:
 
 Example:
 ----
-debian@beaglebone:/var/lib/cloud9$ sudo hexdump -C /dev/mmcblk1boot1
+debian@beaglebone:~$ sudo hexdump -C /dev/mmcblk1boot1
 00000000  aa 55 33 ee 42 42 4f 4e  45 2d 41 49 30 30 41 31  |.U3.BBONE-AI00A1|
 00000010  31 39 33 33 45 4d 41 49  30 30 30 38 30 33 ff ff  |1933EMAI000803..|
 00000020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
diff --git a/boards/beaglebone/ai/ch03.rst b/boards/beaglebone/ai/ch03.rst
index 4edded9f0f18ca8d5c64ee7438133fbec9be2511..ae24689a0b71a08af13581b507e643bf130322a2 100644
--- a/boards/beaglebone/ai/ch03.rst
+++ b/boards/beaglebone/ai/ch03.rst
@@ -1,10 +1,10 @@
 .. _beaglebone-ai-connecting:
 
 Connecting Up Your BeagleBone AI
-####################################
+################################
 
 What’s In the Box
-******************
+*****************
 
 BeagleBone® AI comes in the box with the heat sink and antenna already
 attached. Developers can get up and running in five minutes with no
@@ -126,17 +126,12 @@ loaded on your BeagleBone® AI.
 
 8.  Follow the instructions in the browser window.
 
-.. image:: images/BB_AI_ss_cloud9_500px.jpg
+.. image:: images/vscode.png
    :align: center
    :alt: BeagleBone instructions
 
-9.  Go to Cloud9 IDE.
-
-10. Open the directories in the left navigation of Cloud9.
+9.  Go to Visual Studio Code IDE.
 
-.. image:: images/BB_AI_ss_cloud9_dir_500px.jpg
-   :align: center
-   :alt: Cloud9 navigation
 
 Standalone w/Display and Keyboard/Mouse
 ****************************************
@@ -153,9 +148,6 @@ Standalone w/Display and Keyboard/Mouse
 Load "am57xx-eMMC-flasher-debian-9.13-lxqt-tidl-armhf-2020-08-25-6gb.img.xz"
 image on the BeagleBone® AI
 
-Presently, the "Cloud 9" application is broken in debian 10 only for
-this configuration. We re working on a better solution.
-
 1. Connect a combo keyboard and mouse to BeagleBone® AI’s USB host port.
 2. Connect a microHDMI-to-HDMI cable to BeagleBone® AI’s microHDMI port.
 3. Connect the microHDMI-to-HDMI cable to an HDMI monitor.
@@ -165,7 +157,7 @@ this configuration. We re working on a better solution.
 7. Follow the instructions at https://beagleboard.org/upgrade
 
 Wireless Connection
-********************
+*******************
 
 NOTE:Start with this image "am57xx-eMMC-flasher-debian-10.3-iot-tidl-armhf-2020-04-06-6gb.img.xz"
 loaded on your BeagleBone® AI.
@@ -178,7 +170,7 @@ loaded on your BeagleBone® AI.
 6. Follow the instructions in the browser window.
 
 Connecting a 3 PIN Serial Debug Cable
-**************************************
+*************************************
 
 A 3 PIN serial debug cable can be helpful to debug when you need to view
 the boot messages through a terminal program such as putty on your host
diff --git a/boards/beaglebone/ai/ch06.rst b/boards/beaglebone/ai/ch06.rst
index 9f926904d5fe5c0fc7da222545349047392a0deb..ecd6c0b100faae09658c1b4e1b122ab8dbccd300 100644
--- a/boards/beaglebone/ai/ch06.rst
+++ b/boards/beaglebone/ai/ch06.rst
@@ -134,7 +134,7 @@ filled with “FF”.
 
 .. code-block:: shell
 
-   debian@beaglebone:/var/lib/cloud9$ sudo hexdump -C /dev/mmcblk1boot1
+   debian@beaglebone:~$ sudo hexdump -C /dev/mmcblk1boot1
    00000000  aa 55 33 ee 42 42 4f 4e  45 2d 41 49 30 30 41 31  |.U3.BBONE-AI00A1|
    00000010  31 39 33 33 45 4d 41 49  30 30 30 38 30 33 ff ff  |1933EMAI000803..|
    00000020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
diff --git a/boards/beaglebone/ai/images/BB_AI_ss_cloud9_500px.jpg b/boards/beaglebone/ai/images/BB_AI_ss_cloud9_500px.jpg
deleted file mode 100644
index 9604ae3b3090a3dd419d8b264a07c3fed5bb9dd3..0000000000000000000000000000000000000000
Binary files a/boards/beaglebone/ai/images/BB_AI_ss_cloud9_500px.jpg and /dev/null differ
diff --git a/boards/beaglebone/ai/images/BB_AI_ss_cloud9_dir_500px.jpg b/boards/beaglebone/ai/images/BB_AI_ss_cloud9_dir_500px.jpg
deleted file mode 100644
index aa0e837575c37e6cb6cfd5089092da7da76ec884..0000000000000000000000000000000000000000
Binary files a/boards/beaglebone/ai/images/BB_AI_ss_cloud9_dir_500px.jpg and /dev/null differ
diff --git a/boards/beaglebone/ai/images/vscode.png b/boards/beaglebone/ai/images/vscode.png
new file mode 100644
index 0000000000000000000000000000000000000000..416967905a76b21a3b7eb01e6c3e8b05b06f22a0
Binary files /dev/null and b/boards/beaglebone/ai/images/vscode.png differ
diff --git a/boards/beaglebone/blue/faq.rst b/boards/beaglebone/blue/faq.rst
index 95591305731a2d9fa2877e6809a468885459062a..66f91f1ccba83ba1be9e18a241b25d00b49de1d7 100644
--- a/boards/beaglebone/blue/faq.rst
+++ b/boards/beaglebone/blue/faq.rst
@@ -1,12 +1,12 @@
 .. _beaglebone-blue-faq:
 
 Frequently Asked Questions (FAQs)
-###################################
+#################################
 
 .. _are_there_any_books_to_help_me_get_started:
 
 Are there any books to help me get started?
-==================================================
+===========================================
 
 The book `BeagleBone Robotic Projects, Second
 Edition <https://github.com/jadonk/BeagleBone-Robotic-Projects-Second-Edition>`__
@@ -19,7 +19,7 @@ see https://beagleboard.org/books.
 .. _what_system_firmware_should_i_use_for_starting_to_explore_my_beaglebone_blue:
 
 What system firmware should I use for starting to explore my BeagleBone Blue?
-===================================================================================
+=============================================================================
 
 Download the latest 'IoT' image from
 https://www.beagleboard.org/distros. As of this writing, that image is
@@ -34,7 +34,7 @@ this firmware image.
 .. _what_is_the_name_of_the_access_point_ssid_and_password_default_on_beaglebone_blue:
 
 What is the name of the access point SSID and password default on BeagleBone Blue?
-===================================================================================
+==================================================================================
 
 | SSID: BeagleBone-XXXX where XXXX is based upon the board's assigned
   unique hardware address
@@ -43,9 +43,9 @@ What is the name of the access point SSID and password default on BeagleBone Blu
 .. _ive_connected_to_beaglebone_blues_access_point._how_do_i_get_logged_into_the_board:
 
 I've connected to BeagleBone Blue's access point. How do I get logged into the board?
-=======================================================================================
+=====================================================================================
 
-Browse to http://192.168.8.1:3000 to open the Cloud9 IDE and get access
+Browse to http://192.168.8.1:3000 to open the Visual Studio Code IDE and get access
 to the Linux command prompt.
 
 If you've connected via USB instead, the address will be either
@@ -55,7 +55,7 @@ networking drivers provided by your operating system.
 .. _how_do_i_connect_beaglebone_blue_to_my_own_wifi_network:
 
 How do I connect BeagleBone Blue to my own WiFi network?
-==========================================================
+========================================================
 
 From the bash command prompt in Linux:
 
@@ -76,7 +76,7 @@ From the bash command prompt in Linux:
 .. _where_can_i_find_examples_and_apis_for_programming_beaglebone_blue:
 
 Where can I find examples and APIs for programming BeagleBone Blue?
-========================================================================
+===================================================================
 
 Programming in C: http://www.strawsondesign.com/#!manual-install
 
@@ -88,7 +88,7 @@ https://www.mathworks.com/hardware-support/beaglebone-blue.html
 .. _my_beaglebone_blue_fails_to_run_successful_tests:
 
 My BeagleBone Blue fails to run successful tests
-======================================================
+================================================
 
 You've tried to run rc_test_drivers to ensure your board is working for
 DOA warranty tests, but it errors. You should first look to fixing your
@@ -98,7 +98,7 @@ http://strawsondesign.com/docs/librobotcontrol/installation.html#installation_s5
 .. _im_running_an_image_off_of_a_microsd_card._how_do_i_write_it_to_the_on_board_emmc_flash:
 
 I'm running an image off of a microSD card. How do I write it to the on-board eMMC flash?
-==========================================================================================
+=========================================================================================
 
 Refer to the "Flashing Firmware" page:
 https://git.beagleboard.org/beagleboard/beaglebone-blue/-/wikis/Flashing-firmware
@@ -111,7 +111,7 @@ partition on the on-board eMMC.
 .. _ive_written_the_latest_image_to_a_usd_card_but_some_features_arent_working._how_do_i_make_it_run_properly:
 
 I’ve written the latest image to a uSD card, but some features aren’t working. How do I make it run properly?
-==============================================================================================================
+=============================================================================================================
 
 It is possible you are running an old bootloader off of the eMMC. While
 power is completely off, hold the SD button (near the servo headers)
@@ -142,7 +142,7 @@ on flashing firmware.
 .. _ive_got_my_on_board_emmc_flash_configured_in_a_nice_way._how_do_i_copy_that_to_other_beaglebone_blue_boards:
 
 I've got my on-board eMMC flash configured in a nice way. How do I copy that to other BeagleBone Blue boards?
-=================================================================================================================
+=============================================================================================================
 
 As root, run the
 `/opt/scripts/tools/eMMC/beaglebone-black-make-microSD-flasher-from-eMMC.sh <https://github.com/RobertCNelson/boot-scripts/blob/master/tools/eMMC/beaglebone-black-make-microSD-flasher-from-eMMC.sh>`__
@@ -163,7 +163,7 @@ Reboot your newly flashed board.
 .. _i_have_some_low_latency_io_tasks._how_do_i_get_started_programming_the_beaglebone_prus:
 
 I have some low-latency I/O tasks. How do I get started programming the BeagleBone PRUs?
-==========================================================================================
+========================================================================================
 
 There is a "Hello, World" app at
 https://gist.github.com/jadonk/2ecf864e1b3f250bad82c0eae12b7b64 that
@@ -182,7 +182,7 @@ You can find some more at https://beagleboard.org/pru
 .. _are_there_available_mechanical_models:
 
 Are there available mechanical models?
-=============================================
+======================================
 
 A community contributed model is available at
 https://grabcad.com/library/beaglebone-blue-1
@@ -190,14 +190,14 @@ https://grabcad.com/library/beaglebone-blue-1
 .. _what_is_the_operating_temperature_range:
 
 What is the operating temperature range?
-=============================================
+========================================
 
 \`0..70\` due to processor, else \`-20..70\`
 
 .. _what_is_the_dc_motor_drive_strength:
 
 What is the DC motor drive strength?
-============================================
+====================================
 
 This is dictated by the 2 cell LiPo battery input, the `TB6612FNG motor
 drivers <http://www.pololu.com/file/0J86/TB6612FNG.pdf>`__ and the
diff --git a/boards/beagleplay/03-design.rst b/boards/beagleplay/03-design.rst
index bf7f38b234bcce302a092aefaf9c29d52c9969c7..d027f721d0b8f3dca36721e817d58f582d9fce71 100644
--- a/boards/beagleplay/03-design.rst
+++ b/boards/beagleplay/03-design.rst
@@ -62,6 +62,11 @@ all the chips on BeaglePlay we have Low Drop Out (LDO) voltage regulators for fi
 and Power Management Integrated Circuit (PMIC) that interface with SoC to generate software programable voltages. 
 2 x LDOs and 1 x PMIC used on BeaglePlay are shown below.
 
+.. figure:: images/block-diagrams/Power-Block-Diagram.svg
+   :width: 1247
+   :align: center
+   :alt: BeaglePlay power block diagram
+
 TLV75801 - LDO
 ===============
 
@@ -72,16 +77,34 @@ TLV75801 - LDO
 
     TLV75801PDBVR LDO schematic for 1V0 output
 
-TLV62595 - LDO
-==============
+This provides 1.0V required by the single-pair Ethernet PHY (U13 - DP83TD510ERHBR). It was decided this was less
+likely to be needed than the other rails coming off of the primary PMIC and therefore was given its own regulator
+when running low on power rails.
+
+.. note::
+
+  The voltage drop from 1.8V to 1.0V is rated up to 0.3A (240mW), but the typical current from the
+  DP83TD51E data sheet (SNLS656C) is stated at 3.5mA (2.8mW) and the maximum is 7.5mA (6mW). This isn't overly
+  significant on a board typically consuming 400mA at 5V (2W). However, this is an area where some power
+  optimization could be performed if concerned about sleep modes.
+
+TLV62595 - DC/DC regulator
+==========================
 
 .. figure:: images/hardware-design/TLV62595DMQR.svg
     :width: 1247
     :align: center
-    :alt: TLV62595DMQR LDO schematic for 3V3 output
+    :alt: TLV62595DMQR DC/DC regulator schematic for 3V3 output
 
     TLV62595DMQR LDO schematic for 3V3 output
 
+This provides 3.3V for the vast majority of 3.3V I/Os on the board, off-board 3.3V power to microSD, mikroBUS,
+QWIIC and Grove connectors, as well as to the PMIC LDO to provide power for the 1.8V on-board I/Os, DDR4, and
+gigabit Ethernet PHY. Due to the relatively high current rating (3A), a highly efficient (up to 97%) was chosen.
+
+The primary TPS65219 PMIC firmware uses GPO2 to provide the enable signal (VDD_3V3_EN). The power-good signal
+(VDD_3V3_PG) is available at TP19 and is unused on the rest of the board.
+
 TPS65219 - PMIC
 ================
 
@@ -92,6 +115,15 @@ TPS65219 - PMIC
 
     TPS65219 Power Management Integrated Circuit (PMIC) schematic
 
+This is the primary power management integrated circuit (PMIC) for the design. It coordinates the power
+sequencing and provides numerous power rails required for the core of the system, including dynamic voltages
+for the processor core and microSD card. The TPS6521903 variant is used for this DDR4-based system. The 03
+at the end indicates the sequencing programmed into the device and is covered in the TPS6521903 Technical
+Reference Manual `SLVUCJ2 <https://www.ti.com/lit/pdf/slvucj2>`_.
+
+.. todo::
+
+   Add specific power-up/down sequence notes here as well a highlight any limitations and known issues.
 
 General Connectivity and Expansion
 ***********************************
@@ -147,7 +179,7 @@ Grove
 
     Grove connector schematic
 
-Qwiic
+QWIIC
 =====
 
 .. figure:: images/hardware-design/qwiic.svg
diff --git a/boards/beagleplay/04-expansion.rst b/boards/beagleplay/04-expansion.rst
index a01848164ade1deb0c782239999d384302cfe64a..745e1a759a329fb71cdf404ee93c539b7cd44a64 100644
--- a/boards/beagleplay/04-expansion.rst
+++ b/boards/beagleplay/04-expansion.rst
@@ -10,15 +10,97 @@ Expansion
 mikroBUS
 *********
 
+The mikroBUS header provides several GPIO pins as well as UART, I2C, SPI, PWM and an Analog Input. 
+
+By default, the port is controlled by a mikroBUS driver that helps with auto-detecting MikroE Click Board that feature [ClickID](https://www.mikroe.com/clickid). 
+This does however mean that if you want to manually control the port, you may need to first disable the driver.
+
+To disable the driver, do the following - TODO
+
 Grove
 ******
 
+The Grove port on BeaglePlay exposes one of the SoC I2C Ports as well as an analog input. 
+
+It maps directly in linux as /dev/I2C-TODO or as the following alias /dev/play/grove
+
 QWIIC
 ******
 
+The QWIIC port on BeaglePlay exposes one of the SoC I2C Ports. 
+
+It maps directly in linux as `/dev/I2C-2` or as the following alias `/dev/play/qwiic`
+
+
 CSI
 ***
 
+The AM62x SoC (and by extension BeaglePlay) does not feature on-board ISP (Image Signal Processor) hardware, and as such, Raw-Bayer CSI Sensors must be pre-processed into normal images by the A53 cores.
+
+To avoid performance penalties related to the approach above, it is recommended to use a sensor with a built-in ISP, such as the OV5640 which is supported out of box.
+
+The `PCam5C from Digilent <https://digilent.com/shop/pcam-5c-5-mp-fixed-focus-color-camera-module/>`_ is one CSI camera that features this sensor.
+
+.. note:: Since BeaglePlay uses a 22-pin CSI connector, a 15 pin to 22 pin CSI adapter may also be required `such as this one <https://www.uctronics.com/arducam-15-pin-1-0mm-pitch-to-22-pin-0-5mm-camera-cable-for-raspberry-pi-zero-version-1-3-specific-pack-of-2.html>`_
+
+Once installed, there are some software changes required to load the device driver at boot for the OV5640. 
+
+We will need to modify the following file: /boot/firmware/extlinux/extlinux.conf
+
+We will add the following line to load the OV5640 DTBO:
+
+.. code:: bash
+
+   fdtoverlays /overlays/k3-am625-beagleplay-csi2-ov5640.dtbo
+
+Then you can reboot: sudo reboot
+
+Camera should now work, you can use mplayer to test.
+
+.. code:: bash
+
+   sudo apt-get install -y mplayer
+
+   mplayer tv: // -tv driver=v4l2:device=/dev/video0:width=640:height=480:fps=30:outfmt=yuy2
+
+
 OLDI
 ****
 
+BeaglePlay brings out two OLDI (LVDS) channels, each with up to four data lanes and one clock lane to support 21/28-bit serialized RGB pixel data and synchronization transmissions. The first port, OLDI0, consists of OLDI0_A0-3/CLK0 and corresponds to odd pixels, while the second port, OLDI1, consists of OLDI0_A4-7/CLK1 and corresponds to even pixels.
+
+It is pin compatible with the following two displays from Lincoln Technology Solutions:
+
+Both displays have the following features and only differ in bezzle type:
+
+* **Resolution** - 1920x1200 (16:10)
+*  **LCD Size (diagonal)** - 10.1"
+* **Refresh Rate** - 60Hz
+* **Brightness** - 1000nit
+* **Pannel Type** - Edge-lit IPS 
+* **Touch Enabled** - Yes, Capacitive
+* **Connector** - 40 pin FFC ribbon cable
+
+`A "Flush Coverglass" Version <https://www.digikey.com/en/products/detail/lincoln-technology-solutions/LCDK185-101CTL1ARNTTR1-0/20485318?s=N4IgTCBcDaIDIGEAiBpAjADgKwgLoF8g>`_
+`A "Oversized Cover Glass" Version - similar in style to a Tablet Display <https://www.digikey.com/en/products/detail/lincoln-technology-solutions/LCDK217-101CTL1ARNTTR1-0/20485319?s=N4IgTCBcDaIDIGEAiBpMBGA7CAugXyA>`_
+
+To enable OLDI display support, modify the following file: /boot/firmware/extlinux/extlinux.conf
+
+Then, add the following line to load the Lincoln LCD185 OLDI DTBO: 
+
+.. code:: bash
+
+   fdtoverlays /overlays/k3-am625-beagleplay-lt-lcd185.dtbo
+
+Your /boot/firmware/extlinux/extlinux.conf file should look something like this:
+
+.. code:: bash
+
+   label Linux eMMC
+      kernel /Image
+      append root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait net.ifnames=0 systemd.unified_cgroup_hierarchy=false quiet
+      fdtdir /
+      fdtoverlays /overlays/k3-am625-beagleplay-lt-lcd185.dtbo
+      initrd /initrd.img
+
+
diff --git a/boards/beagleplay/demos-and-tutorials/connect-wifi.rst b/boards/beagleplay/demos-and-tutorials/connect-wifi.rst
index e6ebe5c355ade1597b42610316372798a1911625..4de8dea3939c326fce4ca992d331d900e092bae5 100644
--- a/boards/beagleplay/demos-and-tutorials/connect-wifi.rst
+++ b/boards/beagleplay/demos-and-tutorials/connect-wifi.rst
@@ -3,6 +3,11 @@
 Connect WiFi
 #############
 
+.. note::
+    A common issue experienced by users when connecting to Wireless networks are network names that include special characters such as spaces, apostrophes etc, this may make connecting to your network more difficult. It is thus recommended to rename your Wireless AP to something simpler. For Example - renaming "Boris's Wireless Network" to "BorisNet". This avoids having to add special "escape" characters in the name. This shows up especially if you try connecting to iPhone/iOS HotSpots, where the network name is the device name, which by default is something like "Dan's iPhone". Also see `this potential solution. 
+<https://unix.stackexchange.com/questions/679862/wpa-supplicant-conf-escaping-characters/>`_.
+
+
 If you have a monitor and keyboard/mouse combo connected, the easiest way is to use the :ref:`beagleplay-wifi-wpa-gui`.
 
 Alternatively, you can use ``wpa_cli`` over a shell connection through:
@@ -149,7 +154,7 @@ your board to WiFi (if password is correct).
 wpa_cli (shell)
 ****************
 
-Swap out "mywifi" and "mypassword" with your network SSID and password, respectively.
+Swap out "68:ff:7b:03:0a:8a" and "mypassword" with your network BSSID and password, respectively.
 
 .. code-block:: shell-session
 
@@ -163,7 +168,7 @@ Swap out "mywifi" and "mypassword" with your network SSID and password, respecti
    debian@BeaglePlay:~$ wpa_cli add_network
    Selected interface 'wlan0'
    1
-   debian@BeaglePlay:~$ wpa_cli set_network 1 ssid '"mywifi"'
+   debian@BeaglePlay:~$ wpa_cli set_network 1 bssid 68:ff:7b:03:0a:8a
    Selected interface 'wlan0'
    OK
    debian@BeaglePlay:~$ wpa_cli set_network 1 psk '"mypassword"'
@@ -296,3 +301,41 @@ after you add the credentials to ``wpa_supplicant-wlan0.conf``.
     :alt: To check connection try running $ ping 8.8.8.8
 
     To check connection try running $ ping 8.8.8.8 
+
+    
+Disabling the WIFI Access Point
+*******************************
+
+In certain situations, such as running HomeAssistant, you may chose to connect your BeaglePlay to the internet via Ethernet. In this case, it may be desireable to disable it's Wifi access point so that users outside the local network aren't able to connect to it.  
+
+The Wifi Access Point that BeaglePlay provides is started using `uDev rules <https://en.wikipedia.org/wiki/Udev>`_. created by the `bb-wlan0-defaults` package
+
+You can simply remove the `bb-wlan0-defaults` package:
+
+.. code-block:: shell
+
+    sudo apt remove bb-wlan0-defaults
+
+Now just reboot and the Wifi Access point should no longer start. 
+
+You can also disable it by removing the two following udev rule files:
+
+.. code-block:: shell
+
+    rm /etc/udev/rules.d/81-add-SoftAp0-interface.rules 
+    rm /etc/udev/rules.d/82-SoftAp0-start-hostpad.rules
+
+The issue with doing this latter option is that if you later update your OS, the bb-wlan0-defaults may get updated as well and re-add the rules.  
+
+Re-Enabling the WIFI Access Point
+*********************************
+
+Conversely, you can re-enable the access point by re-installing the `bb-wlan0-default` package.
+
+.. code-block:: shell
+
+    sudo apt install bb-wlan0-defaults --reinstall
+
+Now just reboot.
+
+--TODO Add notes on changing SSID/Password
diff --git a/boards/beagleplay/demos-and-tutorials/using-mikrobus.rst b/boards/beagleplay/demos-and-tutorials/using-mikrobus.rst
index 980cbe509189ae208d7156c69a8cfc06387d6f84..3f6be8ebb0434f6fc014d146e3c9839633e872be 100644
--- a/boards/beagleplay/demos-and-tutorials/using-mikrobus.rst
+++ b/boards/beagleplay/demos-and-tutorials/using-mikrobus.rst
@@ -3,17 +3,19 @@
 Using mikroBUS
 ##############
 
-Using boards with ClickID
-*************************
-
 Steps:
 
-1. Identify if mikroBUS add-on includes an ID. If not, ID must be supplied.
+1. Identify if mikroBUS add-on includes a ClickID with ``manifest``. If not, ``manifest`` must be supplied.
 2. Identify if mikroBUS add-on is supported by the kernel. If not, kernel module must be added.
 3. Identify how driver exposes the data: IIO, net, etc.
 4. Connect and power
 5. Verify and utilize
 
+.. _beagleplay-mikrobus-clickid:
+
+Using boards with ClickID
+*************************
+
 What is mikroBUS?
 =================
 
@@ -34,7 +36,6 @@ ClickID enables mikroBUS add-on boards to be identified along with the configura
 
 BeaglePlay's Linux kernel is patched with a mikrobus driver that automatically reads the ClickID and loads a driver, greatly simplifying usage.
 
-
 Does my add-on have ClickID?
 ============================
 
@@ -57,21 +58,70 @@ Example of examining boot log to see a ClickID was detected.
     [    2.663711] mikrobus_manifest:mikrobus_manifest_parse:  Ambient 2 Click manifest parsed with 1 devices
     [    2.663783] mikrobus mikrobus-0: registering device : opt3001
 
+To use the add-on, see :ref:`beagleplay-mikrobus-using`.
 
-To use the add-on, see TBD below.
+.. note::
+
+   Not all Click boards with ClickID have valid ``manifest`` entries.
 
+.. _beagleplay-mikrobus-clickid:
 
 What if my add-on doesn't have ClickID?
 ***************************************
 
 It is still possible a ``manifest`` has been created for your add-on as we have created over 100 of them. You can install the existing manifest files onto your BeaglePlay.
 
+First, make sure you have the latest manifests installed in your system.
 
-.. code::
+.. code:: bash
 
    sudo apt update
    sudo apt install bbb.io-clickid-manifests
-   cat /lib/firmware/mikrobus/amibient-light-click.mnfb > /sys/bus/mikrobus/devices/mikrobus-0/new_device
+
+
+Take a look at the list of ``manifest`` files to see if the Click or other mikrobus add-on board ``manifest`` is installed.
+
+.. code:: shell-session
+
+   debian@BeaglePlay:~$ ls /lib/firmware/mikrobus/
+   10DOF-CLICK.mnfb          COMPASS-2-CLICK.mnfb       I2C-2-SPI-CLICK.mnfb        PWM-CLICK.mnfb
+   13DOF-2-CLICK.mnfb        COMPASS-CLICK.mnfb         I2C-MUX-CLICK.mnfb          RFID-CLICK.mnfb
+   3D-HALL-3-CLICK.mnfb      CURRENT-CLICK.mnfb         ILLUMINANCE-CLICK.mnfb      RF-METER-CLICK.mnfb
+   3D-HALL-6-CLICK.mnfb      DAC-7-CLICK.mnfb           IR-GESTURE-CLICK.mnfb       RMS-TO-DC-CLICK.mnfb
+   6DOF-IMU-2-CLICK.mnfb     DAC-CLICK.mnfb             IR-THERMO-2-CLICK.mnfb      RTC-6-CLICK.mnfb
+   6DOF-IMU-4-CLICK.mnfb     DIGIPOT-3-CLICK.mnfb       LED-DRIVER-7-CLICK.mnfb     SHT1x-CLICK.mnfb
+   6DOF-IMU-6-CLICK.mnfb     DIGIPOT-CLICK.mnfb         LIGHTRANGER-2-CLICK.mnfb    SHT-CLICK.mnfb
+   6DOF-IMU-8-CLICK.mnfb     EEPROM-2-CLICK.mnfb        LIGHTRANGER-3-CLICK.mnfb    SMOKE-CLICK.mnfb
+   9DOF-CLICK.mnfb           EEPROM-3-CLICK.mnfb        LIGHTRANGER-CLICK.mnfb      TEMP-HUM-11-CLICK.mnfb
+   ACCEL-3-CLICK.mnfb        EEPROM-CLICK.mnfb          LPS22HB-CLICK.mnfb          TEMP-HUM-12-CLICK.mnfb
+   ACCEL-5-CLICK.mnfb        ENVIRONMENT-CLICK.mnfb     LSM303AGR-CLICK.mnfb        TEMP-HUM-3-CLICK.mnfb
+   ACCEL-6-CLICK.mnfb        ETH-CLICK.mnfb             LSM6DSL-CLICK.mnfb          TEMP-HUM-4-CLICK.mnfb
+   ACCEL-8-CLICK.mnfb        ETH-WIZ-CLICK.mnfb         MAGNETIC-LINEAR-CLICK.mnfb  TEMP-HUM-7-CLICK.mnfb
+   ACCEL-CLICK.mnfb          FLASH-2-CLICK.mnfb         MAGNETIC-ROTARY-CLICK.mnfb  TEMP-HUM-9-CLICK.mnfb
+   ADC-2-CLICK.mnfb          FLASH-CLICK.mnfb           MICROSD-CLICK.mnfb          TEMP-HUM-CLICK.mnfb
+   ADC-3-CLICK.mnfb          GENERIC-SPI-CLICK.mnfb     MPU-9DOF-CLICK.mnfb         TEMP-LOG-3-CLICK.mnfb
+   ADC-5-CLICK.mnfb          GEOMAGNETIC-CLICK.mnfb     MPU-IMU-CLICK.mnfb          TEMP-LOG-4-CLICK.mnfb
+   ADC-8-CLICK.mnfb          GNSS-4-CLICK.mnfb          NO2-2-CLICK.mnfb            TEMP-LOG-6-CLICK.mnfb
+   ADC-CLICK.mnfb            GNSS-7-CLICK.mnfb          NO2-CLICK.mnfb              THERMO-12-CLICK.mnfb
+   AIR-QUALITY-2-CLICK.mnfb  GNSS-ZOE-CLICK.mnfb        OLEDB-CLICK.mnfb            THERMO-15-CLICK.mnfb
+   AIR-QUALITY-3-CLICK.mnfb  GSR-CLICK.mnfb             OLEDC-CLICK.mnfb            THERMO-17-CLICK.mnfb
+   AIR-QUALITY-5-CLICK.mnfb  GYRO-2-CLICK.mnfb          OLEDW-CLICK.mnfb            THERMO-3-CLICK.mnfb
+   ALCOHOL-2-CLICK.mnfb      GYRO-CLICK.mnfb            OZONE-2-CLICK.mnfb          THERMO-4-CLICK.mnfb
+   ALCOHOL-3-CLICK.mnfb      HALL-CURRENT-2-CLICK.mnfb  PRESSURE-11-CLICK.mnfb      THERMO-7-CLICK.mnfb
+   ALTITUDE-3-CLICK.mnfb     HALL-CURRENT-3-CLICK.mnfb  PRESSURE-3-CLICK.mnfb       THERMO-8-CLICK.mnfb
+   ALTITUDE-CLICK.mnfb       HALL-CURRENT-4-CLICK.mnfb  PRESSURE-4-CLICK.mnfb       THERMO-CLICK.mnfb
+   AMBIENT-2-CLICK.mnfb      HDC1000-CLICK.mnfb         PRESSURE-CLICK.mnfb         THERMOSTAT-3-CLICK.mnfb
+   AMBIENT-4-CLICK.mnfb      HEART-RATE-3-CLICK.mnfb    PROXIMITY-10-CLICK.mnfb     UV-3-CLICK.mnfb
+   AMBIENT-5-CLICK.mnfb      HEART-RATE-4-CLICK.mnfb    PROXIMITY-2-CLICK.mnfb      VACUUM-CLICK.mnfb
+   AMMETER-CLICK.mnfb        HEART-RATE-5-CLICK.mnfb    PROXIMITY-5-CLICK.mnfb      VOLTMETER-CLICK.mnfb
+   COLOR-2-CLICK.mnfb        HEART-RATE-7-CLICK.mnfb    PROXIMITY-9-CLICK.mnfb      WAVEFORM-CLICK.mnfb
+   COLOR-7-CLICK.mnfb        HEART-RATE-CLICK.mnfb      PROXIMITY-CLICK.mnfb        WEATHER-CLICK.mnfb
+
+Then, load the appropriate ``manifest`` using the ``mikrobus`` bus driver. For example, with the Ambient 2 Click, you can write that ``manifest`` to the ``mikrobus-0`` ``new_device`` entry.
+
+.. code:: bash
+
+   cat /lib/firmware/mikrobus/AMBIENT-2-CLICK.mnfb > /sys/bus/mikrobus/devices/mikrobus-0/new_device
 
 
 .. note::
@@ -94,13 +144,44 @@ It is still possible a ``manifest`` has been created for your add-on as we have
    To make it stick, ...
 
 
+To use the add-on, see :ref:`beagleplay-mikrobus-using`.
+
+
+.. _beagleplay-mikrobus-using:
+
 Using boards with Linux drivers
 *******************************
 
+Depending on the type of mikrobus add-on board, the Linux driver could be of various different types. For sensors, the most common is :ref:`beagleplay-mikrobus-using-iio`.
+
+
+.. _beagleplay-mikrobus-using-iio:
+
 IIO driver
 ==========
 
-https://docs.kernel.org/driver-api/iio/intro.html
+Per https://docs.kernel.org/driver-api/iio/intro.html,
+
+    The main purpose of the Industrial I/O subsystem (IIO) is to provide support for devices that in some sense perform either analog-to-digital conversion (ADC) or digital-to-analog conversion (DAC) or both. The aim is to fill the gap between the somewhat similar hwmon and input subsystems. Hwmon is directed at low sample rate sensors used to monitor and control the system itself, like fan speed control or temperature measurement. Input is, as its name suggests, focused on human interaction input devices (keyboard, mouse, touchscreen). In some cases there is considerable overlap between these and IIO.
+
+    Devices that fall into this category include:
+
+    * analog to digital converters (ADCs)
+    * accelerometers
+    * capacitance to digital converters (CDCs)
+    * digital to analog converters (DACs)
+    * gyroscopes
+    * inertial measurement units (IMUs)
+    * color and light sensors
+    * magnetometers
+    * pressure sensors
+    * proximity sensors
+    * temperature sensors
+
+
+See also https://wiki.analog.com/software/linux/docs/iio/iio.
+
+To discover IIO driver enabled devices, use the ``iio_info`` command.
 
 .. code-block:: shell-session
 
@@ -122,7 +203,6 @@ https://docs.kernel.org/driver-api/iio/intro.html
     				    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
     		    No trigger on this device
     	    iio:device1: adc102s051
@@ -138,18 +218,28 @@ https://docs.kernel.org/driver-api/iio/intro.html
     		    No trigger on this device
 
 
+Note that the units are standardized for the IIO interface based on the device type. If raw values are provided, a scale must be applied to get to the standardized units.
+
+.. _beagleplay-mikrobus-using-storage:
+
 Storage driver
 ==============
 
 
+.. _beagleplay-mikrobus-using-net:
+
 Network driver
 ==============
 
 
+.. _beagleplay-mikrobus-how:
+
 How does ClickID work?
 **********************
 
 
+.. _beagleplay-mikrobus-disable:
+
 Disabling the mikroBUS driver
 *****************************
 
diff --git a/boards/pocketbeagle/original/ch02.rst b/boards/pocketbeagle/original/ch02.rst
index 89e6b13c549a2af30c132a9d62281440a6517381..06b2ac61f293542895399440e02ee8fa5e48c87f 100644
--- a/boards/pocketbeagle/original/ch02.rst
+++ b/boards/pocketbeagle/original/ch02.rst
@@ -38,8 +38,10 @@ Board Changes
     |         | mikroBUS Click reset                                                                    |                      |        |
     |         | pins (made GPIO).                                                                       |                      |        |
     +---------+-----------------------------------------------------------------------------------------+----------------------+--------+
-    | A2B     | Because there are 2 TI parts which have long LT,                                        | *June 15, 2021*      | JK     |
-    |         | we propose to have the following changes:                                               |                      |        |
+    | A2a     | Fixed label on P2_24. Was labeled GPIO48, should be GPIO44.                             | *November 7, 2017*   | JK     |
+    +---------+-----------------------------------------------------------------------------------------+----------------------+--------+
+    | A2b     | Because there are 2 TI parts which have long lead-time,                                 | *June 15, 2021*      | JK     |
+    |         | we made the following changes:                                                          |                      |        |
     |         |                                                                                         |                      |        |
     |         | 1. Use ESD discrete devices instead of integrated TVS TI: TPD4S012DRYR.                 |                      |        |
     |         | 2. Change Logic IC TI SN74LVC1G07DCKR to Nexperia 74LVC1G07GV                           |                      |        |
diff --git a/boards/pocketbeagle/original/ch03.rst b/boards/pocketbeagle/original/ch03.rst
index 5cb7fa272f894ef329327f4b87b327929c34753f..a0ab734e62fc9ce8de16ba34c13b4c6fe187bf33 100644
--- a/boards/pocketbeagle/original/ch03.rst
+++ b/boards/pocketbeagle/original/ch03.rst
@@ -1,7 +1,7 @@
 .. _connecting_up_pocketbeagle:
 
 Connecting Up PocketBeagle
-==================================
+==========================
 
 This section provides instructions on how to hook up your board. The
 most common scenario is tethering PocketBeagle to your PC for local
@@ -10,7 +10,7 @@ development.
 .. _whats_in_the_package:
 
 What’s In the Package
-~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~
 
 In the package you will find two items as shown in figures below.
 
@@ -38,7 +38,7 @@ In the package you will find two items as shown in figures below.
 .. _connecting_the_board:
 
 Connecting the board
-~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~
 
 This section will describe how to connect to the board. Information can
 also be found on the Quick Start Guide that came in the box. Detailed
@@ -52,7 +52,7 @@ include additional configurations.
 .. _tethered_to_a_pc_using_debian_images:
 
 Tethered to a PC using Debian Images
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 In this configuration, you will need the following additional items:
 
@@ -79,7 +79,7 @@ but rarely is this the case.
 .. _getting_started:
 
 Getting Started
-^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^
 
 The following steps will guide you to quickly download a PocketBeagle
 software image onto your microSD card and get started writing code.
@@ -101,7 +101,7 @@ You can also get to this page directly by going to
 1. Download the latest image onto your computer by following the link to
 the latest image and click on the Debian image for Stretch IoT (non-GUI)
 for BeagleBone and PocketBeagle via microSD card. See Figure 6 below.
-This will download a .img.xz file into the downloads folder of your
+This will download a ``.img.xz`` file into the downloads folder of your
 computer.
 
 .. figure:: images/6fig-PB-DownloadSW.png
@@ -204,7 +204,7 @@ initially placed on your microSD card once the Linux kernel has booted.
 .. _accessing_the_board_and_getting_started_with_coding:
 
 Accessing the Board and Getting Started with Coding
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 The board will appear as a USB Storage drive on your PC after the kernel
 has booted, which will take approximately 10 seconds. The kernel on the
@@ -236,8 +236,8 @@ server that is running on PocketBeagle). Copy the appropriate IP Address
 from the chart (according to your PC operating system type) and paste
 into your browser then add a **:3000** to the end of it. See example in
 Figure 16 below. This will launch from PocketBeagle one of it's favorite
-Web Based Development Environments, Cloud9 IDE, (Figure 17) so that you
-can teach your beagle new tricks!
+Web Based Development Environments, Visual Studio Code, (Figure 17) 
+so that you can teach your beagle new tricks!
 
 .. figure:: images/16fig-PB-enablenetwork.png
    :align: center
@@ -245,72 +245,95 @@ can teach your beagle new tricks!
 
    Enable a Network Connection
 
-.. figure:: images/17fig-PB-cloud9.png
+.. figure:: images/vscode1.png
    :align: center
-   :alt: Launch Cloud9 IDE
+   :alt: Launch Visual Studio Code IDE
 
-   Launch Cloud9 IDE
+   Launch Visual Studio Code IDE
 
-1. Get Started Coding with Cloud9 IDE - blinking USR3 LED in JavaScript
-using the BoneScript library example
+#. Get Started Coding with Visual Studio Code IDE - blinking USR LEDs in Python.
 
-#. Create a new text file
+#. Navigate to the code.  Select ``examples/BeagleBone/Black/seqLEDs.py``.
 
-.. image:: images/SRM1_cloud9blinkPB.png
+.. image:: images/vscode2.png
 
 
-Copy and paste the below code into the editor
+The code should match the code below, if you can't find it, copy and paste the below code into the editor
 
-.. code-block:: 
+.. code-block:: python
 
-   var b = require('bonescript');
-   var state = b.LOW;
-   b.pinMode("USR3", b.OUTPUT);
-   setInterval(toggle, 250);  // toggle 4 times a second, every 250ms
-   function toggle() {
-       if(state == b.LOW) state = b.HIGH;
-       else state = b.LOW;
-       b.digitalWrite("USR3", state);
-   }
+   #!/usr/bin/env python3
+   # ////////////////////////////////////////
+   # //	seqLED.py
+   # //	Blinks the USR LEDs in sequence.
+   # //	Wiring:
+   # //	Setup:
+   # //	See:
+   # ////////////////////////////////////////
+   # //	Tested: may: 2022.06.29 - BBB - 5.10.109-ti-r45
+   import time
+   import os
 
+   LEDs=4
+   LEDPATH='/sys/class/leds/beaglebone:green:usr'
 
-.. image:: images/SRM2_cloud9blinkPB.png
+   # Turn off triggers
+   for i in range(LEDs):
+      # print(LEDPATH+str(i)+"/trigger")
+      f = open(LEDPATH+str(i)+"/trigger", "w")
+      f.write("none")
+      f.close()
 
-.. image:: images/SRM3_cloud9blinkPB.png
+   # Open a file for each LED
+   f = []
+   for i in range(LEDs):
+      f.append(open(LEDPATH+str(i)+"/brightness", "w"))
 
-Save the new text file as *blinkusr3.js* within the default directory
+   # Sequence
+   while True:
+      for i in range(LEDs):
+         f[i].seek(0)
+         f[i].write("1")
+         time.sleep(0.25)
+      for i in range(LEDs):
+         f[i].seek(0)
+         f[i].write("0")
+         time.sleep(0.25)
 
-Execute
-.. code-block:: 
+Open a terminal by selecting ``Terminal/New Terminal`` 
+(or pressing ``Ctrl+Shift+```) and execute the code: 
 
-   node blinkusr3.js
+.. image:: images/vscode3.png
 
-within the default (/var/lib/cloud9) directory
+.. code-block:: shell-session
 
+   bone:~$ cd ~/examples/BeagleBone/Black
+   bone:~$ ./seqLEDs.py
 
-.. image:: images/SRM4_cloud9blinkPB.png
+You will see the four USR LEDs flashing.
 
+.. image:: images/vscode4.png
 
-Type CTRL+C to stop the program running
+Type CTRL+C to stop the program running.
 
 
 .. _powering_down:
 
 Powering Down
-^^^^^^^^^^^^^^^^^^^
-
-| 1. Standard Power Down Press the power button momentarily with a tap.
-  The system will power down automatically. This will shut down your
-  software with grace. Software routines will run to completion.
+^^^^^^^^^^^^^
+1. Standard Power Down Press the power button momentarily with a tap.
+The system will power down automatically. This will shut down your
+software with grace. Software routines will run to completion.
 | The Standard Power Down can also be invoked from the Linux command
-  shell via "sudo shutdown -h now".
-| 2. Hard Power Down Press the power button for 10 seconds. This will
-  force an immediate shut down of the software. For example you may lose
-  any items you have written to the memory. Holding the button longer
-  than 10 seconds will perform a power reset and the system will power
-  back on.
-
-1. Remove the USB cable Remember to hold your board firmly at the USB
+shell via ``sudo halt``.
+
+2. Hard Power Down Press the power button for 10 seconds. This will
+force an immediate shut down of the software. For example you may lose
+any items you have written to the memory. Holding the button longer
+than 10 seconds will perform a power reset and the system will power
+back on.
+
+3. Remove the USB cable Remember to hold your board firmly at the USB
 connection while you remove the cable to prevent damage to the USB
 connector.
 
@@ -332,7 +355,7 @@ the USB cable follow these instructions:
 .. _other_ways_to_connect_up_to_your_pocketbeagle:
 
 Other ways to Connect up to your PocketBeagle
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 The board can be configured in several different ways. Future revisions
 of this document may include additional configurations.
diff --git a/boards/pocketbeagle/original/images/vscode1.png b/boards/pocketbeagle/original/images/vscode1.png
new file mode 100644
index 0000000000000000000000000000000000000000..97494363ee0f5eb397999e5c499482a46cbf3ea2
Binary files /dev/null and b/boards/pocketbeagle/original/images/vscode1.png differ
diff --git a/boards/pocketbeagle/original/images/vscode2.png b/boards/pocketbeagle/original/images/vscode2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8525529dce1c0fd2afcd09615657f951bf147948
Binary files /dev/null and b/boards/pocketbeagle/original/images/vscode2.png differ
diff --git a/boards/pocketbeagle/original/images/vscode3.png b/boards/pocketbeagle/original/images/vscode3.png
new file mode 100644
index 0000000000000000000000000000000000000000..9579f34b0c7e9bdb9ac980e4770f04a46022f2d7
Binary files /dev/null and b/boards/pocketbeagle/original/images/vscode3.png differ
diff --git a/boards/pocketbeagle/original/images/vscode4.png b/boards/pocketbeagle/original/images/vscode4.png
new file mode 100644
index 0000000000000000000000000000000000000000..2631f53e8cf0f24e00ac296d8873843f7a723609
Binary files /dev/null and b/boards/pocketbeagle/original/images/vscode4.png differ
diff --git a/books/pru-cookbook/02start/figures/c9.png b/books/pru-cookbook/02start/figures/c9.png
deleted file mode 100644
index edb7a272bf57253b007ceaf931e8a6e0696a198d..0000000000000000000000000000000000000000
Binary files a/books/pru-cookbook/02start/figures/c9.png and /dev/null differ
diff --git a/books/pru-cookbook/02start/figures/vsc.png b/books/pru-cookbook/02start/figures/vsc.png
new file mode 100644
index 0000000000000000000000000000000000000000..d28335a11724db8dc1d13199c0e79d41d8813ab7
Binary files /dev/null and b/books/pru-cookbook/02start/figures/vsc.png differ
diff --git a/books/pru-cookbook/02start/start.rst b/books/pru-cookbook/02start/start.rst
index 637a0b7d9ebcff1b8ec5b4fd5f14d3bd018cd924..664a58afea018ee10b5138fd4b299525c0845b55 100644
--- a/books/pru-cookbook/02start/start.rst
+++ b/books/pru-cookbook/02start/start.rst
@@ -5,8 +5,8 @@ Getting Started
 
 We assume you have some experience with the Beagle and are here to learn about 
 the PRU.  This chapter discusses what Beagles are out there, how to load the 
-latest software image on your beagle, how to run the Cloud9 IDE and how to 
-blink an LED.
+latest software image on your beagle, how to run the Visual Studio Code 
+(VS Code) IDE and how to blink an LED.
 
 If you already have your Beagle and know your way around it, you can find the
 code at https://git.beagleboard.org/beagleboard/pru-cookbook-code and book
@@ -159,15 +159,15 @@ The AI has:
 
 
 Installing the Latest OS on Your Bone
-****************************************
+*************************************
 
 Problem
----------
+-------
 
 You want to find the latest version of Debian that is available for your Bone.
 
 Solution
----------
+--------
 
 On your host computer open a browser and go to
 http://www.beagleboard.org/distros.
@@ -218,66 +218,55 @@ button and wait for it to finish.
 
 Once the SD is flashed, insert it in the Beagle and power it up.
 
-Cloud9 IDE
-***********
+Visual Studio Code IDE
+**********************
 
 Problem
-------------
+-------
 
 How do I manage and edit my files?
 
 Solution
-------------
+--------
 
-The image you downloaded includes `Cloud9 <https://aws.amazon.com/cloud9/>`_,
+The image you downloaded includes `Visual Studio Code <https://code.visualstudio.com/>`_,
 a web-based integrated development environment (IDE) as shown in 
-:ref:`start_c9`.
-
-.. _start_c9:
-
-.. figure:: figures/c9.png
-    :align: center
-    :alt: The Cloud9 IDE
-
-    Cloud9 IDE
-
-Just point the browser on your host computer to http://192.168.7.2 
-and start exploring.  If you want the files in your home directory to appear
-in the tree structure click the settings gear and select *Show Home in Favorites* 
-as shown in :ref:`start_c9_show_home`.
+:ref:`start_vsc`.
 
-.. _start_c9_show_home:
+.. _start_vsc:
 
-.. figure:: figures/c9ShowHome.png
+.. figure:: figures/vsc.png
     :align: center
-    :alt: Cloud9 showing home files
+    :alt: The Visual Studio Code IDE
 
-    Cloud9 Showing Home files
+    The Visual Studio Code IDE
 
+Just point the browser on your host computer to http://192.168.7.2:3000 
+and start exploring.  
 
 If you want to edit files beyond your home directory you can link to the root file system by:
 
 .. code-block:: shell-session
 
-    bone$ cd
-    bone$ ln -s / root
-    bone$ cd root
-    bone$ ls
+    bone:~$ cd
+    bone:~$ ln -s / root
+    bone:~$ cd root
+    bone:~$ ls
     bbb-uEnv.txt  boot  etc   ID.txt  lost+found  mnt           opt   root  sbin  sys  usr
     bin           dev   home  lib     media       nfs-uEnv.txt  proc  run   srv   tmp  var
 
-Now you can reach all the files from Cloud9.
+Now you can reach all the files from VS Code.
 
 Getting Example Code
-**********************
+********************
 
 Problem
----------
+-------
 
 You are ready to start playing with the examples and need to find the code.
 
 Solution
----------
+--------
 
 You can find the code on the PRU Cookbook Code project on git.beagleboard.org: 
 https://git.beagleboard.org/beagleboard/pru-cookbook-code. Just clone 
@@ -285,11 +274,11 @@ it on your Beagle.
 
 .. code-block:: shell-session
 
-    bone$ cd /opt/source
-    bone$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code
-    bone$ cd pru-cookbook-code
-    bone$ sudo ./install.sh
-    bone$ ls -F
+    bone:~$ cd /opt/source
+    bone:~$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code
+    bone:~$ cd pru-cookbook-code
+    bone:~$ sudo ./install.sh
+    bone:~$ ls -F
     01case/   03details/  05blocks/  07more/  README.md
     02start/  04details/  06io/      08ai/
 
@@ -297,8 +286,8 @@ Each chapter has its own directory that has all of the code.
 
 .. code-block:: shell-session
 
-    bone$ cd 02start/
-    bone$ ls
+    bone:~$ cd 02start/
+    bone:~$ ls
     hello.pru0.c  hello.pru1_1.c  Makefile  setup.sh
     ai.notes         hello2.pru1_1.c  hello2.pru2_1.c  Makefile
     hello2.pru0.c    hello2.pru1.c    hello.pru0.c     setup2.sh*
@@ -307,15 +296,15 @@ Each chapter has its own directory that has all of the code.
 Go and explore.
 
 Blinking an LED
-*****************
+***************
 
 Problem
----------
+-------
 
 You want to make sure everything is set up by blinking an LED.
 
 Solution
-----------
+--------
 
 The 'hello, world' of the embedded world is to flash an LED. :ref:`start_hello` 
 is some code that blinks the ``USR3`` LED ten times using the PRU.
@@ -335,10 +324,10 @@ to run it right now do the following.
 
 .. code-block:: shell-session
 
-    bone$ cd /opt/source
-    bone$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code
-    bone$ cd pru-cookbook-code/02start
-    bone$ sudo ../install.sh
+    bone:~$ cd /opt/source
+    bone:~$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code
+    bone:~$ cd pru-cookbook-code/02start
+    bone:~$ sudo ../install.sh
 
 .. tip::
 
@@ -349,11 +338,11 @@ to run it right now do the following.
 .. _start_running_code:
 
 Running Code on the Black or Pocket
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 .. code-block:: shell-session
 
-    bone$ make TARGET=hello.pru0
+    bone:~$ make TARGET=hello.pru0
     /opt/source/pru-cookbook-code/common/Makefile:27: MODEL=TI_AM335x_BeagleBone_Green_Wireless,TARGET=hello.pru0,COMMON=/opt/source/pru-cookbook-code/common
     -    Stopping PRU 0
     CC	hello.pru0.c
@@ -368,19 +357,31 @@ Running Code on the Black or Pocket
     PRUN    = 0
     PRU_DIR = /sys/class/remoteproc/remoteproc1
 
+.. tip:: 
+    If you get the following error:
+
+    .. code-block:: shell-session
+
+        cp: cannot create regular file '/lib/firmware/am335x-pru0-fw': Permission denied
+
+    Run the following command to set the permissions.
+
+    .. code-block:: shell-session
+
+        bone:~$ sudo chown debian:debian /lib/firmware/am335x-pru*
 
 Running Code on the AI
-~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~
 
 .. code-block:: shell-session
 
-    bone$ make TARGET=hello.pru1_1
-    /var/lib/cloud9/common/Makefile:28: MODEL=BeagleBoard.org_BeagleBone_AI,TARGET=hello.pru1_1
+    bone:~$ make TARGET=hello.pru1_1
+    /opt/source/pru-cookbook-code/common/Makefile:28: MODEL=BeagleBoard.org_BeagleBone_AI,TARGET=hello.pru1_1
     -    Stopping PRU 1_1
     CC	hello.pru1_1.c
-    "/var/lib/cloud9/common/prugpio.h", line 4: warning #1181-D: #warning directive: "Found AI"
-    LD	/tmp/cloud9-examples/hello.pru1_1.o
-    -	copying firmware file /tmp/cloud9-examples/hello.pru1_1.out to /lib/firmware/am57xx-pru1_1-fw
+    "/opt/source/pru-cookbook-code/common/prugpio.h", line 4: warning #1181-D: #warning directive: "Found AI"
+    LD	/tmp/vsx-examples/hello.pru1_1.o
+    -	copying firmware file /tmp/vsx-examples/hello.pru1_1.out to /lib/firmware/am57xx-pru1_1-fw
     write_init_pins.sh
     writing "none" to "/sys/class/leds/beaglebone:green:usr3/trigger"
     -    Starting PRU 1_1
@@ -388,7 +389,7 @@ Running Code on the AI
     PROC    = pru
     PRUN    = 1_1
     PRU_DIR = /dev/remoteproc/pruss1-core1
-    rm /tmp/cloud9-examples/hello.pru1_1.o
+    rm /tmp/vsx-examples/hello.pru1_1.o
 
 Look quickly and you will see the ``USR3`` LED blinking.  
 
diff --git a/books/pru-cookbook/03details/details.rst b/books/pru-cookbook/03details/details.rst
index 78a3796346763c390bdf40256524aa893872ed41..e9907c4685595aa97cb888bd8a8cb7557c13f32b 100644
--- a/books/pru-cookbook/03details/details.rst
+++ b/books/pru-cookbook/03details/details.rst
@@ -1,7 +1,7 @@
 .. _pru-cookbook-details:
 
 Running a Program; Configuring Pins
-####################################
+###################################
 
 There are a lot of details in compiling and running PRU code.
 Fortunately those details are captured in a common `Makefile` that is
@@ -20,15 +20,15 @@ compile code and also start and stop the PRUs.
 
 
 Getting Example Code
-**********************
+********************
 
 Problem
----------
+-------
 
 I want to get the files used in this book.
 
 Solution
----------
+--------
 
 It's all on a GitHub repository.
 
@@ -330,7 +330,7 @@ Solution
 ``am335x_pru.cmd`` is the standard linker command file that tells the linker
 where to put what for the BeagleBone Black and Blue, and the Pocket. 
 The ``am57xx_pru.cmd`` does the same for the AI.
-Both files can be found in ``/var/lib/cloud9/common``.
+Both files can be found in ``/opt/source/pru-cookbook-code/common``.
 
 
 .. literalinclude:: ../code/03details/am335x_pru.cmd
diff --git a/books/pru-cookbook/04debug/debug.rst b/books/pru-cookbook/04debug/debug.rst
index 6df394ce5cff32a5fd0aaf102663d28d60c7d435..711adfe65034170270f50c131f6a52da0cf4b4b3 100644
--- a/books/pru-cookbook/04debug/debug.rst
+++ b/books/pru-cookbook/04debug/debug.rst
@@ -13,15 +13,15 @@ Finally, using one of the UARTS to send debugging information out a serial port
 is shown. 
 
 Debugging via an LED
-**********************
+********************
 
 Problem
----------
+-------
 
 I need a simple way to see if my program is running without slowing the real-time execution.
 
 Solution
----------
+--------
 
 One of the simplest ways to do this is to attach an LED to the output pin and watch it 
 flash. :ref:`debug_LED` shows an LED attached to pin P9_29 of the BeagleBone Black.
@@ -403,9 +403,9 @@ Set the following variables so ``make`` will know what to compile.
   :caption: make
 
   bone$ *make TARGET=uart1.pru0*
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=uart1.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=uart1.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/uart1.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/uart1.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
@@ -474,9 +474,9 @@ If you want to try ``uart2.pru0.c``, run the following:
   :caption: make
 
   bone$ *make TARGET=uart2.pru0*
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=uart2.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=uart2.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/uart2.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/uart2.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
diff --git a/books/pru-cookbook/05blocks/blocks.rst b/books/pru-cookbook/05blocks/blocks.rst
index 4bb47e3b5bdd1b7053760a12ad9ff8c88ce50416..8ffe9acc21eb48c9ce71236e68f89d9318121992 100644
--- a/books/pru-cookbook/05blocks/blocks.rst
+++ b/books/pru-cookbook/05blocks/blocks.rst
@@ -122,9 +122,9 @@ Compile and run the program.
   Current mode for P9_28 is:     pruout
   Current mode for P9_28 is:     pruout
   bone$ *make*
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=shared.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=shared.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/shared.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/shared.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
@@ -136,7 +136,7 @@ Now check the **symbol table** to see where things are allocated.
 
 .. code-block:: bash
 
-  bone $ *grep shared /tmp/cloud9-examples/shared.pru0.map* 
+  bone $ *grep shared /tmp/vsx-examples/shared.pru0.map* 
   ....
   1     0000011c  shared_0                     
   2     00010000  shared_1                     
@@ -401,9 +401,9 @@ Now you are ready to compile
 .. code-block:: bash
 
   bone$ make
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm1.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm1.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/pwm1.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/pwm1.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
@@ -878,18 +878,18 @@ Compile and run the two files with:
 .. code-block:: bash
 
   bone$ *make TARGET=pwm7.pru0; make TARGET=pwm7.pru1*
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm7.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm7.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/pwm7.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/pwm7.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
   PROC    = pru
   PRUN    = 0
   PRU_DIR = /sys/class/remoteproc/remoteproc1
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm7.pru1
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=pwm7.pru1
   -    Stopping PRU 1
-  -	copying firmware file /tmp/cloud9-examples/pwm7.pru1.out to /lib/firmware/am335x-pru1-fw
+  -	copying firmware file /tmp/vsx-examples/pwm7.pru1.out to /lib/firmware/am335x-pru1-fw
   write_init_pins.sh
   -    Starting PRU 1
   MODEL   = TI_AM335x_BeagleBone_Black
@@ -1288,13 +1288,13 @@ And also the sine wave as shown in :ref:`blocks_sine`.
 Notice on the bottom plot the harmonics are much more suppressed.
 
 Generating the sine waveform uses **floats**. This requires much more code.
-You can look in `/tmp/cloud9-examples/sine.pru0.map` to see how much memory is being used.
+You can look in `/tmp/vsx-examples/sine.pru0.map` to see how much memory is being used.
 :ref:`blocks_sine_map` shows the first few lines for the sine wave.
 
 .. _blocks_sine_map:
 
 .. literalinclude:: ../code/05blocks/sine.map
-   :caption: /tmp/cloud9-examples/sine.pru0.map for Sine Wave
+   :caption: /tmp/vsx-examples/sine.pru0.map for Sine Wave
    :linenos:
 
 :download:`lines=1..22 <../code/05blocks/sine.map>`
@@ -1562,9 +1562,9 @@ Run the code as usual.
 .. code-block:: bash
 
   bone$ make TARGET=neo4.pru0
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=neo4.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=neo4.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/neo4.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/neo4.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
diff --git a/books/pru-cookbook/06io/io.rst b/books/pru-cookbook/06io/io.rst
index a72e24489c1f7bc7e9360b03e0d98f420ba41ac7..e4a93302df9c6086f5c7c0e5972037bfe3a5408d 100644
--- a/books/pru-cookbook/06io/io.rst
+++ b/books/pru-cookbook/06io/io.rst
@@ -1,7 +1,7 @@
 .. _pru-cookbook-io:
 
 Accessing More I/O
-####################
+##################
 
 So far the examples have shown how to access the GPIO pins on the BeagleBone Black's ``P9`` header and 
 through the ``pass:[__]R30`` register.  Below shows how more GPIO pins can be accessed.
@@ -115,9 +115,9 @@ Set your exports and make.
     TARGET=gpio.pru0
     ...
     bone$ *make*
-    /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=gpio.pru0
+    /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=gpio.pru0
     -    Stopping PRU 0
-    -	copying firmware file /tmp/cloud9-examples/gpio.pru0.out to /lib/firmware/am335x-pru0-fw
+    -	copying firmware file /tmp/vsx-examples/gpio.pru0.out to /lib/firmware/am335x-pru0-fw
     write_init_pins.sh
     -    Starting PRU 0
     MODEL   = TI_AM335x_BeagleBone_Black
diff --git a/books/pru-cookbook/07more/more.rst b/books/pru-cookbook/07more/more.rst
index a9a717352c1ae960a673ab2e4e5bef41798b2ff9..5ee9477771bafdbc31e8f9b9d911e16ae3560829 100644
--- a/books/pru-cookbook/07more/more.rst
+++ b/books/pru-cookbook/07more/more.rst
@@ -70,8 +70,8 @@ and :ref:`more_delay`. If you look in the local ``Makefile`` you'll see:
 
 :download:`Makefile <../code/07more/Makefile>`
 
-This Makefle includes a common Makefile at  ``/var/lib/cloud9/common/Makefile``, this the Makefile 
-you need to edit. Edit ``/var/lib/cloud9/common/Makefile`` and go to line 195.
+This Makefle includes a common Makefile at  ``/opt/source/pru-cookbook-code/common/Makefile``, this the Makefile 
+you need to edit. Edit ``/opt/source/pru-cookbook-code/common/Makefile`` and go to line 195.
 
 .. code-block:: shell-session
 
@@ -91,9 +91,9 @@ The following will compile and run everything.
 
   bone$ config-pin P9_31 pruout
   bone$ make TARGET=delay-test.pru0 TARGETasm=delay.pru0
-  /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=delay-test.pru0
+  /opt/source/pru-cookbook-code/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=delay-test.pru0
   -    Stopping PRU 0
-  -	copying firmware file /tmp/cloud9-examples/delay-test.pru0.out to /lib/firmware/am335x-pru0-fw
+  -	copying firmware file /tmp/vsx-examples/delay-test.pru0.out to /lib/firmware/am335x-pru0-fw
   write_init_pins.sh
   -    Starting PRU 0
   MODEL   = TI_AM335x_BeagleBone_Black
@@ -245,7 +245,7 @@ You can see where ``cycle`` and ``stall`` are stored by looking into :ref:`more_
 .. _more_cycle_list0:
 
 .. literalinclude:: ../code/07more/cycle.pru0.lst
-   :caption: /tmp/cloud9-examples/cycle.pru0.lst Lines 113..119
+   :caption: /tmp/vsx-examples/cycle.pru0.lst Lines 113..119
    :lines: 113-119
    :lineno-start: 113
    :linenos:
@@ -258,7 +258,7 @@ the ``CTRL`` registers. Later in the file we see :ref:`more_cycle_list1`.
 .. _more_cycle_list1:
 
 .. literalinclude:: ../code/07more/cycle.pru0.lst
-   :caption: /tmp/cloud9-examples/cycle.pru0.lst Lines 146..152
+   :caption: /tmp/vsx-examples/cycle.pru0.lst Lines 146..152
    :lines: 146-152
    :lineno-start: 146
    :linenos:
diff --git a/books/pru-cookbook/common/Makefile b/books/pru-cookbook/common/Makefile
index 5b3999031af3d04540e6d4c8057624d1fe21664b..d599f1cd29e34e72c8c7c67d73d6a874395ae204 100644
--- a/books/pru-cookbook/common/Makefile
+++ b/books/pru-cookbook/common/Makefile
@@ -23,7 +23,7 @@ PRU_SUPPORT:=/usr/lib/ti/pru-software-support-package
 PRU_STARTERWARE:=/usr/share/ti/starterware
 C6X_CGT:=/usr/share/ti/cgt-c6x
 TIDL_API_DIR:=/usr/share/ti/tidl/tidl_api
-GEN_DIR:=/tmp/cloud9-examples
+GEN_DIR:=/tmp/vsx-examples
 MODEL:=$(shell cat /proc/device-tree/model | sed 's/ /_/g' | tr -d '\000')
 # $(warning MODEL=$(MODEL),TARGET=$(TARGET),COMMON=$(COMMON))
 $(warning MODEL=$(MODEL),TARGET=$(TARGET))
diff --git a/intro/blinkLED.rst b/intro/blinkLED.rst
index 1cd993f0b4a17f74ab9ed47b0a433ff2d3782987..d78e01c5a05c4d56ad08d38bd9838cd60e3932de 100644
--- a/intro/blinkLED.rst
+++ b/intro/blinkLED.rst
@@ -38,7 +38,7 @@ Here you have a choice.  If you want a graphical approach,
 choose the ``VS Code`` tab.  If you want a command line 
 and are running Linux on your host, 
 take the ``ssh (Linux/Mac)`` tab.  Finally take the 
-``Windown (Putty)`` tab for command line from windows.
+``putty (Windows)`` tab for command line from windows.
 
 .. tabs::
 
@@ -48,229 +48,327 @@ take the ``ssh (Linux/Mac)`` tab.  Finally take the
         (https://code.visualstudio.com/) installed and 
         running. To access it, open a web browse on 
         your host computer and browse to: ``192.168.7.2:3000`` 
+        (use ``192.168.6.2:3000`` for the Mac)
         and you will see something like:
 
         .. figure::  figures/vscode1.png
 
-        Use the file navigator on the left to naviagte to 
-        ``examples/BeagleBone/Black/blinkInternalLED.sh`` 
-        and you will see:
+        At this point you can either run the scripts via a command 
+        line within VS Code, or run them by clicking the
+        ``RUN Code`` button.
 
-        .. figure:: figures/vscode2.png
 
-        This code blinks one of the USR LEDs built into the board. 
-        Click on the ``RUN Code`` triangle on the upper right of 
-        the screen to run the code.  (You could also enter ``Ctrl+Alt+N``) 
-        The USR3 LED should now be blinking.  
+        Running via the command line
 
-        Click on the ``Stop Code Run`` (``Ctrl+Alt+M``) square to the right of the 
-        ``Run Code`` button.
+            Open a terminal window in VS Code by dropping down the 
+            ``Terminal`` menu and selecting ``New Terminal`` (or entering 
+            ``Ctrl+Shift+```).  The terminal window appears at the 
+            bottom of the screen as shown below.
 
-        Time to play!  Try changing the LED number (on line 10) from 
-        3 to something else.  Click the ``Run Code`` button (no 
-        need to save the file, autosave is on by default).
+            .. figure:: figures/vscode3.png
 
-        Try running ``seqLEDs.py``.
+            You can now enter commands and see them run as shown below.
 
-    .. group-tab:: Command line
+            .. figure:: figures/vscode4.png
 
-        This is command line.
+        Running via the ``RUN`` button
 
-        .. tabs::
+            Use the file navigator on the left to navigate to 
+            ``examples/BeagleBone/Black/blinkInternalLED.sh`` 
+            and you will see:
 
-            .. group-tab:: ssh (Linux/Mac)
+            .. figure:: figures/vscode2.png
 
-                If you are running a Linux host, open a terminal widow and run 
+            This code blinks one of the USR LEDs built into the board. 
+            Click on the ``RUN Code`` triangle on the upper right of 
+            the screen to run the code.  (You could also enter ``Ctrl+Alt+N``) 
+            The USR3 LED should now be blinking.  
 
-                .. code-block:: shell-session
+            Click on the ``Stop Code Run`` (``Ctrl+Alt+M``) square to the right of the 
+            ``Run Code`` button.
 
-                    host:~$ ssh debian@192.168.7.2
+            Time to play!  Try changing the LED number (on line 10) from 
+            3 to something else.  Click the ``Run Code`` button (no 
+            need to save the file, autosave is on by default).
 
-                Use password ``temppwd``.
+            Try running ``seqLEDs.py``.
 
-            .. group-tab:: Windows (Putty)
-
-                If you are running Window you need to run an ``ssh`` client 
-                to connect to the Beagle. I suggest you use ``putty``. 
-                You can download it here: https://www.putty.org/. 
-                Once installed, launch it and connect to your Beagle 
-                by sshing to ``192.168.7.2``. 
-
-                .. figure::  figures/putty.png
-
-                Login with user ``debian`` 
-                and password ``temppwd``.  
-
-        Blink an LED
-
-        Once logged in the rest is easy.  First:
+    .. group-tab:: ssh (Mac)
+                
+        If you are running a Mac host, open a terminal widow and run 
 
         .. code-block:: shell-session
 
-            bone:~$ cd ~/examples/BeagleBone/Black
-            bone:~$ ls        
-            README.md              blinkInternalLED.sh  blinkLED2.py    input2.js
-            analogIn.py            blinkLED.bs.js       blinkLEDold.py  seqLEDs.py
-            analogInCallback.js    blinkLED.c           fadeLED.js      swipeLED.js
-            analogInContinuous.py  blinkLED.js          fadeLED.py
-            analogInOut.js         blinkLED.py          gpiod
-            analogInSync.js        blinkLED.sh          input.js
-
-        Here you see a list of many scripts that demo simple 
-        input/output on the Beagle. Try one that works on the 
-        internal LEDs.
-
-        .. code-block:: shell-session
-
-            bone:~$ cat blinkInternalLED.py
-            LED="3"
-            
-            LEDPATH='/sys/class/leds/beaglebone:green:usr'
-            
-            while true ; do
-                echo "1" > ${LEDPATH}${LED}/brightness
-                sleep 0.5
-                echo "0" > ${LEDPATH}${LED}/brightness
-                sleep 0.5
-            done
-            bone:~$ ./blinkInternalLED.py
-            ^c
-
-        Here you see a simple bash script that turns an LED 
-        on and off.  Enter control-c to stop the script.
+            host:~$ ssh debian@192.168.6.2
 
-        Blinking via Python
+        Use the password ``temppwd``.
+  
+    .. group-tab:: ssh (Linux)
 
-        Here's a script that sequences the LEDs on and off.
+        If you are running a Linux host, open a terminal widow and run 
 
         .. code-block:: shell-session
 
-            bone:~$ cat seqLEDs.py
-            import time
-            import os
-
-            LEDs=4
-            LEDPATH='/sys/class/leds/beaglebone:green:usr'
-
-            # Open a file for each LED
-            f = []
-            for i in range(LEDs):
-                f.append(open(LEDPATH+str(i)+"/brightness", "w"))
-
-            # Sequence
-            while True:
-                for i in range(LEDs):
-                    f[i].seek(0)
-                    f[i].write("1")
-                    time.sleep(0.25)
-                for i in range(LEDs):
-                    f[i].seek(0)
-                    f[i].write("0")
-                    time.sleep(0.25)
-            bone:~$ ./seqLEDs.py       
-            ^c
-            
-        Again, hit control-C to stop the script.
-
-        Blinking from Command Line
-
-        .. code-block:: shell-session
-
-            bone:~$ cd /sys/class/leds
-            bone:~$ ls
-            beaglebone:green:usr0  beaglebone:green:usr2  mmc0::
-            beaglebone:green:usr1  beaglebone:green:usr3  mmc1::
+            host:~$ ssh debian@192.168.7.2
         
-        Here you see a list of LEDs. Your list may be slightly 
-        different depending on which Beagle you are running. 
-        You can blink any of them.  Let's try ``usr1``.
-
-        .. code-block:: shell-session
-            
-            bone:~$ cd beaglebone\:green\:usr1/
-            bone:~$ ls
-            brightness  device  max_brightness  power  subsystem  trigger  uevent
-            bone:~$ echo 1 > brightness
-            bone:~$ echo 0 > brightness
-
-        When you echo 1 into ``brightness`` the LED turns on. 
-        Echoing a 0 turns it off.  Congratulations, you've blinked 
-        your first LED!
-
-        Blinking other LEDs
-
-        You can blink the other LEDs by changing in to thier 
-        directories and doing the same.
-
-        .. code-block:: shell-session
-            
-            bone:~$ cd ../beaglebone\:green\:usr0/
-            bone:~$ echo 1 > brightness
-            bone:~$ echo 0 > brightness
-
-        Did you notice that LED ``usr0`` blinks on it's own in a 
-        heartbeat pattern? You can set an LED trigger.  Here's 
-        what triggers you can set:
-
-        .. code-block:: shell-session
-
-            bone:~$ cat trigger 
-            none usb-gadget usb-host rfkill-any rfkill-none 
-            kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock 
-            kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock 
-            kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock 
-            timer oneshot disk-activity disk-read disk-write i
-            de-disk mtd nand-disk [heartbeat] backlight gpio c
-            pu cpu0 cpu1 cpu2 cpu3 activity default-on panic 
-            netdev mmc0 mmc1 mmc2 phy0rx phy0tx phy0assoc phy0radio 
-            rfkill0 gpio-0:00:link gpio-0:00:1Gbps gpio-0:00:100Mbps 
-            gpio-0:00:10Mbps gpio-0:01:link gpio-0:01:10Mbps
-            bone:~$ echo none > trigger
-
-        Notice ``[heartbeat]`` is in brackets.  This shows it's the 
-        current trigger.  The echo changes the trigger to ``none``.
-
-        Try experimenting with some of the other triggers and see if you 
-        can figure them out.
-
-        Another way to Blink an LED
-
-        An interesting thing about Linux is there are often many ways 
-        to do the same thing.  For example, I can think of at least five ways to blink 
-        an LED.  Here's another way using the ``gpiod`` system.
-
-        .. code-block:: shell-session
-
-            bone:~$ gpioinfo | grep -e chip -ie  usr
-            gpiochip0 - 32 lines:
-            gpiochip1 - 32 lines:
-                line  21: "[usr0 led]" "beaglebone:green:usr0" output active-high [used]
-                line  22: "[usr1 led]" "beaglebone:green:usr1" output active-high [used]
-                line  23: "[usr2 led]" "beaglebone:green:usr2" output active-high [used]
-                line  24: "[usr3 led]" "beaglebone:green:usr3" output active-high [used]
-            gpiochip2 - 32 lines:
-            gpiochip3 - 32 lines:
-
-        Here we asked how the LEDs are attached to the General Purpose 
-        IO (gpio) system.  The answer is, (yours will be different for a 
-        different Beagle)
-        there are four interface chips and the LEDs are attached to 
-        chip 1.  You can control the gpios (and thus the LEDs) using
-        the ``gpioset`` command.
-
-        .. code-block:: shell-session
-
-            bone:~$ gpioset --mode=time --sec=2 1 22=1
-            bone:~$ gpioset --mode=time --sec=2 1 22=0
-
-        The first command sets chip 1, line 22 (the usr1 led) to 1 (on) for 
-        2 seconds.  The second command turns it off for 2 seconds.
-
-        Try it for the other LEDs.
-
-        .. note:: 
-
-            This may not work on all Beagles since it depends on which 
-            version of Debian you are running.
-
-
+        Use the password ``temppwd``.
+
+    .. group-tab:: putty (Windows)
+
+        If you are running Window you need to run an ``ssh`` client 
+        to connect to the Beagle. I suggest you use ``putty``. 
+        You can download it here: https://www.putty.org/. 
+        Once installed, launch it and connect to your Beagle 
+        by sshing to ``192.168.7.2``. 
+
+        .. figure::  figures/putty.png
+
+        Login with user ``debian`` 
+        and password ``temppwd``.  
+
+Blink an LED
+------------
+
+Once logged in the rest is easy.  First:
+
+.. code-block:: shell-session
+
+    bone:~$ cd ~/examples/BeagleBone/Black
+    bone:~$ ls        
+    README.md              blinkInternalLED.sh  blinkLED2.py    input2.js
+    analogIn.py            blinkLED.bs.js       blinkLEDold.py  seqLEDs.py
+    analogInCallback.js    blinkLED.c           fadeLED.js      swipeLED.js
+    analogInContinuous.py  blinkLED.js          fadeLED.py
+    analogInOut.js         blinkLED.py          gpiod
+    analogInSync.js        blinkLED.sh          input.js
+
+Here you see a list of many scripts that demo simple 
+input/output on the Beagle. Try one that works on the 
+internal LEDs.
+
+.. code-block:: shell-session
+
+    bone:~$ cat blinkInternalLED.py
+    LED="3"
+    
+    LEDPATH='/sys/class/leds/beaglebone:green:usr'
+    
+    while true ; do
+        echo "1" > ${LEDPATH}${LED}/brightness
+        sleep 0.5
+        echo "0" > ${LEDPATH}${LED}/brightness
+        sleep 0.5
+    done
+    bone:~$ ./blinkInternalLED.py
+    ^c
+
+Here you see a simple bash script that turns an LED 
+on and off.  Enter Ctrl+c to stop the script.
+
+Blinking via Python
+-------------------
+
+Here's a script that sequences the LEDs on and off.
+
+.. code-block:: shell-session
+
+    bone:~$ cat seqLEDs.py
+    import time
+    import os
+
+    LEDs=4
+    LEDPATH='/sys/class/leds/beaglebone:green:usr'
+
+    # Open a file for each LED
+    f = []
+    for i in range(LEDs):
+        f.append(open(LEDPATH+str(i)+"/brightness", "w"))
+
+    # Sequence
+    while True:
+        for i in range(LEDs):
+            f[i].seek(0)
+            f[i].write("1")
+            time.sleep(0.25)
+        for i in range(LEDs):
+            f[i].seek(0)
+            f[i].write("0")
+            time.sleep(0.25)
+    bone:~$ ./seqLEDs.py       
+    ^c
+    
+Again, hit Ctrl+c to stop the script.
+
+Blinking from Command Line
+--------------------------
+
+You can control the LEDs from the command line.
+
+.. code-block:: shell-session
+
+    bone:~$ cd /sys/class/leds
+    bone:~$ ls
+    beaglebone:green:usr0  beaglebone:green:usr2  mmc0::
+    beaglebone:green:usr1  beaglebone:green:usr3  mmc1::
+
+Here you see a list of LEDs. Your list may be slightly 
+different depending on which Beagle you are running. 
+You can blink any of them.  Let's try ``usr1``.
+
+.. code-block:: shell-session
+    
+    bone:~$ cd beaglebone\:green\:usr1/
+    bone:~$ ls
+    brightness  device  max_brightness  power  subsystem  trigger  uevent
+    bone:~$ echo 1 > brightness
+    bone:~$ echo 0 > brightness
+
+When you echo 1 into ``brightness`` the LED turns on. 
+Echoing a 0 turns it off. 
+
+Blinking other LEDs
+-------------------
+
+You can blink the other LEDs by changing in to thier 
+directories and doing the same. Let's blink the USR0 LED.
+
+.. code-block:: shell-session
+    
+    bone:~$ cd ../beaglebone\:green\:usr0/
+    bone:~$ echo 1 > brightness
+    bone:~$ echo 0 > brightness
+
+Did you notice that LED ``usr0`` blinks on it's own in a 
+heartbeat pattern? You can set an LED trigger.  Here's 
+what triggers you can set:
+
+.. code-block:: shell-session
+
+    bone:~$ cat trigger 
+    none usb-gadget usb-host rfkill-any rfkill-none 
+    kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock 
+    kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock 
+    kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock 
+    timer oneshot disk-activity disk-read disk-write i
+    de-disk mtd nand-disk [heartbeat] backlight gpio c
+    pu cpu0 cpu1 cpu2 cpu3 activity default-on panic 
+    netdev mmc0 mmc1 mmc2 phy0rx phy0tx phy0assoc phy0radio 
+    rfkill0 gpio-0:00:link gpio-0:00:1Gbps gpio-0:00:100Mbps 
+    gpio-0:00:10Mbps gpio-0:01:link gpio-0:01:10Mbps
+    bone:~$ echo none > trigger
+
+Notice ``[heartbeat]`` is in brackets.  This shows it's the 
+current trigger.  The echo changes the trigger to ``none``.
+
+Try experimenting with some of the other triggers and see if you 
+can figure them out.
+
+Another way to Blink an LED
+---------------------------
+
+An interesting thing about Linux is there are often many ways 
+to do the same thing.  For example, I can think of at least five ways to blink 
+an LED.  Here's another way using the ``gpiod`` system.
+
+First see where the LEDs are attached.
+
+.. code-block:: shell-session
+
+    bone:~$ gpioinfo | grep -e chip -ie  usr
+    gpiochip0 - 32 lines:
+    gpiochip1 - 32 lines:
+        line  21: "[usr0 led]" "beaglebone:green:usr0" output active-high [used]
+        line  22: "[usr1 led]" "beaglebone:green:usr1" output active-high [used]
+        line  23: "[usr2 led]" "beaglebone:green:usr2" output active-high [used]
+        line  24: "[usr3 led]" "beaglebone:green:usr3" output active-high [used]
+    gpiochip2 - 32 lines:
+    gpiochip3 - 32 lines:
+
+Here we asked how the LEDs are attached to the General Purpose 
+IO (gpio) system.  The answer is, (yours will be different for a 
+different Beagle)
+there are four interface chips and the LEDs are attached to 
+chip 1.  You can control the gpios (and thus the LEDs) using
+the ``gpioset`` command.
+
+.. code-block:: shell-session
+
+    bone:~$ gpioset --mode=time --sec=2 1 22=1
+    bone:~$ gpioset --mode=time --sec=2 1 22=0
+
+The first command sets chip 1, line 22 (the usr1 LED) to 1 (on) for 
+2 seconds.  The second command turns it off for 2 seconds.
+
+Try it for the other LEDs.
+
+.. note:: 
+
+    This may not work on all Beagles since it depends on which 
+    version of Debian you are running.
+
+Blinking in response  to a button
+---------------------------------
+
+Some Beagles have a USR button that can be used  to control the LEDs. 
+You can test the USR button with ``evtest`` 
+
+.. code-block:: shell-session
+
+    bone:~$ evtest
+    No device specified, trying to scan all of /dev/input/event*
+    Not running as root, no devices may be available.
+    Available devices:
+    /dev/input/event0:	tps65219-pwrbutton
+    /dev/input/event1:	gpio-keys
+    Select the device event number [0-1]: 1
+
+We want to use ``gpio-keys``, so enter ``1``. Press and release 
+the USR button and you'll see:
+
+ .. code-block:: shell-session
+
+    Input driver version is 1.0.1
+    Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
+    Input device name: "gpio-keys"
+    Supported events:
+    Event type 0 (EV_SYN)
+    Event type 1 (EV_KEY)
+        Event code 256 (BTN_0)
+    Key repeat handling:
+    Repeat type 20 (EV_REP)
+        Repeat code 0 (REP_DELAY)
+        Value    250
+        Repeat code 1 (REP_PERIOD)
+        Value     33
+    Properties:
+    Testing ... (interrupt to exit)
+    Event: time 1692994988.305846, type 1 (EV_KEY), code 256 (BTN_0), value 1
+    Event: time 1692994988.305846, -------------- SYN_REPORT ------------
+    Event: time 1692994988.561786, type 1 (EV_KEY), code 256 (BTN_0), value 2
+    Event: time 1692994988.561786, -------------- SYN_REPORT ------------
+    Event: time 1692994988.601883, type 1 (EV_KEY), code 256 (BTN_0), value 2
+    Event: time 1692994988.601883, -------------- SYN_REPORT ------------
+    Event: time 1692994988.641754, type 1 (EV_KEY), code 256 (BTN_0), value 2
+    Event: time 1692994988.641754, -------------- SYN_REPORT ------------
+    Event: time 1692994988.641754, type 1 (EV_KEY), code 256 (BTN_0), value 0
+    Event: time 1692994988.641754, -------------- SYN_REPORT ------------
+    Ctrl+c 
+
+The following script uses evtesst to wait for the USR button to be pressed and 
+then turns on the LED.
+
+.. literalinclude:: buttonEvent.sh
+    :caption: buttonEvent.sh
+    :linenos:
+
+:download:`buttonEvent.sh<buttonEvent.sh>`
+
+Try running it and pressing the USR button. 
+
+The next script polls the USR button and toggles the LED.
+
+.. literalinclude:: buttonLED.sh
+    :caption: buttonLED.sh
+    :linenos:
+
+:download:`buttonLED.sh<buttonLED.sh>`
diff --git a/intro/buttonEvent.sh b/intro/buttonEvent.sh
new file mode 100755
index 0000000000000000000000000000000000000000..61cba5087a2e5d23c8a2cee7be292b78b490732d
--- /dev/null
+++ b/intro/buttonEvent.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#//////////////////////////////////////
+#	buttonEvent.sh
+#	Blinks a USR LED when USR button is pressed
+#       Waits for a button event
+#	Wiring:	
+#	Setup:	
+#	See:	https://unix.stackexchange.com/questions/428399/how-can-i-run-a-shell-script-on-input-device-event
+#//////////////////////////////////////
+
+device='/dev/input/by-path/platform-gpio-keys-event'
+
+LED="3"
+LEDPATH='/sys/class/leds/beaglebone:green:usr'
+
+key_off='*value 0*'
+ key_on='*value 1*'
+
+evtest --grab "$device" | while read line; do
+    case $line in
+        ($key_off) echo 0 > ${LEDPATH}${LED}/brightness ;;
+        ($key_on)  echo 1 > ${LEDPATH}${LED}/brightness ;;
+    esac
+done
diff --git a/intro/buttonLED.sh b/intro/buttonLED.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f79a2869d9f64e5b55e74a5205b55ff35e59f28a
--- /dev/null
+++ b/intro/buttonLED.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+#//////////////////////////////////////
+#	buttonLED.sh
+#	Blinks a USR LED when USR button is pressed
+#       Polls the button
+#	Wiring:	
+#	Setup:	
+#	See:	
+#//////////////////////////////////////
+
+LED="3"
+ 
+BUTTONPATH='/dev/input/by-path/platform-gpio-keys-event'
+LEDPATH='/sys/class/leds/beaglebone:green:usr'
+ 
+while true ; do
+    # evtest returns 0 if not pressed and a non-0 value if pressed.
+    evtest --query $BUTTONPATH EV_KEY BTN_0
+    echo $? > ${LEDPATH}${LED}/brightness
+    sleep 0.1
+done
diff --git a/intro/figures/vscode3.png b/intro/figures/vscode3.png
new file mode 100644
index 0000000000000000000000000000000000000000..4665ac6ef9528944f2a971617d0db2f5b6bfab91
Binary files /dev/null and b/intro/figures/vscode3.png differ
diff --git a/intro/figures/vscode4.png b/intro/figures/vscode4.png
new file mode 100644
index 0000000000000000000000000000000000000000..19e086af6d0ac8f6b581781809c53dcb21cc647b
Binary files /dev/null and b/intro/figures/vscode4.png differ