From f0f934bd363dc34c94425a402705ffaf49a4d22b Mon Sep 17 00:00:00 2001
From: Jason Kridner <jkridner@beagleboard.org>
Date: Sun, 12 Nov 2023 09:40:11 -0500
Subject: [PATCH] Try graphviz

---
 projects/beagleconnect/index.rst | 205 ++++++++++++++++++++++++++++++-
 1 file changed, 199 insertions(+), 6 deletions(-)

diff --git a/projects/beagleconnect/index.rst b/projects/beagleconnect/index.rst
index 6aede886..df4ed6ea 100644
--- a/projects/beagleconnect/index.rst
+++ b/projects/beagleconnect/index.rst
@@ -15,7 +15,6 @@ architecture.
 .. image:: ../freedom/media/BeagleConnect-Freedom-Front.*
    :width: 598
    :align: center
-   :height: 400
    :alt: BeagleConnect Freedom
 
 BeagleConnectâ„¢ is built using `Greybus <https://kernel-recipes.org/en/2015/talks/an-introduction-to-greybus/>`__
@@ -55,11 +54,205 @@ High-level
 Software architecture
 ---------------------
 
-.. image:: media/bcf_block_diagram.png
-   :width: 600
-   :align: center
-   :height: 400
-   :alt: BeagleConnect Block Diagram
+.. graphviz:: BeagleConnect Software Architecture
+
+    digraph S {
+	graph [bb="0,0,480,772.5"];
+	node [color=white,
+		label="\N",
+		shape=box
+	];
+	subgraph cluster_0 {
+		graph [bb="8,310,237,764.5",
+			color=black,
+			label="Linux PC",
+			lheight=0.23,
+			lp="122.5,752.25",
+			lwidth=0.73
+		];
+		subgraph cluster_1 {
+			graph [bb="16,655.5,229,732",
+				color=lightgrey,
+				label="Linux userspace",
+				lheight=0.23,
+				lp="122.5,719.75",
+				lwidth=1.23,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			A	[height=0.5,
+				label="User Application",
+				pos="78,681.5",
+				tooltip="Primary developer entry point",
+				width=1.5035];
+			g	[height=0.5,
+				label="gbridge**",
+				pos="186,681.5",
+				tooltip="Bridge Greybus to networked devices",
+				width=0.98264];
+		}
+		subgraph cluster_2 {
+			graph [bb="35,318,229,647.5",
+				color=lightgrey,
+				label="Linux kernel",
+				lheight=0.23,
+				lp="132,635.25",
+				lwidth=0.97,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			I	[height=0.5,
+				label="IIO Drivers",
+				pos="83,597",
+				tooltip="Hundreds of drivers for sensors and acutators",
+				width=1.0972];
+			m	[height=0.5,
+				label="mikrobus**",
+				pos="84,525",
+				tooltip="Board-level abstraction to identify sensor connections",
+				width=1.1285];
+			I -> m	[pos="e,83.756,543.1 83.247,578.7 83.351,571.41 83.475,562.73 83.592,554.54"];
+			r	[height=0.5,
+				label=greybus,
+				pos="85,453",
+				tooltip="Dynamic RPC-like bus interface for I2C, SPI, UART, etc.",
+				width=0.81597];
+			n	[height=0.5,
+				label="gb-netlink**",
+				pos="86,344",
+				tooltip="Extend Greybus over netlink to userspace",
+				width=1.1806];
+			r -> n	[pos="e,85.84,362.15 85.161,434.81 85.315,418.27 85.552,392.98 85.734,373.44"];
+			m -> r	[pos="e,84.756,471.1 84.247,506.7 84.351,499.41 84.475,490.73 84.592,482.54"];
+			w	[height=0.5,
+				label="wpanusb**",
+				pos="182,453",
+				tooltip="USB-interface to IEEE802.15.4 radio",
+				width=1.0764];
+			i	[height=0.5,
+				label=ieee802154,
+				pos="182,525",
+				tooltip="Standards-based radio interface",
+				width=1.0868];
+			i -> w	[pos="e,182,471.1 182,506.7 182,499.41 182,490.73 182,482.54"];
+			6	[height=0.5,
+				label=lowpan,
+				pos="184,597",
+				tooltip="IPv6 for low-power wireless networks",
+				width=0.77431];
+			6 -> i	[pos="e,182.49,543.1 183.51,578.7 183.3,571.41 183.05,562.73 182.82,554.54"];
+		}
+		A -> I	[pos="e,81.941,615.47 79.06,663 79.697,652.5 80.522,638.89 81.253,626.83"];
+		g -> 6	[pos="e,184.42,615.47 185.58,663 185.32,652.5 184.99,638.89 184.7,626.83"];
+		n -> g	[pos="e,159.23,663.18 74.425,362.48 42.035,413.75 -42.302,565.28 34,647.5 42.11,656.24 129.58,652.08 141,655.5 143.6,656.28 146.22,657.22 \
+148.81,658.29"];
+	}
+	subgraph cluster_3 {
+		graph [bb="245,217.5,395,427",
+			color=black,
+			label="BCF gateway",
+			lheight=0.23,
+			lp="320,414.75",
+			lwidth=1.03
+		];
+		subgraph cluster_4 {
+			graph [bb="275,225.5,365,302",
+				color=lightgrey,
+				label=CC1352,
+				lheight=0.23,
+				lp="320,289.75",
+				lwidth=0.62,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			z	[height=0.5,
+				label="gateway**",
+				pos="320,251.5",
+				tooltip="Zephyr-based IEEE802.15.4 radio accepting HDLC over UART transactions",
+				width=1.0347];
+		}
+		subgraph cluster_5 {
+			graph [bb="253,318,387,394.5",
+				color=lightgrey,
+				label=MSP430,
+				lheight=0.23,
+				lp="320,382.25",
+				lwidth=0.67,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			b	[height=0.5,
+				label="usb_uart_bridge**",
+				pos="320,344",
+				tooltip="USB interace to access CC1352 UART that encapulates WPANUSB in HDLC",
+				width=1.6285];
+		}
+		b -> z	[pos="e,320,269.9 320,325.55 320,313.03 320,295.87 320,281.33"];
+	}
+	subgraph cluster_6 {
+		graph [bb="192,8,472,209.5",
+			color=black,
+			label="BCF node",
+			lheight=0.23,
+			lp="332,197.25",
+			lwidth=0.77
+		];
+		subgraph cluster_7 {
+			graph [bb="248,100.5,392,177",
+				color=lightgrey,
+				label=CC1352,
+				lheight=0.23,
+				lp="320,164.75",
+				lwidth=0.62,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			k	[height=0.5,
+				label="greybus-mikrobus**",
+				pos="320,126.5",
+				tooltip="Zephyr-based applies Greybus transactions from IPv6/IEEE802154 to physical I2C, SPI, UART, etc.",
+				width=1.7847];
+		}
+		subgraph cluster_8 {
+			graph [bb="200,16,464,92.5",
+				color=lightgrey,
+				label="mikroBUS add-on board",
+				lheight=0.23,
+				lp="332,80.25",
+				lwidth=1.88,
+				style=filled
+			];
+			node [color=green,
+				style=filled
+			];
+			e	[height=0.5,
+				label="manifest 1-wire EEPROM**",
+				pos="368,42",
+				tooltip="Manifest for mikroBUS driver",
+				width=2.4306];
+			s	[height=0.5,
+				label=sensor,
+				pos="235,42",
+				tooltip="Over 1,000 different sensor, actuator and indicator options",
+				width=0.75];
+		}
+		k -> e	[pos="e,357.84,60.471 330.18,108 336.54,97.066 344.87,82.748 352.1,70.334"];
+		k -> s	[pos="e,245.76,60.146 291.4,108.1 284.71,103.43 277.83,98.106 272,92.5 264.85,85.628 258.04,77.267 252.26,69.386"];
+	}
+	w -> b	[pos="e,304.6,362.3 220.59,434.64 224.88,432.26 229.11,429.7 233,427 256.75,410.55 280.4,387.74 297.03,370.35"];
+	z -> k	[pos="e,320,144.77 320,233.14 320,213.18 320,180.1 320,156.27"];
+    }
+
 
 TODO items
 ----------
-- 
GitLab