Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
87a61800
Commit
87a61800
authored
Jul 07, 2023
by
111
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add dmrs data
parent
a9c8b1b6
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
968 additions
and
53 deletions
+968
-53
executables/ric-interface-dmrs.c
executables/ric-interface-dmrs.c
+330
-0
executables/ric-interface-srs.c
executables/ric-interface-srs.c
+219
-0
executables/ric-interface.c
executables/ric-interface.c
+149
-38
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+212
-0
openair1/PHY/NR_TRANSPORT/srs_rx.c
openair1/PHY/NR_TRANSPORT/srs_rx.c
+5
-5
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+36
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+7
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+1
-1
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.273PRB.1x4.oxgrf.conf
...NERIC-NR-5GC/CONF/gnb.sa.band78.fr1.273PRB.1x4.oxgrf.conf
+9
-9
No files found.
executables/ric-interface-dmrs.c
0 → 100644
View file @
87a61800
/*
OpenXG RIC socket server
used to send PDSCH/PUSCH DMRS to client
*/
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <linux/tcp.h>
#include <semaphore.h>
#include "PHY/defs_nr_common.h"
#include <assert.h>
#include <termio.h>
#include <pthread.h>
int
scan_keyboard
()
{
int
in
;
struct
termios
new_settings
;
struct
termios
stored_settings
;
tcgetattr
(
0
,
&
stored_settings
);
// 读取原始配置信息
new_settings
=
stored_settings
;
new_settings
.
c_lflag
&=
(
~
ICANON
);
// 屏蔽整行缓存,不需要回车,输入单个字符即可输出
new_settings
.
c_cc
[
VTIME
]
=
0
;
new_settings
.
c_cc
[
VMIN
]
=
1
;
tcsetattr
(
0
,
TCSANOW
,
&
new_settings
);
// 设置新的配置信息
in
=
getchar
();
tcsetattr
(
0
,
TCSANOW
,
&
stored_settings
);
// 恢复原始配置信息
return
in
;
}
sem_t
ric_send_sem
;
//uint8_t ric_test_data[]={0,1,2,3,4,5,6,7,8,9};
uint8_t
*
ric_send_buf
;
uint8_t
*
ta_information
;
int
ric_send_len
;
int
shift
;
int
iSocketFD
=
0
;
//socket句柄
int
new_fd
=
0
;
//建立连接后的句柄
int
res
;
int
round_times
=
0
;
//轮数
//定义两个表示线程的变量(标识符)
pthread_t
myThread1
;
//创建 myThread1 线程
static
int
start
=
0
;
static
int
closesocket
=
0
;
#define RIC_INTERFACE_PORT 7788
#define RIC_INTERFACE_SOCKET_MAX_LEN (104+4*273*12*4*2*4)
//#define RIC_INTERFACE_SOCKET_MAX_LEN 65536
/*
gcc -o ric_s ric-interface.c -DRIC_TEST_SERVER -pthread
*/
#ifdef RIC_TEST_SERVER
void
main
()
#else
void
*
ThreadFun
(
void
*
arg
)
{
while
(
1
)
{
if
(
scan_keyboard
()
==
49
)
{
//closesocket = closesocket + 1;
//closesocket = closesocket % 2;
if
(
round_times
==
0
)
{
int
s
=
2022
;
send
(
new_fd
,
&
s
,
4
,
0
);
close
(
iSocketFD
);
iSocketFD
=
-
1
;
printf
(
"socket关闭!
\n
"
);
LOG_W
(
PHY
,
"socket关闭!socket关闭!
\n
"
);
}
}
}
}
void
*
ric_interface_task
(
void
*
args_p
)
#endif
{
//int iSocketFD = 0; //socket句柄
int
iRecvLen
=
0
;
//接收成功后的返回值
//int new_fd = 0; //建立连接后的句柄
char
buf
[
4096
]
=
{
0
};
//
struct
sockaddr_in
stLocalAddr
=
{
0
};
//本地地址信息结构图,下面有具体的属性赋值
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对方地址信息
socklen_t
socklen
=
0
;
#ifdef RIC_TEST_SERVER
int
gnb_flag
=
0
;
ric_send_buf
=
malloc
(
RIC_INTERFACE_SOCKET_MAX_LEN
);
ric_send_buf
[
0
]
=
0x1E
;
ric_send_buf
[
10
]
=
0x20
;
ric_send_len
=
RIC_INTERFACE_SOCKET_MAX_LEN
;
#else
int
gnb_flag
=
*
(
int
*
)
args_p
;
#endif
iSocketFD
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
//建立socket
if
(
0
>
iSocketFD
)
{
perror
(
"创建socket失败!
\n
"
);
return
;
}
stLocalAddr
.
sin_family
=
AF_INET
;
/*该属性表示接收本机或其他机器传输*/
stLocalAddr
.
sin_port
=
htons
(
RIC_INTERFACE_PORT
+
gnb_flag
);
/*端口号*/
stLocalAddr
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
);
/*IP,括号内容表示本机IP*/
//绑定地址结构体和socket
if
(
0
>
bind
(
iSocketFD
,
(
void
*
)
&
stLocalAddr
,
sizeof
(
stLocalAddr
)))
{
printf
(
"绑定失败!gnb_flag %d
\n
"
,
gnb_flag
);
perror
(
"绑定失败!"
);
return
;
}
while
(
closesocket
==
0
)
{
//开启监听 ,第二个参数是最大监听数
if
(
0
>
listen
(
iSocketFD
,
1
))
{
perror
(
"监听失败!
\n
"
);
return
;
}
//assert(0);
printf
(
"iSocketFD: %d
\n
"
,
iSocketFD
);
//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小
new_fd
=
accept
(
iSocketFD
,
(
void
*
)
&
stRemoteAddr
,
&
socklen
);
if
(
0
>
new_fd
)
{
perror
(
"接收失败!
\n
"
);
return
;
}
else
{
printf
(
"接收成功!
\n
"
);
}
printf
(
"new_fd: %d
\n
"
,
new_fd
);
res
=
pthread_create
(
&
myThread1
,
NULL
,
ThreadFun
,
NULL
);
if
(
res
!=
0
)
{
printf
(
"线程创建失败"
);
return
0
;
}
start
=
1
;
//是否传数据
//assert(0);
// iRecvLen = recv(new_fd, buf, sizeof(buf), 0);
// if(0 >= iRecvLen) //对端关闭连接 返回0
// {
// printf("接收失败或者对端关闭连接!\n");
// }else{
// printf("buf: %s\n", buf);
// }
int
send_len1
;
int
send_len2
;
int
send_len3
;
int
len2
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrs_Origion
);
int
len1
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
);
//FILE * output_fd = NULL;
//output_fd =fopen("/tmp/ul_dmrs_params_new.am","w");
while
(
closesocket
==
0
)
{
// printf ("wait for ric_send_sem \n");
#ifdef RIC_TEST_SERVER
usleep
(
10000
);
#else
sem_wait
(
&
ric_send_sem
);
#endif
struct
tcp_info
info
;
int
len
=
sizeof
(
info
);
getsockopt
(
new_fd
,
IPPROTO_TCP
,
TCP_INFO
,
&
info
,
(
socklen_t
*
)
&
len
);
if
((
info
.
tcpi_state
==
1
))
{
// if(output_fd==NULL)
// {
// printf("Error opening\n");
// }
// else
// {
// fwrite(ric_send_buf, sizeof(int32_t), 26, output_fd);
// //printf("writing\n");
// }
send_len1
=
send
(
new_fd
,
ric_send_buf
,
ric_send_len
-
12
-
(
ric_send_len
-
12
-
len1
)
/
2
,
0
);
//printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len-12-(ric_send_len-len1-12)/2, send_len1);
send_len2
=
send
(
new_fd
,
ric_send_buf
+
len2
,
(
ric_send_len
-
len1
-
12
)
/
2
,
0
);
//pos*4*2
//printf ("send data %p, size %d to client. %d OK \n", ric_send_buf,(ric_send_len-len1-12)/2 , send_len2);
send_len3
=
send
(
new_fd
,
ta_information
,
12
,
0
);
//printf ("send data %p, size %d to client. %d OK \n", ta_information, ric_send_len, send_len3);
round_times
=
round_times
+
1
;
}
else
{
break
;
}
// getsockopt(new_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
// if((info.tcpi_state==1))
// {
// send_len2 = send(new_fd, ric_send_buf + OFFSETOF(NR_DMRS_CAPS_t, dmrs_Origion), ric_send_len-OFFSETOF(NR_DMRS_CAPS_t, dmrsData), 0);
// printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len, send_len2);
// }
// else
// {
// break;
// }
// getsockopt(new_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
// if((info.tcpi_state==1))
// {
// send_len2 = send(new_fd, ric_send_buf + OFFSETOF(NR_DMRS_CAPS_t, dmrs_Origion), ric_send_len-OFFSETOF(NR_DMRS_CAPS_t, dmrsData), 0);
// printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len, send_len2);
// }
// else
// {
// break;
// }
}
}
close
(
iSocketFD
);
iSocketFD
=
-
1
;
closesocket
=
1
;
printf
(
"socket关闭!
\n
"
);
LOG_E
(
PHY
,
"socket关闭!socket关闭!
\n
"
);
}
#ifdef RIC_TEST_CLIENT
/*
gcc -o ric_c ric-interface.c -DRIC_TEST_CLIENT -pthread
*/
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define PORT 7788 //目标地址端口号 7788 -- ue 7789 -- NB
#define ADDR "127.0.0.1" //目标地址IP
void
main
()
{
int
iSocketFD
=
0
;
//socket句柄
unsigned
int
iRemoteAddr
=
0
;
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对端,即目标地址信息
socklen_t
socklen
=
0
;
unsigned
char
buf
[
RIC_INTERFACE_SOCKET_MAX_LEN
]
=
{
0
};
//存储接收到的数据
int
*
pdata
=
(
int
*
)
buf
;
//unsigned char buf_debug[RIC_INTERFACE_SOCKET_MAX_LEN] = {0}; //存储接收到的数据
iSocketFD
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
//建立socket
if
(
0
>
iSocketFD
)
{
printf
(
"创建socket失败!
\n
"
);
return
;
}
stRemoteAddr
.
sin_family
=
AF_INET
;
stRemoteAddr
.
sin_port
=
htons
(
PORT
);
inet_pton
(
AF_INET
,
ADDR
,
&
iRemoteAddr
);
stRemoteAddr
.
sin_addr
.
s_addr
=
iRemoteAddr
;
//连接方法: 传入句柄,目标地址,和大小
while
(
1
)
{
if
(
0
>
connect
(
iSocketFD
,
(
void
*
)
&
stRemoteAddr
,
sizeof
(
stRemoteAddr
)))
{
printf
(
"连接失败!
\n
"
);
//printf("connect failed:%d",errno);//失败时也可打印errno
}
else
{
printf
(
"连接成功!
\n
"
);
int
recv_len
;
while
(
1
)
{
recv_len
=
recv
(
iSocketFD
,
buf
,
RIC_INTERFACE_SOCKET_MAX_LEN
,
0
);
if
(
0
==
recv_len
)
{
printf
(
"socket ERROR !!!
\n\n\n
"
);
return
;
}
printf
(
"Received(%d):, msg len %d, cnt %d
\n
"
,
recv_len
,
pdata
[
0
],
pdata
[
1
]);
// for(int i=0;i<20;i++)
// {
// printf("%02x ",buf[i]);
// }
// printf("\n\n\n");
// if (pdata[1] == 50)
// {
// memcpy(buf_debug, buf, recv_len);
// FILE *fd;
// if ((fd = fopen("pdsch_dmts_data.dat","w")) != NULL) {
// fwrite((void *)buf_debug,
// sizeof(int32_t),
// recv_len/4,
// fd);
// printf("Dummping Frame ...len %d bye bye \n", recv_len);
// fclose(fd);
// }
}
}
}
sleep
(
2
);
}
close
(
iSocketFD
);
//关闭socket
}
#endif
executables/ric-interface-srs.c
0 → 100644
View file @
87a61800
/*
OpenXG RIC socket server
used to send PDSCH/PUSCH DMRS to client
*/
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <linux/tcp.h>
#include <semaphore.h>
sem_t
ric_send_sem
;
//uint8_t ric_test_data[]={0,1,2,3,4,5,6,7,8,9};
uint8_t
*
ric_send_buf
;
int
ric_send_len
;
#define RIC_INTERFACE_PORT 7788
#define RIC_INTERFACE_SOCKET_MAX_LEN (100+4*273*12)*4 //52516
//#define RIC_INTERFACE_SOCKET_MAX_LEN 65536
/*
gcc -o ric_s ric-interface.c -DRIC_TEST_SERVER -pthread
*/
#ifdef RIC_TEST_SERVER
void
main
()
#else
void
*
ric_interface_task
(
void
*
args_p
)
#endif
{
int
iSocketFD
=
0
;
//socket句柄
int
iRecvLen
=
0
;
//接收成功后的返回值
int
new_fd
=
0
;
//建立连接后的句柄
char
buf
[
4096
]
=
{
0
};
//
struct
sockaddr_in
stLocalAddr
=
{
0
};
//本地地址信息结构图,下面有具体的属性赋值
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对方地址信息
socklen_t
socklen
=
0
;
#ifdef RIC_TEST_SERVER
int
gnb_flag
=
0
;
ric_send_buf
=
malloc
(
RIC_INTERFACE_SOCKET_MAX_LEN
);
ric_send_buf
[
0
]
=
0x1E
;
ric_send_buf
[
10
]
=
0x20
;
ric_send_len
=
RIC_INTERFACE_SOCKET_MAX_LEN
;
#else
int
gnb_flag
=
*
(
int
*
)
args_p
;
#endif
iSocketFD
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
//建立socket
if
(
0
>
iSocketFD
)
{
perror
(
"创建socket失败!
\n
"
);
return
;
}
stLocalAddr
.
sin_family
=
AF_INET
;
/*该属性表示接收本机或其他机器传输*/
stLocalAddr
.
sin_port
=
htons
(
RIC_INTERFACE_PORT
+
gnb_flag
);
/*端口号*/
stLocalAddr
.
sin_addr
.
s_addr
=
htonl
(
INADDR_ANY
);
/*IP,括号内容表示本机IP*/
//绑定地址结构体和socket
if
(
0
>
bind
(
iSocketFD
,
(
void
*
)
&
stLocalAddr
,
sizeof
(
stLocalAddr
)))
{
printf
(
"绑定失败!gnb_flag %d
\n
"
,
gnb_flag
);
perror
(
"绑定失败!"
);
return
;
}
while
(
1
)
{
//开启监听 ,第二个参数是最大监听数
if
(
0
>
listen
(
iSocketFD
,
1
))
{
perror
(
"监听失败!
\n
"
);
return
;
}
printf
(
"iSocketFD: %d
\n
"
,
iSocketFD
);
//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小
new_fd
=
accept
(
iSocketFD
,
(
void
*
)
&
stRemoteAddr
,
&
socklen
);
if
(
0
>
new_fd
)
{
perror
(
"接收失败!
\n
"
);
return
;
}
else
{
printf
(
"接收成功!
\n
"
);
}
printf
(
"new_fd: %d
\n
"
,
new_fd
);
// iRecvLen = recv(new_fd, buf, sizeof(buf), 0);
// if(0 >= iRecvLen) //对端关闭连接 返回0
// {
// printf("接收失败或者对端关闭连接!\n");
// }else{
// printf("buf: %s\n", buf);
// }
int
send_len
;
while
(
1
)
{
// printf ("wait for ric_send_sem \n");
#ifdef RIC_TEST_SERVER
usleep
(
10000
);
#else
sem_wait
(
&
ric_send_sem
);
#endif
struct
tcp_info
info
;
int
len
=
sizeof
(
info
);
getsockopt
(
new_fd
,
IPPROTO_TCP
,
TCP_INFO
,
&
info
,
(
socklen_t
*
)
&
len
);
if
((
info
.
tcpi_state
==
1
))
{
send_len
=
send
(
new_fd
,
ric_send_buf
,
ric_send_len
,
0
);
printf
(
"send data %p, size %d to client. %d OK
\n
"
,
ric_send_buf
,
ric_send_len
,
send_len
);
}
else
break
;
}
}
}
#ifdef RIC_TEST_CLIENT
/*
gcc -o ric_c ric-interface.c -DRIC_TEST_CLIENT -pthread
*/
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define PORT 7789 //目标地址端口号 7788 -- ue 7789 -- NB
#define ADDR "127.0.0.1" //目标地址IP
void
main
()
{
int
iSocketFD
=
0
;
//socket句柄
unsigned
int
iRemoteAddr
=
0
;
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对端,即目标地址信息
socklen_t
socklen
=
0
;
unsigned
char
buf
[
RIC_INTERFACE_SOCKET_MAX_LEN
]
=
{
0
};
//存储接收到的数据
short
*
pdata
=
(
int
*
)
buf
;
static
int
log_first
=
0
;
unsigned
char
buf_debug
[
RIC_INTERFACE_SOCKET_MAX_LEN
]
=
{
0
};
//存储接收到的数据
iSocketFD
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
//建立socket
if
(
0
>
iSocketFD
)
{
printf
(
"创建socket失败!
\n
"
);
return
;
}
stRemoteAddr
.
sin_family
=
AF_INET
;
stRemoteAddr
.
sin_port
=
htons
(
PORT
);
inet_pton
(
AF_INET
,
ADDR
,
&
iRemoteAddr
);
stRemoteAddr
.
sin_addr
.
s_addr
=
iRemoteAddr
;
//连接方法: 传入句柄,目标地址,和大小
while
(
1
)
{
if
(
0
>
connect
(
iSocketFD
,
(
void
*
)
&
stRemoteAddr
,
sizeof
(
stRemoteAddr
)))
{
printf
(
"连接失败!
\n
"
);
//printf("connect failed:%d",errno);//失败时也可打印errno
}
else
{
printf
(
"连接成功!
\n
"
);
int
recv_len
;
while
(
1
)
{
recv_len
=
recv
(
iSocketFD
,
buf
,
RIC_INTERFACE_SOCKET_MAX_LEN
,
0
);
if
(
0
==
recv_len
)
{
printf
(
"socket ERROR !!!
\n\n\n
"
);
return
;
}
else
if
(
recv_len
==
32768
)
{
recv_len
=
recv
(
iSocketFD
,
&
buf
[
recv_len
],
RIC_INTERFACE_SOCKET_MAX_LEN
,
0
);
recv_len
+=
32768
;
}
printf
(
"Received(%d):, msg len %d, cnt %d
\n
"
,
recv_len
,
pdata
[
0
],
pdata
[
1
]);
// for(int i=0;i<20;i++)
// {
// printf("%02x ",buf[i]);
// }
//printf("\n\n\n");
log_first
++
;
if
(
log_first
==
1
)
{
memcpy
(
buf_debug
,
buf
,
recv_len
);
FILE
*
fd
;
if
((
fd
=
fopen
(
"srs_data_4ant.am"
,
"w"
))
!=
NULL
)
{
fwrite
((
void
*
)
buf_debug
,
sizeof
(
int32_t
),
recv_len
/
4
,
fd
);
printf
(
"Dummping Frame ...len %d bye bye
\n
"
,
recv_len
);
fclose
(
fd
);
}
}
}
}
sleep
(
2
);
}
close
(
iSocketFD
);
//关闭socket
}
#endif
\ No newline at end of file
executables/ric-interface.c
View file @
87a61800
...
...
@@ -11,13 +11,49 @@ used to send PDSCH/PUSCH DMRS to client
#include <netinet/in.h>
#include <netinet/ip.h>
#include <linux/tcp.h>
#include <semaphore.h>
#include <semaphore.h>
#include "PHY/defs_nr_common.h"
#include <assert.h>
#include <termio.h>
#include <pthread.h>
int
scan_keyboard
()
{
int
in
;
struct
termios
new_settings
;
struct
termios
stored_settings
;
tcgetattr
(
0
,
&
stored_settings
);
// 读取原始配置信息
new_settings
=
stored_settings
;
new_settings
.
c_lflag
&=
(
~
ICANON
);
// 屏蔽整行缓存,不需要回车,输入单个字符即可输出
new_settings
.
c_cc
[
VTIME
]
=
0
;
new_settings
.
c_cc
[
VMIN
]
=
1
;
tcsetattr
(
0
,
TCSANOW
,
&
new_settings
);
// 设置新的配置信息
in
=
getchar
();
tcsetattr
(
0
,
TCSANOW
,
&
stored_settings
);
// 恢复原始配置信息
return
in
;
}
sem_t
ric_send_sem
;
//uint8_t ric_test_data[]={0,1,2,3,4,5,6,7,8,9};
uint8_t
*
ric_send_buf
;
uint8_t
*
ta_information
;
int
ric_send_len
;
int
shift
;
int
iSocketFD
=
0
;
//socket句柄
int
new_fd
=
0
;
//建立连接后的句柄
int
res
;
int
round_times
=
0
;
//轮数
//定义两个表示线程的变量(标识符)
pthread_t
myThread1
;
//创建 myThread1 线程
static
int
start
=
0
;
static
int
closesocket
=
0
;
#define RIC_INTERFACE_PORT 7788
#define RIC_INTERFACE_SOCKET_MAX_LEN (10
0+4*273*12)*4 //52516
#define RIC_INTERFACE_SOCKET_MAX_LEN (10
4+4*273*12*4*2*4)
//#define RIC_INTERFACE_SOCKET_MAX_LEN 65536
/*
...
...
@@ -27,12 +63,36 @@ gcc -o ric_s ric-interface.c -DRIC_TEST_SERVER -pthread
#ifdef RIC_TEST_SERVER
void
main
()
#else
void
*
ThreadFun
(
void
*
arg
)
{
while
(
1
)
{
if
(
scan_keyboard
()
==
49
)
{
//closesocket = closesocket + 1;
//closesocket = closesocket % 2;
if
(
round_times
==
0
)
{
int
s
=
2022
;
send
(
new_fd
,
&
s
,
4
,
0
);
close
(
iSocketFD
);
iSocketFD
=
-
1
;
printf
(
"socket关闭!
\n
"
);
LOG_W
(
PHY
,
"socket关闭!socket关闭!
\n
"
);
}
}
}
}
void
*
ric_interface_task
(
void
*
args_p
)
#endif
{
int
iSocketFD
=
0
;
//socket句柄
//
int iSocketFD = 0; //socket句柄
int
iRecvLen
=
0
;
//接收成功后的返回值
int
new_fd
=
0
;
//建立连接后的句柄
//
int new_fd = 0; //建立连接后的句柄
char
buf
[
4096
]
=
{
0
};
//
struct
sockaddr_in
stLocalAddr
=
{
0
};
//本地地址信息结构图,下面有具体的属性赋值
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对方地址信息
...
...
@@ -65,7 +125,7 @@ void *ric_interface_task(void *args_p)
return
;
}
while
(
1
)
while
(
closesocket
==
0
)
{
//开启监听 ,第二个参数是最大监听数
...
...
@@ -74,7 +134,7 @@ void *ric_interface_task(void *args_p)
perror
(
"监听失败!
\n
"
);
return
;
}
//assert(0);
printf
(
"iSocketFD: %d
\n
"
,
iSocketFD
);
//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小
new_fd
=
accept
(
iSocketFD
,
(
void
*
)
&
stRemoteAddr
,
&
socklen
);
...
...
@@ -87,7 +147,16 @@ void *ric_interface_task(void *args_p)
}
printf
(
"new_fd: %d
\n
"
,
new_fd
);
printf
(
"new_fd: %d
\n
"
,
new_fd
);
res
=
pthread_create
(
&
myThread1
,
NULL
,
ThreadFun
,
NULL
);
if
(
res
!=
0
)
{
printf
(
"线程创建失败"
);
return
0
;
}
start
=
1
;
//是否传数据
//assert(0);
// iRecvLen = recv(new_fd, buf, sizeof(buf), 0);
// if(0 >= iRecvLen) //对端关闭连接 返回0
// {
...
...
@@ -95,28 +164,77 @@ void *ric_interface_task(void *args_p)
// }else{
// printf("buf: %s\n", buf);
// }
int
send_len
;
while
(
1
)
int
send_len1
;
int
send_len2
;
int
send_len3
;
int
len2
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrs_Origion
);
int
len1
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
);
//FILE * output_fd = NULL;
//output_fd =fopen("/tmp/ul_dmrs_params_new.am","w");
while
(
closesocket
==
0
)
{
// printf ("wait for ric_send_sem \n");
#ifdef RIC_TEST_SERVER
usleep
(
10000
);
#else
sem_wait
(
&
ric_send_sem
);
sem_wait
(
&
ric_send_sem
);
#endif
struct
tcp_info
info
;
int
len
=
sizeof
(
info
);
getsockopt
(
new_fd
,
IPPROTO_TCP
,
TCP_INFO
,
&
info
,
(
socklen_t
*
)
&
len
);
if
((
info
.
tcpi_state
==
1
))
{
send_len
=
send
(
new_fd
,
ric_send_buf
,
ric_send_len
,
0
);
printf
(
"send data %p, size %d to client. %d OK
\n
"
,
ric_send_buf
,
ric_send_len
,
send_len
);
// if(output_fd==NULL)
// {
// printf("Error opening\n");
// }
// else
// {
// fwrite(ric_send_buf, sizeof(int32_t), 26, output_fd);
// //printf("writing\n");
// }
send_len1
=
send
(
new_fd
,
ric_send_buf
,
ric_send_len
-
12
-
(
ric_send_len
-
12
-
len1
)
/
2
,
0
);
//printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len-12-(ric_send_len-len1-12)/2, send_len1);
send_len2
=
send
(
new_fd
,
ric_send_buf
+
len2
,
(
ric_send_len
-
len1
-
12
)
/
2
,
0
);
//pos*4*2
//printf ("send data %p, size %d to client. %d OK \n", ric_send_buf,(ric_send_len-len1-12)/2 , send_len2);
send_len3
=
send
(
new_fd
,
ta_information
,
12
,
0
);
//printf ("send data %p, size %d to client. %d OK \n", ta_information, ric_send_len, send_len3);
round_times
=
round_times
+
1
;
}
else
{
break
;
}
// getsockopt(new_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
// if((info.tcpi_state==1))
// {
// send_len2 = send(new_fd, ric_send_buf + OFFSETOF(NR_DMRS_CAPS_t, dmrs_Origion), ric_send_len-OFFSETOF(NR_DMRS_CAPS_t, dmrsData), 0);
// printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len, send_len2);
// }
// else
// {
// break;
// }
// getsockopt(new_fd, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
// if((info.tcpi_state==1))
// {
// send_len2 = send(new_fd, ric_send_buf + OFFSETOF(NR_DMRS_CAPS_t, dmrs_Origion), ric_send_len-OFFSETOF(NR_DMRS_CAPS_t, dmrsData), 0);
// printf ("send data %p, size %d to client. %d OK \n", ric_send_buf, ric_send_len, send_len2);
// }
// else
// {
// break;
// }
}
}
close
(
iSocketFD
);
iSocketFD
=
-
1
;
closesocket
=
1
;
printf
(
"socket关闭!
\n
"
);
LOG_E
(
PHY
,
"socket关闭!socket关闭!
\n
"
);
}
...
...
@@ -134,7 +252,7 @@ gcc -o ric_c ric-interface.c -DRIC_TEST_CLIENT -pthread
#include <netinet/in.h>
#include <netinet/ip.h>
#define PORT 778
9
//目标地址端口号 7788 -- ue 7789 -- NB
#define PORT 778
8
//目标地址端口号 7788 -- ue 7789 -- NB
#define ADDR "127.0.0.1" //目标地址IP
void
main
()
{
...
...
@@ -144,11 +262,9 @@ void main()
struct
sockaddr_in
stRemoteAddr
=
{
0
};
//对端,即目标地址信息
socklen_t
socklen
=
0
;
unsigned
char
buf
[
RIC_INTERFACE_SOCKET_MAX_LEN
]
=
{
0
};
//存储接收到的数据
shor
t
*
pdata
=
(
int
*
)
buf
;
in
t
*
pdata
=
(
int
*
)
buf
;
static
int
log_first
=
0
;
unsigned
char
buf_debug
[
RIC_INTERFACE_SOCKET_MAX_LEN
]
=
{
0
};
//存储接收到的数据
//unsigned char buf_debug[RIC_INTERFACE_SOCKET_MAX_LEN] = {0}; //存储接收到的数据
iSocketFD
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
//建立socket
...
...
@@ -181,31 +297,26 @@ void main()
printf
(
"socket ERROR !!!
\n\n\n
"
);
return
;
}
else
if
(
recv_len
==
32768
)
{
recv_len
=
recv
(
iSocketFD
,
&
buf
[
recv_len
],
RIC_INTERFACE_SOCKET_MAX_LEN
,
0
);
recv_len
+=
32768
;
}
printf
(
"Received(%d):, msg len %d, cnt %d
\n
"
,
recv_len
,
pdata
[
0
],
pdata
[
1
]);
// for(int i=0;i<20;i++)
// {
// printf("%02x ",buf[i]);
// }
//printf("\n\n\n");
log_first
++
;
if
(
log_first
==
1
)
{
memcpy
(
buf_debug
,
buf
,
recv_len
);
FILE
*
fd
;
if
((
fd
=
fopen
(
"srs_data_4ant.am
"
,
"w"
))
!=
NULL
)
{
fwrite
((
void
*
)
buf_debug
,
sizeof
(
int32_t
),
recv_len
/
4
,
fd
);
printf
(
"Dummping Frame ...len %d bye bye
\n
"
,
recv_len
);
fclose
(
fd
);
}
//
printf("\n\n\n");
// if (pdata[1] == 50
)
//
{
//
memcpy(buf_debug, buf, recv_len);
//
FILE *fd;
// if ((fd = fopen("pdsch_dmts_data.dat
","w")) != NULL) {
//
fwrite((void *)buf_debug,
//
sizeof(int32_t),
//
recv_len/4,
//
fd);
//
printf("Dummping Frame ...len %d bye bye \n", recv_len);
//
fclose(fd);
//
}
}
}
...
...
@@ -216,4 +327,4 @@ void main()
close
(
iSocketFD
);
//关闭socket
}
#endif
\ No newline at end of file
#endif
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
87a61800
...
...
@@ -15,6 +15,26 @@
#define INVALID_VALUE 255
#define dmrs_caps_max 50
#define dmrs_caps_ue_max 4
#define dmrs_caps_ue_total 200 // dmrs_caps_max * dmrs_caps_ue_max
#define SEND_BY_SOCKET
int
g_dmrs_caps_idx
=
0
;
int
g_dmrs_cnt
=
0
;
int
start
;
#if defined SEND_BY_SOCKET
NR_DMRS_CAPS_t
g_dmrs_caps
[
2
];
extern
uint8_t
*
ric_send_buf
;
extern
int
ric_send_len
;
extern
sem_t
ric_send_sem
;
#else
NR_DMRS_CAPS_t
g_dmrs_caps
[
dmrs_caps_ue_total
];
int
data_total_len
=
0
;
#endif
int8_t
dmrs_cap_flag
=
1
;
int
dmrs_cap_ue_num
=
1
;
extern
int
g_ue_access
;
void
nr_idft
(
int32_t
*
z
,
uint32_t
Msc_PUSCH
)
{
...
...
@@ -1870,6 +1890,63 @@ uint8_t nr_ulsch_zero_forcing_rx_2layers(int **rxdataF_comp,
return
(
0
);
}
unsigned
short
nr_ulsch_extract_rbs_dmrs
(
int
**
rxdataF
,
int
*
rxdataF_ext
,
int
slot
,
unsigned
char
symbol
,
unsigned
short
start_rb
,
unsigned
short
nb_rb_pdsch
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
unsigned
short
k
,
rb
;
unsigned
char
nushift
,
j
,
i
,
aarx
,
aatx
;
int
*
rxF
,
*
rxF_ext
;
int
startK
=
frame_parms
->
first_carrier_offset
+
NR_NB_SC_PER_RB
*
start_rb
;
int
upperNum
=
frame_parms
->
ofdm_symbol_size
-
startK
;
int
lowerNum
=
0
;
int
startK_low
=
0
;
int
slot_offset
=
0
;
slot_offset
=
(
slot
&
0x3
)
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_slot
;
if
(
upperNum
>=
nb_rb_pdsch
*
12
)
{
upperNum
=
nb_rb_pdsch
*
12
;
}
else
if
(
upperNum
<=
0
)
{
lowerNum
=
nb_rb_pdsch
*
12
;
startK_low
=
0
-
upperNum
;
}
else
{
lowerNum
=
nb_rb_pdsch
*
12
-
upperNum
;
startK_low
=
0
;
}
LOG_D
(
PHY
,
"slot %d, symbol %d, slot offset %d, start_rb %d %d, upperNum %d, lowerNum %d, startK %d, startK_low %d
\n
"
,
slot
,
symbol
,
slot_offset
,
start_rb
,
nb_rb_pdsch
,
upperNum
,
lowerNum
,
startK
,
startK_low
);
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
rxF_ext
=
&
rxdataF_ext
[
aarx
*
(
nb_rb_pdsch
*
12
)];
rxF
=
&
rxdataF
[
aarx
][
slot_offset
+
(
startK
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
if
(
upperNum
>
0
)
memcpy
((
void
*
)
rxF_ext
,(
void
*
)
rxF
,
upperNum
*
sizeof
(
*
rxF_ext
));
if
(
lowerNum
>
0
)
{
if
(
upperNum
>
0
)
rxF_ext
+=
upperNum
;
rxF
=
&
rxdataF
[
aarx
][
slot_offset
+
startK_low
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
memcpy
((
void
*
)
rxF_ext
,(
void
*
)
rxF
,
lowerNum
*
sizeof
(
*
rxF_ext
));
}
}
//aarx
return
(
nb_rb_pdsch
);
}
//==============================================================================================
/* Main Function */
...
...
@@ -2141,4 +2218,139 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
}
}
}
// symbol loop
//杜敬祎修改
#if 1
if
((
dmrs_cap_flag
>
0
)
&&
(
g_ue_access
<=
dmrs_cap_ue_num
)
&&
(
g_dmrs_caps_idx
<
g_ue_access
*
dmrs_caps_max
)
)
{
int
pos
=
0
;
int
symbolExtId
=
0
;
int
symb_pos
=
0
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
msgIdx
=
g_dmrs_cnt
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
portMap
=
1
;
// port 0
g_dmrs_caps
[
g_dmrs_caps_idx
].
rnti
=
rel15_ul
->
rnti
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
BWPStart
=
rel15_ul
->
bwp_start
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
start_rb
=
rel15_ul
->
rb_start
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
nb_rb
=
rel15_ul
->
rb_size
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
start_symbol
=
rel15_ul
->
start_symbol_index
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
nb_symbols
=
rel15_ul
->
nr_of_symbols
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
antNum
=
frame_parms
->
nb_antennas_rx
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrsConfigType
=
rel15_ul
->
dmrs_config_type
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
n_dmrs_cdm_groups
=
rel15_ul
->
num_dmrs_cdm_grps_no_data
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
slotId
=
slot
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
frameId
=
frame
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
scid
=
rel15_ul
->
scid
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
nscid
=
rel15_ul
->
ul_dmrs_scrambling_id
;
//gNB->Nid_pusch[rel15_ul->scid];
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrsMap
=
rel15_ul
->
ul_dmrs_symb_pos
;
int
pilot
[
3280
];
//by luhan
int
jj
=
0
;
for
(
uint8_t
symbol
=
rel15_ul
->
start_symbol_index
;
symbol
<
(
rel15_ul
->
start_symbol_index
+
rel15_ul
->
nr_of_symbols
);
symbol
++
)
{
if
(((
rel15_ul
->
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
)
==
1
)
{
nr_ulsch_extract_rbs_dmrs
(
gNB
->
common_vars
.
rxdataF
,
&
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrsData
[
pos
],
slot
,
symbol
,
rel15_ul
->
bwp_start
+
rel15_ul
->
rb_start
,
rel15_ul
->
rb_size
,
frame_parms
);
symbolExtId
++
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrs_pos
[
symb_pos
++
]
=
symbol
;
pos
+=
(
12
*
rel15_ul
->
rb_size
*
frame_parms
->
nb_antennas_rx
);
//by luhan
//dmrs_len的长度保持与 g_dmrs_caps.dmrsData的长度一致;但实际上两者有效数据长度不一样;
/* 举例:假设rb_num = 5, 天线数为2,g_dmrs_caps_dmrsData的长度为12 * 5 *2 = 120(由于
在type=0时,dmrs和数据间隔放置,所有有效dmrs为60个);而此时,dmrs_len= 30,这是由于
只计算了一个天线上的dmrs。
*/
int
dmrs_len
=
(
12
*
rel15_ul
->
rb_size
*
frame_parms
->
nb_antennas_rx
)
;
//nr_pusch_dmrs_rx 该函数是生成dmrs的函数,dmrs由slot、rb位置个数、天线配置等参数影响
nr_pusch_dmrs_rx
(
gNB
,
slot
,
gNB
->
nr_gold_pusch_dmrs
[
rel15_ul
->
scid
][
slot
][
symbol
],
&
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrs_Origion
[
0
]
+
dmrs_len
*
jj
,
1000
,
0
,
rel15_ul
->
rb_size
,
(
rel15_ul
->
bwp_start
+
rel15_ul
->
rb_start
)
*
NR_NB_SC_PER_RB
,
rel15_ul
->
dmrs_config_type
);
//memcpy(&g_dmrs_caps[g_dmrs_caps_idx].dmrs_Origion[0] + dmrs_len * jj, &pilot[0], dmrs_len * 4);
//jj = jj + 1;
// if (save_gen_dmrsnew == NULL){
// save_gen_dmrsnew = fopen("/tmp/save_gen_dmrsnew.hex","w");
// }
// fwrite(&g_dmrs_caps[g_dmrs_caps_idx].dmrs_Origion[0]+ dmrs_len * jj,4, dmrs_len, save_gen_dmrsnew);
// fflush(save_gen_dmrsnew);
jj
=
jj
+
1
;
//将生成的dmrs打印出来
#if 0
printf("current slot is %d, symbol is %d, number of rb is %d, start rb is %d \n", slot, symbol, rel15_ul->rb_size, rel15_ul->rb_start);
for( int xy = 0; xy < dmrs_len;xy ++){
printf(" %d+j*%d ", * (short*)(pilot + xy), *((short*)(pilot + xy)+1));
}
printf("\n --------------------!\n");
#endif
}
}
g_dmrs_caps
[
g_dmrs_caps_idx
].
DmrsNum
=
symbolExtId
;
g_dmrs_caps
[
g_dmrs_caps_idx
].
dmrsDataLen
=
pos
;
//memcpy(&g_dmrs_caps[g_dmrs_caps_idx].dmrsData[0] + pos, &g_dmrs_caps[g_dmrs_caps_idx].dmrs_Origion[0], pos * 4);
#if defined SEND_BY_SOCKET
ric_send_buf
=
&
g_dmrs_caps
[
g_dmrs_caps_idx
];
ric_send_len
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
)
+
pos
*
4
*
2
+
12
;
//长度
g_dmrs_caps
[
g_dmrs_caps_idx
].
dataLen
=
ric_send_len
;
if
(
start
==
1
)
{
sem_post
(
&
ric_send_sem
);
}
// LOG_I(PHY,"sem_post(&ric_send_sem) buf %p, size %d pos %d \n\n\n",ric_send_buf,ric_send_len, pos);
g_dmrs_cnt
++
;
g_dmrs_caps_idx
=
(
g_dmrs_caps_idx
+
1
)
%
2
;
#else
g_dmrs_caps
[
g_dmrs_caps_idx
].
dataLen
=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
)
+
pos
*
4
;
data_total_len
+=
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
)
/
4
+
pos
;
g_dmrs_cnt
++
;
g_dmrs_caps_idx
++
;
if
(
g_dmrs_caps_idx
>=
dmrs_cap_ue_num
*
dmrs_caps_max
)
{
FILE
*
output_fd
=
NULL
;
LOG_I
(
PHY
,
"dmrs_cap_ue_num %d, g_ue_access %d
\n
"
,
dmrs_cap_ue_num
,
g_ue_access
);
output_fd
=
fopen
(
"/tmp/ul_dmrs_params.am"
,
"w"
);
if
(
output_fd
==
NULL
)
{
printf
(
"Error opening
\n
"
);
}
else
{
int
ii
;
for
(
ii
=
0
;
ii
<
g_dmrs_caps_idx
;
ii
++
)
fwrite
(
&
g_dmrs_caps
[
ii
],
sizeof
(
int32_t
),
OFFSETOF
(
NR_DMRS_CAPS_t
,
dmrsData
)
/
4
,
output_fd
);
fclose
(
output_fd
);
}
output_fd
=
NULL
;
output_fd
=
fopen
(
"/tmp/ul_dmrs_data.am"
,
"w"
);
if
(
output_fd
==
NULL
)
{
printf
(
"Error opening
\n
"
);
}
else
{
int
ii
;
for
(
ii
=
0
;
ii
<
g_dmrs_caps_idx
;
ii
++
)
fwrite
(
&
g_dmrs_caps
[
ii
].
dmrsData
[
0
],
sizeof
(
int32_t
),
g_dmrs_caps
[
ii
].
dmrsDataLen
,
output_fd
);
fclose
(
output_fd
);
}
}
#endif
}
#endif
//杜敬祎修改
}
openair1/PHY/NR_TRANSPORT/srs_rx.c
View file @
87a61800
...
...
@@ -45,8 +45,8 @@
//#define SRS_DEBUG
#define SEND_BY_SOCKET
int
g_
dm
rs_caps_idx
=
0
;
int
g_
dm
rs_cnt
=
0
;
int
g_
s
rs_caps_idx
=
0
;
int
g_
s
rs_cnt
=
0
;
nr_srs_cap_t
g_srs_caps
[
2
];
#if defined SEND_BY_SOCKET
...
...
@@ -210,7 +210,7 @@ int nr_cap_srs_signal(PHY_VARS_gNB *gNB,
const
uint16_t
n_symbols
=
(
slot
&
3
)
*
frame_parms
->
symbols_per_slot
;
// number of symbols until this slot
const
uint8_t
l0
=
frame_parms
->
symbols_per_slot
-
1
-
srs_config_pdu
->
time_start_position
;
// starting symbol in this slot
const
uint64_t
symbol_offset
=
(
n_symbols
+
l0
)
*
frame_parms
->
ofdm_symbol_size
;
nr_srs_cap_t
*
ns_srs_cap
=
(
nr_srs_cap_t
*
)
&
g_srs_caps
[
g_
dm
rs_caps_idx
];
nr_srs_cap_t
*
ns_srs_cap
=
(
nr_srs_cap_t
*
)
&
g_srs_caps
[
g_
s
rs_caps_idx
];
ns_srs_cap
->
num_ant_ports
=
srs_config_pdu
->
num_ant_ports
;
ns_srs_cap
->
num_symbols
=
srs_config_pdu
->
num_symbols
;
ns_srs_cap
->
num_repetitions
=
srs_config_pdu
->
num_repetitions
;
...
...
@@ -264,7 +264,7 @@ int nr_cap_srs_signal(PHY_VARS_gNB *gNB,
ric_send_len
=
40
*
2
+
273
*
12
*
ant_num
*
N_symb_SRS
*
4
;
//for test
sem_post
(
&
ric_send_sem
);
//LOG_I(PHY,"sem_post(&ric_send_sem) buf %p, size %d pos %d \n\n\n",ric_send_buf,ric_send_len, pos);
g_
dm
rs_cnt
++
;
g_
s
rs_cnt
++
;
#else
FILE
*
output_fd
=
NULL
;
...
...
@@ -280,6 +280,6 @@ int nr_cap_srs_signal(PHY_VARS_gNB *gNB,
}
#endif
g_
dmrs_caps_idx
=
(
g_dm
rs_caps_idx
+
1
)
%
2
;
g_
srs_caps_idx
=
(
g_s
rs_caps_idx
+
1
)
%
2
;
}
\ No newline at end of file
openair1/PHY/defs_nr_common.h
View file @
87a61800
...
...
@@ -109,6 +109,8 @@
#define NR_NB_NSCID 2
#define OFFSETOF(struct_name,member_name) (int)&(((struct_name*)0)->member_name)
extern
const
uint8_t
nr_rv_round_map
[
4
];
static
inline
...
...
@@ -400,6 +402,40 @@ typedef struct {
}
nr_srs_cap_t
;
typedef
struct
{
int32_t
dataLen
;
int32_t
msgIdx
;
int32_t
frameId
;
int32_t
slotId
;
int32_t
antNum
;
int32_t
portId
;
int32_t
rnti
;
int32_t
rnti_type
;
int32_t
scid
;
int32_t
nscid
;
int32_t
BWPStart
;
int32_t
start_rb
;
int32_t
nb_rb
;
/// Number of Symbols
int32_t
nb_symbols
;
int32_t
start_symbol
;
/// DMRS symbol positions
int32_t
DmrsNum
;
/// DMRS Configuration Type
int32_t
dmrsConfigType
;
// Number of DMRS CDM groups with no data
int32_t
n_dmrs_cdm_groups
;
int32_t
dmrsMap
;
int32_t
portMap
;
int32_t
dmrsDataLen
;
int32_t
pad
;
int32_t
dmrs_pos
[
4
];
int32_t
dmrsData
[
4
*
273
*
12
*
4
];
int32_t
dmrs_Origion
[
4
*
273
*
12
*
4
];
/// Starting Symbol number
}
NR_DMRS_CAPS_t
;
// rel16 prs k_prime table as per ts138.211 sec.7.4.1.7.2
#define K_PRIME_TABLE_ROW_SIZE 4
#define K_PRIME_TABLE_COL_SIZE 12
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
87a61800
...
...
@@ -54,6 +54,10 @@ uint8_t DELTA[4]= {2,3,4,6};
#define MAX_NUMBER_OF_SSB 64
float
ssb_per_rach_occasion
[
8
]
=
{
0
.
125
,
0
.
25
,
0
.
5
,
1
,
2
,
4
,
8
};
//杜敬祎修改
int
g_ue_access
=
0
;
//杜敬祎修改
int16_t
ssb_index_from_prach
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
slotP
,
...
...
@@ -1865,6 +1869,9 @@ void nr_check_Msg4_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_fram
sched_ctrl
->
rrc_processing_timer
=
(
delay_ms
<<
ra
->
DL_BWP
.
scs
);
LOG_I
(
NR_MAC
,
"(%d.%d) Activating RRC processing timer for UE %04x with %d ms
\n
"
,
frame
,
slot
,
UE
->
rnti
,
delay_ms
);
//杜敬祎修改
g_ue_access
++
;
//杜敬祎修改
}
else
{
LOG_I
(
NR_MAC
,
"(ue rnti 0x%04x) RA Procedure failed at Msg4!
\n
"
,
ra
->
rnti
);
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
87a61800
...
...
@@ -1554,7 +1554,7 @@ void pf_ul(module_id_t module_id,
gNB_MAC_INST
*
nrmac
=
RC
.
nrmac
[
module_id
];
NR_ServingCellConfigCommon_t
*
scc
=
nrmac
->
common_channels
[
CC_id
].
ServingCellConfigCommon
;
const
int
min_rb
=
5
;
const
int
min_rb
=
90
;
// UEs that could be scheduled
UEsched_t
UE_sched
[
MAX_MOBILES_PER_GNB
]
=
{
0
};
int
remainUEs
=
max_num_ue
;
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.273PRB.1x4.oxgrf.conf
View file @
87a61800
...
...
@@ -49,10 +49,10 @@ gNBs =
# downlinkConfigCommon
#frequencyInfoDL
# this is 3300.24 + 134*12*30e3 = 3348.48 MHz (5G NR GSCN: 7741)
absoluteFrequencySSB
=
623232
;
#652608;
absoluteFrequencySSB
=
623232
;
#6
23232; #6
52608;
dl_frequencyBand
=
78
;
# this is 3300.24 MHz
dl_absoluteFrequencyPointA
=
620016
;
#651280;
dl_absoluteFrequencyPointA
=
620016
;
#6
20016; #6
51280;
#scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
...
...
@@ -95,7 +95,7 @@ gNBs =
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
12
;
preambleReceivedTargetPower
= -
9
0
;
preambleReceivedTargetPower
= -
8
0
;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
#powerRampingStep
...
...
@@ -125,14 +125,14 @@ gNBs =
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
9
0
;
p0_NominalWithGrant
=-
8
0
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
7
0
;
p0_nominal
= -
8
0
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
...
...
@@ -238,8 +238,8 @@ MACRLCs = (
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
pusch_TargetSNRx10
=
25
0
;
pucch_TargetSNRx10
=
30
0
;
pusch_TargetSNRx10
=
30
0
;
pucch_TargetSNRx10
=
25
0
;
pusch_FailureThres
=
1000
;
ulsch_max_frame_inactivity
=
0
;
}
...
...
@@ -259,12 +259,12 @@ RUs = (
local_rf
=
"yes"
nb_tx
=
1
;
nb_rx
=
4
;
att_tx
=
8
5
;
att_tx
=
8
9
;
att_rx
=
0
;
bands
= [
78
];
num_tp_cores
=
8
;
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
1
5
;
max_rxgain
=
5
5
;
eNB_instances
= [
0
];
##beamforming 1x2 matrix: 1 layer x 2 antennas
#bf_weights = [0x00007fff, 0x0000];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment