aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/design.adoc26
-rw-r--r--docs/reqs.adoc5
2 files changed, 18 insertions, 13 deletions
diff --git a/docs/design.adoc b/docs/design.adoc
index 06cd100..9e48fd4 100644
--- a/docs/design.adoc
+++ b/docs/design.adoc
@@ -486,18 +486,20 @@ Detailed specifications on the TCP socket server are in
==== Operating system
-TODO
-
-- main controller does tcp and i2c at the same time
-- simple scheduler is needed
-- curriculum only has FreeRTOS and Zephyr
-- Zephyr is overkill
-- FreeRTOS it is
-
-- due to RP2040 limitations, delays are used
-- most SDKs I2C drivers directly call I2C message handlers from ISR
-- puzzle bus driver functions can no longer be called directly from ISR handlers due to the delay
-- FreeRTOS is also used in puzzle modules, though this can likely be removed in the future
+Because the main controller needs to asynchronously handle state exchanges with
+puzzle modules while serving a TCP socket connection, the decision to use a
+task scheduler was made. Due to the requirement that most software should be
+covered by the standard curriculum (<<reqs.adoc#req:curriculum-cov>>), this
+choice was between FreeRTOS and Zephyr. FreeRTOS was chosen because it is the
+simplest solution, and because the features Zephyr offers over FreeRTOS are
+already present in the Raspberry Pi Pico SDK.
+
+NOTE: Due to the issues with the RP2040 that were later discovered
+cite:[handover], delays are used within the puzzle bus driver's message
+handling logic. This means that due to the use of the RP2040, *all puzzle
+modules* are required to use a task scheduler or similar mechanism for
+deferring calls to the puzzle bus driver from the I^2^C interrupt service
+routine (ISR).
=== NeoTrellis puzzle
diff --git a/docs/reqs.adoc b/docs/reqs.adoc
index 611c8f3..a221173 100644
--- a/docs/reqs.adoc
+++ b/docs/reqs.adoc
@@ -543,8 +543,11 @@ technical specifications of the puzzle box.
| <<req:135>> | <<must>> |
[[req:135,R-135]] Puzzle modules are initialized by the main controller module.
-| <<req:165>> | <<must>> |
+| <<req:165>> | <<wont>> |
[[req:165,R-165]] Puzzle modules repeatedly send 'update' messages to the main controller while their global state is 'uninitialized'
+
+| <<req:curriculum-cov>> | <<should>> |
+[[req:curriculum-cov,R-169]] External software and libraries that are covered in the standard curriculum should be used where possible
|===
=== Main controller