diff options
author | lonkaars <loek@pipeframe.xyz> | 2024-04-20 16:12:22 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2024-04-20 16:12:22 +0200 |
commit | d6eaa7a8a6e4332c473368230e0a0782a737bd39 (patch) | |
tree | f51eca26c36e92a15205e5a9f1d3654144f4a3cf /docs/reqs.adoc | |
parent | ebcc6e19d2fdddbbce6d3ac93ec9ac29663a1d7e (diff) |
small refactor + create software design document
Diffstat (limited to 'docs/reqs.adoc')
-rw-r--r-- | docs/reqs.adoc | 723 |
1 files changed, 723 insertions, 0 deletions
diff --git a/docs/reqs.adoc b/docs/reqs.adoc new file mode 100644 index 0000000..edddbdd --- /dev/null +++ b/docs/reqs.adoc @@ -0,0 +1,723 @@ +:document: Project Requirements +include::share/meta.adoc[] + +== Introduction + +In this document, the specifications are described prior to the investigation +of the Puzzle Box project. These specifications are partly derived from the +previously established requirements and are further supplemented and modified. +The priority of specifications is indicated using the MoSCoW method, see +<<tab:moscow>>. + +[[tab:moscow]] +.MoSCoW Method cite:[Wik22] +[cols="20h,~"] +|=== +| Priority | Description + +| [[must,M]]<<must,Must have>> +| Represents essential system requirements. Without these, the system will not +function. +| [[should,S]]<<should,Should have>> +| Denotes desirable system features. The system can work without these, but it +lacks necessary elements. +| [[could,C]]<<could,Could have>> +| Refers to additional functionalities that can be implemented if there is +extra time. +| [[wont,W]]<<wont,Won't have>> +| Specifies requirements that will not be implemented in the current version +but may be considered in a future release. +|=== + +This specification document covers hardware, software, and game-specific +details. The focus in this project year for the Puzzle Box is to thoroughly +document the system and create a software framework for future groups. + +== Context + +This chapter describes how the user will interact with the system. This is done +in the form of a user story. This user story covers hardware, software, and +game specifications. From this narrative, many specifications can be derived +for both functional and non-functional requirements +(<<sec:functional>> and <<sec:technical>>). + +The game administrator picks up the puzzle box and places it on a flat surface. +By using the key switch, the puzzle box is turned on, and the green indicator +LED lights up. Through the mesh network established by the external puzzle box +hub, the corresponding web panel can be accessed. The web panel provides +instructions for configuring the puzzle box, including linking it to any bomb. +The instructions issue a warning if any of the start conditions are not +properly set. If a criterion is incorrectly configured, it is highlighted for +resolution. Additionally, a warning is given if the battery capacity is +insufficient for one game duration, causing the indicator LED on the puzzle box +to turn red. In such cases, the battery should be charged using the USB-C +cable. While the puzzle box is charging, the indicator LED is blue. Once there +are no warnings and the puzzle box is adequately charged, the game can be +started in the web panel. + +The puzzle box begins with the NeoTrellis game. In this game, players must turn +off all LEDs on an 8x8 button LED matrix. When any button is pressed, the +directly adjacent LEDs toggle. If a lit LED is toggled, it turns off; if an +unlit LED is toggled, it turns on. Once all LEDs are turned off, the game is +solved, and the software puzzle begins. + +On the software puzzle, there are 6 banana plug connectors on both the left and +right sides. The ones on the left are labeled with various logical gates, while +the ones on the right are labeled from A to F. Participants in the bomb game +have 6 pieces of C-code written on paper, corresponding to the logical gates on +the puzzle box. The bomb participants must provide a description of the C-code +to the puzzle box participants, allowing them to correctly connect the +appropriate logical gate to the corresponding letter. Once the correct +combination of logical gates with the correct letter is made, the game is +solved. Subsequently, the automation puzzle is initiated. + +Since there is no concept available for the automation puzzle yet, the hardware +puzzle is started directly. + +The hardware puzzle is played in two distinct phases. In Phase 1, the objective +is to solve a combinatorial circuit such that its output becomes '1'. There are +8 inputs for this circuit, each controlled by an on/off switch. Once the +combinatorial circuit evaluates to '1', the LED at the output lights up, +indicating the completion of the first phase. In Phase 2, another LED blinks, +consistently repeating a pattern. This pattern represents a randomly generated +Morse code, corresponding to a number from 0 to 9999. Participants use a Morse +code table to decipher the correct number. Using four potentiometers, the +participants can set a number on a 7-segment display. When this number matches +the randomly generated one, the hardware puzzle is solved. Subsequently, the +vault puzzle is initiated. + +In the vault puzzle, a 7-segment display shows a random combination of a letter +and a digit. Participants have access to a list containing the correct button +combination for the corresponding letter and digit. The vault puzzle consists +of 5 levels, each displaying a unique button combination from the list. When +participants correctly press the button on the keypad, the level advances, and +a new value is shown. Pressing the wrong button restarts the game at level 1. +Once all 5 levels are completed, the vault door unlocks, allowing access to the +inside of the puzzle box. On the mainboard, there is a 7-segment display +showing a code. This code must be relayed to the participants of the bomb game. +Once the bomb team receives the code, the puzzle box is considered solved. + +[[sec:functional]] +== Functional Requirements + +The functional requirements describe the things which are important to the +client. This is mainly about the way the product is going to be used, what it +is going to look like, and how the product reacts to interaction. This chapter +describes all functional requirements of the puzzle box. + +=== The puzzle box + +.Puzzle box specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:1>> | <<must>> | +[[req:1,R-001]] The dimensions of the puzzle box are 30×30×30cm ± 5% (Length × Width × Height). + +| <<req:2>> | <<must>> | +[[req:2,R-002]] The puzzle box extends a maximum of 5cm on the sides and the top. + +| <<req:3>> | <<must>> | +[[req:3,R-003]] The puzzle box is flat at the bottom. + +| <<req:4>> | <<must>> | +[[req:4,R-004]] The puzzle box has a key switch at the bottom of the NeoTrellis puzzle. + +| <<req:5>> | <<must>> | +[[req:5,R-005]] The puzzle box has an indicator LED at the bottom of the NeoTrellis puzzle. + +| <<req:6>> | <<must>> | +[[req:6,R-006]] The indicator LED turns green when the system is on and not charging. + +| <<req:7>> | <<must>> | +[[req:7,R-007]] The indicator LED turns blue when the battery is charging. + +| <<req:8>> | <<must>> | +[[req:8,R-008]] The indicator LED turns red when the battery does not have enough capacity for the duration of one game and is not charging. + +| <<req:9>> | <<must>> | +[[req:9,R-009]] The puzzle box has a USB-C port at the bottom of the NeoTrellis puzzle for battery charging. + +| <<req:10>> | <<must>> | +[[req:10,R-010]] The puzzle box has a distance sensor at the bottom to detect if it is lifted. + +| <<req:11>> | <<must>> | +[[req:11,R-011]] The puzzle box main board (PCB on the bottom plate) includes a speaker. + +| <<req:12>> | <<wont>> | +[[req:12,R-012]] When the puzzle box is lifted, the mainboard speaker emits an alarm sound for at least 10 seconds. It stops only when it has been on a table for another 10 seconds (detected by the distance sensor). + +| <<req:13>> | <<wont>> | +[[req:13,R-013]] When the game is completed, the puzzle box produces a victory sound. + +| <<req:14>> | <<wont>> | +[[req:14,R-014]] Pressing the "identify" button on the web panel causes the indicator LED to blink. + +| <<req:15>> | <<wont>> | +[[req:15,R-015]] Pressing the "identify" button on the web panel triggers a sound from the speaker. + +| <<req:16>> | <<wont>> | +// section 3.7 is inside the citation, and does not refer to section 3.7 in this document +[[req:16,R-016]] The game starts once the scheduler time is reached (refer to cite:[Bek23] section 3.7). +|=== + +=== The bomb + +.Bomb specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:17>> | <<must>> | +[[req:17,R-017]] The bomb includes a 6-digit 7-segment display for showing the remaining playtime. + +| <<req:18>> | <<must>> | +[[req:18,R-018]] The bomb contains a keypad for entering the disarm code. + +| <<req:19>> | <<wont>> | +[[req:19,R-019]] The 6-digit 7-segment display turns off when no game is in progress. + +| <<req:20>> | <<wont>> | +[[req:20,R-020]] Once the disarm code is entered on the bomb keypad, the game is complete. + +| <<req:21>> | <<wont>> | +[[req:21,R-021]] When the game is finished, the bomb emits a victory sound. + +| <<req:22>> | <<wont>> | +[[req:22,R-022]] The timer on the bomb counts down from 60:00:00 to 00:00:00. + +| <<req:23>> | <<wont>> | +[[req:23,R-023]] Pressing the "identify" button on the web panel causes the indicator LED to blink. + +| <<req:24>> | <<wont>> | +[[req:24,R-024]] Pressing the "identify" button on the web panel triggers a sound from the speaker. + +|=== + +=== The game + +.General game specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:25>> | <<wont>> | +[[req:25,R-025]] The game lasts for 1 hour. + +| <<req:26>> | <<wont>> | +[[req:26,R-026]] The game should be solvable within the given playtime, without the player having prior knowledge of the game or its mechanics. + +| <<req:27>> | <<must>> | +[[req:27,R-027]] The puzzles should be easy enough to solve without any prior knowledge of the game or its mechanics. + +| <<req:167>> | <<must>> | +[[req:167,R-167]] A puzzle module can manually be reset at the discretion of the game operator + +| <<req:168>> | <<must>> | +[[req:168,R-168]] A puzzle module can manually be set as solved at the discretion of the game operator + +| <<req:28>> | <<wont>> | +[[req:28,R-028]] The disarm code for the bomb consists of 4 digits. + +| <<req:29>> | <<wont>> | +[[req:29,R-029]] Once all games are solved, the mainboard PCB displays the disarm code on a red 7-segment 4-digit screen. + +| <<req:30>> | <<wont>> | +[[req:30,R-030]] The puzzle box records the playtime of each game. + +| <<req:31>> | <<wont>> | +[[req:31,R-031]] The puzzle box features 5 playable puzzles. + +| <<req:32>> | <<wont>> | +[[req:32,R-032]] Only one game is active at a time; the other games do not respond to buttons. + +| <<req:33>> | <<wont>> | +[[req:33,R-033]] The game always starts with the NeoTrellis puzzle. +|=== + +==== NeoTrellis puzzle + +.NeoTrellis puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:34>> | <<must>> | +[[req:34,R-034]] There is an 8x8 LED matrix where each LED can display different colors. + +| <<req:35>> | <<wont>> | +[[req:35,R-035]] At the start of the puzzle, a pattern is displayed as shown in <<fig:neotrellis-start>>. + +| <<req:36>> | <<wont>> | +[[req:36,R-036]] When a button is pressed, the adjacent LEDs and the pressed LED toggle (If an LED is off, it turns on. If an LED is on, it turns off). + +| <<req:37>> | <<wont>> | +[[req:37,R-037]] All LEDs in the Neotrellis that are turned on are blue. + +| <<req:38>> | <<wont>> | +[[req:38,R-038]] The puzzle is considered solved when all LEDs are turned off, and then the software puzzle starts. +|=== + +==== Software puzzle + +.Software puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:39>> | <<should>> | +[[req:39,R-039]] The software puzzle board has 6 banana plug connectors with different logic gates displayed next to them (Refer to <<fig:software-example-sketch>> for a sketch and <<fig:software-cable-sketch>> for a banana plug example). + +| <<req:40>> | <<should>> | +[[req:40,R-040]] The software puzzle board has 6 banana plug connectors labeled with the letters A through F (Refer to <<fig:software-example-sketch>> for a sketch). + +| <<req:41>> | <<should>> | +[[req:41,R-041]] At the start of the puzzle box game, the preparer must connect all cables in parallel (horizontally) to the connectors. + +| <<req:42>> | <<wont>> | +[[req:42,R-042]] There are C code blocks visible only to the players on the bomb side, corresponding to the letters A through F (Refer to <<fig:software-codes-sketch>> for the codes). + +| <<req:43>> | <<should>> | +[[req:43,R-043]] The combinations of logic gates to letters are always the same. + +| <<req:44>> | <<wont>> | +[[req:44,R-044]] The puzzle is considered solved when the cables from the logic gates match the code blocks (Refer to <<fig:software-example-sketch>> and <<fig:software-codes-sketch>> for the combinations). + +| <<req:45>> | <<wont>> | +[[req:45,R-045]] Once the puzzle is solved, the green indicator LED will light up (Refer to <<fig:software-example-sketch>> and <<fig:software-codes-sketch>>). + +| <<req:46>> | <<wont>> | +[[req:46,R-046]] After the puzzle is solved, the automation puzzle begins. +|=== + +==== Automation puzzle + +The specific details for this puzzle are not present in the previous +documentation. Due to time constraints, the section will be left empty. + +.Automation puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:47>> | <<wont>> | +[[req:47,R-047]] After the puzzle is solved, the hardware puzzle begins. +|=== + +==== Hardware puzzle + +.Hardware puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:48>> | <<should>> | +[[req:48,R-048]] There are eight switches on the hardware puzzle board. + +| <<req:49>> | <<should>> | +[[req:49,R-049]] The hardware puzzle board features a diagram of a combinatorial circuit with 8 inputs (linked to the switches) and 1 output (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:50>> | <<should>> | +[[req:50,R-050]] The hardware puzzle board includes a red 7-segment 4-digit display (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:51>> | <<should>> | +[[req:51,R-051]] There are 4 potentiometers on the hardware puzzle board (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:52>> | <<should>> | +[[req:52,R-052]] A blue LED on the hardware puzzle board displays the morse code. + +| <<req:53>> | <<should>> | +[[req:53,R-053]] A green LED on the hardware puzzle board indicates whether the combinatorial circuit is solved. + +| <<req:54>> | <<wont>> | +[[req:54,R-054]] At the start of the puzzle, the potentiometers are inactive. + +| <<req:55>> | <<wont>> | +[[req:55,R-055]] The 7-segment display is off at the beginning of the puzzle. + +| <<req:56>> | <<wont>> | +[[req:56,R-056]] The LED for the combinatorial puzzle is off initially. + +| <<req:57>> | <<wont>> | +[[req:57,R-057]] The morse code LED is off at the puzzle's outset. + +| <<req:58>> | <<must>> | +[[req:58,R-058]] The preparer must set all switches to the down position at the start of the puzzle box game. + +| <<req:59>> | <<must>> | +[[req:59,R-059]] The preparer must turn all potentiometers to the left (value '0') at the beginning of the puzzle box game. + +| <<req:60>> | <<wont>> | +[[req:60,R-060]] The puzzle consists of two phases. + +| <<req:61>> | <<wont>> | +[[req:61,R-061]] The puzzle begins in phase 1. + +| <<req:62>> | <<wont>> | +[[req:62,R-062]] During the puzzle, the switches must be toggled to obtain a logical '1' at the output of the combinatorial circuit. + +| <<req:63>> | <<wont>> | +[[req:63,R-063]] When the output of the combinatorial circuit equals '1', the green indicator LED turns on (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:64>> | <<wont>> | +[[req:64,R-064]] The puzzle proceeds to phase 2 when the output of the combinatorial circuit is a logical '1'. + +| <<req:65>> | <<wont>> | +[[req:65,R-065]] The switches no longer respond once the puzzle enters phase 2. + +| <<req:66>> | <<wont>> | +[[req:66,R-066]] The indicator LED from phase 1 remains green during phase 2. + +| <<req:67>> | <<wont>> | +[[req:67,R-067]] In phase 2, a morse code is displayed using an LED. This morse code represents 4 numbers from 0 to 9 and repeats every second. + +| <<req:68>> | <<wont>> | +[[req:68,R-068]] The morse code is randomly generated. + +| <<req:69>> | <<wont>> | +[[req:69,R-069]] Each potentiometer can be rotated to display a value from 0 to 9 on the corresponding 4-digit 7-segment display. The order of the potentiometers matches the order of the segments on the display (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:70>> | <<wont>> | +[[req:70,R-070]] The puzzle is considered solved when the code displayed on the 7-segment 4-digit screen matches the 4 numbers from the morse code. + +| <<req:71>> | <<wont>> | +[[req:71,R-071]] Once the puzzle is solved, the value shown on the 7-segment 4-digit display cannot be changed. + +| <<req:72>> | <<wont>> | +[[req:72,R-072]] A 2-second victory sound is produced by the speaker upon solving the puzzle. + +| <<req:73>> | <<wont>> | +[[req:73,R-073]] During the victory sound, the 7-segment display blinks twice per second. + +| <<req:74>> | <<wont>> | +[[req:74,R-074]] After the victory sound, the puzzle has been solved and the vault puzzle begins. +|=== + +==== Vault puzzle + +.Vault puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:75>> | <<should>> | +[[req:75,R-075]] The vault puzzle board features a red 7-segment 4-digit display. + +| <<req:76>> | <<should>> | +[[req:76,R-076]] On the vault puzzle board, there is a 4x4 grid of holes for ventilation and sound. + +| <<req:77>> | <<should>> | +[[req:77,R-077]] The vault puzzle board includes a vault door, and the inside of the vault is transparent, allowing you to see inside the puzzle box. + +| <<req:78>> | <<should>> | +[[req:78,R-078]] A sensor is integrated with the vault to detect when the vault is closed. + +| <<req:79>> | <<must>> | +[[req:79,R-079]] At the beginning of the puzzle box game, the preparer must close the vault. + +| <<req:80>> | <<wont>> | +[[req:80,R-080]] The puzzle starts at level 1. + +| <<req:81>> | <<wont>> | +[[req:81,R-081]] Initially, the 7-segment display shows a code consisting of a letter and a digit. This code represents a valid key combination for level 1 (Refer to <<fig:vault-keypad>> for all combinations). + +| <<req:82>> | <<wont>> | +[[req:82,R-082]] There are a total of 5 levels. After each level, a key combination is displayed, starting with a letter followed by a digit, which is valid for that level (Refer to <<fig:vault-keypad>>). + +| <<req:83>> | <<wont>> | +[[req:83,R-083]] Each level has unique key combinations for the button locations (Refer to <<fig:vault-keypad>>). + +| <<req:84>> | <<wont>> | +[[req:84,R-084]] Pressing the button corresponding to the letter-digit combinations advances the puzzle to the next level. + +| <<req:85>> | <<wont>> | +[[req:85,R-085]] If an incorrect button is pressed, the game resets to level 1. + +| <<req:86>> | <<wont>> | +[[req:86,R-086]] An error sound is produced by the speaker when an incorrect button is pressed. + +| <<req:87>> | <<wont>> | +[[req:87,R-087]] The 7-segment display blinks when an incorrect button is pressed. + +| <<req:88>> | <<wont>> | +[[req:88,R-088]] After completing 5 levels, the puzzle is solved, and the vault opens. +|=== + +=== Battery + +.Battery requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:89>> | <<must>> | +[[req:89,R-089]] The puzzle box is powered by a rechargeable battery. + +| <<req:90>> | <<must>> | +[[req:90,R-090]] The battery lasts for a minimum of 4 hours. + +| <<req:91>> | <<could>> | +[[req:91,R-091]] The battery in the puzzle box can be replaced. +|=== + +=== Network Communication + +.Communication requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:92>> | <<wont>> | +[[req:92,R-092]] The puzzle boxes, bombs, and the puzzle box hub must all be able to communicate with each other. + +| <<req:93>> | <<must>> | +[[req:93,R-093]] Communication between two devices in the network must have a range of at least 20 meters in an open field. +|=== + +=== Framework + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:130>> | <<must>> | +[[req:130,R-130]] The main controller and its software do not need to be modified to implement a new puzzle module + +| <<req:131>> | <<could>> | +[[req:131,R-131]] Puzzle modules can be added and removed while the main controller is powered on + +| <<req:132>> | <<must>> | +[[req:132,R-132]] Puzzle modules can be added and removed while the main controller is powered off + +| <<req:133>> | <<must>> | +[[req:133,R-133]] The puzzle box provides a single external interface for accessing and controlling game state variables +|=== + +=== Puzzle box hub + +.Puzzle box hub general requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:94>> | <<wont>> | +[[req:94,R-094]] The puzzle box hub hosts a website that can be accessed by a device connected to the network. +|=== + +[[sec:technical]] +== Technical Requirements + +The technical specifications describe the specifications that are important for +developers. For example, this could include specific requirements related to +current, voltage, or communication protocols. This chapter outlines all the +technical specifications of the puzzle box. + +=== Wireless communication + +.Wireless communication requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:127>> | <<must>> | +[[req:127,R-127]] The wireless communication between the system controller, bomb, and puzzle box operates over a WiFi mesh or WiFi network. +|=== + +=== Framework + +.Development framework requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:128>> | <<must>> | +[[req:128,R-128]] A framework has been created to assist future groups in the development of the puzzle box. + +| <<req:129>> | <<must>> | +[[req:129,R-129]] The framework runs on the main puzzle box controller. + +| <<req:134>> | <<must>> | +[[req:134,R-134]] Puzzle modules are detected by the main controller module. + +| <<req:135>> | <<must>> | +[[req:135,R-135]] Puzzle modules are initialized by the main controller module. + +| <<req:165>> | <<must>> | +[[req:165,R-165]] Puzzle modules repeatedly send 'update' messages to the main controller while their global state is 'uninitialized' +|=== + +=== Main controller + +.Main controller requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:main-i2c-ctrl>> | <<must>> | +[[req:main-i2c-ctrl,R-136]] The main controller has at least 1 I2C peripheral. + +| <<req:main-802-11-ap>> | <<must>> | +[[req:main-802-11-ap,R-137]] The main controller can connect to a standard 802.11b/g/n access point. + +| <<req:main-tcp-socket>> | <<must>> | +[[req:main-tcp-socket,R-138]] The main controller can serve TCP socket connection(s). + +| <<req:main-devkit-supplier>> | <<must>> | +[[req:main-devkit-supplier,R-139]] The main controller is available as a development kit from Farnell. + +| <<req:140>> | <<should>> | +[[req:140,R-140]] The main controller can communicate over I²C with a speed of 400kb/s + +| <<req:main-pwr-efficient>> | <<should>> | +[[req:main-pwr-efficient,R-166]] The main controller is power efficient. +|=== + +=== Puzzle module controller + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:pm-i2c-ctrl>> | <<must>> | +[[req:pm-i2c-ctrl,R-141]] The puzzle module controller has at least 1 I2C peripheral. + +| <<req:pm-gpio>> | <<should>> | +[[req:pm-gpio,R-142]] The puzzle module controller has enough I/O ports to control a puzzle. + +| <<req:pm-pwr-efficient>> | <<should>> | +[[req:pm-pwr-efficient,R-143]] The puzzle module is power efficient. + +| <<req:pm-clk-ctrl>> | <<must>> | +[[req:pm-clk-ctrl,R-144]] The puzzle module has a configurable clock speed. + +| <<req:pm-devkit-supplier>> | <<must>> | +[[req:pm-devkit-supplier,R-145]] The puzzle module controller is available as a development kit from Farnell. + +| <<req:146>> | <<should>> | +[[req:146,R-146]] The puzzle module can communicate over I²C with a speed of 400kb/s +|=== + +=== Vault puzzle + +.Vault puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:147>> | <<must>> | +[[req:147,R-147]] The vault puzzle can communicate with the main controller using I²C + +| <<req:148>> | <<wont>> | +[[req:148,R-148]] The vault puzzle can produce a sound signal for the buzzer + +| <<req:149>> | <<must>> | +[[req:149,R-149]] The vault puzzle can lock & unlock a solenoid lock + +| <<req:150>> | <<must>> | +[[req:150,R-150]] The vault puzzle can translate and obtain a button press from the 3x4 keypad using 5 inputs + +| <<req:151>> | <<must>> | +[[req:151,R-151]] The vault puzzle can communicate with a 4x 7 SEG. Display using 2 lines (clock & data) + +| <<req:152>> | <<should>> | +[[req:152,R-152]] The vault puzzle can read a sensor's value to detect if the vault door is open or closed. +|=== + +=== Bomb + +.Bomb requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:153>> | <<wont>> | +[[req:153,R-153]] The bomb can communicate with the hub using a TCP socket connection + +| <<req:154>> | <<must>> | +[[req:154,R-154]] The bomb can sync. time using the WiFi connection + +| <<req:155>> | <<wont>> | +[[req:155,R-155]] The bomb can retrieve, and store a given code in order to verify it later on input + +| <<req:156>> | <<should>> | +[[req:156,R-156]] The bomb can be paired to a puzzlebox using the hub's interface +|=== + +== Preconditions + +This section describes the aspects of the project which have been set as +preconditions and cannot be changed. + +.Preconditions +[cols="8h,~"] +|=== +| ID | Precondition + +| <<req:160>> | [[req:160,R-160]] The delivery of components cannot take longer than two weeks. +| <<req:161>> | [[req:161,R-161]] The price of a single puzzle box is not higher than €150. +| <<req:162>> | [[req:162,R-162]] The existing games are used in the puzzle box. +| <<req:163>> | [[req:163,R-163]] The puzzle box is not allowed to make a connection with the Avans network (Eduroam). +| <<req:164>> | [[req:164,R-164]] The bomb hardware cannot be changed. +|=== + +== Documentation + +This section lists requirements that apply to documentation produced during +this project. + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:157>> | <<should>> | +[[req:157,R-157]] All documentation is written according to the style guide cite:[styleguide] + +| <<req:158>> | <<should>> | +[[req:158,R-158]] All documentation is manually checked for spelling and grammar mistakes before being published + +| <<req:159>> | <<must>> | +[[req:159,R-159]] All project documents are examined once by Jonathan Overes from Avans +|=== + +[appendix] +== Attachments + +[[fig:vault-disp-sketch]] +.7 Segment 4 digit screen (sketch) +image::img/vault-disp-sketch.png[] + +[[fig:neotrellis-hardware-sketch]] +.NeoTrellis example (sketch) +image::img/neotrellis-hardware-sketch.png[] + +[[fig:neotrellis-toggle]] +.Toggling LEDs after the user pressed on the button (purple dot) +image::img/neotrellis-toggle.png[width=45%] + +[[fig:neotrellis-start]] +.Starting pattern of the NeoTrellis puzzle +image::img/neotrellis-start.png[width=45%] + +[[fig:software-example-sketch]] +.Software puzzle example with logical ports (left) and letters A through F (right) +image::img/software-example-sketch.png[] + +[[fig:software-codes-sketch]] +.The different code fragments corresponding with the letter A through F +image::img/software-codes-sketch.png[height=35%] + +[[fig:software-cable-sketch]] +.Software puzzle cable example +image::img/software-cable-sketch.png[] + +[[fig:hardware-example-sketch]] +.Hardware puzzle on the puzzle box +image::img/hardware-example-sketch.png[] + +[[fig:vault-keypad]] +.Buttons combinations with level numbers in the top left +image::img/vault-keypad.png[width=45%] + +include::share/footer.adoc[] + |