Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ Elevator application for controlling `n` elevators across `m` floors
in a distributed fashion, implemented in Elixir.

## Documentation

See `doc/index.html` for module documentation.

```bash
mix docs
```
See design description and diagrams in `docs/`.

## Running nodes

Expand Down
Binary file added docs/Final Report.pdf
Binary file not shown.
Binary file removed docs/diagrams/HallButtonFSM.png
Binary file not shown.
35 changes: 0 additions & 35 deletions docs/diagrams/hall_button_fsm.puml

This file was deleted.

17 changes: 17 additions & 0 deletions docs/diagrams/hall_order_fsm.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
@startuml HallOrderFSM
title Hall Order FSM

[*] --> Idle
Idle --> Pending : button_press
Pending --> Handling : barrier full /\n calculate cost
Handling --> Arrived : arrived
Arrived --> Idle : barrier full

state Idle : no known order\nlight OFF
state Pending : barrier: nodes in pending\nlight OFF
state Handling : cost map\nlight ON
state Arrived : barrier: nodes in arrived\nlight OFF

' receive_external needs to be described in some additionl text

@enduml
Binary file removed docs/diagrams/modules.png
Binary file not shown.
97 changes: 21 additions & 76 deletions docs/diagrams/modules.puml
Original file line number Diff line number Diff line change
@@ -1,84 +1,29 @@
@startuml modules
title Modules
' Simple class diagram for the elevator modules

package SingleElevator {
interface Driver {
+ motor
+ lights
+ buttons
+ floor sensors
}

class FSM {
- elev_state
- my_orders
+ init()
+ on_arrival(floor)
+ on_door_timeout()feat: ping function and docs for each function
+ on_request_button(button)
}

class Controller {
- button_poller()
- order_poller()
+ read_floor_sensor()
+ read_all_buttons()
+ clear_all_lights()
+ clear_light(button)
+ open_door()
' title Modules
' high-level module architecture

skinparam componentStyle rectangle
' skinparam linetype ortho
left to right direction

package Stateful {
component FSM.State
component Orders {
component HallOrders
component CabOrders
}

class Requests {
+ should_stop(elev_state, orders, floor)
+ choose_direction(elev_state, orders)
+ should_clear_immidiately(elev_state, floor)
}

FSM --> Requests
FSM --> Controller
Controller --> Driver
}

class Communicator {
- broadcast_state()
- receive_state()
+ who_is_alive()
package Stateless {
component FSM.Transition
component Communicator
component Hardware
}

class CabOrders {
- orders: map
- version: uint64
+ cast: receive_state()
+ cast: update_orders(newOrders, version)
+ cast: clear_floor(floor)
+ call: button_press(floor)
+ call: get_orders()
}

class HallOrders {
- orders: map
- count: uint
- others
+ cast: arrived_floor(floor, dir)
+ cast: receive_state(orders)
+ cast: btn_press(floor, dir)
+ call: get_orders()
+ call: get_my_orders()
}

class Scoring {
+ score_request(elevator_state, orders, new_request)
}

Controller --> HallOrders
Controller --> CabOrders

Communicator <--> CabOrders

HallOrders --> Scoring
HallOrders --> CabOrders
HallOrders <--> Communicator

Hardware --> FSM.State : Sensor updates
Hardware --> Orders : Button presses
FSM.Transition --> FSM.State : State updates
FSM.Transition --> Orders : Floor arrival
Communicator --> Orders : External orders

@enduml
Loading