提交 8276971b 编写于 作者: C calin

working on parser

上级 74d1f182
......@@ -38,12 +38,12 @@ public:
typedef ProtocolIeField ProtocolIeSingleContainer;
typedef SequenceOf<ProtocolIeField, SizeConstraint<CONSTRAINED, 0, maxProtocolIEs>> ProtocolIeContainer;
typedef SequenceOf<ProtocolIeField, CONSTRAINED, 0, maxProtocolIEs> ProtocolIeContainer;
OpenType *findValue(ProtocolIeContainer *container, unsigned short id);
typedef ProtocolIeField ProtocolExtField;
typedef SequenceOf<ProtocolExtField, SizeConstraint<CONSTRAINED, 0, maxProtocolIEs>> ProtocolExtContainer;
typedef SequenceOf<ProtocolExtField, CONSTRAINED, 0, maxProtocolIEs> ProtocolExtContainer;
#endif /* S1APCONTAINER_H_ */
......@@ -16,158 +16,4 @@
//
#include "RRCConstantDefinitions.h"
const IntegerBase maxCNdomains (4);
......@@ -20,314 +20,310 @@
#include "ASNTypes.h"
#define hiPDSCHidentities 64
const IntegerBase hiPDSCHidentities(64);
#define hiPUSCHidentities 64
const IntegerBase hiPUSCHidentities(64);
#define hiRM 256
const IntegerBase hiRM(256);
#define maxAC 16
const IntegerBase maxAC(16);
#define maxAdditionalMeas 4
const IntegerBase maxAdditionalMeas(4);
#define maxASC 8
const IntegerBase maxASC(8);
#define maxASCmap 7
const IntegerBase maxASCmap(7);
#define maxASCpersist 6
const IntegerBase maxASCpersist(6);
#define maxCCTrCH 8
const IntegerBase maxCCTrCH(8);
#define maxCellMeas 32
const IntegerBase maxCellMeas(32);
#define maxCellMeasOnSecULFreq 32
const IntegerBase maxCellMeasOnSecULFreq(32);
#define maxCellMeas_1 31
const IntegerBase maxCellMeas_1(31);
#define maxCellMeasOnSecULFreq_1 31
const IntegerBase maxCellMeasOnSecULFreq_1(31);
#define maxCNdomains 4
extern const IntegerBase maxCNdomains;
#define maxCommonHRNTI 4
const IntegerBase maxCommonHRNTI(4);
#define maxCommonQueueID 2
const IntegerBase maxCommonQueueID(2);
#define maxCPCHsets 16
const IntegerBase maxCPCHsets(16);
#define maxDedicatedCSGFreq 4
const IntegerBase maxDedicatedCSGFreq(4);
#define maxDPCH_DLchan 8
const IntegerBase maxDPCH_DLchan(8);
#define maxDPDCH_UL 6
const IntegerBase maxDPDCH_UL(6);
#define maxDRACclasses 8
const IntegerBase maxDRACclasses(8);
#define maxE_DCHMACdFlow 8
const IntegerBase maxE_DCHMACdFlow(8);
#define maxE_DCHMACdFlow_1 7
const IntegerBase maxE_DCHMACdFlow_1(7);
#define maxEUTRACellPerFreq 16
const IntegerBase maxEUTRACellPerFreq(16);
#define maxEUTRATargetFreqs 8
const IntegerBase maxEUTRATargetFreqs(8);
#define maxEDCHRL 4
const IntegerBase maxEDCHRL(4);
#define maxEDCHRL_1 3
const IntegerBase maxEDCHRL_1(3);
#define maxEDCHs 32
const IntegerBase maxEDCHs(32);
#define maxEDCHTxPattern_TDD128 4
const IntegerBase maxEDCHTxPattern_TDD128(4);
#define maxEDCHTxPattern_TDD128_1 3
const IntegerBase maxEDCHTxPattern_TDD128_1(3);
#define maxERNTIgroup 32
const IntegerBase maxERNTIgroup(32);
#define maxERNTIperGroup 2
const IntegerBase maxERNTIperGroup(2);
#define maxERUCCH 256
const IntegerBase maxERUCCH(256);
#define maxFACHPCH 8
const IntegerBase maxFACHPCH(8);
#define maxFreq 8
const IntegerBase maxFreq(8);
#define maxFreqBandsEUTRA 16
const IntegerBase maxFreqBandsEUTRA(16);
#define maxFreqBandsFDD 8
const IntegerBase maxFreqBandsFDD(8);
#define maxFreqBandsFDD_ext 15
const IntegerBase maxFreqBandsFDD_ext(15);
#define maxFreqBandsTDD 4
const IntegerBase maxFreqBandsTDD(4);
#define maxFreqBandsTDD_ext 16
const IntegerBase maxFreqBandsTDD_ext(16);
#define maxFreqBandsGSM 16
const IntegerBase maxFreqBandsGSM(16);
#define maxGANSS 8
const IntegerBase maxGANSS(8);
#define maxGANSS_1 7
const IntegerBase maxGANSS_1(7);
#define maxGANSSSat 64
const IntegerBase maxGANSSSat(64);
#define maxGANSSSat_1 63
const IntegerBase maxGANSSSat_1(63);
#define maxGERAN_SI 8
const IntegerBase maxGERAN_SI(8);
#define maxGSMTargetCells 32
const IntegerBase maxGSMTargetCells(32);
#define maxHNBNameSize 48
const IntegerBase maxHNBNameSize(48);
#define maxHProcesses 8
const IntegerBase maxHProcesses(8);
#define maxHS_SCCHLessTrBlk 4
const IntegerBase maxHS_SCCHLessTrBlk(4);
#define maxHSDSCHTBIndex 64
const IntegerBase maxHSDSCHTBIndex(64);
#define maxHSDSCHTBIndex_tdd384 512
const IntegerBase maxHSDSCHTBIndex_tdd384(512);
#define maxHSSCCHs 4
const IntegerBase maxHSSCCHs(4);
#define maxHSSCCHs_1 3
const IntegerBase maxHSSCCHs_1(3);
#define maxHSSICH_TDD128 4
const IntegerBase maxHSSICH_TDD128(4);
#define maxHSSICH_TDD128_1 3
const IntegerBase maxHSSICH_TDD128_1(3);
#define maxInterSysMessages 4
const IntegerBase maxInterSysMessages(4);
#define maxLoCHperRLC 2
const IntegerBase maxLoCHperRLC(2);
#define maxMAC_d_PDUsizes 8
const IntegerBase maxMAC_d_PDUsizes(8);
#define maxMBMS_CommonCCTrCh 32
const IntegerBase maxMBMS_CommonCCTrCh(32);
#define maxMBMS_CommonPhyCh 32
const IntegerBase maxMBMS_CommonPhyCh(32);
#define maxMBMS_CommonRB 32
const IntegerBase maxMBMS_CommonRB(32);
#define maxMBMS_CommonTrCh 32
const IntegerBase maxMBMS_CommonTrCh(32);
#define maxMBMS_Freq 4
const IntegerBase maxMBMS_Freq(4);
#define maxMBMS_L1CP 4
const IntegerBase maxMBMS_L1CP(4);
#define maxMBMSservCount 8
const IntegerBase maxMBMSservCount(8);
#define maxMBMSservModif 32
const IntegerBase maxMBMSservModif(32);
#define maxMBMSservSched 16
const IntegerBase maxMBMSservSched(16);
#define maxMBMSservSelect 8
const IntegerBase maxMBMSservSelect(8);
#define maxMBMSservUnmodif 64
const IntegerBase maxMBMSservUnmodif(64);
#define maxMBMSTransmis 4
const IntegerBase maxMBMSTransmis(4);
#define maxMBSFNClusters 16
const IntegerBase maxMBSFNClusters(16);
#define maxMeasCSGRange 4
const IntegerBase maxMeasCSGRange(4);
#define maxMeasEvent 8
const IntegerBase maxMeasEvent(8);
#define maxMeasEventOnSecULFreq 8
const IntegerBase maxMeasEventOnSecULFreq(8);
#define maxMeasIntervals 3
const IntegerBase maxMeasIntervals(3);
#define maxMeasOccasionPattern 5
const IntegerBase maxMeasOccasionPattern(5);
#define maxMeasOccasionPattern_1 4
const IntegerBase maxMeasOccasionPattern_1(4);
#define maxMeasParEvent 2
const IntegerBase maxMeasParEvent(2);
#define maxNumCDMA2000Freqs 8
const IntegerBase maxNumCDMA2000Freqs(8);
#define maxNumE_AGCH 4
const IntegerBase maxNumE_AGCH(4);
#define maxNumE_HICH 4
const IntegerBase maxNumE_HICH(4);
#define maxNumEUTRAFreqs 8
const IntegerBase maxNumEUTRAFreqs(8);
#define maxNumGSMCellGroup 16
const IntegerBase maxNumGSMCellGroup(16);
#define maxNumGSMFreqRanges 32
const IntegerBase maxNumGSMFreqRanges(32);
#define maxNumFDDFreqs 8
const IntegerBase maxNumFDDFreqs(8);
#define maxNumTDDFreqs 8
const IntegerBase maxNumTDDFreqs(8);
#define maxNoOfMeas 16
const IntegerBase maxNoOfMeas(16);
#define maxOtherRAT 15
const IntegerBase maxOtherRAT(15);
#define maxOtherRAT_16 16
const IntegerBase maxOtherRAT_16(16);
#define maxPage1 8
const IntegerBase maxPage1(8);
#define maxPCPCH_APsig 16
const IntegerBase maxPCPCH_APsig(16);
#define maxPCPCH_APsubCh 12
const IntegerBase maxPCPCH_APsubCh(12);
#define maxPCPCH_CDsig 16
const IntegerBase maxPCPCH_CDsig(16);
#define maxPCPCH_CDsubCh 12
const IntegerBase maxPCPCH_CDsubCh(12);
#define maxPCPCH_SF 7
const IntegerBase maxPCPCH_SF(7);
#define maxPCPCHs 64
const IntegerBase maxPCPCHs(64);
#define maxPDCPAlgoType 8
const IntegerBase maxPDCPAlgoType(8);
#define maxPDSCH 8
const IntegerBase maxPDSCH(8);
#define maxPDSCH_TFCIgroups 256
const IntegerBase maxPDSCH_TFCIgroups(256);
#define maxPRACH 16
const IntegerBase maxPRACH(16);
#define maxPRACH_FPACH 8
const IntegerBase maxPRACH_FPACH(8);
#define maxPredefConfig 16
const IntegerBase maxPredefConfig(16);
#define maxPrio 8
const IntegerBase maxPrio(8);
#define maxPrio_1 7
const IntegerBase maxPrio_1(7);
#define maxPUSCH 8
const IntegerBase maxPUSCH(8);
#define maxQueueIDs 8
const IntegerBase maxQueueIDs(8);
#define maxRABsetup 16
const IntegerBase maxRABsetup(16);
#define maxRAT 16
const IntegerBase maxRAT(16);
#define maxRB 32
const IntegerBase maxRB(32);
#define maxRBallRABs 27
const IntegerBase maxRBallRABs(27);
#define maxRBMuxOptions 8
const IntegerBase maxRBMuxOptions(8);
#define maxRBperRAB 8
const IntegerBase maxRBperRAB(8);
#define maxRBperTrCh 16
const IntegerBase maxRBperTrCh(16);
#define maxReportedEUTRACellPerFreq 4
const IntegerBase maxReportedEUTRACellPerFreq(4);
#define maxReportedEUTRAFreqs 4
const IntegerBase maxReportedEUTRAFreqs(4);
#define maxReportedGSMCells 8
const IntegerBase maxReportedGSMCells(8);
#define maxRL 8
const IntegerBase maxRL(8);
#define maxRL_1 7
const IntegerBase maxRL_1(7);
#define maxRLCPDUsizePerLogChan 32
const IntegerBase maxRLCPDUsizePerLogChan(32);
#define maxRFC3095_CID 16384
const IntegerBase maxRFC3095_CID(16384);
#define maxROHC_PacketSizes_r4 16
const IntegerBase maxROHC_PacketSizes_r4(16);
#define maxROHC_Profile_r4 8
const IntegerBase maxROHC_Profile_r4(8);
#define maxRxPatternForHSDSCH_TDD128 4
const IntegerBase maxRxPatternForHSDSCH_TDD128(4);
#define maxRxPatternForHSDSCH_TDD128_1 3
const IntegerBase maxRxPatternForHSDSCH_TDD128_1(3);
#define maxSat 16
const IntegerBase maxSat(16);
#define maxSatClockModels 4
const IntegerBase maxSatClockModels(4);
#define maxSCCPCH 16
const IntegerBase maxSCCPCH(16);
#define maxSgnType 8
const IntegerBase maxSgnType(8);
#define maxSIB 32
const IntegerBase maxSIB(32);
#define maxSIB_FACH 8
const IntegerBase maxSIB_FACH(8);
#define maxSIBperMsg 16
const IntegerBase maxSIBperMsg(16);
#define maxSIrequest 4
const IntegerBase maxSIrequest(4);
#define maxSRBsetup 8
const IntegerBase maxSRBsetup(8);
#define maxSystemCapability 16
const IntegerBase maxSystemCapability(16);
#define maxTDD128Carrier 6
const IntegerBase maxTDD128Carrier(6);
#define maxTbsForHSDSCH_TDD128 4
const IntegerBase maxTbsForHSDSCH_TDD128(4);
#define maxTbsForHSDSCH_TDD128_1 3
const IntegerBase maxTbsForHSDSCH_TDD128_1(3);
#define maxTF 32
const IntegerBase maxTF(32);
#define maxTF_CPCH 16
const IntegerBase maxTF_CPCH(16);
#define maxTFC 1024
const IntegerBase maxTFC(1024);
#define maxTFCsub 1024
const IntegerBase maxTFCsub(1024);
#define maxTFCI_2_Combs 512
const IntegerBase maxTFCI_2_Combs(512);
#define maxTGPS 6
const IntegerBase maxTGPS(6);
#define maxTrCH 32
const IntegerBase maxTrCH(32);
#define maxTrCHpreconf 32
const IntegerBase maxTrCHpreconf(32);
#define maxTS 14
const IntegerBase maxTS(14);
#define maxTS_1 13
const IntegerBase maxTS_1(13);
#define maxTS_2 12
const IntegerBase maxTS_2(12);
#define maxTS_LCR 6
const IntegerBase maxTS_LCR(6);
#define maxTS_LCR_1 5
const IntegerBase maxTS_LCR_1(5);
const IntegerBase maxURA(8);
const IntegerBase maxURNTI_Group(8);
//typedef SequenceOf<CNDomainInformationFull, CONSTRAINED, 1, maxCNdomains> CNDomainInformationListFull;
#define maxURA 8
#define maxURNTI_Group 8
#endif /* RRCCONSTANTDEFINITIONS_H_ */
//
// Copyright (C) 2012 Calin Cerchez
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see http://www.gnu.org/licenses/.
//
#include "RRCInternodeDefinitions.h"
const void *SecurityCapability::itemsInfo[2] = {
&SecurityCapabilityCipheringAlgorithmCap::theInfo,
&SecurityCapabilityIntegrityProtectionAlgorithmCap::theInfo,
};
bool SecurityCapability::itemsPres[2] = {
1,
1,
};
const SecurityCapability::Info SecurityCapability::theInfo = {
SecurityCapability::create,
SEQUENCE,
0,
false,
itemsInfo,
itemsPres,
2, 0, 0
};
//
// Copyright (C) 2012 Calin Cerchez
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see http://www.gnu.org/licenses/.
//
#ifndef RRCINTERNODEDEFINITIONS_H_
#define RRCINTERNODEDEFINITIONS_H_
#include "ASNTypes.h"
#include "RRCPDUDefinitions.h"
#include "RRCInformationElements.h"
#include "RRCConstantDefinitions.h"
typedef BitString<CONSTRAINED, 16, 16> SecurityCapabilityCipheringAlgorithmCap;
typedef BitString<CONSTRAINED, 16, 16> SecurityCapabilityIntegrityProtectionAlgorithmCap;
class SecurityCapability : Sequence {
private:
static const void *itemsInfo[2];
static bool itemsPres[2];
public:
static const Info theInfo;
SecurityCapability(): Sequence(&theInfo) {}
};
......@@ -184,19 +184,56 @@ FROM InformationElements
FROM Constant-definitions;
AllowedTFI-List ::= SEQUENCE (SIZE (1..maxTF)) OF
INTEGER (0..31)
SecurityCapability ::= SEQUENCE {
cipheringAlgorithmCap BIT STRING {
-- For each bit value "0" means false/ not supported
spare15(0),
spare14(1),
spare13(2),
spare12(3),
spare11(4),
spare10(5),
spare9(6),
spare8(7),
spare7(8),
spare6(9),
spare5(10),
spare4(11),
spare3(12),
uea2(13),
uea1(14),
uea0(15)
} (SIZE (16)),
integrityProtectionAlgorithmCap BIT STRING {
-- For each bit value "0" means false/ not supported
spare15(0),
spare14(1),
spare13(2),
spare12(3),
spare11(4),
spare10(5),
spare9(6),
spare8(7),
spare7(8),
spare6(9),
spare5(10),
spare4(11),
spare3(12),
uia2(13),
uia1(14),
spare0(15)
} (SIZE (16))
}
GSM-MessageList ::= SEQUENCE (SIZE (1..maxInterSysMessages)) OF
BIT STRING (SIZE (1..512))
EUTRA-RadioAccessCapability ::= SEQUENCE {
ue-EUTRA-Capability OCTET STRING
SIR-TFCS ::= TFCS-IdentityPlain
ReqDataBitAssistance ::= SEQUENCE {
ganssSignalID DGANSS-Sig-Id-Req,
ganssDataBitInterval INTEGER(0..15),
ganssSatelliteInfo SEQUENCE (SIZE (1..maxGANSSSat)) OF INTEGER(0..63) OPTIONAL
}
MBSFN-TDM-Info-List ::= SEQUENCE (SIZE (1..maxMBMSservUnmodif)) OF
MBSFN-TDM-Info
SIR-TFCS-List ::= SEQUENCE (SIZE (1..maxCCTrCH)) OF
SIR-TFCS
}
END
......@@ -98,23 +98,6 @@ public:
virtual int64_t compare(const AbstractType& other) const = 0;
};
struct EmptyConstraint {
enum {
type = UNCONSTRAINED,
lowerBound = 0,
upperBound = UINT_MAX
};
};
template <char type_, int64_t lowerBound_, int64_t upperBound_>
struct SizeConstraint {
enum {
type = type_,
lowerBound = lowerBound_,
upperBound = upperBound_
};
};
/*
* Base class for all constrained ASN.1 types.
*/
......@@ -619,7 +602,7 @@ public:
bool encode(PerEncoder& encoder) const;
};
template <class T, class Constraint>
template <class T, ConstraintType type, int64_t lowerBound, int64_t upperBound>
class SequenceOf : public SequenceOfBase {
public:
static const Info theInfo;
......@@ -637,14 +620,14 @@ public:
int64_t size() const { return items.size(); }
};
template <class T, class Constraint>
const typename SequenceOf<T, Constraint>::Info SequenceOf<T, Constraint>::theInfo = {
template <class T, ConstraintType type, int64_t lowerBound, int64_t upperBound>
const typename SequenceOf<T, type, lowerBound, upperBound>::Info SequenceOf<T, type, lowerBound, upperBound>::theInfo = {
SequenceOfBase::create,
SEQUENCEOF,
0,
Constraint::type,
Constraint::lowerBound,
Constraint::upperBound,
type,
lowerBound,
upperBound,
&T::theInfo
};
......
......@@ -27,15 +27,27 @@ comment = '--'
comma = ','
colon = ':'
tripledash = '...'
typeslist = ['Integer',
types = ['Integer',
'IntegerBase',
'BitString',
'BitStringBase',
'OctetString',
'OctetStringBase',
'Enumerated',
'EnumeratedBase',
'Sequence',
'SequenceOf',
'Choice',
'Null',
'Boolean']
constrainttypes = ['Integer',
'IntegerBase',
'BitString',
'BitStringBase',
'OctetString',
'OctetStringBase',
'Enumerated',
'EnumeratedBase']
module = "RRC"
outfilename = ''
includes = list()
......@@ -158,7 +170,7 @@ def parsetype(asnobj, string):
else:
asnobj.type = type.replace("-", "")
if string.index(type) < string.index(assign):
if assign in string and string.index(type) < string.index(assign):
asnobj.constrainttype = "CONSTANT"
def findfilename(string):
......@@ -219,15 +231,21 @@ def parsestring(string):
parsesize(asnobj, words[1])
break
elif string[i] == openbracket:
words = words[1].split(openbracket, 1)
tmpstring = words[1].strip()
while len(tmpstring) > 0:
if tmpstring[len(tmpstring) - 1] == closedbracket:
if asnobj.type in constrainttypes:
words = words[1].split(closedbracket, 1)
words = words[1].split(openparantheses, 1)
parsesize(asnobj, words[1])
break
else:
words = words[1].split(openbracket, 1)
tmpstring = words[1].strip()
while len(tmpstring) > 0:
if tmpstring[len(tmpstring) - 1] == closedbracket:
tmpstring = tmpstring[:-1]
break
tmpstring = tmpstring[:-1]
break
tmpstring = tmpstring[:-1]
parsebracket(asnobj, tmpstring, 0)
break
parsebracket(asnobj, tmpstring, 0)
break
else:
asnobj.constrainttype = "UNCONSTRAINED"
......@@ -265,7 +283,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile):
retval = 0
for i in range(0, len(asnobj.objs)):
obj = asnobj.objs[i]
if obj.type in typeslist:
if obj.type in types:
writeobject(obj, hdrfile, srcfile)
else:
found = 0
......@@ -280,7 +298,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile):
return retval
def writeobject(asnobj, hdrfile, srcfile):
if asnobj.written == 0:
if asnobj.written == 0 and asnobj.name != '':
if asnobj.parent != None:
asnobj.name = asnobj.parent.name + asnobj.name
......@@ -291,10 +309,12 @@ def writeobject(asnobj, hdrfile, srcfile):
asnobj.type = asnobj.name
# Constraint types
if asnobj.constrainttype == "CONSTANT":
hdrfile.write("const " + asnobj.type + "Base " + asnobj.name + "(" + str(asnobj.value) + ");\n")
else:
if asnobj.type == "Integer" or asnobj.type == "BitString" or asnobj.type == "OctetString":
if asnobj.type in constrainttypes:
if asnobj.constrainttype == "CONSTANT":
hdrfile.write("#define " + asnobj.name + " " + str(asnobj.value) + "\n")
if asnobj.constrainttype == "UNCONSTRAINED":
hdrfile.write("typedef " + asnobj.type + " " + asnobj.name + ";\n")
else:
hdrfile.write("typedef " + asnobj.type + "<" + asnobj.constrainttype)
if asnobj.lowerlimit != '':
hdrfile.write(", " + asnobj.lowerlimit)
......@@ -310,7 +330,7 @@ def writeobject(asnobj, hdrfile, srcfile):
hdrfile.write("enum " + asnobj.name + "Values {\n")
for j in range(0, len(asnobj.objs)):
childobj = asnobj.objs[j]
hdrfile.write("\t" + childobj.name + " = " + str(j) + ",\n")
hdrfile.write("\t" + childobj.name + "_" + asnobj.name + " = " + str(j) + ",\n")
hdrfile.write("};\n")
hdrfile.write("typedef Enumerated<" + asnobj.constrainttype + ", " + str(len(asnobj.objs) - 1) + "> " + asnobj.name + ";\n")
......@@ -335,7 +355,7 @@ def writeobject(asnobj, hdrfile, srcfile):
obj = asnobj.objs[j]
srcfile.write("\t&" + obj.type + "::theInfo,\n")
srcfile.write("};\n")
srcfile.write("const void *" + asnobj.name + "::itemsPres[" + str(len(asnobj.objs)) + "] = {\n")
srcfile.write("bool " + asnobj.name + "::itemsPres[" + str(len(asnobj.objs)) + "] = {\n")
for j in range(0, len(asnobj.objs)):
obj = asnobj.objs[j]
if obj.opt == 0:
......@@ -356,6 +376,7 @@ def writeobject(asnobj, hdrfile, srcfile):
"\titemsPres,\n"
"\t" + str(len(asnobj.objs)) + ", " + str(optnr) + ", " + str(extnr) + "\n" +
"};\n")
srcfile.write("\n")
# Sequence Of
......@@ -394,9 +415,18 @@ def writeobject(asnobj, hdrfile, srcfile):
srcfile.write("\tchoicesInfo,\n" +
"\t" + str(len(asnobj.objs) - 1) + "\n" +
"};\n")
srcfile.write("\n")
if asnobj.type not in types:
obj = ASNObject()
obj.type = asnobj.type
asnobj.objs.append(obj)
if checkandhandledeps(asnobj, hdrfile, srcfile) != 0:
return
hdrfile.write("typedef " + asnobj.type + " " + asnobj.name + ";\n")
hdrfile.write("\n")
srcfile.write("\n")
asnobj.written = 1
def writeheader(file):
......@@ -427,7 +457,7 @@ def main():
#directory = "/root/Desktop/omnetpp-4.2.2/samples/4Gsim/src/linklayer/lte/rrc/message/"
directory = "F:\\omnetpp-4.2.2\\samples\\4Gsim\\src\\linklayer\\lte\\rrc\\message\\"
filename = "Constant-definitions"
filename = "test"
file = open(directory + filename + ".asn", "r")
lines = file.readlines()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册