summaryrefslogtreecommitdiff
path: root/cesar/bsu
diff options
context:
space:
mode:
authorNélio Laranjeiro2013-02-06 12:47:45 +0100
committerNélio Laranjeiro2013-02-06 16:37:20 +0100
commit9de6eff451d9cdfca35b7dcb0f626b759295870e (patch)
tree0d12f9d8f16b99631d5de84ff97769db70ac088f /cesar/bsu
parent888cf919df316932f1d6a041bc16b421c5dda7d1 (diff)
cesar/bsu/beacon: make region bentry optional, closes #3376
This is necessary for some projects drifted from master branch. So by default the configuration item is set to "y" on master branch.
Diffstat (limited to 'cesar/bsu')
-rw-r--r--cesar/bsu/beacon/Config1
-rw-r--r--cesar/bsu/beacon/src/beacon.c39
-rw-r--r--cesar/bsu/beacon/test/utest/Config1
-rw-r--r--cesar/bsu/beacon/test/utest/Makefile19
-rw-r--r--cesar/bsu/beacon/test/utest/src/beacon.c17
-rw-r--r--cesar/bsu/beacon/test/utest/src/test.c19
6 files changed, 68 insertions, 28 deletions
diff --git a/cesar/bsu/beacon/Config b/cesar/bsu/beacon/Config
new file mode 100644
index 0000000000..5cf7fff017
--- /dev/null
+++ b/cesar/bsu/beacon/Config
@@ -0,0 +1 @@
+CONFIG_BSU_BEACON_REGIONS_PRESENT = y
diff --git a/cesar/bsu/beacon/src/beacon.c b/cesar/bsu/beacon/src/beacon.c
index 38753508ef..3dad9bd382 100644
--- a/cesar/bsu/beacon/src/beacon.c
+++ b/cesar/bsu/beacon/src/beacon.c
@@ -18,6 +18,8 @@
#include "bsu/beacon/beacon.h"
#include "cp/defs.h"
+#include "config/bsu/beacon/regions.h"
+
/**
* Reset the schedules data.
* \param schedule the schedule to reset.
@@ -131,18 +133,21 @@ PRIVATE void
bsu_beacon_write_bmi_region (bitstream_t *stream,
bsu_beacon_bmi_region_t *region)
{
- uint nb;
- dbg_assert (region->nb);
- /* Store region header value. */
- bitstream_write (stream, BSU_BEACON_ENTRY_HEADER_REGIONS, 8);
- uint size = BSU_BEACON_ENTRY_SIZE_REGION (region->nb);
- bitstream_write (stream, size, 8);
- bitstream_write (stream, region->nb, 6);
- bitstream_write (stream, 0, 2);
- for (nb = 0; nb < region->nb; nb++)
+ if (CONFIG_BSU_BEACON_REGIONS_PRESENT)
{
- bitstream_write (stream, region->region[nb].rt, 4);
- bitstream_write (stream, region->region[nb].end_time_atu, 12);
+ uint nb;
+ dbg_assert (region->nb);
+ /* Store region header value. */
+ bitstream_write (stream, BSU_BEACON_ENTRY_HEADER_REGIONS, 8);
+ uint size = BSU_BEACON_ENTRY_SIZE_REGION (region->nb);
+ bitstream_write (stream, size, 8);
+ bitstream_write (stream, region->nb, 6);
+ bitstream_write (stream, 0, 2);
+ for (nb = 0; nb < region->nb; nb++)
+ {
+ bitstream_write (stream, region->region[nb].rt, 4);
+ bitstream_write (stream, region->region[nb].end_time_atu, 12);
+ }
}
}
@@ -489,8 +494,8 @@ bsu_beacon_write_bmi_mac_address (bitstream_t *stream,
PRIVATE inline uint
bsu_beacon_write_nbe_nb (bsu_beacon_t *beacon)
{
- uint nbe = 1;
- dbg_assert (beacon->bmis.region.nb);
+ uint nbe = 0;
+ dbg_assert (!CONFIG_BSU_BEACON_REGIONS_PRESENT || beacon->bmis.region.nb);
dbg_assert ((beacon->vf.bt == BSU_BEACON_TYPE_DISCOVER &&
beacon->bmis.discover_info.present)
|| beacon->vf.bt != BSU_BEACON_TYPE_DISCOVER);
@@ -499,6 +504,8 @@ bsu_beacon_write_nbe_nb (bsu_beacon_t *beacon)
&& beacon->bmis.discover_info.present)
|| beacon->vf.stei != beacon->bmis.discover.tei))
|| beacon->vf.bt != BSU_BEACON_TYPE_CENTRAL);
+ if (beacon->bmis.region.nb)
+ nbe ++;
if (beacon->bmis.ps.nb)
nbe += beacon->bmis.ps.nb;
nbe += beacon->bmis.nps.ns ? 1 : 0;
@@ -997,7 +1004,8 @@ bsu_beacon_read (pb_beacon_t *pbbeacon, bsu_beacon_t *beacon)
* present. */
if (ok
&& !((beacon->vf.bt == BSU_BEACON_TYPE_CENTRAL)
- && (beacon->bmis.region.nb != 0)
+ && (!CONFIG_BSU_BEACON_REGIONS_PRESENT
+ || beacon->bmis.region.nb != 0)
&& (beacon->bmis.nps.ns != 0 || beacon->bmis.ps.nb != 0)
&& (((beacon->vf.nm == MAC_NM_CSMA_ONLY)
&& (beacon->bmis.bpsto.present == true))
@@ -1006,7 +1014,8 @@ bsu_beacon_read (pb_beacon_t *pbbeacon, bsu_beacon_t *beacon)
&& (beacon->bmis.handover.present == true))
|| (beacon->vf.hoip == false)))
&& !((beacon->vf.bt == BSU_BEACON_TYPE_DISCOVER)
- && (beacon->bmis.region.nb != 0)
+ && (!CONFIG_BSU_BEACON_REGIONS_PRESENT
+ || beacon->bmis.region.nb != 0)
&& (beacon->bmis.mac_address.present == true)
&& (MAC_IS_VALID (beacon->bmis.mac_address.mac_address))
&& (beacon->bmis.discover_info.present == true)
diff --git a/cesar/bsu/beacon/test/utest/Config b/cesar/bsu/beacon/test/utest/Config
new file mode 100644
index 0000000000..497f591572
--- /dev/null
+++ b/cesar/bsu/beacon/test/utest/Config
@@ -0,0 +1 @@
+CONFIG_BSU_BEACON_REGIONS_PRESENT[target-without-regions] = n
diff --git a/cesar/bsu/beacon/test/utest/Makefile b/cesar/bsu/beacon/test/utest/Makefile
index 50de64f980..61d26d0a00 100644
--- a/cesar/bsu/beacon/test/utest/Makefile
+++ b/cesar/bsu/beacon/test/utest/Makefile
@@ -1,7 +1,20 @@
BASE = ../../../..
-HOST_PROGRAMS = beacon
-beacon_SOURCES = test.c beacon.c
-beacon_MODULES = lib bsu/beacon mac/common
+BUILD_TYPES = target-with-regions target-without-regions
+
+target-with-regions=
+target-without-regions=
+
+common_SOURCES = test.c beacon.c
+common_MODULES = lib bsu/beacon mac/common
+
+TARGET_with_regions_PROGRAMS = test_beacon_with_regions
+TARGET_without_regions_PROGRAMS = test_beacon_without_regions
+
+test_beacon_with_regions_SOURCES = $(common_SOURCES)
+test_beacon_with_regions_MODULES = $(common_MODULES)
+
+test_beacon_without_regions_SOURCES = $(common_SOURCES)
+test_beacon_without_regions_MODULES = $(common_MODULES)
include $(BASE)/common/make/top.mk
diff --git a/cesar/bsu/beacon/test/utest/src/beacon.c b/cesar/bsu/beacon/test/utest/src/beacon.c
index 70f600c8b8..d267463960 100644
--- a/cesar/bsu/beacon/test/utest/src/beacon.c
+++ b/cesar/bsu/beacon/test/utest/src/beacon.c
@@ -17,6 +17,8 @@
#include "bsu/beacon/test/utest/test.h"
#include <string.h>
+#include "config/bsu/beacon/regions.h"
+
bool
bsu_beacon_read_bmi_header (bitstream_t *bitstream, uint *header,
uint *length);
@@ -249,19 +251,26 @@ test_case_beacon_bmi_vendor_bentry (test_t test)
pb_beacon_t *phy_beacon;
pbproc_tx_beacon_params_t params;
bool returned;
+ uint offset;
test_mac_config_init (&mac_config);
/* Change network mode type. */
bsu_beacon_test_create_beacon (&beacon);
phy_beacon = bsu_beacon_write (&beacon, BSU_BEACON_TYPE_CENTRAL,
&mac_config, &params);
phy_beacon->phy_pb.pb_rx.pb_measurement.crc_error = false;
- /* Change the number of bmis 15->16 */
- bitstream_direct_write (phy_beacon->data, 64, 16, 8);
+ /* Change the number of bmis */
+ bitstream_direct_write (phy_beacon->data, 64,
+ beacon.bmis.nbe + 1, 8);
+ /* Compute the offset in bits. */
+ if (CONFIG_BSU_BEACON_REGIONS_PRESENT)
+ offset = 792;
+ else
+ offset = 736;
/* Add a vendor specific bentry after all the other ones */
- bitstream_direct_write (phy_beacon->data, 8*90 + 72,
+ bitstream_direct_write (phy_beacon->data, offset,
BSU_BEACON_ENTRY_HEADER_VENDOR, 8);
/* Set a non null size for the vendor bentry */
- bitstream_direct_write (phy_beacon->data, 8*90 + 80,
+ bitstream_direct_write (phy_beacon->data, offset + 8,
5, 8);
memset (&beacon, 0, sizeof (bsu_beacon_t));
returned = bsu_beacon_read (phy_beacon, &beacon);
diff --git a/cesar/bsu/beacon/test/utest/src/test.c b/cesar/bsu/beacon/test/utest/src/test.c
index a6fe375fc1..3f53d7fab8 100644
--- a/cesar/bsu/beacon/test/utest/src/test.c
+++ b/cesar/bsu/beacon/test/utest/src/test.c
@@ -19,6 +19,8 @@
#include "mac/common/pb.h"
#include <string.h>
+#include "config/bsu/beacon/regions.h"
+
void
bsu_beacon_test_schedules_persistent (
bsu_beacon_bmi_persistent_schedule_t *ps)
@@ -82,12 +84,15 @@ bsu_beacon_test_create_beacon (bsu_beacon_t *beacon)
beacon->vf.rtsbf = false;
beacon->vf.nm = MAC_NM_CSMA_ONLY;
beacon->vf.ccocap = 0;
- /* Regions. */
- beacon->bmis.region.nb = 2;
- beacon->bmis.region.region[0].rt = BSU_BEACON_REGION_BEACON;
- beacon->bmis.region.region[0].end_time_atu = 50;
- beacon->bmis.region.region[1].rt = BSU_BEACON_REGION_SHARED_CSMA;
- beacon->bmis.region.region[1].end_time_atu = 3907;
+ if (CONFIG_BSU_BEACON_REGIONS_PRESENT)
+ {
+ /* Regions. */
+ beacon->bmis.region.nb = 2;
+ beacon->bmis.region.region[0].rt = BSU_BEACON_REGION_BEACON;
+ beacon->bmis.region.region[0].end_time_atu = 50;
+ beacon->bmis.region.region[1].rt = BSU_BEACON_REGION_SHARED_CSMA;
+ beacon->bmis.region.region[1].end_time_atu = 3907;
+ }
bsu_beacon_test_schedules_persistent (&beacon->bmis.ps);
bsu_beacon_test_schedules_non_persistent (&beacon->bmis.nps);
/* BSPTO. */
@@ -136,6 +141,8 @@ bsu_beacon_test_create_beacon (bsu_beacon_t *beacon)
beacon->bmis.mac_address.mac_address = 0x123456789abcull;
/* Number of beacon entries. */
beacon->bmis.nbe = 15;
+ if (!CONFIG_BSU_BEACON_REGIONS_PRESENT)
+ beacon->bmis.nbe--;
}
void