Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
trx-ecpri
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
nexedi
trx-ecpri
Commits
9aebee07
Commit
9aebee07
authored
Feb 26, 2025
by
Joanne Hugé
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iq_file_trx
parent
ae8dae1e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
43 additions
and
37 deletions
+43
-37
trx_ecpri.c
trx_ecpri.c
+43
-37
No files found.
trx_ecpri.c
View file @
9aebee07
...
...
@@ -176,6 +176,7 @@ typedef struct {
int
sample_rate
;
int
rx_drop_pcm
;
int
align_rx
;
int
iq_file_trx
;
int
disable_rx
;
uint8_t
*
rx_buf
;
ring_buffer_t
*
trxr_rbuf
[
MAX_CHANNELS
];
...
...
@@ -266,6 +267,11 @@ static struct sockaddr_ll connect_sk_addr;
static
struct
sockaddr_ll
recv_connect_sk_addr
;
static
ecpri_iq_packet
standard_iq_packet
;
#define MAX_IQ_FILE_SIZE 1228800
static
int
iq_file_size
;
static
uint8_t
iq_file_bytes
[
MAX_IQ_FILE_SIZE
];
static
int
iq_file_index
=
0
;
static
void
print_debug
(
FILE
*
f
,
int
print_header
)
{
char
buffer
[
200
];
if
(
print_header
)
{
...
...
@@ -1103,6 +1109,7 @@ int start(TRXEcpriState * s) {
uint8_t
dst_mac
[
6
];
uint8_t
src_mac
[
6
];
int
if_index
;
FILE
*
read_ptr
;
log_info
(
"TRX_ECPRI"
,
"raw socket setup"
);
...
...
@@ -1253,6 +1260,22 @@ int start(TRXEcpriState * s) {
standard_iq_packet
.
oran_header
[
5
]
=
0x00
;
standard_iq_packet
.
oran_header
[
6
]
=
0x00
;
if
(
s
->
iq_file_trx
)
{
read_ptr
=
fopen
(
"/root/ecpri-iq-file.bin"
,
"rb"
);
fseek
(
read_ptr
,
0L
,
SEEK_END
);
iq_file_size
=
ftell
(
read_ptr
);
rewind
(
read_ptr
);
if
(
iq_file_size
%
(
32
*
sizeof
(
float
)))
{
log_info
(
"INIT_WRITE_DATA"
,
"IQ file size not a multiple of 32 (%d)"
,
iq_file_size
);
exit
(
EXIT_FAILURE
);
}
log_info
(
"INIT_WRITE_DATA"
,
"IQ file size: %d"
,
iq_file_size
);
fread
(
iq_file_bytes
,
iq_file_size
,
1
,
read_ptr
);
}
start_threads
(
s
);
return
0
;
}
...
...
@@ -1280,6 +1303,7 @@ static void trx_ecpri_write(TRXState *s1, trx_timestamp_t timestamp, const void
int64_t
count_left
,
nc
,
offset
;
float
**
_samples
=
(
float
**
)
__samples
;
int64_t
a
;
int
nc_sample
,
nc1
,
nc2
;
TRXEcpriState
*
s
=
s1
->
opaque
;
#ifdef DISABLE_WRITE
...
...
@@ -1328,50 +1352,30 @@ static void trx_ecpri_write(TRXState *s1, trx_timestamp_t timestamp, const void
count_left
=
count
;
while
((
nc
=
rbuf_contiguous_copy
(
NULL
,
&
trxw_rbuf
[
i
],
count_left
*
2
)))
{
if
(
__samples
)
{
memcpy
((
uint8_t
*
)
trx_write_float_tab
,
((
uint8_t
*
)
_samples
[
i
])
+
offset
,
nc
*
2
);
if
(
s
->
iq_file_trx
&&
(
write_counter
.
counter
+
(
count
-
count_left
)
-
nc
/
2
)
>=
(
1104
*
7
*
2
*
10
*
256
*
2
))
{
nc_sample
=
((
1104
*
7
*
2
*
10
*
256
)
-
(
write_counter
.
counter
+
(
count
-
count_left
)))
*
2
;
nc1
=
nc
-
nc_sample
;
nc2
=
0
;
memcpy
((
uint8_t
*
)
trx_write_float_tab
,
((
uint8_t
*
)
_samples
[
i
])
+
offset
,
nc_sample
*
2
);
if
((
iq_file_size
-
iq_file_index
)
<
(
nc1
*
2
))
{
nc2
=
nc1
-
(
iq_file_size
-
iq_file_index
);
nc1
=
iq_file_size
-
iq_file_index
;
}
memcpy
((
uint8_t
*
)
trx_write_float_tab
,
iq_file_bytes
+
iq_file_index
,
nc1
*
2
);
iq_file_index
=
(
iq_file_index
+
nc1
*
2
)
%
iq_file_size
;
memcpy
((
uint8_t
*
)
trx_write_float_tab
,
iq_file_bytes
+
iq_file_index
,
nc2
*
2
);
iq_file_index
=
(
iq_file_index
+
nc2
*
2
)
%
iq_file_size
;
}
else
{
memcpy
((
uint8_t
*
)
trx_write_float_tab
,
((
uint8_t
*
)
_samples
[
i
])
+
offset
,
nc
*
2
);
}
float_to_int16
(
trx_write_int_tab
,
trx_write_float_tab
,
nc
/
2
,
32767
);
for
(
int
k
=
0
;
k
<
nc
/
2
;
k
++
)
trx_write_int_tab
[
k
]
=
htons
(
trx_write_int_tab
[
k
]);
memcpy
(
rbuf_write
(
&
trxw_rbuf
[
i
]),
(
uint8_t
*
)
trx_write_int_tab
,
nc
);
//int mismatch = 0;
//for(int k = 0; k < nc / 4; k++) {
// if(trx_write_int_tab[k] != 0xffff8f62) {
// printf("k = %d (%d)\n", k, nc / 2);
// printf("%x \n", trx_write_int_tab[k]);
// printf("%f \n", trx_write_float_tab[k]);
// printf("%f , offset = %d, k = %d, count = %d, nc = %d\n", ((float*)(((uint8_t *) _samples[i]) + offset))[k], offset, k, count, nc);
// mismatch++;
// break;
// }
//}
//if(mismatch) {
// //printf("\n%d/%d mismatch\n", mismatch, payload_size/2);
// //for(int k = 0; k < nc / 2; k++) {
// // printf("%x%x ", trx_write_int_tab[2 * k], trx_write_int_tab[2 * k+1]);
// //}
// //printf("\n");
//}
}
else
log_exit
(
"TRX_ECPRI_WRITE"
,
"samples empty during FDD mode"
);
//int mismatch = 0;
//for(int k = 0; k < nc / 2; k++) {
// if(trx_write_int_tab[k] != 0xffff8f62) {
// printf("k = %d (%d)\n", k, nc / 2);
// printf("%x \n", trx_write_int_tab[k]);
// printf("%f \n", trx_write_float_tab[k]);
// printf("%f , offset = %d, k = %d, count = %d, nc = %d\n", ((float*)(((uint8_t *) _samples[i]) + offset))[k], offset, k, count, nc);
// mismatch++;
// break;
// }
//}
//if(mismatch) {
// //printf("\n%d/%d mismatch\n", mismatch, payload_size/2);
// //for(int k = 0; k < nc / 2; k++) {
// // printf("%x%x ", trx_write_int_tab[2 * k], trx_write_int_tab[2 * k+1]);
// //}
// //printf("\n");
//}
rbuf_increment_write
(
&
trxw_rbuf
[
i
],
nc
);
count_left
-=
nc
/
2
;
offset
+=
nc
*
2
;
...
...
@@ -1740,6 +1744,8 @@ int trx_driver_init(TRXState *s1)
s
->
rx_drop_pcm
=
(
int
)
val
;
trx_get_param_double
(
s1
,
&
val
,
"align_rx"
);
s
->
align_rx
=
(
int
)
val
;
trx_get_param_double
(
s1
,
&
val
,
"iq_file_trx"
);
s
->
iq_file_trx
=
(
int
)
val
;
trx_get_param_double
(
s1
,
&
val
,
"disable_rx"
);
s
->
disable_rx
=
(
int
)
val
;
...
...
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