Commit 4e6db871 authored by liuxu's avatar liuxu

restructure measurement data231128

parent 8ef5460a
......@@ -18,14 +18,12 @@
#define GNBSENDTOMANAGER_MAX_RE_SCHDULE_LEN (sizeof(sim_socket_t))
#define GNBSENDTOMANAGER_MAX_RRC_SIGNALING_LEN (sizeof(sim_rrc_signaling_socket))
#define GNBSENDTOMANAGER_MAX_MEASUREMENT_LEN (sizeof(sim_measurement_t))
sem_t gnbSendToManager_sem;
uint8_t *gnbSendToManager_buf;
unsigned int gnbSendToManager_len;
pthread_mutex_t sim_mutex_socket;
uint16_t message_flag;
void *gnbSendToManager_task(void *args_p)
{
printf("entering gnbSendToManager_task1\n");
......@@ -57,7 +55,7 @@ void *gnbSendToManager_task(void *args_p)
else{
printf("create socket successfully\n");
}
int gnb_flag = *(int*)args_p;
addr.sin_family=AF_INET;
addr.sin_port=htons(atoi(sever_ip_port));
addr.sin_addr.s_addr = inet_addr(sever_ip_address);
......@@ -82,6 +80,9 @@ void *gnbSendToManager_task(void *args_p)
else if (message_flag == 2){
send_len = write(sockfd, &sim_socket_manager, GNBSENDTOMANAGER_MAX_RE_SCHDULE_LEN);
}
else if (message_flag == 3){
send_len = write(sockfd, &sim_measurement_manager, GNBSENDTOMANAGER_MAX_MEASUREMENT_LEN);
}
// printf("send_len=%d\n", send_len);
}
......
......@@ -638,9 +638,8 @@ int main( int argc, char **argv ) {
pthread_mutex_init(&sim_mutex_socket, NULL);
sem_init(&gnbSendToManager_sem,0,0);
pthread_t ntid;
int gnb_flag = 1;
message_flag = 0;
if (pthread_create(&ntid, NULL, gnbSendToManager_task, &gnb_flag) < 0) {
if (pthread_create(&ntid, NULL, gnbSendToManager_task, NULL) < 0) {
fprintf(stderr, "gnbSendToManager_task: Failed to create thread: %s\n",
strerror(errno));
exit(0);
......
......@@ -40,6 +40,8 @@ rrc_gNB_to_UE = [
schedule_data = collections.OrderedDict()
rrc_data = []
# 0 is first tag
schedule_data["ssb"] = []
schedule_data["sib1"] = []
......@@ -57,6 +59,17 @@ schedule_data["csi_report"] = []
schedule_data["sr_report"] = []
schedule_data["srs"] = []
measurement_data = collections.OrderedDict()
measurement_data["dl_velocity"] = []
measurement_data["ul_velocity"] = []
measurement_data["dl_bler"] = []
measurement_data["ul_bler"] = []
measurement_data["dl_mcs"] = []
measurement_data["ul_mcs"] = []
measurement_data["pucch_snr"] = []
measurement_data["pusch_snr"] = []
measurement_data["rsrp"] = []
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
......@@ -66,6 +79,7 @@ server_socket.bind((SERVER_IP, SERVER_PORT))
dl_recv_bytes_last = 0
ul_recv_bytes_last = 0
frame_last = 0
time_last = 0
while True:
data, client_address = server_socket.recvfrom(BUFFER_SIZE)
......@@ -74,69 +88,85 @@ while True:
data_len, message= struct.unpack("2H", data[:4])
if DEBUG_PRINT:
print("data_len %d message %d"%(data_len,message))
if (message == 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])
if DEBUG_PRINT:
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:
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
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[80:80+22])
if (message == 1):
rnti,recv_send_flag,rrc_signaling_type,rrc_signaling_request_type = struct.unpack("2H2I", data[4:16])
# if DEBUG_PRINT:
print("rrc_signaling_type %d rrc_signaling_request_type %d"%(rrc_signaling_type,rrc_signaling_request_type))
if rrc_signaling_request_type != 0 :
rrc_data.append([hex(rnti), 'gNB', rrc_UE_to_gNB[rrc_signaling_request_type-1]])
print("Send:UE(rnti:%x), Receive:gNB, RRC signaling:%s"%(rnti, rrc_UE_to_gNB[rrc_signaling_request_type-1]))
if rrc_signaling_type != 0 :
rrc_data.append(['gNB', hex(rnti), rrc_gNB_to_UE[rrc_signaling_type-1]])
print("Send:gNB, Receive:UE(rnti:%x), RRC signaling:%s"%(rnti, rrc_gNB_to_UE[rrc_signaling_type-1]))
# print(rrc_data)
elif (message == 3):
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[4:4+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
ul_velocity = (ul_recv_bytes - ul_recv_bytes_last)*8.0/1e6
if DEBUG_PRINT:
print("dl_recv_bytes %d dl_recv_bytes_last %d ul_recv_bytes %d ul_recv_bytes_last %d"%(dl_recv_bytes,dl_recv_bytes_last,ul_recv_bytes,ul_recv_bytes_last))
dl_velocity = (float)(dl_recv_bytes - dl_recv_bytes_last)*8/1e6
ul_velocity = (float)(ul_recv_bytes - ul_recv_bytes_last)*8/1e6
dl_bler = dl_bler*1.0/10000
ul_bler = ul_bler*1.0/10000
measurement_data["dl_velocity"] = dl_velocity
measurement_data["ul_velocity"] = ul_velocity
measurement_data["dl_bler"] = dl_bler
measurement_data["ul_bler"] = ul_bler
measurement_data["dl_mcs"] = dl_mcs
measurement_data["ul_mcs"] = ul_mcs
measurement_data["pucch_snr"] = pucch_snr
measurement_data["pusch_snr"] = pusch_snr
measurement_data["rsrp"] = rsrp
# print(measurement_data)
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("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"%(
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
ul_recv_bytes_last = ul_recv_bytes
elif (message == 2):
CC_id,frame,slot,pbch_sched_flag,random_access_sched_flag,dl_sched_flag,ul_sched_flag = struct.unpack("7H", data[4:18])
if DEBUG_PRINT:
print("%d.%d pbch_sched_flag %x random_access_sched_flag %x dl_sched_flag %x ul_sched_flag %x"%(frame,slot,pbch_sched_flag,random_access_sched_flag,dl_sched_flag,ul_sched_flag))
schedule_timing = struct.unpack("30H", data[18:78])
if DEBUG_PRINT:
i = 0
for map_type in schedule_data.keys():
if i < 15:
print("%s %d.%d" % (map_type, schedule_timing[i*2], schedule_timing[i*2+1]))
i = i + 1
print("")
count = 0
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 for %s:"%(map_type))
print("RB\tslbitmap")
for i in range(275):
if (receive_map[i]):
for bitnum in range(14):
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, receive_map[i]))
if DEBUG_PRINT:
print (schedule_data[map_type])
count = count + 1
# for map_type in schedule_data:
for map_type in list(schedule_data.keys()):
if count < 15:
if frame != frame_last :
schedule_data[map_type] = []
receive_map = struct.unpack("275H", data[78+550*count:78+550*(count+1)])
if DEBUG_PRINT:
print("Schedule for %s:"%(map_type))
print("RB\tslbitmap")
for i in range(275):
if (receive_map[i]):
for bitnum in range(14):
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, receive_map[i]))
if DEBUG_PRINT:
print (schedule_data[map_type])
count = count + 1
frame_last = frame
if DEBUG_PRINT:
print(schedule_data)
elif (message == 1):
rnti,recv_send_flag,rrc_signaling_type,rrc_signaling_request_type = struct.unpack("2H2I", data[4:16])
# if DEBUG_PRINT:
print("rrc_signaling_type %d rrc_signaling_request_type %d"%(rrc_signaling_type,rrc_signaling_request_type))
if rrc_signaling_request_type != 0 :
print("Send:UE(rnti:%x), Receive:gNB, RRC signaling:%s"%(rnti, rrc_UE_to_gNB[rrc_signaling_request_type-1]))
if rrc_signaling_type != 0 :
print("Send:gNB, Receive:UE(rnti:%x), RRC signaling:%s"%(rnti, rrc_gNB_to_UE[rrc_signaling_type-1]))
# shared_value_lock.acquire()
# socket_value = schedule_data
# shared_value_lock.release()
# print(socket_value)
# print(type(socket_value))
server_socket.close()
......@@ -57,7 +57,7 @@
const uint8_t nr_rv_round_map[4] = {0, 2, 3, 1};
sim_socket_t sim_socket_manager;
sim_measurement_t sim_measurement_manager;
void clear_nr_nfapi_information(gNB_MAC_INST *gNB,
int CC_idP,
......@@ -224,10 +224,10 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
// }
}
if ((slot == 0) && (frame & 100) == 0) {
if ((slot == 0) && (frame % 100 == 0)) {
char stats_output[16000] = {0};
dump_mac_stats(gNB, stats_output, sizeof(stats_output), true);
LOG_D(NR_MAC, "Frame.Slot %d.%d\n%s\n", frame, slot, stats_output);
LOG_I(NR_MAC, "Frame.Slot %d.%d\n%s\n", frame, slot, stats_output);
}
......@@ -294,7 +294,7 @@ 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.random_access_sched_flag || \
if (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;
......@@ -304,10 +304,10 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
// gnbSendToManager_len = sim_socket_manager.data_len;
#ifdef VRB_MAP_TEST_MANAGER
LOG_I(NR_MAC,"data_len %d\n", sim_socket_manager.data_len);
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 "
LOG_I(NR_MAC,"[%d.%d]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.frame, sim_socket_manager.slot,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,
......@@ -317,12 +317,6 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_
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);
LOG_I(NR_MAC,"%d.%d: dl_recv_bytes %dbytes, ul_recv_bytes %dbytes, dl_mcs %d, ul_mcs %d, dl_bler %d, ul_bler %d, pucch_snr %ddB, pusch_snr %ddB, rsrp %ddBm\n",
sim_socket_manager.frame, sim_socket_manager.slot,
(sim_socket_manager.dl_recv_bytes_high16<<16)+sim_socket_manager.dl_recv_bytes_low16,
(sim_socket_manager.ul_recv_bytes_high16<<16)+sim_socket_manager.ul_recv_bytes_low16,
sim_socket_manager.dl_mcs, sim_socket_manager.ul_mcs, sim_socket_manager.dl_bler,sim_socket_manager.ul_bler, sim_socket_manager.pucch_snr,
sim_socket_manager.pusch_snr,sim_socket_manager.rsrp);
#endif
pthread_mutex_unlock(&sim_mutex_socket);
sem_post(&gnbSendToManager_sem);
......
......@@ -104,30 +104,46 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
NR_mac_stats_t *stats = &UE->mac_stats;
const int avg_rsrp = stats->num_rsrp_meas > 0 ? stats->cumul_rsrp / stats->num_rsrp_meas : 0;
sim_socket_manager.dl_recv_bytes_high16 = (stats->dl.total_bytes>>16)&0x0000ffff;
sim_socket_manager.dl_recv_bytes_low16 = stats->dl.total_bytes&0x0000ffff;
sim_socket_manager.ul_recv_bytes_high16 = (stats->ul.total_bytes>>16)&0x0000ffff;
sim_socket_manager.ul_recv_bytes_low16 = stats->ul.total_bytes&0x0000ffff;
sim_socket_manager.dl_mcs = sched_ctrl->dl_bler_stats.mcs;
sim_socket_manager.ul_mcs = sched_ctrl->ul_bler_stats.mcs;
sim_socket_manager.dl_bler = sched_ctrl->dl_bler_stats.bler*10000;
sim_socket_manager.ul_bler = sched_ctrl->ul_bler_stats.bler*10000;
sim_socket_manager.pucch_snr = sched_ctrl->pucch_snrx10/10;
sim_socket_manager.pusch_snr = sched_ctrl->pusch_snrx10/10;
sim_socket_manager.rsrp = avg_rsrp;
sim_socket_manager.measurement_flag |= 0x01;
pthread_mutex_lock(&sim_mutex_socket);
message_flag = 3;
sim_measurement_manager.data_len = sizeof(sim_measurement_t);
sim_measurement_manager.message = 3;
sim_measurement_manager.dl_recv_bytes_high16 = (stats->dl.total_bytes>>16)&0x0000ffff;
sim_measurement_manager.dl_recv_bytes_low16 = stats->dl.total_bytes&0x0000ffff;
sim_measurement_manager.ul_recv_bytes_high16 = (stats->ul.total_bytes>>16)&0x0000ffff;
sim_measurement_manager.ul_recv_bytes_low16 = stats->ul.total_bytes&0x0000ffff;
sim_measurement_manager.dl_mcs = sched_ctrl->dl_bler_stats.mcs;
sim_measurement_manager.ul_mcs = sched_ctrl->ul_bler_stats.mcs;
sim_measurement_manager.dl_bler = sched_ctrl->dl_bler_stats.bler*10000;
sim_measurement_manager.ul_bler = sched_ctrl->ul_bler_stats.bler*10000;
sim_measurement_manager.pucch_snr = sched_ctrl->pucch_snrx10/10;
sim_measurement_manager.pusch_snr = sched_ctrl->pusch_snrx10/10;
sim_measurement_manager.rsrp = avg_rsrp;
// uint64_t diff = ((double)(end_time_manager - start_time_manager) / CLOCKS_PER_SEC)*10000;
// if (diff == 0){
// printf("frame %d slot %d\n", sim_socket_manager.frame, sim_socket_manager.slot);
// exit(1);
// }
// sim_measurement_manager.time_diff_high16 = (diff>>16)&0x0000ffff;
// sim_measurement_manager.time_diff_low16 = diff&0x0000ffff;
// printf("dl %d ul %d\n", stats->dl.current_bytes,stats->ul.current_bytes);
#ifdef VRB_MAP_TEST_MANAGER
printf("stats->dl.total_bytes %ld stats->ul.total_bytes %ld\n", stats->dl.total_bytes, stats->ul.total_bytes);
printf("sim_socket_manager.dl_recv_bytes_high16 %d sim_socket_manager.dl_recv_bytes_low16 %d sim_socket_manager.ul_recv_bytes_high16 %d sim_socket_manager.ul_recv_bytes_low16 %d\n",
sim_socket_manager.dl_recv_bytes_high16,sim_socket_manager.dl_recv_bytes_low16,
sim_socket_manager.ul_recv_bytes_high16,sim_socket_manager.ul_recv_bytes_low16);
printf("%d.%d: dl_recv_bytes %dbytes, ul_recv_bytes %dbytes, dl_mcs %d, ul_mcs %d, dl_bler %d, ul_bler %d, pucch_snr %ddB, pusch_snr %ddB, rsrp %ddBm\n",
sim_socket_manager.frame, sim_socket_manager.slot,
(sim_socket_manager.dl_recv_bytes_high16<<16)+sim_socket_manager.dl_recv_bytes_low16,
(sim_socket_manager.ul_recv_bytes_high16<<16)+sim_socket_manager.ul_recv_bytes_low16,
sim_socket_manager.dl_mcs, sim_socket_manager.ul_mcs, sim_socket_manager.dl_bler,sim_socket_manager.ul_bler, sim_socket_manager.pucch_snr,
sim_socket_manager.pusch_snr,sim_socket_manager.rsrp);
LOG_I(NR_MAC,"data_len %d\n", sim_socket_manager.data_len);
LOG_I(NR_MAC,"stats->dl.total_bytes %ld stats->ul.total_bytes %ld\n", stats->dl.total_bytes, stats->ul.total_bytes);
LOG_I(NR_MAC,"sim_measurement_manager.dl_recv_bytes_high16 %d sim_measurement_manager.dl_recv_bytes_low16 %d sim_measurement_manager.ul_recv_bytes_high16 %d sim_measurement_manager.ul_recv_bytes_low16 %d\n",
sim_measurement_manager.dl_recv_bytes_high16,sim_measurement_manager.dl_recv_bytes_low16,
sim_measurement_manager.ul_recv_bytes_high16,sim_measurement_manager.ul_recv_bytes_low16);
LOG_I(NR_MAC,"dl_recv_bytes %dbytes, ul_recv_bytes %dbytes,dl_mcs %d, ul_mcs %d, dl_bler %d, ul_bler %d, pucch_snr %ddB, pusch_snr %ddB, rsrp %ddBm\n",
(sim_measurement_manager.dl_recv_bytes_high16<<16)+sim_measurement_manager.dl_recv_bytes_low16,
(sim_measurement_manager.ul_recv_bytes_high16<<16)+sim_measurement_manager.ul_recv_bytes_low16,
// (sim_measurement_manager.time_diff_high16<<16)+sim_measurement_manager.time_diff_low16,
sim_measurement_manager.dl_mcs, sim_measurement_manager.ul_mcs,
sim_measurement_manager.dl_bler,sim_measurement_manager.ul_bler, sim_measurement_manager.pucch_snr,
sim_measurement_manager.pusch_snr,sim_measurement_manager.rsrp);
#endif
pthread_mutex_unlock(&sim_mutex_socket);
sem_post(&gnbSendToManager_sem);
output += snprintf(output,
end - output,
"UE RNTI %04x (%d) PH %d dB PCMAX %d dBm, average RSRP %d (%d meas)\n",
......
......@@ -20,7 +20,6 @@ typedef struct {
uint16_t CC_id;
uint16_t frame;
uint16_t slot;
uint16_t measurement_flag;
/*LSB -> MSB : ssb || sib1*/
uint16_t pbch_sched_flag;
/*LSB -> MSB : msg1 || msg2 || msg3 || msg4*/
......@@ -62,19 +61,7 @@ typedef struct {
uint16_t sr_frame;
uint16_t sr_slot;
uint16_t srs_frame;
uint16_t srs_slot;
uint16_t dl_recv_bytes_high16;
uint16_t dl_recv_bytes_low16;
uint16_t ul_recv_bytes_high16;
uint16_t ul_recv_bytes_low16;
uint16_t dl_mcs;
uint16_t ul_mcs;
uint16_t dl_bler;
uint16_t ul_bler;
int16_t pucch_snr;
int16_t pusch_snr;
int16_t rsrp;
uint16_t srs_slot;
uint16_t vrb_map_ssb_socket[RB_TOTAL_MAP_SOCKET];
uint16_t vrb_map_sib1_socket[RB_TOTAL_MAP_SOCKET];
......@@ -94,7 +81,26 @@ typedef struct {
}sim_socket_t;
typedef struct{
uint16_t data_len;
uint16_t message;
uint16_t dl_recv_bytes_high16;
uint16_t dl_recv_bytes_low16;
uint16_t ul_recv_bytes_high16;
uint16_t ul_recv_bytes_low16;
// uint16_t time_diff_high16;
// uint16_t time_diff_low16;
uint16_t dl_mcs;
uint16_t ul_mcs;
uint16_t dl_bler;
uint16_t ul_bler;
int16_t pucch_snr;
int16_t pusch_snr;
int16_t rsrp;
}sim_measurement_t;
extern sim_socket_t sim_socket_manager;
extern sim_measurement_t sim_measurement_manager;
// extern uint16_t vrb_map_socket[MAX_UE_NUMBER_MAP_SOCKET][SLOT_PER_FRAME_MAP_SOCKET][RB_TOTAL_MAP_SOCKET];
......
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