| 69 | {{{#!td |
| 70 | |
| 71 | }}} |
| 72 | {{{#!td align=left |
| 73 | |
| 74 | {{{#!c |
| 75 | if(new_tx) { |
| 76 | }}} |
| 77 | |
| 78 | }}} |
| 79 | |----------------------------------- |
| 80 | {{{#!td |
| 81 | [[Image(tx_fsm_transition_1.png)]] |
| 82 | }}} |
| 83 | {{{#!td |
| 84 | {{{#!c |
| 85 | if(wait_for_postRxTimer1 | wait_for_postTxTimer1) { |
| 86 | //Tx fixed interval after previous Tx/Rx |
| 87 | // Ignore medium and backoff states |
| 88 | st_next = ST_PRE_TX_WAIT; |
| 89 | }}} |
| 90 | }}} |
| 91 | |----------------------------------- |
| 92 | {{{#!td |
| 93 | [[Image(tx_fsm_transition_2.png)]] |
| 94 | }}} |
| 95 | {{{#!td |
| 96 | |
| 97 | {{{#!c |
| 98 | } else if(backoff_A_done & idle_for_difs) { |
| 99 | //Previous backoff already finished, medium idle |
| 100 | // Transmit immediately |
| 101 | st_next = ST_DO_TX; |
| 102 | }}} |
| 103 | }}} |
| 104 | |----------------------------------- |
| 105 | {{{#!td |
| 106 | [[Image(tx_fsm_transition_3.png)]] |
| 107 | }}} |
| 108 | {{{#!td |
| 109 | |
| 110 | {{{#!c |
| 111 | } else if(!backoff_A_done) { |
| 112 | //Backoff already running - use it to defer |
| 113 | st_next = ST_DEFER; |
| 114 | }}} |
| 115 | }}} |
| 116 | |----------------------------------- |
| 117 | {{{#!td |
| 118 | [[Image(tx_fsm_transition_4.png)]] |
| 119 | }}} |
| 120 | {{{#!td |
| 121 | |
| 122 | {{{#!c |
| 123 | } else if(backoff_A_done & !idle_for_difs) { |
| 124 | //No backoff running, but medium is busy |
| 125 | // Start new backoff |
| 126 | st_next = ST_START_BO; |
| 127 | } |
| 128 | }}} |
| 129 | }}} |
| 130 | |----------------------------------- |
| 131 | {{{#!td |
| 132 | |
| 133 | }}} |
| 134 | {{{#!td |
| 135 | |
| 136 | {{{#!c |
| 137 | } else { |
| 138 | //No new Tx this cycle; keep waiting in IDLE |
| 139 | st_next = ST_IDLE; |
| 140 | } |
| 141 | }}} |
| 142 | |
| 143 | }}} |
| 144 | |