mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-11-30 08:24:11 +01:00
91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
|
// Regenerate using graphviz/dotty with this command
|
||
|
// dot -Tjpg ./flight/Doc/Architecture/ahrs_spi_link_fsm.dot > ./flight/Doc/Architecture/ahrs_spi_link_fsm.jpg
|
||
|
|
||
|
digraph ahrs_spi_protocol {
|
||
|
label="AHRS SPI Link State Machine"
|
||
|
labelloc=t
|
||
|
labeljust = l
|
||
|
|
||
|
// Stopped -- Undefined Wire State
|
||
|
{
|
||
|
node [ style=filled,color=lightgray ]
|
||
|
|
||
|
stopped [ shape="doublecircle" ]
|
||
|
stopping
|
||
|
}
|
||
|
|
||
|
// Wire State Inactive
|
||
|
{
|
||
|
node [ style=filled,color=lightblue ]
|
||
|
|
||
|
inactive
|
||
|
}
|
||
|
|
||
|
// Wire State Busy
|
||
|
{
|
||
|
node [ style=filled,color=red ]
|
||
|
|
||
|
user_busy
|
||
|
user_busy_tx_pending
|
||
|
user_busy_rx_pending
|
||
|
user_busy_rxtx_pending
|
||
|
}
|
||
|
{
|
||
|
node [ style=filled,color=yellow ]
|
||
|
|
||
|
user_tx_pending
|
||
|
user_rx_pending
|
||
|
user_rxtx_pending
|
||
|
}
|
||
|
|
||
|
// Wire State Ready
|
||
|
{
|
||
|
node [ style=filled,color=green ]
|
||
|
|
||
|
user_rx_active
|
||
|
user_tx_active
|
||
|
user_rxtx_active
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// State transitions driven by the user
|
||
|
//
|
||
|
stopped -> inactive [ label="init link" ]
|
||
|
|
||
|
inactive -> stopping [ label="stop" ]
|
||
|
inactive -> user_busy_rx_pending [ label="user set rx" ]
|
||
|
inactive -> user_busy_tx_pending [ label="user set tx" ]
|
||
|
|
||
|
user_busy -> user_busy_tx_pending [ label="user set tx" ]
|
||
|
user_busy -> user_busy_rx_pending [ label="user set rx" ]
|
||
|
user_busy -> inactive [ label="user done" ]
|
||
|
user_busy -> stopping [ label="stop" ]
|
||
|
|
||
|
user_busy_tx_pending -> user_busy_rxtx_pending [ label="user set rx" ]
|
||
|
user_busy_tx_pending -> user_tx_pending [ label="user done" ]
|
||
|
|
||
|
user_busy_rx_pending -> user_busy_rxtx_pending [ label="user set tx" ]
|
||
|
user_busy_rx_pending -> user_rx_pending [ label="user done" ]
|
||
|
|
||
|
user_busy_rxtx_pending -> user_rxtx_pending [ label="user done" ]
|
||
|
|
||
|
//
|
||
|
// State transitions driven by messaging from the OP board
|
||
|
//
|
||
|
stopping -> stopped [ label="rx any" ]
|
||
|
|
||
|
user_tx_pending -> user_tx_active [ label="rx any" ]
|
||
|
user_rx_pending -> user_rx_active [ label="rx any" ]
|
||
|
|
||
|
user_rxtx_pending -> user_rxtx_active [ label="rx any" ]
|
||
|
|
||
|
// Active -> Busy
|
||
|
user_rx_active -> user_busy [ label="rx user" ]
|
||
|
|
||
|
user_tx_active -> inactive [ label="rx any" ]
|
||
|
|
||
|
user_rxtx_active -> user_busy [ label="rx user" ]
|
||
|
user_rxtx_active -> user_rx_active [ label="rx link" ]
|
||
|
user_rxtx_active -> user_rx_active [ label="rx unknown" ]
|
||
|
}
|