summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-02-27 10:59:28 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2013-02-27 10:59:28 +0100
commitd2e77f0d888150c300ba095a4c3e9887a44b428a (patch)
treef51578137a34ae5ce0d0d3a510656141c1f993c8
parent78408ed5a4493c0951e0faa59fa6db7586fc3d24 (diff)
Calypso BTS sends RSSI with each received bust
For access burst, the TOA offset is used as offset when reading the 88 IQ values from DSP buffer.
-rw-r--r--include/l1ctl_proto.h3
-rw-r--r--src/target/firmware/layer1/prim_bts.c13
2 files changed, 11 insertions, 5 deletions
diff --git a/include/l1ctl_proto.h b/include/l1ctl_proto.h
index b92ccf11..ddead86c 100644
--- a/include/l1ctl_proto.h
+++ b/include/l1ctl_proto.h
@@ -328,7 +328,7 @@ struct l1ctl_bts_burst_req {
struct l1ctl_bts_burst_nb_ind {
uint32_t fn;
uint8_t tn;
- uint8_t toa;
+ int8_t toa;
int8_t rssi;
uint8_t data[15];
} __attribute__((packed));
@@ -336,6 +336,7 @@ struct l1ctl_bts_burst_nb_ind {
/* BTS mode: AB Burst Indication */
struct l1ctl_bts_burst_ab_ind {
uint32_t fn;
+ uint8_t toa;
uint8_t iq[2*88];
} __attribute__((packed));
diff --git a/src/target/firmware/layer1/prim_bts.c b/src/target/firmware/layer1/prim_bts.c
index 2f121bf9..fd35f81e 100644
--- a/src/target/firmware/layer1/prim_bts.c
+++ b/src/target/firmware/layer1/prim_bts.c
@@ -142,7 +142,7 @@ l1s_bts_resp(uint8_t p1, uint8_t p2, uint16_t p3)
struct msgb *msg;
struct l1ctl_bts_burst_ab_ind *bi;
uint16_t *iq = &db->data[32];
- int i;
+ int i, j;
printf("### RACH ### (%04x %04x - %04x)\n",
db->rx[0].data, energy_avg, db->rx[1].cmd);
@@ -158,8 +158,11 @@ l1s_bts_resp(uint8_t p1, uint8_t p2, uint16_t p3)
bi->fn = htonl(rx_time.fn);
/* Data (cut to 8 bits */
- for (i=0; i<2*88; i++)
- bi->iq[i] = iq[i] >> 8;
+ bi->toa = db->rx[1].cmd;
+ if (bi->toa > 68)
+ goto exit;
+ for (i=0,j=(db->rx[1].cmd)<<1; i<2*88; i++,j++)
+ bi->iq[i] = iq[j] >> 8;
/* Send it ! */
l1_queue_for_l2(msg);
@@ -172,6 +175,7 @@ l1s_bts_resp(uint8_t p1, uint8_t p2, uint16_t p3)
{
uint16_t *d = &db->data[32];
int rssi = agc_inp_dbm8_by_pm(d[1] >> 3) / 8;
+ int16_t toa = (int16_t)d[0] - 3;
if (d[3] > 0x1000) {
struct msgb *msg;
@@ -194,7 +198,8 @@ l1s_bts_resp(uint8_t p1, uint8_t p2, uint16_t p3)
bi->tn = 0;
/* TOA */
- bi->toa = d[0];
+ if (toa > -32 && toa < 32)
+ bi->toa = toa;
/* RSSI */
if (rssi < -110)