123 lines
3.3 KiB
C
123 lines
3.3 KiB
C
/*
|
|
* (C) 2013 by Holger Hans Peter Freyther
|
|
*
|
|
* All Rights Reserved
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <osmo-bts/bts.h>
|
|
|
|
#include "femtobts.h"
|
|
#include "utils.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
static int direct_map[][3] = {
|
|
{ GSM_BAND_850, GsmL1_FreqBand_850, 128 },
|
|
{ GSM_BAND_900, GsmL1_FreqBand_900, 1 },
|
|
{ GSM_BAND_1800, GsmL1_FreqBand_1800, 600 },
|
|
{ GSM_BAND_1900, GsmL1_FreqBand_1900, 600 },
|
|
};
|
|
|
|
static int dcs_to_dcs[][3] = {
|
|
{ GSM_BAND_900, GsmL1_FreqBand_1800, 600 },
|
|
{ GSM_BAND_1800, GsmL1_FreqBand_900, 1 },
|
|
{ GSM_BAND_900, -1, 438 },
|
|
};
|
|
|
|
static int pcs_to_pcs[][3] = {
|
|
{ GSM_BAND_850, GsmL1_FreqBand_1900, 512 },
|
|
{ GSM_BAND_1900, GsmL1_FreqBand_850, 128 },
|
|
{ GSM_BAND_900, -1, 438 },
|
|
};
|
|
|
|
static void test_sysmobts_auto_band(void)
|
|
{
|
|
struct gsm_bts bts;
|
|
struct gsm_bts_role_bts btsb;
|
|
int i;
|
|
|
|
memset(&bts, 0, sizeof(bts));
|
|
memset(&btsb, 0, sizeof(btsb));
|
|
bts.role = &btsb;
|
|
|
|
/* start with the current option */
|
|
printf("Testing the no auto-band mapping.\n");
|
|
for (i = 0; i < ARRAY_SIZE(direct_map); ++i) {
|
|
uint16_t arfcn;
|
|
int res;
|
|
|
|
btsb.auto_band = 0;
|
|
bts.band = direct_map[i][0];
|
|
arfcn = direct_map[i][2];
|
|
res = sysmobts_select_femto_band(&bts, arfcn);
|
|
printf("No auto-band band(%d) arfcn(%u) want(%d) got(%d)\n",
|
|
bts.band, arfcn, direct_map[i][1], res);
|
|
OSMO_ASSERT(res == direct_map[i][1]);
|
|
}
|
|
|
|
/* Check if auto-band does not break things */
|
|
printf("Checking the mapping with auto-band.\n");
|
|
for (i = 0; i < ARRAY_SIZE(direct_map); ++i) {
|
|
uint16_t arfcn;
|
|
int res;
|
|
|
|
btsb.auto_band = 1;
|
|
bts.band = direct_map[i][0];
|
|
arfcn = direct_map[i][2];
|
|
res = sysmobts_select_femto_band(&bts, arfcn);
|
|
printf("Auto-band band(%d) arfcn(%u) want(%d) got(%d)\n",
|
|
bts.band, arfcn, direct_map[i][1], res);
|
|
OSMO_ASSERT(res == direct_map[i][1]);
|
|
}
|
|
|
|
/* Check DCS to DCS change */
|
|
printf("Checking DCS to DCS\n");
|
|
for (i = 0; i < ARRAY_SIZE(dcs_to_dcs); ++i) {
|
|
uint16_t arfcn;
|
|
int res;
|
|
|
|
btsb.auto_band = 1;
|
|
bts.band = dcs_to_dcs[i][0];
|
|
arfcn = dcs_to_dcs[i][2];
|
|
res = sysmobts_select_femto_band(&bts, arfcn);
|
|
printf("DCS to DCS band(%d) arfcn(%u) want(%d) got(%d)\n",
|
|
bts.band, arfcn, dcs_to_dcs[i][1], res);
|
|
OSMO_ASSERT(res == dcs_to_dcs[i][1]);
|
|
}
|
|
|
|
/* Check for a PCS to PCS change */
|
|
printf("Checking PCS to PCS\n");
|
|
for (i = 0; i < ARRAY_SIZE(pcs_to_pcs); ++i) {
|
|
uint16_t arfcn;
|
|
int res;
|
|
|
|
btsb.auto_band = 1;
|
|
bts.band = pcs_to_pcs[i][0];
|
|
arfcn = pcs_to_pcs[i][2];
|
|
res = sysmobts_select_femto_band(&bts, arfcn);
|
|
printf("PCS to PCS band(%d) arfcn(%u) want(%d) got(%d)\n",
|
|
bts.band, arfcn, pcs_to_pcs[i][1], res);
|
|
OSMO_ASSERT(res == pcs_to_pcs[i][1]);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
printf("Testing sysmobts routines\n");
|
|
test_sysmobts_auto_band();
|
|
return 0;
|
|
}
|