summaryrefslogtreecommitdiff
path: root/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/mac/pbproc/src/fsm_tx_rts_cts.c')
-rw-r--r--cesar/mac/pbproc/src/fsm_tx_rts_cts.c63
1 files changed, 49 insertions, 14 deletions
diff --git a/cesar/mac/pbproc/src/fsm_tx_rts_cts.c b/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
index 00aa587f08..cb878ae634 100644
--- a/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
+++ b/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
@@ -20,6 +20,7 @@
#include "mac/pbproc/inc/fsm_tx_sound.h"
#include "mac/pbproc/inc/fsm_handle_fc.h"
#include "mac/pbproc/inc/prep_mpdu.h"
+#include "inc/pbproc.h"
#include "mac/pbproc/inc/fsm_tx_rts_cts.h"
@@ -27,13 +28,19 @@ void
pbproc_ftrc_init (pbproc_t *ctx)
{
dbg_assert (ctx);
- ctx->fsm.states[PBPROC_FSM_STATE_TX_WAIT_CTS].rx_fc_cb =
- CALLBACK (pbproc_ftrc__tx_wait_cts__rx_fc);
- ctx->fsm.states[PBPROC_FSM_STATE_TX_WAIT_CTS].access_cb =
- CALLBACK (pbproc_ftrc__tx_wait_cts__access);
+ ctx->fsm.states[PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_ACCESS_CONF].rx_fc_cb =
+ CALLBACK (pbproc_ftrc__tx_rts_cts_wait_access_conf__rx_fc);
+ ctx->fsm.states[PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_ACCESS_CONF].access_cb =
+ CALLBACK (pbproc_ftrc__tx_rts_cts_wait_access_conf__access);
+ ctx->fsm.states[PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_ACCESS_CONF].access_conf_cb =
+ CALLBACK (pbproc_ftrc__tx_rts_cts_wait_access_conf__access_conf);
+ ctx->fsm.states[PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_CTS].rx_fc_cb =
+ CALLBACK (pbproc_ftrc__tx_rts_cts_wait_cts__rx_fc);
+ ctx->fsm.states[PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_CTS].access_cb =
+ CALLBACK (pbproc_ftrc__tx_rts_cts_wait_cts__access);
}
-void ARCH_ILRAM
+void ARCH_ILRAM_PRIO (2)
pbproc_ftrc__handle (pbproc_t *ctx)
{
dbg_claim (ctx);
@@ -41,13 +48,10 @@ pbproc_ftrc__handle (pbproc_t *ctx)
phy_tx_fc10 (ctx->phy, ctx->prep_mpdu.rts_tx_date,
ctx->prep_mpdu.fc10);
phy_tx_param_short (ctx->phy, ctx->prep_mpdu.fc_mode);
- phy_tx_frame (ctx->phy, ctx->prep_mpdu.rts_tx_date, false, true,
+ phy_tx_frame (ctx->phy, ctx->prep_mpdu.rts_tx_date, true, true,
ctx->prep_mpdu.rts_fc_av.words);
ca_access_vcs_restart_eifs (ctx->ca, ctx->prep_mpdu.rts_tx_date);
- phy_rx_activate (ctx->phy, false,
- ctx->prep_mpdu.rts_tx_date
- + ctx->times.rts_rcg_tck, true);
- pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_TX_WAIT_CTS);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_ACCESS_CONF);
}
static void
@@ -63,8 +67,39 @@ pbproc_ftrc_tx_cancel (pbproc_t *ctx)
}
void ARCH_ILRAM_PRIO (2)
-pbproc_ftrc__tx_wait_cts__rx_fc (pbproc_t *ctx, u32 rx_date,
- const pbproc_fc_t *fc_av)
+pbproc_ftrc__tx_rts_cts_wait_access_conf__access_conf (pbproc_t *ctx)
+{
+ dbg_claim (ctx);
+ phy_rx_activate (ctx->phy, false,
+ ctx->prep_mpdu.rts_tx_date + ctx->times.rts_rcg_tck, true);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_CTS);
+}
+
+void ARCH_ILRAM_PRIO (3)
+pbproc_ftrc__tx_rts_cts_wait_access_conf__rx_fc (pbproc_t *ctx, u32 rx_date,
+ const pbproc_fc_t *fc_av)
+{
+ dbg_claim (ctx);
+ /* Update backoff. */
+ pbproc_backoff_lost (ctx);
+ /* Handle FC. */
+ pbproc_fhfc_handle_fc (ctx, rx_date, fc_av);
+ /* Now, we have time, cancel transmission. */
+ pbproc_ftrc_tx_cancel (ctx);
+}
+
+void ARCH_ILRAM_PRIO (3)
+pbproc_ftrc__tx_rts_cts_wait_access_conf__access (pbproc_t *ctx)
+{
+ dbg_claim (ctx);
+ /* Cancel the transmission. */
+ pbproc_ftrc_tx_cancel (ctx);
+ pbproc_ftop__idle__access (ctx);
+}
+
+void ARCH_ILRAM_PRIO (2)
+pbproc_ftrc__tx_rts_cts_wait_cts__rx_fc (pbproc_t *ctx, u32 rx_date,
+ const pbproc_fc_t *fc_av)
{
dbg_claim (ctx);
/* Is it our CTS. */
@@ -99,8 +134,8 @@ pbproc_ftrc__tx_wait_cts__rx_fc (pbproc_t *ctx, u32 rx_date,
}
}
-void ARCH_ILRAM_PRIO (2)
-pbproc_ftrc__tx_wait_cts__access (pbproc_t *ctx)
+void ARCH_ILRAM_PRIO (3)
+pbproc_ftrc__tx_rts_cts_wait_cts__access (pbproc_t *ctx)
{
dbg_claim (ctx);
/* Cancel the transmission. */