digraph l2cap {
	// rankdir=LR;
	size="8,5"
    // orientation=landscape;
    // rotate = 90;

    OPEN  [shape=doublecircle];
	CLOSE [shape=doublecircle];
	
	// DISCONNECT_REQUEST handling for non-open state
    // WAIT_CONNECT_RSP->WILL_SEND_DISCONNECT_RESPONSE [label = "RECEIVED DISCONNECT_REQUEST"];
    // WAIT_CONFIG_REQ_OR_SEND_CONFIG_REQ->WILL_SEND_DISCONNECT_RESPONSE [label = "DISCONNECTION_REQUEST"];
    // WAIT_CONFIG_REQ_RSP_OR_CONFIG_REQ->WILL_SEND_DISCONNECT_RESPONSE [ label = "RECVEIVED DISCONNECTION_REQUEST"];
    // WAIT_CONFIG_REQ->WILL_SEND_DISCONNECT_RESPONSE [label = "RECEIVED DISCONNECTION_REQUEST"];
    // WAIT_CONFIG_REQ_RSP->WILL_SEND_DISCONNECT_RESPONSE [label = "RECEIVED DISCONNECTION_REQUEST"];
    // WAIT_DISCONNECT->WILL_SEND_DISCONNECT_RESPONSE [label = "RECEIVED DISCONNECT_REQUEST"];

    // l2cap_run
    WILL_SEND_CREATE_CONNECTION -> WAIT_CONNECTION_COMPLETE [label = "SEND CREATE CONNECTION"];
    WILL_SEND_CONNECTION_RESPONSE_DECLINE -> CLOSE [label = "SEND CONNECTION_RESPONSE ERR"];
    WILL_SEND_CONNECTION_RESPONSE_ACCEPT  -> CONFIG  [label = "SEND CONNECTION_RESPONSE OK"];
    WILL_SEND_CONNECTION_REQUEST -> WAIT_CONNECT_RSP [label = "SEND CONNECTION_REQUEST"];

    WILL_SEND_DISCONNECT_RESPONSE -> CLOSE [ label = "SEND DISCONNECTION_RESPONSE"];
    WILL_SEND_DISCONNECT_REQUEST -> WAIT_DISCONNECT [label = "SEND DISCONNECTION_REQUEST"];

    // l2cap_create_channel_internal
    CLOSE -> WILL_SEND_CREATE_CONNECTION [label = "l2cap create channel internal"];

    // l2cap_disconnect_internal
    OPEN -> WILL_SEND_DISCONNECT_REQUEST [label = "l2cap disconnect internal"];
    
    // l2cap_handle_connection_success_for_addr
    WAIT_CONNECTION_COMPLETE->WILL_SEND_CONNECTION_REQUEST [ label = "outgoing,baseband open"];
    
    // l2cap_handle_disconnect_request
    OPEN -> WILL_SEND_DISCONNECT_RESPONSE [label = "RECEIVED DISCONNECT_REQUEST"];
    
    // l2cap_handle_connection_request
    CLOSE -> WAIT_CLIENT_ACCEPT_OR_REJECT [label = "RECEIVED CONNECTION REQUEST"];    
    
    // l2cap_accept_connection_internal
    WAIT_CLIENT_ACCEPT_OR_REJECT -> WILL_SEND_CONNECTION_RESPONSE_ACCEPT [ label = "l2cap accept internal"];
    
    // l2cap_decline_connection_internal
    WAIT_CLIENT_ACCEPT_OR_REJECT -> WILL_SEND_CONNECTION_RESPONSE_DECLINE [ label = "l2cap decline internal"];
    
    // l2cap_signaling_handler_channel
    WAIT_CONNECT_RSP->CONFIG [ label = "CONNECTION_RESPONSE OK"];
    WAIT_CONNECT_RSP->CLOSE [label = "CONNECTION_RESPONSE ERR"];
    WAIT_DISCONNECT->CLOSE [label = "RECEIVED DISCONNECT_RESPONSE"];
    CONFIG->OPEN [label="RCVD CONF RSP && SENT CONF RSP"];
    CONFIG->CONFIG[label="send and respond CONF REQ"];     

    // l2cap_close_connection
    OPEN->WILL_SEND_DISCONNECT_REQUEST [label = "client closed"];
}