summaryrefslogtreecommitdiff
path: root/cesar/ce
diff options
context:
space:
mode:
authordufour2009-09-16 11:06:37 +0000
committerdufour2009-09-16 11:06:37 +0000
commit54293dedaaf1f2a454132a84444fca74ba986d07 (patch)
tree01f731c745b86146e2cdffb32d32a3136264efbf /cesar/ce
parent854746fbc67c92f26ee4d868a5005a6c0d37c731 (diff)
* mac/common, ce/rx, ce/tx, mac/pbproc (see #387 & #550):
- add a release flag to the tone map structure to delete the tone map a little bit later, - add some accessors to get a tone map from its TMI (handling the release flag), - tonemap_release function only mark tone map as released, - new tonemap_release_forced function to really delete the tone map (whatever release flag is set to), - add a function to clean the tone maps marked as release and correctly handle the flag value. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@5570 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/ce')
-rw-r--r--cesar/ce/rx/bitloading/src/transition.c15
-rw-r--r--cesar/ce/rx/src/rx.c4
-rw-r--r--cesar/ce/tx/src/mme.c4
-rw-r--r--cesar/ce/tx/src/tx.c4
4 files changed, 19 insertions, 8 deletions
diff --git a/cesar/ce/rx/bitloading/src/transition.c b/cesar/ce/rx/bitloading/src/transition.c
index 9605c3557d..fd4dea51d0 100644
--- a/cesar/ce/rx/bitloading/src/transition.c
+++ b/cesar/ce/rx/bitloading/src/transition.c
@@ -45,8 +45,11 @@ ce_rx_bl__IDLE__channel_data_received (ce_rx_t *ce_rx, sta_t *sta,
ce_rx_bl_initial_opitmized_iterative
(&ce_rx->mac_config->tonemask_info, &sta->ce_rx_bt);
/* Set it. */
- int tmi = tonemap_set_first_free (sta->rx_tonemaps, initial_tm);
- dbg_assert (tmi != -1);
+ u8 tmi = tonemap_set_first_free_tmi (sta->rx_tonemaps, initial_tm);
+ /* This assert is required because this is the first time we ever
+ * set a tone map in the life of this STA. So we MUST have an
+ * empty tone map index available! */
+ dbg_assert (tmi != 0);
sta->rx_tonemaps->default_tmi = tmi;
ce_rx_cp_send_mme_new_tone_map (ce_rx, sta, tmi, 0, true);
return ce_rx_bl_fsm_next_branch (IDLE, channel_data_received, sound_last);
@@ -86,8 +89,12 @@ ce_rx_bl__INITIAL__channel_data_received (ce_rx_t *ce_rx, sta_t *sta,
ce_rx_bl_initial_opitmized_iterative
(&ce_rx->mac_config->tonemask_info, &sta->ce_rx_bt);
/* Set it. */
- int tmi = tonemap_set_first_free (sta->rx_tonemaps, initial_tm);
- dbg_assert (tmi != -1);
+ u8 tmi = tonemap_set_first_free_tmi (sta->rx_tonemaps, initial_tm);
+ /* This assert is required because this is the first time we ever
+ * set a tone map in the life of this STA. So we MUST have an
+ * empty tone map index available! */
+ dbg_assert (tmi != 0);
+ sta->rx_tonemaps->default_tmi = tmi;
ce_rx_cp_send_mme_new_tone_map (ce_rx, sta, tmi, 0, true);
return ce_rx_bl_fsm_next_branch (INITIAL, channel_data_received,
sound_last);
diff --git a/cesar/ce/rx/src/rx.c b/cesar/ce/rx/src/rx.c
index c9035716f2..9d238a6870 100644
--- a/cesar/ce/rx/src/rx.c
+++ b/cesar/ce/rx/src/rx.c
@@ -204,6 +204,10 @@ ce_rx_timer_prevent_tone_map_expiration (cyg_handle_t alarm_handler,
if (sta)
{
dbg_assert (sta->rx_tonemaps);
+
+ /* Clean tone maps that need to be released. */
+ tonemaps_clean (sta->rx_tonemaps);
+
/* Decrement expiration timer. */
if (sta->rx_tonemaps->refresh_counter_s && !--sta->rx_tonemaps->refresh_counter_s)
{
diff --git a/cesar/ce/tx/src/mme.c b/cesar/ce/tx/src/mme.c
index 3f7f003690..e00e0e5702 100644
--- a/cesar/ce/tx/src/mme.c
+++ b/cesar/ce/tx/src/mme.c
@@ -670,7 +670,7 @@ ce_tx_cm_chan_est_ind_receive (cp_t *ctx, cp_mme_rx_t *mme)
/* Tone map index not enabled but allocated? */
if (!(tmi_av_list & (1 << i)) && (sta_s_tx_tonemap->tm[i]))
/* Release tone map. */
- tonemap_release (sta_s_tx_tonemap, i);
+ tonemap_release_forced (sta_s_tx_tonemap, i);
}
/* Reset expiration value. */
sta_s_tx_tonemap->expiration_s = TONEMAPS_LIFE_DURATION_S;
@@ -835,7 +835,7 @@ ce_tx_cm_tm_update_ind_receive (cp_t *ctx, cp_mme_rx_t *mme)
/* Tone map index not enabled but allocated? */
if (!(tmi_av_list & (1 << i)) && (sta_s_tx_tonemap->tm[i]))
/* Release tone map. */
- tonemap_release (sta_s_tx_tonemap, i);
+ tonemap_release_forced (sta_s_tx_tonemap, i);
}
/* Reset expiration value. */
sta_s_tx_tonemap->expiration_s = TONEMAPS_LIFE_DURATION_S;
diff --git a/cesar/ce/tx/src/tx.c b/cesar/ce/tx/src/tx.c
index 6b7ae03cf9..35edb1c192 100644
--- a/cesar/ce/tx/src/tx.c
+++ b/cesar/ce/tx/src/tx.c
@@ -86,7 +86,7 @@ ce_tx_update_tone_map (cp_t *ctx)
{
/* Release if not used. */
if (sta->tx_tonemaps->tm[i])
- tonemap_release (sta->tx_tonemaps, i);
+ tonemap_release_forced (sta->tx_tonemaps, i);
}
}
/* Release STA. */
@@ -121,7 +121,7 @@ ce_tx_clean_tonemaps (tonemaps_t *tone_maps)
{
/* Release if allocated. */
if (tone_maps->tm[i])
- tonemap_release (tone_maps, i);
+ tonemap_release_forced (tone_maps, i);
}
}
}