[ipaccess] Add nanoBTS 1900 support

Add support for 1900 nanoBTS by using unified bts_type
GSM_BTS_TYPE_NANOBTS for 900, 1800 and 1900 versions.

Reduce the nanoBTS enum values to one and derive the
version from the user supplied band. In the future we
might want to do auto band detection.

The configuration file needs to be changed to refer
to nanobts instead of nanobts900/nanobts1800.

Signed-off-by: Mike Haben <michael.haben@btinternet.com>
Signed-off-by: Holger Hans Peter Freyther <zecke@selfish.org>
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 495f741..a493a69 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -242,8 +242,7 @@
 enum gsm_bts_type {
 	GSM_BTS_TYPE_UNKNOWN,
 	GSM_BTS_TYPE_BS11,
-	GSM_BTS_TYPE_NANOBTS_900,
-	GSM_BTS_TYPE_NANOBTS_1800,
+	GSM_BTS_TYPE_NANOBTS,
 };
 
 /**
@@ -445,8 +444,7 @@
 static inline int is_ipaccess_bts(struct gsm_bts *bts)
 {
 	switch (bts->type) {
-	case GSM_BTS_TYPE_NANOBTS_900:
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	case GSM_BTS_TYPE_NANOBTS:
 		return 1;
 	default:
 		break;
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c
index 35ed8db..9a2fad7 100755
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/abis_nm.c
@@ -1025,8 +1025,7 @@
 	int bts_type = mb->trx->bts->type;
 
 	switch (bts_type) {
-	case GSM_BTS_TYPE_NANOBTS_900:
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	case GSM_BTS_TYPE_NANOBTS:
 		rc = abis_nm_rx_ipacc(mb);
 		break;
 	default:
diff --git a/openbsc/src/bsc_init.c b/openbsc/src/bsc_init.c
index c626415..78e9861 100644
--- a/openbsc/src/bsc_init.c
+++ b/openbsc/src/bsc_init.c
@@ -526,8 +526,7 @@
 					       sizeof(trx1_attr_radio));
 		}
 		break;
-	case GSM_BTS_TYPE_NANOBTS_900:
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	case GSM_BTS_TYPE_NANOBTS:
 		trx->nominal_power = 20;
 	default:
 		break;
@@ -594,8 +593,7 @@
 	case GSM_BTS_TYPE_BS11:
 		bootstrap_om_bs11(bts);
 		break;
-	case GSM_BTS_TYPE_NANOBTS_900:
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	case GSM_BTS_TYPE_NANOBTS:
 		bootstrap_om_nanobts(bts);
 		break;
 	default:
@@ -985,23 +983,27 @@
 
 static int bootstrap_bts(struct gsm_bts *bts)
 {
-	switch (bts->type) {
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	switch (bts->band) {
+	case GSM_BAND_1800:
 		if (bts->c0->arfcn < 512 || bts->c0->arfcn > 885) {
 			fprintf(stderr, "GSM1800 channel must be between 512-885.\n");
 			return -EINVAL;
 		}
 		break;
-	case GSM_BTS_TYPE_BS11:
-	case GSM_BTS_TYPE_NANOBTS_900:
-		/* Assume we have a P-GSM900 here */
+	case GSM_BAND_1900:
+		if (bts->c0->arfcn < 512 || bts->c0->arfcn > 810) {
+			fprintf(stderr, "GSM1900 channel must be between 512-810.\n");
+			return -EINVAL;
+		}
+		break;
+	case GSM_BAND_900:
 		if (bts->c0->arfcn < 1 || bts->c0->arfcn > 124) {
 			fprintf(stderr, "GSM900 channel must be between 1-124.\n");
 			return -EINVAL;
 		}
 		break;
-	case GSM_BTS_TYPE_UNKNOWN:
-		fprintf(stderr, "Unknown BTS. Please specify\n");
+	default:
+		fprintf(stderr, "Unsupported frequency band.\n");
 		return -EINVAL;
 	}
 
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index bac920e..9ad9e15 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1954,8 +1954,7 @@
 	}
 	
 	switch (bts->type) {
-	case GSM_BTS_TYPE_NANOBTS_900:
-	case GSM_BTS_TYPE_NANOBTS_1800:
+	case GSM_BTS_TYPE_NANOBTS:
 		if (!ipacc_rtp_direct) {
 			/* connect the TCH's to our RTP proxy */
 			rc = ipacc_connect_proxy_bind(lchan);
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/gsm_data.c
index a50ba8c..6767c3f 100644
--- a/openbsc/src/gsm_data.c
+++ b/openbsc/src/gsm_data.c
@@ -232,8 +232,7 @@
 static const char *bts_types[] = {
 	[GSM_BTS_TYPE_UNKNOWN] = "unknown",
 	[GSM_BTS_TYPE_BS11] = "bs11",
-	[GSM_BTS_TYPE_NANOBTS_900] = "nanobts900",
-	[GSM_BTS_TYPE_NANOBTS_1800] = "nanobts1800",
+	[GSM_BTS_TYPE_NANOBTS] = "nanobts",
 };
 
 enum gsm_bts_type parse_btstype(const char *arg)
diff --git a/openbsc/src/ipaccess-config.c b/openbsc/src/ipaccess-config.c
index 7358d64..46043d5 100644
--- a/openbsc/src/ipaccess-config.c
+++ b/openbsc/src/ipaccess-config.c
@@ -348,7 +348,7 @@
 	if (!gsmnet)
 		exit(1);
 
-	bts = gsm_bts_alloc(gsmnet, GSM_BTS_TYPE_NANOBTS_900, HARDCODED_TSC,
+	bts = gsm_bts_alloc(gsmnet, GSM_BTS_TYPE_NANOBTS, HARDCODED_TSC,
 				HARDCODED_BSIC);
 	
 	register_signal_handler(SS_NM, nm_sig_cb, NULL);