Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
OAI-RAN-5G-sheduler_MaxTBS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MAQ5G-PFC
OAI-RAN-5G-sheduler_MaxTBS
Commits
ec96a43d
Commit
ec96a43d
authored
9 years ago
by
Raymond Knopp
Browse files
Options
Downloads
Patches
Plain Diff
integration, compiles now.
parent
9d4f3834
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
+34
-34
34 additions, 34 deletions
targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
with
34 additions
and
34 deletions
targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
+
34
−
34
View file @
ec96a43d
...
...
@@ -68,8 +68,8 @@ int num_devices=0;
/*These items configure the underlying asynch stream used by the the sync interface.
*/
#define BUFFERSIZE
6553
6
#define BUFFERSCOUNT
16 // must be a power of
2
#define BUFFERSIZE
409
6
#define BUFFERSCOUNT
3
2
typedef
struct
{
...
...
@@ -82,10 +82,11 @@ typedef struct
LMS7002M
lmsControl
;
LMS_StreamBoard
*
lmsStream
;
uint8_t
buffers_rx
[
BUFFERSIZE
*
BUFFERSCOUNT
];
char
buffers_rx
[
BUFFERSIZE
*
BUFFERSCOUNT
];
int
handles
[
BUFFERSCOUNT
];
int
las
t_handle
;
int
curren
t_handle
;
int
samples_left_buffer
;
int
last_transfer
;
double
sample_rate
;
// time offset between transmiter timestamp and receiver timestamp;
...
...
@@ -108,7 +109,7 @@ typedef struct
typedef
struct
{
uint8_t
reserved
[
8
];
uint64_t
counter
;
uint8_t
data
[
4080
];
char
data
[
4080
];
}
StreamPacket_t
;
sodera_t
sodera_state
;
...
...
@@ -149,7 +150,6 @@ static int trx_sodera_start(openair0_device *device)
{
sodera_t
*
s
=
(
sodera_t
*
)
device
->
priv
;
const
int
buffersCountMask
=
buffersCount
-
1
;
// init recv and send streaming
...
...
@@ -157,34 +157,35 @@ static int trx_sodera_start(openair0_device *device)
s
->
tx_count
=
0
;
s
->
rx_timestamp
=
0
;
s
->
current_handle
=
0
;
s
->
last_transfer
=
0
;
// switch off RX
uint16_t
regVal
=
SPI_read
(
s
->
Port
,
0x0005
);
SPI_write
(
s
->
p
ort
,
0x0005
,
regVal
&
~
0x6
);
uint16_t
regVal
=
SPI_read
(
&
s
->
Port
,
0x0005
);
SPI_write
(
&
s
->
P
ort
,
0x0005
,
regVal
&
~
0x6
);
if
(
s
->
channelscount
==
2
)
{
SPI_write
(
s
->
Port
,
0x0001
,
0x0003
);
SPI_write
(
s
->
Port
,
0x0007
,
0x000A
);
SPI_write
(
&
s
->
Port
,
0x0001
,
0x0003
);
SPI_write
(
&
s
->
Port
,
0x0007
,
0x000A
);
}
else
{
SPI_write
(
s
->
Port
,
0x0001
,
0x0001
);
SPI_write
(
s
->
Port
,
0x0007
,
0x0008
);
SPI_write
(
&
s
->
Port
,
0x0001
,
0x0001
);
SPI_write
(
&
s
->
Port
,
0x0007
,
0x0008
);
}
// USB FIFO reset
LMScomms
::
GenericPacket
ctrPkt
;
ctrPkt
.
cmd
=
CMD_US
R
_FIFO_RST
;
ctrPkt
.
cmd
=
CMD_US
B
_FIFO_RST
;
ctrPkt
.
outBuffer
.
push_back
(
0x01
);
s
->
Port
.
TransferPacket
(
ctrPkt
);
ctrPkt
.
outBuffer
[
0
]
=
0x00
;
s
->
Port
.
TransferPacket
(
ctrPkt
);
uint16_t
regVal
=
SPI_read
(
s
->
Port
,
0x0005
);
regVal
=
SPI_read
(
&
s
->
Port
,
0x0005
);
// provide timestamp, set streamTXEN, set TX/RX enable
SPI_write
(
s
->
p
ort
,
0x0005
,(
regVal
&
~
0x20
)
|
0x6
);
SPI_write
(
&
s
->
P
ort
,
0x0005
,(
regVal
&
~
0x20
)
|
0x6
);
for
(
int
i
=
0
;
i
<
BUFFERSCOUNT
;
i
++
)
s
->
handles
[
i
]
=
s
->
Port
.
BeginDataReading
(
&
s
->
buffers
[
i
*
BUFFERSIZE
],
BUFFERSIZE
);
s
->
handles
[
i
]
=
s
->
Port
.
BeginDataReading
(
&
s
->
buffers
_rx
[
i
*
BUFFERSIZE
],
BUFFERSIZE
);
return
0
;
}
...
...
@@ -195,8 +196,8 @@ static void trx_sodera_end(openair0_device *device)
// stop TX/RX if they were active
regVal
=
SPI_read
(
s
->
Port
,
0x0005
);
SPI_write
(
s
->
Port
,
0x0005
,
regVal
&
~
0x6
);
uint16_t
regVal
=
SPI_read
(
&
s
->
Port
,
0x0005
);
SPI_write
(
&
s
->
Port
,
0x0005
,
regVal
&
~
0x6
);
}
...
...
@@ -204,11 +205,6 @@ static int trx_sodera_write(openair0_device *device, openair0_timestamp timestam
{
sodera_t
*
s
=
(
sodera_t
*
)
device
->
priv
;
if
(
cc
>
1
)
{
// s->tx_stream->send(buff_ptrs, nsamps, s->tx_md);
}
else
// s->tx_stream->send(buff[0], nsamps, s->tx_md);
return
0
;
}
...
...
@@ -220,18 +216,23 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
int
nsamps2
;
// aligned to upper 32 or 16 byte boundary
StreamPacket_t
*
p
;
int16_t
sampleI
,
sampleQ
;
uint8_t
*
pktStart
;
char
*
pktStart
;
int
offset
=
0
;
int
num_p
;
int
ind
=
0
;
int
buffsize
;
int
spp
;
// this assumes that each request is of size 4096 bytes (spp = 4080/4/channelscount)
spp
=
sizeof
(
p
->
data
)
>>
2
;
// spp = size of payload in samples
spp
/=
s
->
channelscount
;
// first get rid of remaining samples
if
(
s
->
samples_left_buffer
>
0
)
{
buffsize
=
min
(
s
->
samples_left_buffer
,
nsamps
);
pktStart
=
&
s
->
buffers_rx
[(
s
->
las
t_handle
-
1
)
*
BUFFERSIZE
]
.
data
;
pktStart
-
=
(
spp
-
s
->
samples_left_buffer
);
pktStart
=
((
StreamPacket_t
*
)
&
s
->
buffers_rx
[(
s
->
curren
t_handle
-
1
)
*
BUFFERSIZE
]
)
->
data
;
pktStart
+
=
(
spp
-
s
->
samples_left_buffer
);
const
int
stepSize
=
s
->
channelscount
*
3
;
for
(
int
b
=
0
;
b
<
buffsize
<<
2
;
b
+=
stepSize
)
{
...
...
@@ -267,16 +268,14 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
// This is for the left-over part => READ from USB
spp
=
sizeof
(
p
->
data
)
>>
2
;
// spp = size of payload in samples
spp
/=
s
->
channelscount
;
num_p
=
nsamps
/
spp
;
if
((
nsamps
%
spp
)
>
0
)
num_p
++
;
s
->
samples_left_buffer
=
(
num_p
*
spp
)
-
nsamps
;
for
(
int
i
=
0
;
i
<
num_p
;
i
++
)
s
->
handles
[
i
]
=
s
->
Port
.
BeginDataReading
(
&
buffers_rx
[
i
*
BUFFERSIZE
],
BUFFERSIZE
);
s
->
las
t_handle
=
num_p
;
s
->
handles
[
i
]
=
s
->
Port
.
BeginDataReading
(
&
s
->
buffers_rx
[
i
*
BUFFERSIZE
],
BUFFERSIZE
);
s
->
curren
t_handle
=
num_p
;
const
int
stepSize
=
s
->
channelscount
*
3
;
...
...
@@ -287,7 +286,8 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
printf
(
"[recv] Error: request %d samples (%d/%d) WaitForReading timed out
\n
"
,
nsamps
,
i
,
num_p
);
return
(
samples_received
);
}
if
((
ret
=
Port
.
FinishDataReading
(
&
s
->
buffers_rx
[
i
*
BUFFERSIZE
],
BUFFERSIZE
,
s
->
handles
[
i
]))
!=
BUFFERSIZE
)
{
long
bytesToRead
=
BUFFERSIZE
;
if
(
s
->
Port
.
FinishDataReading
(
&
s
->
buffers_rx
[
i
*
BUFFERSIZE
],
bytesToRead
,
s
->
handles
[
i
])
!=
BUFFERSIZE
)
{
printf
(
"[recv] Error: request %d samples (%d/%d) WaitForReading timed out
\n
"
,
nsamps
,
i
,
num_p
);
return
(
samples_received
);
}
...
...
@@ -305,8 +305,8 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
}
}
}
pktStart
=
&
p
->
data
;
for
(
uint16_t
b
=
0
;
b
<
sizeof
(
p
->
data
);
n
+=
stepSize
)
{
pktStart
=
p
->
data
;
for
(
uint16_t
b
=
0
;
b
<
sizeof
(
p
->
data
);
b
+=
stepSize
)
{
for
(
int
ch
=
0
;
ch
<
s
->
channelscount
;
ch
++
)
{
// I sample
sampleI
=
(
pktStart
[
b
+
1
+
3
*
ch
]
&
0x0F
)
<<
8
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment