diff options
-rw-r--r-- | include/l1ctl_proto.h | 3 | ||||
-rw-r--r-- | src/target/firmware/layer1/prim_bts.c | 13 |
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) |