summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilenko Jelisavcic2013-06-12 10:36:37 +0200
committerMilenko Jelisavcic2013-06-12 10:36:37 +0200
commitb7c4b8292ee2996601c542a509564c74a3bf9ff1 (patch)
treeafe8e254cf16540419254676d029e2142efc1820
parent41f0b73f30dbee9abb542d1272218462f21c2e04 (diff)
parent59c5a9475c1d3b76f50852fa7afe394a4c173a8f (diff)
Merge branch 't4037-mac-pbproc-rts-cts-backoff' into t4037-mac-pbproc-rts-cts-backoff-eoc
-rw-r--r--cesar/mac/pbproc/src/fsm_tx_rts_cts.c22
-rw-r--r--cesar/mac/pbproc/test/pbproc/src/tx_rts_cts.c3
2 files changed, 18 insertions, 7 deletions
diff --git a/cesar/mac/pbproc/src/fsm_tx_rts_cts.c b/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
index cb878ae634..36918d711a 100644
--- a/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
+++ b/cesar/mac/pbproc/src/fsm_tx_rts_cts.c
@@ -48,7 +48,8 @@ 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, true, true,
+ bool prp = ctx->access.prp;
+ phy_tx_frame (ctx->phy, ctx->prep_mpdu.rts_tx_date, true, prp,
ctx->prep_mpdu.rts_fc_av.words);
ca_access_vcs_restart_eifs (ctx->ca, ctx->prep_mpdu.rts_tx_date);
pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_TX_RTS_CTS_WAIT_ACCESS_CONF);
@@ -66,10 +67,21 @@ pbproc_ftrc_tx_cancel (pbproc_t *ctx)
pbproc_prep_mpdu_cancel_burst (ctx);
}
+static void
+pbproc_ftrc_tx_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_access_conf__access_conf (pbproc_t *ctx)
{
dbg_claim (ctx);
+ ca_backoff_deferred (ctx->ca,
+ phy_access_backoff_slot_count (ctx->phy) - 2);
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);
@@ -92,9 +104,7 @@ 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);
+ pbproc_ftrc_tx_access (ctx);
}
void ARCH_ILRAM_PRIO (2)
@@ -138,7 +148,5 @@ void ARCH_ILRAM_PRIO (3)
pbproc_ftrc__tx_rts_cts_wait_cts__access (pbproc_t *ctx)
{
dbg_claim (ctx);
- /* Cancel the transmission. */
- pbproc_ftrc_tx_cancel (ctx);
- pbproc_ftop__idle__access (ctx);
+ pbproc_ftrc_tx_access (ctx);
}
diff --git a/cesar/mac/pbproc/test/pbproc/src/tx_rts_cts.c b/cesar/mac/pbproc/test/pbproc/src/tx_rts_cts.c
index e49093e989..1fead5451a 100644
--- a/cesar/mac/pbproc/test/pbproc/src/tx_rts_cts.c
+++ b/cesar/mac/pbproc/test/pbproc/src/tx_rts_cts.c
@@ -126,6 +126,7 @@ tx_rts_cts_test (test_t t, test_pbproc_t *tp, u32 date, uint mfs_seg_nb,
.stop_tx_on_prp_lost = true),
SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
SCENARIO_ACTION (phy_access_conf),
+ SCENARIO_EVENT (ca_backoff_deferred, .slot_count = 0),
SCENARIO_EVENT (phy_rx_activate, .now = false,
.date = date + rts_cts_rcg_tck,
.pre_detection = true),
@@ -178,6 +179,8 @@ tx_rts_cts_test (test_t t, test_pbproc_t *tp, u32 date, uint mfs_seg_nb,
.stop_tx_on_prp_lost = true),
SCENARIO_EVENT (ca_access_vcs_restart_eifs, .start_date = date),
SCENARIO_ACTION_COND (!access_conf_fail, phy_access_conf),
+ SCENARIO_EVENT_COND (!access_conf_fail, ca_backoff_deferred,
+ .slot_count = 0),
SCENARIO_EVENT_COND (!access_conf_fail, phy_rx_activate, .now = false,
.date = date + rts_cts_rcg_tck,
.pre_detection = true),