diff --git a/ShannonLteUeCap.proto b/ShannonLteUeCap.proto new file mode 100644 index 0000000..a4282a2 --- /dev/null +++ b/ShannonLteUeCap.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; + +message ShannonLteUECap { + // ShannonUECapLte version. + required uint32 version = 1; + // List of combos. + repeated Combo combos = 2; + // Unknown bitmask. + required uint32 bitmask = 3; +} + +message Combo { + // List of Components. + repeated Component components = 1; + /* + The supportedBandwidthCombinationSet of this combo. + It's stored as a 32bit unsigned int, each of its bits has the same value of the corresponding + bit in the BitString. 0 means default i.e. only BCS 0 supported (if applicable). + */ + optional uint32 bcs = 2; + // Unknown bitmask. + required uint32 unknown1 = 3; + // Unknown bitmask. + required uint32 unknown2 = 4; +} + +message Component { + // LTE Bands are stored as int + required int32 band = 1; + /* + First 8 bits encode mimo, second 8 bits encode bw class. Bw class is encoded setting to 1 the + bit representing the bw class index. + Ex. 1000 0000 = class A (index 0), 0100 0000 = class B (index 1), 00100 0000 = class C (index 2) + Mimo is encoded as enum, 0 -> 2, 1 -> 4 + */ + required int32 bwClassMimoDl = 2; + /* + First 8 bits encode mimo, second 8 bits encode bw class. Bw class is encoded setting to 1 the + bit representing the bw class index. + Ex. 1000 0000 = class A (index 0), 0100 0000 = class B (index 1), 00100 0000 = class C (index 2) + Mimo is encoded as enum, 0 -> 1, 1 -> 2 + */ + required int32 bwClassMimoUl = 3; +} diff --git a/ShannonNrUeCap.proto b/ShannonNrUeCap.proto new file mode 100644 index 0000000..b91ce69 --- /dev/null +++ b/ShannonNrUeCap.proto @@ -0,0 +1,174 @@ +syntax = "proto2"; + +message ShannonNrUECap { + // ShannonNrUECap version. + optional uint32 version = 1; + // ID assigned to this ShannonNrUECap. + optional int32 id = 2; + // List of combo groups. + repeated ComboGroup comboGroups = 3; + // List of FeatureSetDownlink. + repeated FeatureNr dlFeatureList = 4; + // List of FeatureSetUplink. + repeated FeatureNr ulFeatureList = 5; + // List of FeatureSetDownlinkPerCC. + repeated FeatureDlPerCCNr dlFeaturePerCCList = 6; + // List of FeatureSetUplinkPerCC. + repeated FeatureUlPerCCNr ulFeaturePerCCList = 7; + // Extra features + optional ExtraFeatures extraFeatures = 8; + // Integrity protection + optional uint32 integrity = 9; +} + +message ComboGroup { + // Some features that applies to the whole combo group. + required ComboFeatures comboFeatures = 1; + // List of combos that share the same ComboFeatures. + repeated Combo combos = 2; +} + +message FeatureNr { + // Intraband Freq Separation is stored as unsigned int + optional uint32 intrabandFreqSeparation = 1; +} + +message FeatureDlPerCCNr { + // Max SCS is stored as numerology + 1, i.e. 1 = 15kHz, 2 = 30kHz, 3 = 60kHz, 4 = 120kHz. + required int32 maxScs = 1; + // Max Mimo is stored as an enum. 0 -> not supported, 1 -> 2, 2 -> 4. + required int32 maxMimo = 2; + // Max Bandwidth is stored as it's. + required uint32 maxBw = 3; + /* + Max Modulation Order is stored as an enum. 0 -> not supported, 1 -> QAM64, 2 -> QAM256. + Note that as TS 38 306 4.2.7.8 and 4.2.7.6, this doesn't specify the maximum (nor the minimum) + modulation supported. + */ + required int32 maxModOrder = 4; + // BW 90MHz supported is stored as boolean. + required bool bw90MHzSupported = 5; +} + +message FeatureUlPerCCNr { + // Max SCS is stored as numerology + 1, i.e. 1 = 15kHz, 2 = 30kHz, 3 = 60kHz, 4 = 120kHz. + required int32 maxScs = 1; + // Max Mimo is stored as an enum. Max Mimo UL: 0 -> not supported, 1 -> 1, 2 -> 2. + required int32 maxMimo = 2; + // Max Bandwidth is stored as it's. + required int32 maxBw = 3; + /* + Max Modulation Order is stored as an enum. 0 -> not supported, 1 -> QAM64, 2 -> QAM256. + Note that as TS 38 306 4.2.7.8 and 4.2.7.6, this doesn't specify the maximum (nor the minimum) + modulation supported. + */ + required int32 maxModOrder = 4; + // BW 90MHz supported is stored as boolean. + required bool bw90MHzSupported = 5; + // MaxNumberSRS-ResourcePerSet is stored as unsigned int + required uint32 maxNumSRSResPerSet = 6; +} + +message ExtraFeatures { + optional uint32 caParamEutraBitmap = 1; + optional uint32 caParamEutraSupportedNaics2CrSAp = 2; + optional uint32 caParamNrBitmap = 3; + optional uint32 caParamNrSimultaneousSrsAssocCsiRsAllCc = 4; + optional uint32 caParamNrMaxNumberSimultaneousNzpCsiRsActBwpAllCc = 5; + optional uint32 caParamNrTotalNumberPortsSimultaneousNzpCsiRsActBwpAllCc = 6; + optional uint32 caParamNrSimultaneousCsiReportsAllCc = 7; + optional uint32 caParamMrdcBitmap = 8; + optional uint32 caParamMrdcUlSharingEutraNr = 9; + optional uint32 caParamMrdcUlSwitchingTimeEutraNr = 10; +} + +message ComboFeatures { + /* + The supportedBandwidthCombinationSet that applies to the Nr Components. + It's stored as a 32bit unsigned int, each of its bits has the same value of + the corresponding bit in the BitString. + 0 means default i.e. only BCS 0 supported (if applicable). + */ + optional uint32 bcsNr = 1; + /* + The supportedBandwidthCombinationSet that applies to the IntraEnDc + Components (supportedBandwidthCombinationSetIntraENDC). + It's stored as a 32bit unsigned int, each of its bits has the same value of + the corresponding bit in the BitString. + 0 means default i.e. only BCS 0 supported (if applicable). + */ + optional uint32 bcsIntraEndc = 2; + /* + The supported Bandwidth Combination Set that applies to the Eutra + Components (supportedBandwidthCombinationSetEUTRA-v1530). + It's stored as a 32bit unsigned int, each of its bits has the same value of + the corresponding bit in the BitString. + 0 means default i.e. only BCS 0 supported (if applicable). + */ + optional uint32 bcsEutra = 3; + /* + Power Class of the whole combination, it's stored as an enum. + Note that this doesn't override the powerclass of the uplink bands. + For FR1 0 -> Default, 1 -> PC2, 2 -> PC1.5 + For FR2 0 -> Default + */ + optional int32 powerClass = 4; + // IntraBandENDC-Support is stored as an enum. 0 -> contiguous, 1 -> non-contiguous, 2 -> both. + optional int32 intraBandEnDcSupport = 5; + // SupportedNumberTAG is stored as unsigned int. + optional uint32 supportedNumTag = 6; +} + +message Combo { + // List of Components. + repeated Component components = 1; + // A bit mask stored as unsigned int that enables or disables this combo for specific SKUs. + required uint32 skuBitMask = 2; +} + +message Component { + // LTE Bands are stored as they are, NR Bands are stored as band number + 10000. + required uint32 band = 1; + // BwClass DL is stored as ASCII value - 0x40. 0 means DL not supported. + required uint32 bwClassDl = 2; + // BwClass UL is stored as ASCII value - 0x40. 0 means UL not supported. + required uint32 bwClassUl = 3; + /* + For LTE this is FeatureSetEUTRA-DownlinkId, the corresponding FeatureSetDL-r15 + seems to be hardcoded elsewhere (see ShannonFeatureSetEutra). + Note that the index starts from 1 as per 3GPP spec, 0 means DL not supported. + + For NR this sets some features that applies to the whole component (not PerCC). + Empirically 1 -> FR1, 2 -> FR2. + */ + required uint32 dlFeatureIndex = 4; + + /* + For LTE this is FeatureSetEUTRA-UplinkId, the corresponding FeatureSetUL-r15 + seems to be hardcoded elsewhere (see ShannonFeatureSetEutra). + Note that the index starts from 1 as per 3GPP spec, 0 means UL not supported. + + For NR this sets some features that applies to the whole component (not PerCC). + Empirically 1 -> 1 SRS port per resource, 2 -> 2 SRS ports per resource. + */ + required uint32 ulFeatureIndex = 5; + /* + This is a list of FeatureSetDownlinkPerCC-Id per each CC. This only applies to NR. + The corresponding FeatureSetDownlinkPerCC are stored in dlFeaturePerCCList. + + Note that the index starts from 1 as per 3GPP spec, 0 means DL not supported. + */ + repeated uint32 dlFeaturePerCCIds = 6 [packed = true]; + /* + This is a list of FeatureSetUplinkPerCC-Id per each CC. This only applies to NR. + The corresponding FeatureSetUplinkPerCC are stored in ulFeaturePerCCList. + + Note that the index starts from 1 as per 3GPP spec, 0 means UL not supported. + */ + repeated uint32 ulFeaturePerCCIds = 7 [packed = true]; + /* + SupportedSRS-TxPortSwitch is stored as enum. + 1 -> t1r1, 2 -> t1r2, 3 -> t1r4, 4 -> t2r2, 5 -> t2r4, 6 -> t1r4-t2r4 + */ + optional int32 srsTxSwitch = 8; +}