diff --git a/src/bts.cpp b/src/bts.cpp index c53c92c1..e65d6081 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -467,7 +467,8 @@ int BTS::rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn) return 0; } -int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) +int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, uint8_t is_11bit, + enum ph_burst_type burst_type) { struct gprs_rlcmac_ul_tbf *tbf = NULL; uint8_t trx_no, ts_no = 0; diff --git a/src/bts.h b/src/bts.h index 38896c8e..801342dd 100644 --- a/src/bts.h +++ b/src/bts.h @@ -28,6 +28,7 @@ extern "C" { #include #include #include +#include } #include "poll_controller.h" @@ -289,7 +290,8 @@ public: int tfi_find_free(enum gprs_rlcmac_tbf_direction dir, uint8_t *_trx, int8_t use_trx); int rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn); - int rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta); + int rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, uint8_t is_11bit, + enum ph_burst_type burst_type); void trigger_dl_ass(gprs_rlcmac_dl_tbf *tbf, gprs_rlcmac_tbf *old_tbf); void snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi); diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp index 14342136..f1c73c93 100644 --- a/src/pcu_l1_if.cpp +++ b/src/pcu_l1_if.cpp @@ -322,7 +322,8 @@ static int pcu_rx_rach_ind(struct gsm_pcu_if_rach_ind *rach_ind) case PCU_IF_SAPI_RACH: rc = BTS::main_bts()->rcv_rach( rach_ind->ra, rach_ind->fn, - rach_ind->qta); + rach_ind->qta, rach_ind->is_11bit, + (ph_burst_type)rach_ind->burst_type); break; default: LOGP(DL1IF, LOGL_ERROR, "Received PCU rach request with " diff --git a/src/pcuif_proto.h b/src/pcuif_proto.h index d3203802..944f3644 100644 --- a/src/pcuif_proto.h +++ b/src/pcuif_proto.h @@ -1,7 +1,9 @@ #ifndef _PCUIF_PROTO_H #define _PCUIF_PROTO_H -#define PCU_IF_VERSION 0x06 +#include + +#define PCU_IF_VERSION 0x07 /* msg_type */ #define PCU_IF_MSG_DATA_REQ 0x00 /* send data to given channel */ @@ -67,10 +69,12 @@ struct gsm_pcu_if_rts_req { struct gsm_pcu_if_rach_ind { uint8_t sapi; - uint8_t ra; + uint16_t ra; int16_t qta; uint32_t fn; uint16_t arfcn; + uint8_t is_11bit; + uint8_t burst_type; } __attribute__ ((packed)); struct gsm_pcu_if_info_trx { diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index 5e40abcb..2feb9c3a 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -36,6 +36,7 @@ extern "C" { #include #include #include +#include } #include @@ -553,7 +554,7 @@ static gprs_rlcmac_ul_tbf *establish_ul_tbf_single_phase(BTS *the_bts, tfi = the_bts->tfi_find_free(GPRS_RLCMAC_UL_TBF, &trx_no, -1); - the_bts->rcv_rach(0x03, *fn, qta); + the_bts->rcv_rach(0x03, *fn, qta, 0, GSM_L1_BURST_TYPE_ACCESS_0); ul_tbf = the_bts->ul_tbf_by_tfi(tfi, trx_no, ts_no); OSMO_ASSERT(ul_tbf != NULL); @@ -787,7 +788,7 @@ static gprs_rlcmac_ul_tbf *establish_ul_tbf_two_phase_spb(BTS *the_bts, * simulate RACH, this sends an Immediate * Assignment Uplink on the AGCH */ - the_bts->rcv_rach(0x73, rach_fn, qta); + the_bts->rcv_rach(0x73, rach_fn, qta, 0, GSM_L1_BURST_TYPE_ACCESS_0); /* get next free TFI */ tfi = the_bts->tfi_find_free(GPRS_RLCMAC_UL_TBF, &trx_no, -1); @@ -1232,8 +1233,8 @@ static gprs_rlcmac_ul_tbf *establish_ul_tbf_two_phase(BTS *the_bts, /* needed to set last_rts_fn in the PDCH object */ request_dl_rlc_block(bts, trx_no, ts_no, fn); - /* simulate RACH, this sends an Immediate Assignment Uplink on the AGCH */ - the_bts->rcv_rach(0x73, rach_fn, qta); + /* simulate RACH, sends an Immediate Assignment Uplink on the AGCH */ + the_bts->rcv_rach(0x73, rach_fn, qta, 0, GSM_L1_BURST_TYPE_ACCESS_0); /* get next free TFI */ tfi = the_bts->tfi_find_free(GPRS_RLCMAC_UL_TBF, &trx_no, -1);