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

working on parser

上级 74d1f182
...@@ -38,12 +38,12 @@ public: ...@@ -38,12 +38,12 @@ public:
typedef ProtocolIeField ProtocolIeSingleContainer; 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); OpenType *findValue(ProtocolIeContainer *container, unsigned short id);
typedef ProtocolIeField ProtocolExtField; typedef ProtocolIeField ProtocolExtField;
typedef SequenceOf<ProtocolExtField, SizeConstraint<CONSTRAINED, 0, maxProtocolIEs>> ProtocolExtContainer; typedef SequenceOf<ProtocolExtField, CONSTRAINED, 0, maxProtocolIEs> ProtocolExtContainer;
#endif /* S1APCONTAINER_H_ */ #endif /* S1APCONTAINER_H_ */
...@@ -16,158 +16,4 @@ ...@@ -16,158 +16,4 @@
// //
#include "RRCConstantDefinitions.h" #include "RRCConstantDefinitions.h"
const IntegerBase maxCNdomains (4);
...@@ -20,314 +20,310 @@ ...@@ -20,314 +20,310 @@
#include "ASNTypes.h" #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); #define maxURA 8
const IntegerBase maxURA(8);
const IntegerBase maxURNTI_Group(8);
//typedef SequenceOf<CNDomainInformationFull, CONSTRAINED, 1, maxCNdomains> CNDomainInformationListFull;
#define maxURNTI_Group 8
#endif /* RRCCONSTANTDEFINITIONS_H_ */ #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 ...@@ -184,19 +184,56 @@ FROM InformationElements
FROM Constant-definitions; FROM Constant-definitions;
AllowedTFI-List ::= SEQUENCE (SIZE (1..maxTF)) OF SecurityCapability ::= SEQUENCE {
INTEGER (0..31) 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 EUTRA-RadioAccessCapability ::= SEQUENCE {
BIT STRING (SIZE (1..512)) 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 SIR-TFCS-List ::= SEQUENCE (SIZE (1..maxCCTrCH)) OF
MBSFN-TDM-Info SIR-TFCS
}
END END
...@@ -98,23 +98,6 @@ public: ...@@ -98,23 +98,6 @@ public:
virtual int64_t compare(const AbstractType& other) const = 0; 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. * Base class for all constrained ASN.1 types.
*/ */
...@@ -619,7 +602,7 @@ public: ...@@ -619,7 +602,7 @@ public:
bool encode(PerEncoder& encoder) const; 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 { class SequenceOf : public SequenceOfBase {
public: public:
static const Info theInfo; static const Info theInfo;
...@@ -637,14 +620,14 @@ public: ...@@ -637,14 +620,14 @@ public:
int64_t size() const { return items.size(); } int64_t size() const { return items.size(); }
}; };
template <class T, class Constraint> template <class T, ConstraintType type, int64_t lowerBound, int64_t upperBound>
const typename SequenceOf<T, Constraint>::Info SequenceOf<T, Constraint>::theInfo = { const typename SequenceOf<T, type, lowerBound, upperBound>::Info SequenceOf<T, type, lowerBound, upperBound>::theInfo = {
SequenceOfBase::create, SequenceOfBase::create,
SEQUENCEOF, SEQUENCEOF,
0, 0,
Constraint::type, type,
Constraint::lowerBound, lowerBound,
Constraint::upperBound, upperBound,
&T::theInfo &T::theInfo
}; };
......
...@@ -27,15 +27,27 @@ comment = '--' ...@@ -27,15 +27,27 @@ comment = '--'
comma = ',' comma = ','
colon = ':' colon = ':'
tripledash = '...' tripledash = '...'
typeslist = ['Integer', types = ['Integer',
'IntegerBase',
'BitString', 'BitString',
'BitStringBase',
'OctetString', 'OctetString',
'OctetStringBase',
'Enumerated', 'Enumerated',
'EnumeratedBase',
'Sequence', 'Sequence',
'SequenceOf', 'SequenceOf',
'Choice', 'Choice',
'Null', 'Null',
'Boolean'] 'Boolean']
constrainttypes = ['Integer',
'IntegerBase',
'BitString',
'BitStringBase',
'OctetString',
'OctetStringBase',
'Enumerated',
'EnumeratedBase']
module = "RRC" module = "RRC"
outfilename = '' outfilename = ''
includes = list() includes = list()
...@@ -158,7 +170,7 @@ def parsetype(asnobj, string): ...@@ -158,7 +170,7 @@ def parsetype(asnobj, string):
else: else:
asnobj.type = type.replace("-", "") 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" asnobj.constrainttype = "CONSTANT"
def findfilename(string): def findfilename(string):
...@@ -219,15 +231,21 @@ def parsestring(string): ...@@ -219,15 +231,21 @@ def parsestring(string):
parsesize(asnobj, words[1]) parsesize(asnobj, words[1])
break break
elif string[i] == openbracket: elif string[i] == openbracket:
words = words[1].split(openbracket, 1) if asnobj.type in constrainttypes:
tmpstring = words[1].strip() words = words[1].split(closedbracket, 1)
while len(tmpstring) > 0: words = words[1].split(openparantheses, 1)
if tmpstring[len(tmpstring) - 1] == closedbracket: 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] tmpstring = tmpstring[:-1]
break parsebracket(asnobj, tmpstring, 0)
tmpstring = tmpstring[:-1] break
parsebracket(asnobj, tmpstring, 0)
break
else: else:
asnobj.constrainttype = "UNCONSTRAINED" asnobj.constrainttype = "UNCONSTRAINED"
...@@ -265,7 +283,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile): ...@@ -265,7 +283,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile):
retval = 0 retval = 0
for i in range(0, len(asnobj.objs)): for i in range(0, len(asnobj.objs)):
obj = asnobj.objs[i] obj = asnobj.objs[i]
if obj.type in typeslist: if obj.type in types:
writeobject(obj, hdrfile, srcfile) writeobject(obj, hdrfile, srcfile)
else: else:
found = 0 found = 0
...@@ -280,7 +298,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile): ...@@ -280,7 +298,7 @@ def checkandhandledeps(asnobj, hdrfile, srcfile):
return retval return retval
def writeobject(asnobj, hdrfile, srcfile): def writeobject(asnobj, hdrfile, srcfile):
if asnobj.written == 0: if asnobj.written == 0 and asnobj.name != '':
if asnobj.parent != None: if asnobj.parent != None:
asnobj.name = asnobj.parent.name + asnobj.name asnobj.name = asnobj.parent.name + asnobj.name
...@@ -291,10 +309,12 @@ def writeobject(asnobj, hdrfile, srcfile): ...@@ -291,10 +309,12 @@ def writeobject(asnobj, hdrfile, srcfile):
asnobj.type = asnobj.name asnobj.type = asnobj.name
# Constraint types # Constraint types
if asnobj.constrainttype == "CONSTANT": if asnobj.type in constrainttypes:
hdrfile.write("const " + asnobj.type + "Base " + asnobj.name + "(" + str(asnobj.value) + ");\n") if asnobj.constrainttype == "CONSTANT":
else: hdrfile.write("#define " + asnobj.name + " " + str(asnobj.value) + "\n")
if asnobj.type == "Integer" or asnobj.type == "BitString" or asnobj.type == "OctetString": if asnobj.constrainttype == "UNCONSTRAINED":
hdrfile.write("typedef " + asnobj.type + " " + asnobj.name + ";\n")
else:
hdrfile.write("typedef " + asnobj.type + "<" + asnobj.constrainttype) hdrfile.write("typedef " + asnobj.type + "<" + asnobj.constrainttype)
if asnobj.lowerlimit != '': if asnobj.lowerlimit != '':
hdrfile.write(", " + asnobj.lowerlimit) hdrfile.write(", " + asnobj.lowerlimit)
...@@ -310,7 +330,7 @@ def writeobject(asnobj, hdrfile, srcfile): ...@@ -310,7 +330,7 @@ def writeobject(asnobj, hdrfile, srcfile):
hdrfile.write("enum " + asnobj.name + "Values {\n") hdrfile.write("enum " + asnobj.name + "Values {\n")
for j in range(0, len(asnobj.objs)): for j in range(0, len(asnobj.objs)):
childobj = asnobj.objs[j] 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("};\n")
hdrfile.write("typedef Enumerated<" + asnobj.constrainttype + ", " + str(len(asnobj.objs) - 1) + "> " + asnobj.name + ";\n") hdrfile.write("typedef Enumerated<" + asnobj.constrainttype + ", " + str(len(asnobj.objs) - 1) + "> " + asnobj.name + ";\n")
...@@ -335,7 +355,7 @@ def writeobject(asnobj, hdrfile, srcfile): ...@@ -335,7 +355,7 @@ def writeobject(asnobj, hdrfile, srcfile):
obj = asnobj.objs[j] obj = asnobj.objs[j]
srcfile.write("\t&" + obj.type + "::theInfo,\n") srcfile.write("\t&" + obj.type + "::theInfo,\n")
srcfile.write("};\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)): for j in range(0, len(asnobj.objs)):
obj = asnobj.objs[j] obj = asnobj.objs[j]
if obj.opt == 0: if obj.opt == 0:
...@@ -356,6 +376,7 @@ def writeobject(asnobj, hdrfile, srcfile): ...@@ -356,6 +376,7 @@ def writeobject(asnobj, hdrfile, srcfile):
"\titemsPres,\n" "\titemsPres,\n"
"\t" + str(len(asnobj.objs)) + ", " + str(optnr) + ", " + str(extnr) + "\n" + "\t" + str(len(asnobj.objs)) + ", " + str(optnr) + ", " + str(extnr) + "\n" +
"};\n") "};\n")
srcfile.write("\n")
# Sequence Of # Sequence Of
...@@ -394,9 +415,18 @@ def writeobject(asnobj, hdrfile, srcfile): ...@@ -394,9 +415,18 @@ def writeobject(asnobj, hdrfile, srcfile):
srcfile.write("\tchoicesInfo,\n" + srcfile.write("\tchoicesInfo,\n" +
"\t" + str(len(asnobj.objs) - 1) + "\n" + "\t" + str(len(asnobj.objs) - 1) + "\n" +
"};\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") hdrfile.write("\n")
srcfile.write("\n")
asnobj.written = 1 asnobj.written = 1
def writeheader(file): def writeheader(file):
...@@ -427,7 +457,7 @@ def main(): ...@@ -427,7 +457,7 @@ def main():
#directory = "/root/Desktop/omnetpp-4.2.2/samples/4Gsim/src/linklayer/lte/rrc/message/" #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\\" directory = "F:\\omnetpp-4.2.2\\samples\\4Gsim\\src\\linklayer\\lte\\rrc\\message\\"
filename = "Constant-definitions" filename = "test"
file = open(directory + filename + ".asn", "r") file = open(directory + filename + ".asn", "r")
lines = file.readlines() lines = file.readlines()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册