// 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" ] }