summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormercadie2010-05-17 09:42:06 +0000
committermercadie2010-05-17 09:42:06 +0000
commit8c1d455f1629dafefb63428371581549c822a78a (patch)
tree5a9098592952f4f4f66ed531f01f37ee2d242e79
parentf5a355cc8f70003a498f1414c8255ace115e6be6 (diff)
cesar/cp: use aclf where pwl was removed
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@7039 017c9cb6-072f-447c-8318-d5b54f68fe89
-rw-r--r--cesar/ce/tx/src/mme.c4
-rw-r--r--cesar/cp/beacon/inc/beacon.h9
-rw-r--r--cesar/cp/beacon/ntb/test/src/ntb.c2
-rw-r--r--cesar/cp/beacon/src/beacon.c59
-rw-r--r--cesar/cp/beacon/test/override/cp/inc/context.h3
-rw-r--r--cesar/cp/msg/src/msg_cm.c4
-rw-r--r--cesar/cp/sta/action/src/assoc.c2
-rw-r--r--cesar/cp/sta/action/src/poweron.c1
-rw-r--r--cesar/interface/stub/src/interface.c2
9 files changed, 59 insertions, 27 deletions
diff --git a/cesar/ce/tx/src/mme.c b/cesar/ce/tx/src/mme.c
index 3319ba3252..22d938457a 100644
--- a/cesar/ce/tx/src/mme.c
+++ b/cesar/ce/tx/src/mme.c
@@ -197,8 +197,8 @@ ce_tx_mme_read_interval_list (cp_t *ctx, bitstream_t *mme_bitstream,
mac_interval_clear (tms);
/* Compute the beacon period in Allocation Time Unit. */
- uint beacon_period_length_atu
- = 0; // TODO use aclf instead MAC_TCK_TO_ATU (cp_pwl_get_beacon_period_ntb (ctx));
+ uint beacon_period_length_atu =
+ MAC_TCK_TO_ATU (bsu_aclf_beacon_period (ctx->bsu_aclf));
/* Read the list of intervals. */
u8 index, last_index = 0;
u16 offset_atu = 0;
diff --git a/cesar/cp/beacon/inc/beacon.h b/cesar/cp/beacon/inc/beacon.h
index 15926e829e..dc2c0b01d3 100644
--- a/cesar/cp/beacon/inc/beacon.h
+++ b/cesar/cp/beacon/inc/beacon.h
@@ -137,7 +137,16 @@ struct cp_beacon_t
/** Shared memory. */
bsu_beacon_t shared_mem[CP_SHARED_MEM_SLOT_NB];
+
+ /** Shared memory slot id. */
cp_shared_mem_slot_id_t shared_mem_slot_id;
+
+ /** Countown limit date, this is the time after which the countown
+ * counters must be decremented. */
+ u32 countdown_limit_date;
+
+ /** Last processed countdown date. */
+ u32 last_countdown_date;
};
typedef struct cp_beacon_t cp_beacon_t;
diff --git a/cesar/cp/beacon/ntb/test/src/ntb.c b/cesar/cp/beacon/ntb/test/src/ntb.c
index 41b2ee9005..c03e8e5124 100644
--- a/cesar/cp/beacon/ntb/test/src/ntb.c
+++ b/cesar/cp/beacon/ntb/test/src/ntb.c
@@ -186,10 +186,8 @@ test_case_ntb_fail_beacons (test_t test)
/* Test the worst case having a jitter of 6 PPM on the NTB clock. */
if (i >= 399)
beacon_bts[i] = beacon_bts[i] + (i - 399) * 6;
-#if 0 // TODO
cp_beacon_ntb_clk_sync (&cp, beacon_bts[i], sta_sys_date_preamble[i],
preamble[i]);
-#endif
error = ABS(cp.ntb.fe[1] - cp.ntb.fe[0]);
test_fail_unless (error < 25.0e-6);
}
diff --git a/cesar/cp/beacon/src/beacon.c b/cesar/cp/beacon/src/beacon.c
index f1534c526b..dd66044f04 100644
--- a/cesar/cp/beacon/src/beacon.c
+++ b/cesar/cp/beacon/src/beacon.c
@@ -62,10 +62,13 @@ cp_beacon_timer_expires (cp_t *ctx)
static bsu_beacon_t *
cp_get_next_beacon_shared_memory (cp_t *ctx)
{
+ bsu_beacon_t *next_beacon_shared_memory =
+ &ctx->beacon.shared_mem[ctx->beacon.shared_mem_slot_id];
+
ctx->beacon.shared_mem_slot_id++;
ctx->beacon.shared_mem_slot_id %= CP_SHARED_MEM_SLOT_NB;
- return &ctx->beacon.shared_mem[ctx->beacon.shared_mem_slot_id];
+ return next_beacon_shared_memory;
}
static
@@ -307,8 +310,6 @@ cp_beacon_sta_compute_schedules (cp_t *ctx, bsu_beacon_t *beacon_data)
uint i, j;
-// TODO remove if we really drop this solution cp_pwl_update (ctx, beacon_data->bsu_params.bpsd_date, 4);
-
/** Organize the schedules contained in beacon_data as a set. */
set_t set_schedules;
cp_cco_bw_alloc_t *sched;
@@ -455,25 +456,44 @@ cp_beacon_countdowns (cp_t *ctx)
{
dbg_assert (ctx);
- // TODO : use bpsd from aclfs
- if (less_mod2p32 (ctx->pwl.bp_avln_ntb[1], mac_ntb()))
+ // TODO DM: is this test really usefull?
+ if (less_mod2p32 (ctx->beacon.countdown_limit_date, phy_date (ctx->phy)))
{
+ u32 intervals;
+
+ /** Check the interval:
+ * We want to know how many beacon period elapsed. */
+ u32 bp = bsu_aclf_beacon_period (ctx->bsu_aclf);
+ dbg_assert (bp);
+
+ bsu_aclf_beacon_period_start_date (ctx->bsu_aclf, &intervals, 1);
+
+ intervals = (intervals + bp/2 - ctx->beacon.last_countdown_date) / bp;
+
+ dbg_assert (intervals > 7); ² // we missed too many periods.
+
+ ctx->beacon.last_countdown_date = ctx->beacon.countdown_limit_date;
+
+ /** Update the countdown limit for next time. */
+ ctx->beacon.countdown_limit_date =
+ bsu_aclf_beacon_period_start_date_next (ctx->bsu_aclf);
+
/* Snid... */
if (ctx->beacon.snids.snidcd)
{
- if (ctx->beacon.snids.snidcd - 1 == 0)
+ if (ctx->beacon.snids.snidcd <= intervals)
{
ctx->beacon.snids.snidcd = 0;
cp_sta_own_data_set_snid (ctx, ctx->beacon.snids.snid);
}
else
- ctx->beacon.snids.snidcd --;
+ ctx->beacon.snids.snidcd -= intervals;
}
/* Hybrid mode... */
if (ctx->beacon.hm.hmcd)
{
- if (ctx->beacon.hm.hmcd - 1 == 0)
+ if (ctx->beacon.hm.hmcd <= intervals)
{
cp_sta_own_data_t *own = cp_sta_mgr_get_sta_own_data (ctx);
@@ -481,13 +501,13 @@ cp_beacon_countdowns (cp_t *ctx)
own->hybrid_mode = ctx->beacon.hm.hm;
}
else
- ctx->beacon.hm.hmcd --;
+ ctx->beacon.hm.hmcd -= intervals;
}
/* Handover in progress... */
if (ctx->beacon.hoip.hoipcd)
{
- if (ctx->beacon.hoip.hoipcd - 1 == 0)
+ if (ctx->beacon.hoip.hoipcd <= intervals)
{
cp_sta_t *sta;
cp_net_t *net;
@@ -508,20 +528,21 @@ cp_beacon_countdowns (cp_t *ctx)
}
}
else
- ctx->beacon.hoip.hoipcd --;
+ ctx->beacon.hoip.hoipcd -= intervals;
}
/* EKS ... */
if (ctx->beacon.eks.kccd)
{
- if (ctx->beacon.eks.kccd - 1 == 0)
+ if (ctx->beacon.eks.kccd <= intervals)
{
if (ctx->beacon.eks.kbc == CP_BEACON_EKS_KBC_NEK)
ctx->beacon.nek_index = !ctx->beacon.nek_index;
- ctx->beacon.eks.kccd --;
+
+ ctx->beacon.eks.kccd = 0;
}
else
- ctx->beacon.eks.kccd --;
+ ctx->beacon.eks.kccd -= intervals;
}
}
}
@@ -550,6 +571,8 @@ cp_beacon_init (cp_t *ctx)
// Initialise the mem_share_slot_id so that the next slot is 0.
ctx->beacon.shared_mem_slot_id = CP_SHARED_MEM_SLOT_NB - 1;
+ ctx->beacon.last_countdown_date = phy_date (ctx->phy);
+ ctx->beacon.countdown_limit_date = ctx->beacon.last_countdown_date;
/* Setup beacon indicator. */
GPIO_SETUP (LED_BEACON_TX_RX, GPIO_DIRECTION_OUT);
@@ -903,11 +926,11 @@ cp_beacon_reconfigure_timer (cp_t *ctx, bool cco)
u32 date;
if (cco)
- date = 0 - CP_TIMER_OFFSET_CCO -
- ctx->mac_config->ntb_offset_tck;
+ date = bsu_aclf_beacon_period_start_date_next (ctx->bsu_aclf) -
+ CP_TIMER_OFFSET_CCO - ctx->mac_config->ntb_offset_tck;
else
- date = 0 + CP_TIMER_OFFSET_STA -
- ctx->mac_config->ntb_offset_tck;
+ date = bsu_aclf_beacon_period_start_date_next (ctx->bsu_aclf) +
+ CP_TIMER_OFFSET_STA - ctx->mac_config->ntb_offset_tck;
// Program the timer.
hal_timer_instance_cancel (ctx->hal_timer, &ctx->beacon.leon_timer);
diff --git a/cesar/cp/beacon/test/override/cp/inc/context.h b/cesar/cp/beacon/test/override/cp/inc/context.h
index 6181f725c6..9d20ba31c9 100644
--- a/cesar/cp/beacon/test/override/cp/inc/context.h
+++ b/cesar/cp/beacon/test/override/cp/inc/context.h
@@ -58,6 +58,9 @@ struct cp_t
mac_config_t *mac_config;
sar_t *sar;
+ /** Aclf. */
+ bsu_aclf_t *bsu_aclf;
+
/** PBProc. */
pbproc_t *pbproc;
};
diff --git a/cesar/cp/msg/src/msg_cm.c b/cesar/cp/msg/src/msg_cm.c
index bf234b3719..8c8da32a8d 100644
--- a/cesar/cp/msg/src/msg_cm.c
+++ b/cesar/cp/msg/src/msg_cm.c
@@ -17,7 +17,7 @@
#include "cp/cp.h"
#include "cp/mme.h"
#include "cp/msg/msg.h"
-
+#include "cp/inc/context.h"
#include "cp/msg/inc/msg.h"
#include "cp/msg/inc/msg_cm.h"
@@ -49,7 +49,7 @@ get_beacon_count_since_start (cp_t *ctx, u32 start_rtc_date)
dbg_assert (ctx);
new_time_rtc_date = cyg_current_time ();
- beacon_period_ntb = BSU_ACLF_BP_50HZ_TCK;// TODO replace with aclf cp_pwl_get_beacon_period_ntb (ctx);
+ beacon_period_ntb = bsu_aclf_beacon_period (ctx->bsu_aclf);
dbg_assert (beacon_period_ntb);
delta_time_rtc = (u32)(new_time_rtc_date - start_rtc_date);
diff --git a/cesar/cp/sta/action/src/assoc.c b/cesar/cp/sta/action/src/assoc.c
index c56a60744e..c63f08c067 100644
--- a/cesar/cp/sta/action/src/assoc.c
+++ b/cesar/cp/sta/action/src/assoc.c
@@ -124,7 +124,7 @@ cp_sta_action_assoc__unassociated__enter (cp_t *ctx)
cp_sta_own_data_set_authenticated_status (ctx, false);
cp_sta_mgr_set_our_avln (ctx, NULL);
cp_sta_own_data_set_tei (ctx, 0);
-// TODO cp_beacon_ntb_clear (ctx);
+// TODO DM cp_beacon_ntb_clear (ctx);
cp_fsm_trigger_new_event (ctx, bare, left);
}
diff --git a/cesar/cp/sta/action/src/poweron.c b/cesar/cp/sta/action/src/poweron.c
index d8eb89f655..b1376de312 100644
--- a/cesar/cp/sta/action/src/poweron.c
+++ b/cesar/cp/sta/action/src/poweron.c
@@ -150,7 +150,6 @@ cp_sta_action_poweron__many__to_idle (cp_t *ctx)
void
cp_sta_action_poweron__idle__to_poweron (cp_t *ctx)
{
-// TODO remove cp_beacon_create_default_schedules (ctx);
sar_activate (ctx->sar, true);
pbproc_activate (ctx->pbproc, true);
}
diff --git a/cesar/interface/stub/src/interface.c b/cesar/interface/stub/src/interface.c
index ec3ff18d63..155bcfd904 100644
--- a/cesar/interface/stub/src/interface.c
+++ b/cesar/interface/stub/src/interface.c
@@ -88,7 +88,7 @@ interface_beacon_prepare (interface_t *ctx, pb_beacon_t *beacon,
mfs_tx_t *beacon_mfs, void *bto_bpsto){}
void interface_beacon_add (interface_t *ctx, pb_beacon_t *pb,
- pbproc_rx_beacon_params_t *params){}
+ pbproc_rx_beacon_params_t *params, bsu_beacon_params_t *bparams){}
void
interface_hle_send (interface_t *ctx, uint *data, uint length){}