diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 3ba221386f..b94a8758c8 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -195,10 +195,7 @@ void nr_ue_decode_mib(NR_UE_MAC_INST_t *mac, int cc_id) frame = frame << 4; mac->mib_frame = frame | frame_number_4lsb; - if (mac->frequency_range == FR2) { - for (int i = 0; i < 3; i++) - mac->mib_ssb += (((extra_bits >> (7 - i)) & 0x01) << (3 + i)); - } else{ + if (mac->frequency_range == FR1) { if(ssb_subcarrier_offset_msb) ssb_subcarrier_offset = ssb_subcarrier_offset | 0x10; } diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 09f3218f1e..42030133af 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -108,18 +108,23 @@ static int handle_bcch_bch(NR_UE_MAC_INST_t *mac, void *phy_data, uint8_t *pduP, unsigned int additional_bits, - uint32_t ssb_index, + uint32_t ssb_index_mod8, uint32_t ssb_length, uint16_t ssb_start_subcarrier, long ssb_arfcn, uint16_t cell_id) { - mac->mib_ssb = ssb_index; + mac->mib_ssb = ssb_index_mod8; mac->physCellId = cell_id; mac->mib_additional_bits = additional_bits; mac->ssb_start_subcarrier = ssb_start_subcarrier; - if(ssb_length == 64) + if(ssb_length == 64) { mac->frequency_range = FR2; + uint8_t ab = additional_bits & 0xff; + uint8_t out; + reverse_bits_u8(&ab, 1, &out); + mac->mib_ssb += (out & 0x7) << 3; + } else mac->frequency_range = FR1; // fixed 3 bytes MIB PDU