digraph di_can_msg_states { fontname="Helvetica"; init [shape = point ]; gc [shape = house label = "Garbage collect" ]; gc_exec [shape = rectangle, label = <Execute
di_can_msg_gc()> ]; reassm [shape = rectangle, label = <Reassemble
di_can_reassemble()> ]; crc [shape = rectangle, label = <CRC
di_can_crc_check()> ]; free [shape = rectangle, label = <Free
di_can_msg_free(
struct di_can_msg **msg)> ]; send [shape = rectangle, label = <Send
di_can_send(
struct di_can_msg **msg)> ]; send_async [shape = rectangle, label = <Async send
di_can_send_async(
struct di_can_msg **msg)> ]; send_async_next [shape = house, label = <Execute async send
di_can_send_async_next(void)> ]; reset [shape = rectangle, label = <Reset
_di_can_msg_reset(
struct di_can_msg *msg)> ]; init -> reset; UNUSED -> APPLICATION [ label = <Allocate
di_can_msg_alloc()> ]; UNUSED -> reassm; reassm -> REASSEMBLE [ label = <Get (internal)
di_can_msg_search()
di_can_msg_get()> ]; REASSEMBLE -> crc; READY -> APPLICATION [ label = <Get ready
di_can_msg_get_ready(
enum di_can_msgtype type)> ]; APPLICATION -> free; APPLICATION -> send; APPLICATION -> send_async; REASSEMBLE -> gc [ label = <Timeout
msg->timeout >=
di_time_get_uptime()> ]; READY -> gc [ label = <Timeout
msg->timeout >=
di_time_get_uptime()> ]; DIRTY -> gc; crc -> free; crc -> READY [ label = <Set ready (internal)
di_can_msg_set_ready(
struct di_can_msg **msg)> ]; send -> free; send -> ERROR; send_async -> SEND; SEND -> send_async_next; send_async_next -> free; send_async_next -> ERROR; ERROR -> APPLICATION; free -> DIRTY; gc -> reset; gc -> gc_exec [ dir=back ]; reset -> UNUSED; }