diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-02-28 10:06:19 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-02-28 10:06:19 +0100 |
commit | 89e05fd346eec9a2202cb010ba5f60cdbfd23658 (patch) | |
tree | c93bc1021dc2286b20a1fbca6bccf8af108155a3 /src/target/firmware | |
parent | c468741500790d975422b45f32333c92549dc397 (diff) |
tdma_sched: Explicitly advance the bucket at end of l1_sync()
Diffstat (limited to 'src/target/firmware')
-rw-r--r-- | src/target/firmware/include/layer1/tdma_sched.h | 3 | ||||
-rw-r--r-- | src/target/firmware/layer1/sync.c | 2 | ||||
-rw-r--r-- | src/target/firmware/layer1/tdma_sched.c | 18 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/target/firmware/include/layer1/tdma_sched.h b/src/target/firmware/include/layer1/tdma_sched.h index 67676d34..2f32a18a 100644 --- a/src/target/firmware/include/layer1/tdma_sched.h +++ b/src/target/firmware/include/layer1/tdma_sched.h @@ -43,6 +43,9 @@ int tdma_schedule_set(uint8_t frame_offset, const struct tdma_sched_item *item_s /* Execute pre-scheduled events for current frame */ int tdma_sched_execute(void); +/* Advance TDMA scheduler to the next bucket */ +void tdma_sched_advance(void); + /* reset the scheduler; erase all scheduled items */ void tdma_sched_reset(void); diff --git a/src/target/firmware/layer1/sync.c b/src/target/firmware/layer1/sync.c index 001f995b..af493506 100644 --- a/src/target/firmware/layer1/sync.c +++ b/src/target/firmware/layer1/sync.c @@ -384,6 +384,8 @@ static void l1_sync(void) } //dsp_end_scenario(); + + tdma_sched_advance(); } /* ABORT command ********************************************************/ diff --git a/src/target/firmware/layer1/tdma_sched.c b/src/target/firmware/layer1/tdma_sched.c index 56174a90..0ed1a758 100644 --- a/src/target/firmware/layer1/tdma_sched.c +++ b/src/target/firmware/layer1/tdma_sched.c @@ -75,7 +75,7 @@ int tdma_schedule_set(uint8_t frame_offset, const struct tdma_sched_item *item_s { struct tdma_scheduler *sched = &l1s.tdma_sched; uint8_t bucket_nr = wrap_bucket(frame_offset); - int i = 0; + int i; for (i = 0; 1; i++) { const struct tdma_sched_item *sched_item = &item_set[i]; @@ -103,12 +103,22 @@ int tdma_schedule_set(uint8_t frame_offset, const struct tdma_sched_item *item_s return i; } +/* Advance TDMA scheduler to the next bucket */ +void tdma_sched_advance(void) +{ + struct tdma_scheduler *sched = &l1s.tdma_sched; + uint8_t next_bucket; + + /* advance to the next bucket */ + next_bucket = wrap_bucket(1); + sched->cur_bucket = next_bucket; +} + /* Execute pre-scheduled events for current frame */ int tdma_sched_execute(void) { struct tdma_scheduler *sched = &l1s.tdma_sched; struct tdma_sched_bucket *bucket; - uint8_t next_bucket; int i, num_events = 0; /* determine current bucket */ @@ -135,10 +145,6 @@ int tdma_sched_execute(void) /* clear/reset the bucket */ bucket->num_items = 0; - /* advance to the next bucket */ - next_bucket = wrap_bucket(1); - sched->cur_bucket = next_bucket; - /* return number of items that we called */ return num_events; } |