summaryrefslogtreecommitdiff
path: root/cesar/mac/pbproc/src/fsm_tx_sound.c
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/mac/pbproc/src/fsm_tx_sound.c')
-rw-r--r--cesar/mac/pbproc/src/fsm_tx_sound.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/cesar/mac/pbproc/src/fsm_tx_sound.c b/cesar/mac/pbproc/src/fsm_tx_sound.c
index b43fed10ca..4381f88b28 100644
--- a/cesar/mac/pbproc/src/fsm_tx_sound.c
+++ b/cesar/mac/pbproc/src/fsm_tx_sound.c
@@ -63,12 +63,20 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
&& fc_av->generic.access == false
&& fc_av->generic.snid == ctx->alloc.snid
&& fc_av->sound.saf == true
+#if !CONFIG_MAC_PBPROC_EOC_FC
&& fc_av->sound.stei == prep->dtei
&& fc_av->sound.dtei == prep->stei
+#else
+ && ((fc_av->sound.dtei == prep->dtei && fc_av->sound.direction)
+ || (fc_av->sound.dtei == prep->stei && !fc_av->sound.direction))
+#endif
&& less_mod2p32 (rx_date, prep->tx_date + prep->flp_tck
+ MAC_TOLERANCE_TCK))
{
phy_rx_prepare_short (ctx->phy);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ prep->main_mfs->no_reply_count = 0;
+#endif
/* Handle acknowledgement. */
pbproc_prep_mpdu_sound_ack (ctx, fc_av->sound.scf);
/* Next. */
@@ -82,6 +90,13 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
else
{
//handle_access ();
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, rx_date
+ + ctx->times.pre_fcs_tck + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
}
/* Update stats. */
ctx->stats.tx_sound_ack++;
@@ -99,16 +114,31 @@ pbproc_ftso__tx_sound_wait_ack__rx_fc (pbproc_t *ctx, u32 rx_date,
}
}
+#if CONFIG_MAC_PBPROC_EOC_ILRAM
+void
+#else
void ARCH_ILRAM_PRIO (2)
+#endif
pbproc_ftso__tx_sound_wait_ack__access (pbproc_t *ctx)
{
dbg_claim (ctx);
+#if CONFIG_MAC_COMMON_EOC_MFS
+ pbproc_prep_mpdu_access_track (ctx);
+#endif
/* Cancel transmission. */
pbproc_prep_mpdu_sound_ack (ctx, false);
/* Update backoff. */
pbproc_backoff_lost (ctx);
/* Handle ACCESS. */
- pbproc_ftop__idle__access (ctx);
+ if (CONFIG_MAC_PBPROC_EOC_FC)
+ {
+ /* Prepare next schedule, start access timer. */
+ ca_access_vcs_restart (ctx->ca, phy_date () + ctx->times.pre_fcs_tck
+ + MAC_CIFS_TCK);
+ pbproc_fsm_change_state (ctx, PBPROC_FSM_STATE_IDLE);
+ }
+ else
+ pbproc_ftop__idle__access (ctx);
/* Update stats. */
ctx->stats.tx_sound_noack++;
}