Commit 67a0851b authored by liuxu's avatar liuxu

add pbch and simplify sever_manager.py231120

parent 259d50f0
import struct
import socket
import collections
# from flask import jsonify
SERVER_IP = "192.168.199.231"
SERVER_IP = "0.0.0.0"
SERVER_PORT = 7789
BUFFER_SIZE = 20000
......@@ -36,21 +38,25 @@ rrc_gNB_to_UE = [
"UECapabilityEnquiry"
]
schedule_data = collections.OrderedDict()
# 0 is first tag
schedule_data = {
"msg1":[],
"msg2":[],
"msg3":[],
"msg4":[],
"pdcch":[],
"pdsch":[],
"csirs":[],
"pusch":[],
"acknack":[],
"csi_report":[],
"sr_report":[],
"srs":[]
}
schedule_data["ssb"] = []
schedule_data["sib1"] = []
schedule_data["msg1"] = []
schedule_data["msg2"] = []
schedule_data["msg3"] = []
schedule_data["msg4"] = []
schedule_data["pdcch"] = []
schedule_data["pdsch"] = []
schedule_data["csirs"] = []
schedule_data["prach"] = []
schedule_data["pusch"] = []
schedule_data["acknack"] = []
schedule_data["csi_report"] = []
schedule_data["sr_report"] = []
schedule_data["srs"] = []
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
......@@ -69,22 +75,22 @@ while True:
if DEBUG_PRINT:
print("data_len %d message %d"%(data_len,message))
if (message == 2):
CC_id,frame,slot,measurement_flag,prach_sched_flag,dl_sched_flag,ul_sched_flag,msg1_frame,msg1_slot,msg2_frame,msg2_slot,msg3_frame,msg3_slot,msg4_frame,msg4_slot,pdcch_frame,pdcch_slot,pdsch_frame,pdsch_slot,csirs_frame,csirs_slot,csi_report_frame,sr_frame,srs_frame,acknack_frame,ulsch_frame,csi_report_slot,sr_slot,srs_slot,acknack_slot,ulsch_slot= struct.unpack("31H", data[4:33*2])
CC_id,frame,slot,measurement_flag,pbch_sched_flag,random_access_sched_flag,dl_sched_flag,ul_sched_flag = struct.unpack("8H", data[4:20])
print("%d.%d measurement_flag %x pbch_sched_flag %x random_access_sched_flag %x dl_sched_flag %x ul_sched_flag %x"%(frame,slot,measurement_flag,pbch_sched_flag,random_access_sched_flag,dl_sched_flag,ul_sched_flag))
schedule_timing = struct.unpack("30H", data[20:80])
if DEBUG_PRINT:
print("[%d.%d] measurement_flag %x prach_sched_flag %x dl_sched_flag %x ul_sched_flag %x msg1 %d.%d msg2 %d.%d msg3 %d.%d msg4 %d.%d pdcch %d.%d pdsch %d.%d "
"csirs %d.%d ulsch %d.%d acknack %d.%d csi_report %d.%d sr %d.%d srs %d.%d"%(frame, slot, measurement_flag, prach_sched_flag,dl_sched_flag, ul_sched_flag,
msg1_frame, msg1_slot,msg2_frame, msg2_slot,
msg3_frame, msg3_slot, msg4_frame, msg4_slot,
pdcch_frame, pdcch_slot, pdsch_frame, pdsch_slot,
csirs_frame, csirs_slot,
ulsch_frame, ulsch_slot, acknack_frame, acknack_slot,
csi_report_frame, csi_report_slot, sr_frame, sr_slot,
srs_frame, srs_slot))
i = 0
for map_type in schedule_data.keys():
print("%s %d.%d" % (map_type, schedule_timing[i*2], schedule_timing[i*2+1]))
i = i + 1
if (measurement_flag & 0x01) and (dl_sched_flag or ul_sched_flag or (prach_sched_flag&0x0e)):
print("")
if (measurement_flag & 0x01) and (dl_sched_flag or ul_sched_flag or (random_access_sched_flag&0x0e)):
if DEBUG_PRINT:
print("update measurement data")
dl_recv_bytes_high16,dl_recv_bytes_low16,ul_recv_bytes_high16,ul_recv_bytes_low16,dl_mcs,ul_mcs,dl_bler,ul_bler,pucch_snr,pusch_snr,rsrp = struct.unpack("8H3h", data[33*2:33*2+22])
dl_recv_bytes_high16,dl_recv_bytes_low16,ul_recv_bytes_high16,ul_recv_bytes_low16,\
dl_mcs,ul_mcs,dl_bler,ul_bler,pucch_snr,pusch_snr,rsrp = struct.unpack("8H3h", data[80:80+22])
dl_recv_bytes = (dl_recv_bytes_high16<<16) + dl_recv_bytes_low16
ul_recv_bytes = (ul_recv_bytes_high16<<16) + ul_recv_bytes_low16
dl_velocity = (dl_recv_bytes - dl_recv_bytes_last)*8.0/1e6
......@@ -92,229 +98,32 @@ while True:
dl_bler = dl_bler*1.0/10000
ul_bler = ul_bler*1.0/10000
if DEBUG_PRINT:
print("%d.%d: dl_recv_bytes %ldbytes(%fMpbs), ul_recv_bytes %ldbytes(%fMpbs), dl_mcs %d, ul_mcs %d, dl_bler %f, ul_bler %f, pucch_snr %ddB, pusch_snr %ddB rsrp %ddBm"%(
frame, slot, dl_recv_bytes - dl_recv_bytes_last,dl_velocity, ul_recv_bytes - ul_recv_bytes_last, ul_velocity,dl_mcs, ul_mcs, dl_bler,ul_bler, pucch_snr, pusch_snr, rsrp))
print("%d.%d: dl_recv_bytes %ldbytes(%fMpbs), ul_recv_bytes %ldbytes(%fMpbs), dl_mcs %d, ul_mcs \
%d, dl_bler %f, ul_bler %f, pucch_snr %ddB, pusch_snr %ddB rsrp %ddBm"%(
frame, slot, dl_recv_bytes - dl_recv_bytes_last,dl_velocity, ul_recv_bytes - ul_recv_bytes_last, ul_velocity,\
dl_mcs, ul_mcs, dl_bler,ul_bler, pucch_snr, pusch_snr, rsrp))
dl_recv_bytes_last = dl_recv_bytes
ul_recv_bytes_last = ul_recv_bytes
count = 0
vrb_map_msg1_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if msg1_frame != frame_last:
schedule_data["msg1"] = []
if (prach_sched_flag & 0x01):
if DEBUG_PRINT:
print("Schedule and wait for msg1:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_msg1_socket[i]):
for bitnum in range(14):
if (vrb_map_msg1_socket[i]>>bitnum) & 1:
schedule_data["msg1"].append([msg1_slot*14+bitnum, i, 0])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_msg1_socket[i]))
if DEBUG_PRINT:
print (schedule_data["msg1"])
count = count + 1
vrb_map_msg2_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if msg2_frame != frame_last:
schedule_data["msg2"] = []
if (prach_sched_flag & 0x02):
if DEBUG_PRINT:
print("Schedule msg2:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_msg2_socket[i]):
for bitnum in range(14):
if (vrb_map_msg2_socket[i]>>bitnum) & 1:
schedule_data["msg2"].append([msg1_slot*14+bitnum, i, 1])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_msg2_socket[i]))
if DEBUG_PRINT:
print (schedule_data["msg2"])
count = count + 1
vrb_map_msg3_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if msg3_frame != frame_last:
schedule_data["msg3"] = []
if (prach_sched_flag & 0x04):
if DEBUG_PRINT:
print("Schedule msg3:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_msg3_socket[i]):
for bitnum in range(14):
if (vrb_map_msg3_socket[i]>>bitnum) & 1:
schedule_data["msg3"].append([msg3_slot*14+bitnum, i, 2])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_msg3_socket[i]))
if DEBUG_PRINT:
print (schedule_data["msg3"])
count = count + 1
vrb_map_msg4_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if msg4_frame != frame_last:
schedule_data["msg4"] = []
if (prach_sched_flag & 0x08):
if DEBUG_PRINT:
print("Schedule msg4:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_msg4_socket[i]):
for bitnum in range(14):
if (vrb_map_msg4_socket[i]>>bitnum) & 1:
schedule_data["msg4"].append([msg4_slot*14+bitnum, i, 3])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_msg4_socket[i]))
if DEBUG_PRINT:
print (schedule_data["msg4"])
count = count + 1
vrb_map_pdcch_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if pdcch_frame != frame_last:
schedule_data["pdcch"] = []
if (dl_sched_flag & 0x01):
if DEBUG_PRINT:
print("Schedule pdcch:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_pdcch_socket[i]):
for bitnum in range(14):
if (vrb_map_pdcch_socket[i]>>bitnum) & 1:
schedule_data["pdcch"].append([pdcch_slot*14+bitnum, i, 4])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_pdcch_socket[i]))
if DEBUG_PRINT:
print (schedule_data["pdcch"])
count = count + 1
vrb_map_pdsch_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if pdsch_frame != frame_last:
schedule_data["pdsch"] = []
if (dl_sched_flag & 0x02):
if DEBUG_PRINT:
print("Schedule pdsch:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_pdsch_socket[i]):
for bitnum in range(14):
if (vrb_map_pdsch_socket[i]>>bitnum) & 1:
schedule_data["pdsch"].append([pdsch_slot*14+bitnum, i, 5])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_pdsch_socket[i]))
if DEBUG_PRINT:
print (schedule_data["pdsch"])
count = count + 1
vrb_map_csirs_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if csirs_frame != frame_last:
schedule_data["csirs"] = []
if (dl_sched_flag & 0x04):
if DEBUG_PRINT:
print("Schedule csirs:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_csirs_socket[i]):
for bitnum in range(14):
if (vrb_map_csirs_socket[i]>>bitnum) & 1:
schedule_data["csirs"].append([csirs_slot*14+bitnum, i, 6])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_csirs_socket[i]))
if DEBUG_PRINT:
print (schedule_data["csirs"])
count = count + 1
#LSB -> MSB : ulsch || acknack || csi-report || sr || srs
vrb_map_pusch_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if ulsch_frame != frame_last:
schedule_data["pusch"] = []
if (ul_sched_flag & 0x01):
if DEBUG_PRINT:
print("Schedule pusch:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_pusch_socket[i]):
for bitnum in range(14):
if (vrb_map_pusch_socket[i]>>bitnum) & 1:
schedule_data["pusch"].append([ulsch_slot*14+bitnum, i, 7])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_pusch_socket[i]))
if DEBUG_PRINT:
print (schedule_data["pusch"])
count = count + 1
vrb_map_acknack_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if acknack_frame != frame_last:
schedule_data["acknack"] = []
if (ul_sched_flag & 0x02):
for map_type in schedule_data:
if frame != frame_last :
schedule_data[map_type] = []
receive_map = struct.unpack("275H", data[80+22+550*count:80+22+550*(count+1)])
if DEBUG_PRINT:
print("Schedule acknack:")
print("Schedule for %s:"%(map_type))
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_acknack_socket[i]):
if (receive_map[i]):
for bitnum in range(14):
if (vrb_map_acknack_socket[i]>>bitnum) & 1:
schedule_data["acknack"].append([acknack_slot*14+bitnum, i, 8])
if (receive_map[i]>>bitnum) & 1:
schedule_data[map_type].append([schedule_timing[count*2+1]*14+bitnum, i, count])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_acknack_socket[i]))
print("%d\t%d"%(i, receive_map[i]))
if DEBUG_PRINT:
print (schedule_data["acknack"])
print (schedule_data[map_type])
count = count + 1
vrb_map_csi_report_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if csi_report_frame != frame_last:
schedule_data["csi_report"] = []
if (ul_sched_flag & 0x04):
if DEBUG_PRINT:
print("Schedule csi report:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_csi_report_socket[i]):
for bitnum in range(14):
if (vrb_map_csi_report_socket[i]>>bitnum) & 1:
schedule_data["csi_report"].append([csi_report_slot*14+bitnum, i, 9])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_csi_report_socket[i]))
if DEBUG_PRINT:
print (schedule_data["csi_report"])
count = count + 1
vrb_map_sr_report_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if sr_frame != frame_last:
schedule_data["sr_report"] = []
if (ul_sched_flag & 0x08):
if DEBUG_PRINT:
print("Schedule sr report:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_sr_report_socket[i]):
for bitnum in range(14):
if (vrb_map_sr_report_socket[i]>>bitnum) & 1:
schedule_data["sr_report"].append([sr_slot*14+bitnum, i, 10])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_sr_report_socket[i]))
if DEBUG_PRINT:
print (schedule_data["sr_report"])
count = count + 1
vrb_map_srs_socket = struct.unpack("275H", data[33*2+22+550*count:33*2+22+550*(count+1)])
if srs_frame != frame_last:
schedule_data["srs"] = []
if (ul_sched_flag & 0x10):
if DEBUG_PRINT:
print("Schedule srs:")
print("RB\tslbitmap")
for i in range(275):
if (vrb_map_srs_socket[i]):
for bitnum in range(14):
if (vrb_map_srs_socket[i]>>bitnum) & 1:
schedule_data["srs"].append([srs_slot*14+bitnum, i, 11])
if DEBUG_PRINT:
print("%d\t%d"%(i, vrb_map_srs_socket[i]))
if DEBUG_PRINT:
print (schedule_data["srs"])
count = count + 1
frame_last = frame
print(schedule_data)
......
......@@ -211,7 +211,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
memcpy(&sim_socket_manager.vrb_map_csi_report_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_sr_report_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_srs_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
memcpy(&sim_socket_manager.vrb_map_prach_socket, &gNB->ulprbbl, sizeof(uint16_t) * RB_TOTAL_MAP_SOCKET);
sim_socket_manager.CC_id = CC_id;
sim_socket_manager.slot = slot;
......@@ -294,7 +294,8 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
NR_SCHED_UNLOCK(&gNB->sched_lock);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT);
if (sim_socket_manager.measurement_flag || sim_socket_manager.prach_sched_flag || sim_socket_manager.dl_sched_flag ||sim_socket_manager.ul_sched_flag){
if (sim_socket_manager.measurement_flag || sim_socket_manager.random_access_sched_flag || \
sim_socket_manager.dl_sched_flag ||sim_socket_manager.ul_sched_flag || sim_socket_manager.pbch_sched_flag){
pthread_mutex_lock(&sim_mutex_socket);
message_flag = 2;
// gnbSendToManager_buf = &sim_socket_manager;
......@@ -302,14 +303,16 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
sim_socket_manager.message = 2;
// gnbSendToManager_len = sim_socket_manager.data_len;
LOG_D(NR_MAC,"data_len %d\n", sim_socket_manager.data_len);
LOG_D(NR_MAC,"[%d.%d] measurement_flag %x prach_sched_flag %x dl_sched_flag %x ul_sched_flag %x msg1 %d.%d msg2 %d.%d msg3 %d.%d msg4 %d.%d pdcch %d.%d pdsch %d.%d "
"csirs %d.%d ulsch %d.%d acknack %d.%d csi_report %d.%d sr %d.%d srs %d.%d\n",
sim_socket_manager.frame, sim_socket_manager.slot,
sim_socket_manager.measurement_flag, sim_socket_manager.prach_sched_flag,sim_socket_manager.dl_sched_flag, sim_socket_manager.ul_sched_flag,
LOG_I(NR_MAC,"[%d.%d] measurement_flag %x pbch_sched_flag %x random_access_sched_flag %x dl_sched_flag %x ul_sched_flag %x "
"ssb %d.%d sib1 %d.%d msg1 %d.%d msg2 %d.%d msg3 %d.%d msg4 %d.%d pdcch %d.%d pdsch %d.%d "
"csirs %d.%d prach %d.%d ulsch %d.%d acknack %d.%d csi_report %d.%d sr %d.%d srs %d.%d\n",
sim_socket_manager.frame, sim_socket_manager.slot,sim_socket_manager.measurement_flag, sim_socket_manager.pbch_sched_flag,
sim_socket_manager.random_access_sched_flag,sim_socket_manager.dl_sched_flag, sim_socket_manager.ul_sched_flag,
sim_socket_manager.ssb_frame, sim_socket_manager.ssb_slot, sim_socket_manager.sib1_frame, sim_socket_manager.sib1_slot,
sim_socket_manager.msg1_frame, sim_socket_manager.msg1_slot,sim_socket_manager.msg2_frame, sim_socket_manager.msg2_slot,
sim_socket_manager.msg3_frame, sim_socket_manager.msg3_slot, sim_socket_manager.msg4_frame, sim_socket_manager.msg4_slot,
sim_socket_manager.pdcch_frame, sim_socket_manager.pdcch_slot, sim_socket_manager.pdsch_frame, sim_socket_manager.pdsch_slot,
sim_socket_manager.csirs_frame, sim_socket_manager.csirs_slot,
sim_socket_manager.csirs_frame, sim_socket_manager.csirs_slot,sim_socket_manager.prach_frame, sim_socket_manager.prach_slot,
sim_socket_manager.ulsch_frame, sim_socket_manager.ulsch_slot, sim_socket_manager.acknack_frame, sim_socket_manager.acknack_slot,
sim_socket_manager.csi_report_frame, sim_socket_manager.csi_report_slot, sim_socket_manager.sr_frame, sim_socket_manager.sr_slot,
sim_socket_manager.srs_frame, sim_socket_manager.srs_slot);
......
......@@ -341,9 +341,9 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
prach_pdu->num_cs = get_NCS(scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.zeroCorrelationZoneConfig,
format0,
scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->restrictedSetConfig);
sim_socket_manager.msg1_frame = frameP;
sim_socket_manager.msg1_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x01;
sim_socket_manager.prach_frame = frameP;
sim_socket_manager.prach_slot = slotP;
sim_socket_manager.ul_sched_flag |= 0x20;
LOG_D(NR_MAC, "Frame %d, Slot %d: Prach Occasion id = %u fdm index = %u start symbol = %u slot index = %u subframe index = %u \n",
frameP, slotP,
prach_occasion_id, prach_pdu->num_ra,
......@@ -420,7 +420,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
for (int i = 0; i < N_RA_RB * fdm; ++i){
uint16_t slbitmap = SL_to_bitmap(start_symbol, N_t_slot*N_dur);
vrb_map_UL[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
sim_socket_manager.vrb_map_msg1_socket[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
sim_socket_manager.vrb_map_prach_socket[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
......@@ -1118,7 +1118,7 @@ static void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_f
uint16_t *vrb_map_UL = &RC.nrmac[module_idP]->common_channels[CC_id].vrb_map_UL[buffer_index * MAX_BWP_SIZE];
sim_socket_manager.msg3_frame = ra->Msg3_frame;
sim_socket_manager.msg3_slot = ra->Msg3_slot;
sim_socket_manager.prach_sched_flag |= 0x04;
sim_socket_manager.random_access_sched_flag |= 0x04;
for (int i = 0; i < ra->msg3_nb_rb; ++i) {
AssertFatal(!(vrb_map_UL[i + ra->msg3_first_rb + ra->msg3_bwp_start] & mask),
"RB %d in %4d.%2d is already taken, cannot allocate Msg3!\n",
......@@ -1445,10 +1445,10 @@ static void nr_generate_Msg2(module_id_t module_idP,
TX_req->Slot = slotP;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager.pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x08;
sim_socket_manager.msg2_frame = frameP;
sim_socket_manager.msg2_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x02;
sim_socket_manager.random_access_sched_flag |= 0x02;
// Mark the corresponding symbols RBs as used
fill_pdcch_vrb_map(nr_mac,
CC_id,
......@@ -1912,10 +1912,10 @@ static void nr_generate_Msg4(module_id_t module_idP,
LOG_I(PHY, "Msg4 send %d.%d\n", frameP, slotP);
sim_socket_manager.msg4_frame = frameP;
sim_socket_manager.msg4_slot = slotP;
sim_socket_manager.prach_sched_flag |= 0x08;
sim_socket_manager.random_access_sched_flag |= 0x08;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager.pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x10;
// Mark the corresponding symbols and RBs as used
fill_pdcch_vrb_map(nr_mac,
......
......@@ -49,6 +49,7 @@
#include "common/ran_context.h"
#include "executables/softmodem-common.h"
#include "slotmap.h"
extern RAN_CONTEXT_t RC;
......@@ -89,8 +90,10 @@ static void schedule_ssb(frame_t frame,
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].pm_idx = 0;
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = beam_index;
dl_req->nPDUs++;
LOG_D(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
sim_socket_manager.ssb_frame = frame;
sim_socket_manager.ssb_slot = slot;
sim_socket_manager.pbch_sched_flag |= 0x01;
LOG_I(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
}
static void fill_ssb_vrb_map(NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id)
......@@ -101,8 +104,24 @@ static void fill_ssb_vrb_map(NR_COMMON_channels_t *cc, int rbStart, int ssb_subc
uint16_t *vrb_map = cc[CC_id].vrb_map;
const int extra_prb = ssb_subcarrier_offset > 0;
for (int rb = 0; rb < 20 + extra_prb; rb++)
vrb_map[rbStart + rb] = SL_to_bitmap(symStart % NR_SYMBOLS_PER_SLOT, 4);
for (int rb = 0; rb < 20 + extra_prb; rb++){
uint16_t slbitmap = SL_to_bitmap(symStart % NR_SYMBOLS_PER_SLOT, 4);
vrb_map[rbStart + rb] = slbitmap;
sim_socket_manager.vrb_map_ssb_socket[rbStart + rb] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",rbStart + rb, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
if (symbol&1){
printf("1 ");
}
else{
printf("0 ");
}
// printf("%d ",sim_socket_manager.vrb_map_ul_socket[(rb + sched_ctrl->sched_pusch.rbStart)*SYMBOL_PER_SLOT_MAP_SOCKET+symbol]);
}
printf("\n");
#endif
}
}
static int encode_mib(NR_BCCH_BCH_Message_t *mib, frame_t frame, uint8_t *buffer, int buf_size)
......@@ -381,7 +400,22 @@ static uint32_t schedule_control_sib1(module_id_t module_id,
gNB_mac->sched_ctrlCommon->cce_index,
gNB_mac->sched_ctrlCommon->aggregation_level);
for (int rb = 0; rb < pdsch->rbSize; rb++) {
vrb_map[rb + rbStart] |= SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
uint16_t slbitmap = SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
vrb_map[rb + rbStart] |= slbitmap;
sim_socket_manager.vrb_map_sib1_socket[rbStart + rb] |= slbitmap;
#ifdef VRB_MAP_TEST_MANAGER
printf("RB:%d [%s %d] slbitmap %d\n",rbStart + rb, __FUNCTION__, __LINE__, slbitmap);
for (int symbol = slbitmap, i = 0; i < SYMBOL_PER_SLOT_MAP_SOCKET; i++, symbol = symbol>>1){
if (symbol&1){
printf("1 ");
}
else{
printf("0 ");
}
// printf("%d ",sim_socket_manager.vrb_map_ul_socket[(rb + sched_ctrl->sched_pusch.rbStart)*SYMBOL_PER_SLOT_MAP_SOCKET+symbol]);
}
printf("\n");
#endif
}
return TBS;
}
......@@ -567,6 +601,12 @@ void schedule_nr_sib1(module_id_t module_idP,
(type0_PDCCH_CSS_config->num_rbs > 0) &&
(type0_PDCCH_CSS_config->active == true)) {
sim_socket_manager.sib1_frame = frameP;
sim_socket_manager.sib1_slot = slotP;
sim_socket_manager.pbch_sched_flag |= 0x02;
sim_socket_manager.pdcch_frame = frameP;
sim_socket_manager. pdcch_slot = slotP;
sim_socket_manager.dl_sched_flag |= 0x80;
LOG_D(NR_MAC,"(%d.%d) SIB1 transmission: ssb_index %d\n", frameP, slotP, type0_PDCCH_CSS_config->ssb_index);
default_table_type_t table_type = get_default_table_type(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern);
......
......@@ -547,19 +547,22 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
if ((sched_ctrl->ul_failure && !get_softmodem_params()->phy_test) || sched_ctrl->rrc_processing_timer > 0) {
continue;
}
LOG_D(NR_MAC," %d.%d pass2 \n", frame, slot);
NR_SRS_Config_t *srs_config = current_BWP->srs_Config;
if (!srs_config)
continue;
LOG_D(NR_MAC," %d.%d pass3 \n", frame, slot);
for(int rs = 0; rs < srs_config->srs_ResourceSetToAddModList->list.count; rs++) {
// Find periodic resource set
NR_SRS_ResourceSet_t *srs_resource_set = srs_config->srs_ResourceSetToAddModList->list.array[rs];
if (srs_resource_set->resourceType.present != NR_SRS_ResourceSet__resourceType_PR_periodic) {
LOG_D(NR_MAC," %d.%d pass5 rs %d srs_resource_set->resourceType.present %d \n", frame, slot,rs, srs_resource_set->resourceType.present);
continue;
}
LOG_D(NR_MAC," %d.%d pass4 \n", frame, slot);
// Find the corresponding srs resource
NR_SRS_Resource_t *srs_resource = NULL;
for (int r1 = 0; r1 < srs_resource_set->srs_ResourceIdList->list.count; r1++) {
......@@ -577,6 +580,7 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
if (srs_resource == NULL) {
continue;
}
LOG_D(NR_MAC," %d.%d pass5 \n", frame, slot);
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList = get_ul_tdalist(current_BWP, sched_ctrl->coreset->controlResourceSetId, sched_ctrl->search_space->searchSpaceType->present, NR_RNTI_C);
const int num_tda = tdaList->list.count;
......@@ -594,7 +598,7 @@ void nr_schedule_srs(int module_id, frame_t frame, int slot)
const uint16_t period = srs_period[srs_resource->resourceType.choice.periodic->periodicityAndOffset_p.present];
const uint16_t offset = get_nr_srs_offset(srs_resource->resourceType.choice.periodic->periodicityAndOffset_p);
LOG_D(NR_MAC," %d.%d pass1 Scheduling SRS reception for %d.%d\n", frame, slot, sched_frame, sched_slot);
// Check if UE will transmit the SRS in this frame
if ((sched_frame * n_slots_frame + sched_slot - offset) % period == 0) {
LOG_I(NR_MAC," %d.%d Scheduling SRS reception for %d.%d\n", frame, slot, sched_frame, sched_slot);
......
......@@ -1782,7 +1782,7 @@ static void pf_ul(module_id_t module_id,
sched_ctrl->cce_index = CCEIndex;
sim_socket_manager.pdcch_frame = frame;
sim_socket_manager.pdcch_slot = slot;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x20;
fill_pdcch_vrb_map(nrmac,
CC_id,
&sched_ctrl->sched_pdcch,
......@@ -1944,7 +1944,7 @@ static void pf_ul(module_id_t module_id,
sched_ctrl->cce_index = CCEIndex;
sim_socket_manager.pdcch_frame = frame;
sim_socket_manager.pdcch_slot = slot;
sim_socket_manager.dl_sched_flag |= 0x01;
sim_socket_manager.dl_sched_flag |= 0x20;
fill_pdcch_vrb_map(nrmac,
CC_id,
&sched_ctrl->sched_pdcch,
......
......@@ -12,7 +12,7 @@
#define MAX_UE_NUMBER_MAP_SOCKET 1
// #define VRB_MAP_TEST_MANAGER
#define VRB_MAP_TEST_MANAGER
typedef struct {
uint16_t data_len;
......@@ -21,13 +21,20 @@ typedef struct {
uint16_t frame;
uint16_t slot;
uint16_t measurement_flag;
/*LSB -> MSB : masg1 || masg2 || masg3 || masg4*/
uint16_t prach_sched_flag;
/*LSB -> MSB : pdcch || pdsch || csirs*/
/*LSB -> MSB : ssb || sib1*/
uint16_t pbch_sched_flag;
/*LSB -> MSB : msg1 || msg2 || msg3 || msg4*/
uint16_t random_access_sched_flag;
/*LSB -> MSB : pdcch_to_pdsch || pdsch || csirs || pdcch_to_msg2 || pdcch_to_msg4 || pdcch_to_pusch || pdcch_to_sib1*/
uint16_t dl_sched_flag;
/*LSB -> MSB : ulsch || acknack || csi-report || sr || srs*/
/*LSB -> MSB : ulsch || acknack || csi-report || sr || srs || prach */
uint16_t ul_sched_flag;
uint16_t ssb_frame;
uint16_t ssb_slot;
uint16_t sib1_frame;
uint16_t sib1_slot;
uint16_t msg1_frame;
uint16_t msg1_slot;
uint16_t msg2_frame;
......@@ -44,16 +51,18 @@ typedef struct {
uint16_t csirs_frame;
uint16_t csirs_slot;
uint16_t csi_report_frame;
uint16_t sr_frame;
uint16_t srs_frame;
uint16_t acknack_frame;
uint16_t prach_frame;
uint16_t prach_slot;
uint16_t ulsch_frame;
uint16_t ulsch_slot;
uint16_t acknack_frame;
uint16_t acknack_slot;
uint16_t csi_report_frame;
uint16_t csi_report_slot;
uint16_t sr_frame;
uint16_t sr_slot;
uint16_t srs_frame;
uint16_t srs_slot;
uint16_t acknack_slot;
uint16_t ulsch_slot;
uint16_t dl_recv_bytes_high16;
uint16_t dl_recv_bytes_low16;
......@@ -67,6 +76,8 @@ typedef struct {
int16_t pusch_snr;
int16_t rsrp;
uint16_t vrb_map_ssb_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_sib1_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg1_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg2_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_msg3_socket[RB_TOTAL_MAP_SOCKET];
......@@ -74,11 +85,13 @@ typedef struct {
uint16_t vrb_map_pdcch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_pdsch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_csirs_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_prach_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_pusch_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_acknack_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_csi_report_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_sr_report_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_srs_socket[RB_TOTAL_MAP_SOCKET];
}sim_socket_t;
extern sim_socket_t sim_socket_manager;
......
......@@ -651,6 +651,7 @@ static void config_srs(const NR_ServingCellConfigCommon_t *scc,
NR_SRS_Resource_t *srs_res0=calloc(1,sizeof(*srs_res0));
srs_res0->srs_ResourceId = res_id;
srs_res0->nrofSRS_Ports = NR_SRS_Resource__nrofSRS_Ports_port1;
LOG_I(NR_RRC, "do_srs %d\n", do_srs);
if (do_srs) {
long nrofSRS_Ports = 1;
if (uecap &&
......@@ -2220,7 +2221,7 @@ static NR_SpCellConfig_t *get_initial_SpCellConfig(int uid,
// We are using do_srs = 0 here because the periodic SRS will only be enabled in update_cellGroupConfig() if do_srs == 1
initialUplinkBWP->srs_Config = calloc(1, sizeof(*initialUplinkBWP->srs_Config));
config_srs(scc, initialUplinkBWP->srs_Config, NULL, curr_bwp, uid, 0, maxMIMO_Layers, 0);
config_srs(scc, initialUplinkBWP->srs_Config, NULL, curr_bwp, uid, 0, maxMIMO_Layers, 0);//configuration->do_SRS
scheduling_request_config(scc, pucch_Config, scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment