summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)