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
spbro
OpenXG-RAN
Commits
dc531588
Commit
dc531588
authored
Aug 09, 2022
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
addressing review comments
parent
5cfa5ad6
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
62 deletions
+55
-62
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+15
-17
openair2/RRC/NR/MESSAGES/asn1_msg.h
openair2/RRC/NR/MESSAGES/asn1_msg.h
+0
-9
openair2/RRC/NR/nr_rrc_config.h
openair2/RRC/NR/nr_rrc_config.h
+8
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+32
-36
No files found.
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
dc531588
...
...
@@ -1252,12 +1252,11 @@ void fill_initial_SpCellConfig(int uid,
NR_CSI_SSB_ResourceSet_t
*
ssbresset0
=
calloc
(
1
,
sizeof
(
*
ssbresset0
));
ssbresset0
->
csi_SSB_ResourceSetId
=
0
;
NR_SSB_Index_t
*
ssbresset
[
64
];
for
(
int
i
=
0
;
i
<
64
;
i
++
)
{
if
((
bitmap
>>
(
63
-
i
))
&
0x01
)
{
ssbresset
[
i
]
=
calloc
(
1
,
sizeof
(
*
ssbresset
[
i
]))
;
*
ssbresset
[
i
]
=
i
;
ASN_SEQUENCE_ADD
(
&
ssbresset0
->
csi_SSB_ResourceList
.
list
,
ssbresset
[
i
]
);
if
((
bitmap
>>
(
63
-
i
))
&
0x01
)
{
NR_SSB_Index_t
*
ssbres
=
NULL
;
asn1cCallocOne
(
ssbres
,
i
)
;
ASN_SEQUENCE_ADD
(
&
ssbresset0
->
csi_SSB_ResourceList
.
list
,
ssbres
);
}
}
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_SSB_ResourceSetToAddModList
->
list
,
ssbresset0
);
...
...
@@ -1359,18 +1358,17 @@ void fill_initial_SpCellConfig(int uid,
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
singlePanelConfig
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
csirep1
->
dummy
=
NULL
;
csirep1
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
...
...
openair2/RRC/NR/MESSAGES/asn1_msg.h
View file @
dc531588
...
...
@@ -56,15 +56,6 @@
*/
int
xer_sprint_NR
(
char
*
string
,
size_t
string_size
,
struct
asn_TYPE_descriptor_s
*
td
,
void
*
sptr
);
#define asn1cCallocOne(VaR, VaLue) \
VaR = calloc(1,sizeof(*VaR)); *VaR=VaLue;
#define asn1cCalloc(VaR, lOcPtr) \
typeof(VaR) lOcPtr = VaR = calloc(1,sizeof(*VaR));
#define asn1cSequenceAdd(VaR, TyPe, lOcPtr) \
TyPe *lOcPtr= calloc(1,sizeof(TyPe)); \
ASN_SEQUENCE_ADD(&VaR,lOcPtr);
uint8_t
do_MIB_NR
(
gNB_RRC_INST
*
rrc
,
uint32_t
frame
);
...
...
openair2/RRC/NR/nr_rrc_config.h
View file @
dc531588
...
...
@@ -33,6 +33,14 @@
#include "nr_rrc_defs.h"
#define asn1cCallocOne(VaR, VaLue) \
VaR = calloc(1,sizeof(*VaR)); *VaR=VaLue;
#define asn1cCalloc(VaR, lOcPtr) \
typeof(VaR) lOcPtr = VaR = calloc(1,sizeof(*VaR));
#define asn1cSequenceAdd(VaR, TyPe, lOcPtr) \
TyPe *lOcPtr= calloc(1,sizeof(TyPe)); \
ASN_SEQUENCE_ADD(&VaR,lOcPtr);
typedef
struct
rlc_bearer_config_s
{
long
LogicalChannelIdentity
[
MAX_NUM_CCs
];
long
servedRadioBearer_present
[
MAX_NUM_CCs
];
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
dc531588
...
...
@@ -597,12 +597,11 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
NR_CSI_SSB_ResourceSet_t
*
ssbresset0
=
calloc
(
1
,
sizeof
(
*
ssbresset0
));
ssbresset0
->
csi_SSB_ResourceSetId
=
0
;
NR_SSB_Index_t
*
ssbresset
[
64
];
for
(
int
i
=
0
;
i
<
64
;
i
++
)
{
if
((
bitmap
>>
(
63
-
i
))
&
0x01
)
{
ssbresset
[
i
]
=
calloc
(
1
,
sizeof
(
*
ssbresset
[
i
]))
;
*
ssbresset
[
i
]
=
i
;
ASN_SEQUENCE_ADD
(
&
ssbresset0
->
csi_SSB_ResourceList
.
list
,
ssbresset
[
i
]
);
if
((
bitmap
>>
(
63
-
i
))
&
0x01
)
{
NR_SSB_Index_t
*
ssbres
=
NULL
;
asn1cCallocOne
(
ssbres
,
i
)
;
ASN_SEQUENCE_ADD
(
&
ssbresset0
->
csi_SSB_ResourceList
.
list
,
ssbres
);
}
}
ASN_SEQUENCE_ADD
(
&
csi_MeasConfig
->
csi_SSB_ResourceSetToAddModList
->
list
,
ssbresset0
);
...
...
@@ -689,46 +688,43 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
singlePanelConfig
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
if
(
dl_antenna_ports
==
2
)
{
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
));
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
size
=
1
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
bits_unused
=
2
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
two
->
twoTX_CodebookSubsetRestriction
.
buf
[
0
]
=
0xfc
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
size
=
1
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
bits_unused
=
0
;
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
singlePanelConfig
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
if
(
dl_antenna_ports
<
16
)
{
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
));
singlePanelConfig
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
;
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
=
calloc
(
1
,
sizeof
(
*
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
));
if
(
dl_antenna_ports
==
4
)
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
;
else
if
(
dl_antenna_ports
==
8
)
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_one_TypeI_SinglePanel_Restriction
;
else
if
(
dl_antenna_ports
==
12
)
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_six_one_TypeI_SinglePanel_Restriction
;
else
//default
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
singlePanelConfig
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
;
/*
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.size=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.bits_unused=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf=malloc(1);
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf[0]=0xc0; //'00000011'B
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->size = 1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->bits_unused=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf=malloc(1);
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf[0]=0xc0;*/
/*
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.size=1;
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.bits_unused=1;
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf=malloc(1);
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf[0]=0xc0; //'00000011'B
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->size = 1;
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->bits_unused=1;
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf=malloc(1);
singlePanelConfig
->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf[0]=0xc0;*/
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
{
//32 antennas are Not implemented yet
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
2
;
...
...
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