summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-02-26 18:56:18 +0100
committerSteve Markgraf <steve@steve-m.de>2021-10-23 18:51:19 +0200
commitaad1256be76ba7f5bf58757cba224bcac130c112 (patch)
treeb96ff789abb3674e1a78576e230fe6a0f3a3d7e4
parent7836dae7a2a081155737c7988065da7bd9b31833 (diff)
Add gain support to transceiver application
To alter default gain of 0, the gain can be altered by using SETRXGAIN control command. Please use a gain of 0, for normal use.
-rw-r--r--src/host/layer23/src/transceiver/l1ctl.c8
-rw-r--r--src/host/layer23/src/transceiver/l1ctl.h2
-rw-r--r--src/host/layer23/src/transceiver/trx.c14
-rw-r--r--src/host/layer23/src/transceiver/trx.h1
4 files changed, 19 insertions, 6 deletions
diff --git a/src/host/layer23/src/transceiver/l1ctl.c b/src/host/layer23/src/transceiver/l1ctl.c
index e4cda24d..0c66f128 100644
--- a/src/host/layer23/src/transceiver/l1ctl.c
+++ b/src/host/layer23/src/transceiver/l1ctl.c
@@ -113,7 +113,8 @@ l1ctl_tx_fbsb_req(struct l1ctl_link *l1l,
int
l1ctl_tx_bts_mode(struct l1ctl_link *l1l,
- uint8_t enabled, uint8_t bsic, uint16_t band_arfcn)
+ uint8_t enabled, uint8_t bsic, uint16_t band_arfcn,
+ int gain)
{
struct msgb *msg;
struct l1ctl_bts_mode *be;
@@ -122,13 +123,14 @@ l1ctl_tx_bts_mode(struct l1ctl_link *l1l,
if (!msg)
return -1;
- LOGP(DL1C, LOGL_INFO, "BTS Mode (enabled=%u, bsic=%u, arfcn=%u)\n",
- enabled, bsic, band_arfcn);
+ LOGP(DL1C, LOGL_INFO, "BTS Mode (enabled=%u, bsic=%u, arfcn=%u "
+ "gain=%d)\n", enabled, bsic, band_arfcn, gain);
be = (struct l1ctl_bts_mode *) msgb_put(msg, sizeof(*be));
be->enabled = enabled;
be->bsic = bsic;
be->band_arfcn = htons(band_arfcn);
+ be->gain = gain;
return l1l_send(l1l, msg);
}
diff --git a/src/host/layer23/src/transceiver/l1ctl.h b/src/host/layer23/src/transceiver/l1ctl.h
index da7769d2..9856fc2f 100644
--- a/src/host/layer23/src/transceiver/l1ctl.h
+++ b/src/host/layer23/src/transceiver/l1ctl.h
@@ -39,7 +39,7 @@ int l1ctl_tx_fbsb_req(struct l1ctl_link *l1l,
uint16_t arfcn, uint8_t flags, uint16_t timeout,
uint8_t sync_info_idx, uint8_t ccch_mode);
int l1ctl_tx_bts_mode(struct l1ctl_link *l1l,
- uint8_t enabled, uint8_t bsic, uint16_t band_arfcn);
+ uint8_t enabled, uint8_t bsic, uint16_t band_arfcn, int gain);
int l1ctl_tx_bts_burst_req(struct l1ctl_link *l1l,
uint32_t fn, uint8_t tn, struct burst_data *burst);
diff --git a/src/host/layer23/src/transceiver/trx.c b/src/host/layer23/src/transceiver/trx.c
index 9149b7ca..ae21344d 100644
--- a/src/host/layer23/src/transceiver/trx.c
+++ b/src/host/layer23/src/transceiver/trx.c
@@ -128,6 +128,7 @@ trx_alloc(const char *addr, uint16_t base_port, struct l1ctl_link *l1l)
/* Init */
trx->arfcn = ARFCN_INVAL;
trx->bsic = BSIC_INVAL;
+ trx->gain = 0; /* Best test results for broadest range of RX levels */
/* L1 link */
trx->l1l = l1l;
@@ -227,7 +228,7 @@ _trx_ctrl_send_resp(struct trx *trx, const char *cmd, const char *fmt, ...)
static int
_trx_ctrl_cmd_poweroff(struct trx *trx, const char *cmd, const char *args)
{
- l1ctl_tx_bts_mode(trx->l1l, 0, 0, 0);
+ l1ctl_tx_bts_mode(trx->l1l, 0, 0, 0, 0);
return _trx_ctrl_send_resp(trx, cmd, "%d", 0);
}
@@ -242,7 +243,7 @@ _trx_ctrl_cmd_poweron(struct trx *trx, const char *cmd, const char *args)
"TRX received POWERON when not fully configured\n");
rv = -EINVAL;
} else {
- rv = l1ctl_tx_bts_mode(trx->l1l, 1, trx->bsic, trx->arfcn);
+ rv = l1ctl_tx_bts_mode(trx->l1l, 1, trx->bsic, trx->arfcn, trx->gain);
}
return _trx_ctrl_send_resp(trx, cmd, "%d", rv);
@@ -278,6 +279,15 @@ _trx_ctrl_cmd_setrxgain(struct trx *trx, const char *cmd, const char *args)
{
int db = atoi(args);
+ if (db < 0 || db > 63) {
+ LOGP(DTRX, LOGL_ERROR, "Invalid gain received\n");
+ return _trx_ctrl_send_resp(trx, cmd, "%d %d", -1, db);
+ }
+
+ trx->gain = db;
+
+ l1ctl_tx_bts_mode(trx->l1l, 1, trx->bsic, trx->arfcn, trx->gain);
+
return _trx_ctrl_send_resp(trx, cmd, "%d %d", 0, db);
}
diff --git a/src/host/layer23/src/transceiver/trx.h b/src/host/layer23/src/transceiver/trx.h
index 0571cab2..19e02fcf 100644
--- a/src/host/layer23/src/transceiver/trx.h
+++ b/src/host/layer23/src/transceiver/trx.h
@@ -50,6 +50,7 @@ struct trx {
/* TRX configuration */
uint16_t arfcn;
uint8_t bsic;
+ int gain;
};