Browse Source

添加 LTE Cell 跟 NrCell 参数解析

release/web-ui-v1.0.0
root 4 months ago
parent
commit
b1fc66c0b3
  1. 308
      src/X1.Domain/Models/LteCellConfiguration/LteCellConfiguration.cs
  2. 42
      src/X1.Domain/Models/LteCellConfiguration/LteCellConfigurationCollection.cs
  3. 95
      src/X1.Domain/Models/LteCellConfiguration/MacConfig.cs
  4. 71
      src/X1.Domain/Models/LteCellConfiguration/NcellConfig.cs
  5. 23
      src/X1.Domain/Models/LteCellConfiguration/PdschDedicatedConfig.cs
  6. 35
      src/X1.Domain/Models/LteCellConfiguration/PlmnConfig.cs
  7. 41
      src/X1.Domain/Models/LteCellConfiguration/PucchDedicatedConfig.cs
  8. 29
      src/X1.Domain/Models/LteCellConfiguration/PuschDedicatedConfig.cs
  9. 130
      src/X1.Domain/Models/LteCellConfiguration/README.md
  10. 35
      src/X1.Domain/Models/LteCellConfiguration/ScellConfig.cs
  11. 23
      src/X1.Domain/Models/LteCellConfiguration/SibSchedConfig.cs
  12. 35
      src/X1.Domain/Models/LteCellConfiguration/SrbConfig.cs
  13. 41
      src/X1.Domain/Models/LteCellConfiguration/SrsDedicatedConfig.cs
  14. 257
      src/X1.Domain/Models/NrCellConfiguration/CsiRsConfig.cs
  15. 52
      src/X1.Domain/Models/NrCellConfiguration/MacConfig.cs
  16. 212
      src/X1.Domain/Models/NrCellConfiguration/NrCellConfiguration.cs
  17. 17
      src/X1.Domain/Models/NrCellConfiguration/NrCellConfigurationCollection.cs
  18. 19
      src/X1.Domain/Models/NrCellConfiguration/PagingConfig.cs
  19. 101
      src/X1.Domain/Models/NrCellConfiguration/PdcchConfig.cs
  20. 95
      src/X1.Domain/Models/NrCellConfiguration/PdschConfig.cs
  21. 19
      src/X1.Domain/Models/NrCellConfiguration/PlmnConfig.cs
  22. 52
      src/X1.Domain/Models/NrCellConfiguration/PrachConfig.cs
  23. 91
      src/X1.Domain/Models/NrCellConfiguration/PucchConfig.cs
  24. 122
      src/X1.Domain/Models/NrCellConfiguration/PuschConfig.cs
  25. 95
      src/X1.Domain/Models/NrCellConfiguration/README.md
  26. 22
      src/X1.Domain/Models/NrCellConfiguration/SrbConfig.cs
  27. 37
      src/X1.Domain/Models/NrCellConfiguration/TddUlDlConfig.cs
  28. 31
      src/X1.Domain/Models/NrCellConfiguration/TimersAndConstants.cs
  29. 4
      src/X1.Domain/X1.Domain.csproj

308
src/X1.Domain/Models/LteCellConfiguration/LteCellConfiguration.cs

@ -0,0 +1,308 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// 4G LTE小区配置主实体类
/// </summary>
public class LteCellConfiguration
{
[JsonProperty("cell_id")]
public int? CellId { get; set; }
[JsonProperty("n_id_cell")]
public int? NIdCell { get; set; }
[JsonProperty("tac")]
public int? Tac { get; set; }
[JsonProperty("plmn_list")]
public List<PlmnConfig> PlmnList { get; set; } = new List<PlmnConfig>();
[JsonProperty("cipher_algo_pref")]
public List<int> CipherAlgoPref { get; set; } = new List<int>();
[JsonProperty("integ_algo_pref")]
public List<int> IntegAlgoPref { get; set; } = new List<int>();
[JsonProperty("ims_emergency_support")]
public bool? ImsEmergencySupport { get; set; }
[JsonProperty("ignore_ue_as_release")]
public bool? IgnoreUeAsRelease { get; set; }
[JsonProperty("edrx")]
public bool? Edrx { get; set; }
[JsonProperty("ue_count_max")]
public int? UeCountMax { get; set; }
[JsonProperty("allow_cat0_ue")]
public bool? AllowCat0Ue { get; set; }
[JsonProperty("inactivity_timer")]
public int? InactivityTimer { get; set; }
[JsonProperty("cell_barred")]
public bool? CellBarred { get; set; }
[JsonProperty("intra_freq_reselection")]
public bool? IntraFreqReselection { get; set; }
[JsonProperty("q_rx_lev_min")]
public int? QRxLevMin { get; set; }
[JsonProperty("q_rx_lev_min_offset")]
public int? QRxLevMinOffset { get; set; }
[JsonProperty("p_max")]
public int? PMax { get; set; }
[JsonProperty("pws_max_segment_len")]
public int? PwsMaxSegmentLen { get; set; }
[JsonProperty("pws_si_periodicity")]
public int? PwsSiPeriodicity { get; set; }
[JsonProperty("sib16_enable")]
public bool? Sib16Enable { get; set; }
[JsonProperty("sib16_si_periodicity")]
public int? Sib16SiPeriodicity { get; set; }
[JsonProperty("si_value_tag")]
public int? SiValueTag { get; set; }
[JsonProperty("si_window_length")]
public int? SiWindowLength { get; set; }
[JsonProperty("sib_sched_list")]
public List<SibSchedConfig> SibSchedList { get; set; } = new List<SibSchedConfig>();
[JsonProperty("cell_gain")]
public int? CellGain { get; set; }
[JsonProperty("rf_port")]
public int? RfPort { get; set; }
[JsonProperty("cyclic_prefix")]
public string? CyclicPrefix { get; set; }
[JsonProperty("n_rb_dl")]
public int? NRbDl { get; set; }
[JsonProperty("dl_earfcn")]
public int? DlEarfcn { get; set; }
[JsonProperty("ul_earfcn")]
public int? UlEarfcn { get; set; }
[JsonProperty("n_antenna_dl")]
public int? NAntennaDl { get; set; }
[JsonProperty("n_antenna_ul")]
public int? NAntennaUl { get; set; }
[JsonProperty("power_p_sync")]
public int? PowerPSync { get; set; }
[JsonProperty("power_s_sync")]
public int? PowerSSync { get; set; }
[JsonProperty("power_pbch")]
public int? PowerPbch { get; set; }
[JsonProperty("power_pcfich")]
public int? PowerPcfich { get; set; }
[JsonProperty("power_phich")]
public int? PowerPhich { get; set; }
[JsonProperty("power_pdcch")]
public int? PowerPdcch { get; set; }
[JsonProperty("power_pdsch_si")]
public int? PowerPdschSi { get; set; }
[JsonProperty("p_srs_offset")]
public int? PSrsOffset { get; set; }
[JsonProperty("transmission_mode")]
public int? TransmissionMode { get; set; }
[JsonProperty("transmission_mode_opt")]
public int? TransmissionModeOpt { get; set; }
[JsonProperty("manual_ref_signal_power")]
public bool? ManualRefSignalPower { get; set; }
[JsonProperty("dpc")]
public bool? Dpc { get; set; }
[JsonProperty("dpc_pusch_snr_target")]
public double? DpcPuschSnrTarget { get; set; }
[JsonProperty("dpc_pucch_snr_target")]
public double? DpcPucchSnrTarget { get; set; }
[JsonProperty("root_sequence_index")]
public int? RootSequenceIndex { get; set; }
[JsonProperty("pusch_msg3_mcs")]
public int? PuschMsg3Mcs { get; set; }
[JsonProperty("pusch_msg3_delta_power")]
public int? PuschMsg3DeltaPower { get; set; }
[JsonProperty("rar_backoff_index")]
public int? RarBackoffIndex { get; set; }
[JsonProperty("pdsch_dedicated")]
public PdschDedicatedConfig PdschDedicated { get; set; } = new PdschDedicatedConfig();
[JsonProperty("phich_duration")]
public string? PhichDuration { get; set; }
[JsonProperty("phich_resource")]
public string? PhichResource { get; set; }
[JsonProperty("pucch_dedicated")]
public PucchDedicatedConfig PucchDedicated { get; set; } = new PucchDedicatedConfig();
[JsonProperty("pusch_dedicated")]
public PuschDedicatedConfig PuschDedicated { get; set; } = new PuschDedicatedConfig();
[JsonProperty("srs_dedicated")]
public SrsDedicatedConfig SrsDedicated { get; set; } = new SrsDedicatedConfig();
[JsonProperty("m_ri")]
public int? MRi { get; set; }
[JsonProperty("ap_cqi_period")]
public int? ApCqiPeriod { get; set; }
[JsonProperty("simultaneousAckNackAndCQI")]
public bool? SimultaneousAckNackAndCQI { get; set; }
[JsonProperty("simultaneousAckNackAndCQI_format3")]
public bool? SimultaneousAckNackAndCQIFormat3 { get; set; }
[JsonProperty("cqi_period")]
public int? CqiPeriod { get; set; }
[JsonProperty("cqi_adapt_fer")]
public double? CqiAdaptFer { get; set; }
[JsonProperty("ul_snr_adapt_fer")]
public double? UlSnrAdaptFer { get; set; }
[JsonProperty("si_coderate")]
public double? SiCoderate { get; set; }
[JsonProperty("si_pdcch_format")]
public int? SiPdcchFormat { get; set; }
[JsonProperty("sr_period")]
public int? SrPeriod { get; set; }
[JsonProperty("n_symb_cch")]
public int? NSymbCch { get; set; }
[JsonProperty("initial_cqi")]
public int? InitialCqi { get; set; }
[JsonProperty("forced_cqi")]
public int? ForcedCqi { get; set; }
[JsonProperty("force_dl_schedule")]
public bool? ForceDlSchedule { get; set; }
[JsonProperty("force_full_bsr")]
public bool? ForceFullBsr { get; set; }
[JsonProperty("dl_256qam")]
public bool? Dl256Qam { get; set; }
[JsonProperty("dl_1024qam")]
public bool? Dl1024Qam { get; set; }
[JsonProperty("ul_64qam")]
public bool? Ul64Qam { get; set; }
[JsonProperty("ul_256qam")]
public bool? Ul256Qam { get; set; }
[JsonProperty("pusch_max_its")]
public int? PuschMaxIts { get; set; }
[JsonProperty("pusch_max_mcs")]
public int? PuschMaxMcs { get; set; }
[JsonProperty("pdsch_mcs")]
public List<int> PdschMcs { get; set; } = new List<int>();
[JsonProperty("pdsch_fixed_rb_alloc")]
public List<bool> PdschFixedRbAlloc { get; set; } = new List<bool>();
[JsonProperty("pusch_mcs")]
public List<int> PuschMcs { get; set; } = new List<int>();
[JsonProperty("pusch_fixed_rb_alloc")]
public List<bool> PuschFixedRbAlloc { get; set; } = new List<bool>();
[JsonProperty("mac_config")]
public MacConfig MacConfig { get; set; } = new MacConfig();
[JsonProperty("gbr_ul_ratio")]
public double? GbrUlRatio { get; set; }
[JsonProperty("gbr_dl_ratio")]
public double? GbrDlRatio { get; set; }
[JsonProperty("ignore_gbr_congestion")]
public bool? IgnoreGbrCongestion { get; set; }
[JsonProperty("srb_config")]
public List<SrbConfig> SrbConfig { get; set; } = new List<SrbConfig>();
[JsonProperty("drb_config")]
public string? DrbConfig { get; set; }
[JsonProperty("t304")]
public int? T304 { get; set; }
[JsonProperty("rrc_cnx_reject_waitTime")]
public int? RrcCnxRejectWaitTime { get; set; }
[JsonProperty("rrc_cnx_reject_extWaitTime")]
public int? RrcCnxRejectExtWaitTime { get; set; }
[JsonProperty("meas_gap_config")]
public string? MeasGapConfig { get; set; }
[JsonProperty("forced_meas_gap_offset")]
public int? ForcedMeasGapOffset { get; set; }
[JsonProperty("meas_config")]
public string? MeasConfig { get; set; }
[JsonProperty("ho_from_meas")]
public bool? HoFromMeas { get; set; }
[JsonProperty("ho_cfra")]
public bool? HoCfra { get; set; }
[JsonProperty("scell_list")]
public List<ScellConfig> ScellList { get; set; } = new List<ScellConfig>();
[JsonProperty("scells_activation")]
public string? ScellsActivation { get; set; }
[JsonProperty("ncell_list")]
public List<NcellConfig> NcellList { get; set; } = new List<NcellConfig>();
[JsonProperty("forced_ri")]
public int? ForcedRi { get; set; }
}
}

42
src/X1.Domain/Models/LteCellConfiguration/LteCellConfigurationCollection.cs

@ -0,0 +1,42 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// LTE小区配置集合类
/// </summary>
public class LteCellConfigurationCollection
{
/// <summary>
/// 小区配置列表
/// </summary>
[JsonProperty("cells")]
public List<LteCellConfiguration> Cells { get; set; } = new List<LteCellConfiguration>();
/// <summary>
/// 配置版本
/// </summary>
[JsonProperty("version")]
public string? Version { get; set; }
/// <summary>
/// 配置描述
/// </summary>
[JsonProperty("description")]
public string? Description { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[JsonProperty("created_at")]
public string? CreatedAt { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[JsonProperty("updated_at")]
public string? UpdatedAt { get; set; }
}
}

95
src/X1.Domain/Models/LteCellConfiguration/MacConfig.cs

@ -0,0 +1,95 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// MAC配置实体类
/// </summary>
public class MacConfig
{
/// <summary>
/// 上行最大HARQ传输次数
/// </summary>
[JsonProperty("ul_max_harq_tx")]
public int? UlMaxHarqTx { get; set; }
/// <summary>
/// 下行最大HARQ传输次数
/// </summary>
[JsonProperty("dl_max_harq_tx")]
public int? DlMaxHarqTx { get; set; }
/// <summary>
/// 上行最大连续重传次数
/// </summary>
[JsonProperty("ul_max_consecutive_retx")]
public int? UlMaxConsecutiveRetx { get; set; }
/// <summary>
/// 下行最大连续重传次数
/// </summary>
[JsonProperty("dl_max_consecutive_retx")]
public int? DlMaxConsecutiveRetx { get; set; }
/// <summary>
/// 时间对齐传输定时器
/// </summary>
[JsonProperty("time_alignment_tx_timer")]
public int? TimeAlignmentTxTimer { get; set; }
/// <summary>
/// 专用时间对齐定时器
/// </summary>
[JsonProperty("time_alignment_timer_dedicated")]
public int? TimeAlignmentTimerDedicated { get; set; }
/// <summary>
/// 周期性BSR定时器
/// </summary>
[JsonProperty("periodic_bsr_timer")]
public int? PeriodicBsrTimer { get; set; }
/// <summary>
/// 重传BSR定时器
/// </summary>
[JsonProperty("retx_bsr_timer")]
public int? RetxBsrTimer { get; set; }
/// <summary>
/// 周期性PHR定时器
/// </summary>
[JsonProperty("periodic_phr_timer")]
public int? PeriodicPhrTimer { get; set; }
/// <summary>
/// 禁止PHR定时器
/// </summary>
[JsonProperty("prohibit_phr_timer")]
public int? ProhibitPhrTimer { get; set; }
/// <summary>
/// 下行路径损耗变化
/// </summary>
[JsonProperty("dl_path_loss_change")]
public string? DlPathLossChange { get; set; }
/// <summary>
/// 数据非活动定时器
/// </summary>
[JsonProperty("data_inactivity_timer")]
public int? DataInactivityTimer { get; set; }
/// <summary>
/// SR禁止定时器
/// </summary>
[JsonProperty("sr_prohibit_timer")]
public int? SrProhibitTimer { get; set; }
/// <summary>
/// 逻辑信道SR禁止定时器
/// </summary>
[JsonProperty("logical_channel_sr_prohibit_timer")]
public int? LogicalChannelSrProhibitTimer { get; set; }
}
}

71
src/X1.Domain/Models/LteCellConfiguration/NcellConfig.cs

@ -0,0 +1,71 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// 邻区配置实体类
/// </summary>
public class NcellConfig
{
/// <summary>
/// 无线接入技术
/// </summary>
[JsonProperty("rat")]
public string? Rat { get; set; }
/// <summary>
/// 物理小区ID
/// </summary>
[JsonProperty("n_id_cell")]
public int? NIdCell { get; set; }
/// <summary>
/// 下行EARFCN
/// </summary>
[JsonProperty("dl_earfcn")]
public int? DlEarfcn { get; set; }
/// <summary>
/// PLMN标识
/// </summary>
[JsonProperty("plmn")]
public string? Plmn { get; set; }
/// <summary>
/// 小区ID
/// </summary>
[JsonProperty("cell_id")]
public int? CellId { get; set; }
/// <summary>
/// 跟踪区域码
/// </summary>
[JsonProperty("tac")]
public int? Tac { get; set; }
/// <summary>
/// 允许测量带宽
/// </summary>
[JsonProperty("allowed_meas_bandwidth")]
public int? AllowedMeasBandwidth { get; set; }
/// <summary>
/// 天线端口1
/// </summary>
[JsonProperty("antenna_port_1")]
public bool? AntennaPort1 { get; set; }
/// <summary>
/// 邻区小区配置
/// </summary>
[JsonProperty("neigh_cell_config")]
public int? NeighCellConfig { get; set; }
/// <summary>
/// EPS回退目标
/// </summary>
[JsonProperty("eps_fallback_target")]
public bool? EpsFallbackTarget { get; set; }
}
}

23
src/X1.Domain/Models/LteCellConfiguration/PdschDedicatedConfig.cs

@ -0,0 +1,23 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// PDSCH专用配置实体类
/// </summary>
public class PdschDedicatedConfig
{
/// <summary>
/// P_A参数
/// </summary>
[JsonProperty("p_a")]
public double? PA { get; set; }
/// <summary>
/// P_B参数
/// </summary>
[JsonProperty("p_b")]
public double? PB { get; set; }
}
}

35
src/X1.Domain/Models/LteCellConfiguration/PlmnConfig.cs

@ -0,0 +1,35 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// PLMN配置实体类
/// </summary>
public class PlmnConfig
{
/// <summary>
/// PLMN标识
/// </summary>
[JsonProperty("plmn")]
public string? Plmn { get; set; }
/// <summary>
/// 保留标志
/// </summary>
[JsonProperty("reserved")]
public bool? Reserved { get; set; }
/// <summary>
/// CP CIoT选项
/// </summary>
[JsonProperty("cp_ciot_opt")]
public bool? CpCiotOpt { get; set; }
/// <summary>
/// 无PDN附着
/// </summary>
[JsonProperty("attach_without_pdn")]
public bool? AttachWithoutPdn { get; set; }
}
}

41
src/X1.Domain/Models/LteCellConfiguration/PucchDedicatedConfig.cs

@ -0,0 +1,41 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// PUCCH专用配置实体类
/// </summary>
public class PucchDedicatedConfig
{
/// <summary>
/// CQI PUCCH RB数量
/// </summary>
[JsonProperty("cqi_pucch_n_rb")]
public int? CqiPucchNRb { get; set; }
/// <summary>
/// N1 PUCCH SR计数
/// </summary>
[JsonProperty("n1_pucch_sr_count")]
public int? N1PucchSrCount { get; set; }
/// <summary>
/// ACK/NACK反馈模式CA
/// </summary>
[JsonProperty("ack_nack_feedback_mode_ca")]
public string? AckNackFeedbackModeCa { get; set; }
/// <summary>
/// N1 PUCCH AN CS计数
/// </summary>
[JsonProperty("n1_pucch_an_cs_count")]
public int? N1PucchAnCsCount { get; set; }
/// <summary>
/// N3 PUCCH AN RB数量
/// </summary>
[JsonProperty("n3_pucch_an_n_rb")]
public int? N3PucchAnNRb { get; set; }
}
}

29
src/X1.Domain/Models/LteCellConfiguration/PuschDedicatedConfig.cs

@ -0,0 +1,29 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// PUSCH专用配置实体类
/// </summary>
public class PuschDedicatedConfig
{
/// <summary>
/// Beta偏移ACK索引
/// </summary>
[JsonProperty("beta_offset_ack_index")]
public int? BetaOffsetAckIndex { get; set; }
/// <summary>
/// Beta偏移RI索引
/// </summary>
[JsonProperty("beta_offset_ri_index")]
public int? BetaOffsetRiIndex { get; set; }
/// <summary>
/// Beta偏移CQI索引
/// </summary>
[JsonProperty("beta_offset_cqi_index")]
public int? BetaOffsetCqiIndex { get; set; }
}
}

130
src/X1.Domain/Models/LteCellConfiguration/README.md

@ -0,0 +1,130 @@
# LTE小区配置实体类说明
## 概述
本目录包含4G LTE小区配置相关的实体类,用于管理和处理LTE小区参数配置。
## 文件结构
### 主要实体类
- `LteCellConfiguration.cs` - 主要的LTE小区配置实体类,包含所有小区参数
- `LteCellConfigurationCollection.cs` - LTE小区配置集合类,用于管理多个小区配置
### 子配置实体类
- `PlmnConfig.cs` - PLMN配置
- `SibSchedConfig.cs` - SIB调度配置
- `PdschDedicatedConfig.cs` - PDSCH专用配置
- `PucchDedicatedConfig.cs` - PUCCH专用配置
- `PuschDedicatedConfig.cs` - PUSCH专用配置
- `SrsDedicatedConfig.cs` - SRS专用配置
- `MacConfig.cs` - MAC层配置
- `SrbConfig.cs` - SRB配置
- `ScellConfig.cs` - 辅小区配置
- `NcellConfig.cs` - 邻区配置
## 使用示例
### 创建小区配置
```csharp
var cellConfig = new LteCellConfiguration
{
CellId = 3,
NIdCell = 0,
Tac = 1,
PlmnList = new List<PlmnConfig>
{
new PlmnConfig
{
Plmn = "46011",
Reserved = false,
CpCiotOpt = false,
AttachWithoutPdn = false
}
},
// ... 其他配置参数
};
```
### 序列化为JSON
```csharp
var json = JsonConvert.SerializeObject(cellConfig, Formatting.Indented);
```
### 反序列化JSON
```csharp
var config = JsonConvert.DeserializeObject<LteCellConfiguration>(json);
```
## 配置参数说明
### 基本信息
- `CellId`: 小区ID
- `NIdCell`: 物理小区ID
- `Tac`: 跟踪区域码
- `PlmnList`: PLMN列表
### 无线参数
- `NRbDl`: 下行资源块数量
- `DlEarfcn`: 下行EARFCN
- `UlEarfcn`: 上行EARFCN
- `NAntennaDl`: 下行天线数量
- `NAntennaUl`: 上行天线数量
### 功率配置
- `PowerPSync`: P-SCH功率
- `PowerSSync`: S-SCH功率
- `PowerPbch`: PBCH功率
- `PowerPdcch`: PDCCH功率
### 专用配置
- `PdschDedicated`: PDSCH专用配置
- `PucchDedicated`: PUCCH专用配置
- `PuschDedicated`: PUSCH专用配置
- `SrsDedicated`: SRS专用配置
### 高级功能
- `MacConfig`: MAC层配置
- `SrbConfig`: SRB配置列表
- `ScellList`: 辅小区列表
- `NcellList`: 邻区列表
## 注意事项
1. 所有实体类都使用了Newtonsoft.Json的JsonProperty特性,确保与JSON格式兼容
2. 集合类型的属性都初始化为空列表,避免空引用异常
3. 所有数值类型、布尔类型和字符串类型都使用可空类型,避免默认值导致的判断错误
4. null值表示该参数未配置,便于区分默认值和未配置状态
5. 配置参数的范围和有效性需要在业务逻辑中进行验证
6. 使用可空类型时,在访问属性前需要检查是否为null
## 可空类型使用示例
### 安全访问属性
```csharp
// 检查属性是否为null
if (cellConfig.CellId.HasValue)
{
Console.WriteLine($"小区ID: {cellConfig.CellId.Value}");
}
// 使用null合并运算符
int cellId = cellConfig.CellId ?? 0;
bool isEnabled = cellConfig.CellBarred ?? false;
string prefix = cellConfig.CyclicPrefix ?? "normal";
```
### 条件判断
```csharp
// 检查布尔属性
if (cellConfig.CellBarred == true)
{
Console.WriteLine("小区被禁止");
}
else if (cellConfig.CellBarred == false)
{
Console.WriteLine("小区未被禁止");
}
else
{
Console.WriteLine("小区禁止状态未配置");
}
```

35
src/X1.Domain/Models/LteCellConfiguration/ScellConfig.cs

@ -0,0 +1,35 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// 辅小区配置实体类
/// </summary>
public class ScellConfig
{
/// <summary>
/// 小区ID
/// </summary>
[JsonProperty("cell_id")]
public int? CellId { get; set; }
/// <summary>
/// 跨载波调度
/// </summary>
[JsonProperty("cross_carrier_scheduling")]
public bool? CrossCarrierScheduling { get; set; }
/// <summary>
/// 调度小区ID
/// </summary>
[JsonProperty("scheduling_cell_id")]
public int? SchedulingCellId { get; set; }
/// <summary>
/// 上行允许
/// </summary>
[JsonProperty("ul_allowed")]
public bool? UlAllowed { get; set; }
}
}

23
src/X1.Domain/Models/LteCellConfiguration/SibSchedConfig.cs

@ -0,0 +1,23 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// SIB调度配置实体类
/// </summary>
public class SibSchedConfig
{
/// <summary>
/// 配置文件路径
/// </summary>
[JsonProperty("filename")]
public string? Filename { get; set; }
/// <summary>
/// SI周期性
/// </summary>
[JsonProperty("si_periodicity")]
public int? SiPeriodicity { get; set; }
}
}

35
src/X1.Domain/Models/LteCellConfiguration/SrbConfig.cs

@ -0,0 +1,35 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// SRB配置实体类
/// </summary>
public class SrbConfig
{
/// <summary>
/// SRB ID
/// </summary>
[JsonProperty("id")]
public int? Id { get; set; }
/// <summary>
/// 最大重传阈值
/// </summary>
[JsonProperty("maxRetxThreshold")]
public int? MaxRetxThreshold { get; set; }
/// <summary>
/// 重排序定时器
/// </summary>
[JsonProperty("t_Reordering")]
public int? TReordering { get; set; }
/// <summary>
/// 轮询重传定时器
/// </summary>
[JsonProperty("t_PollRetransmit")]
public int? TPollRetransmit { get; set; }
}
}

41
src/X1.Domain/Models/LteCellConfiguration/SrsDedicatedConfig.cs

@ -0,0 +1,41 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.LteCellConfiguration
{
/// <summary>
/// SRS专用配置实体类
/// </summary>
public class SrsDedicatedConfig
{
/// <summary>
/// SRS带宽配置
/// </summary>
[JsonProperty("srs_bandwidth_config")]
public int? SrsBandwidthConfig { get; set; }
/// <summary>
/// SRS子帧配置
/// </summary>
[JsonProperty("srs_subframe_config")]
public int? SrsSubframeConfig { get; set; }
/// <summary>
/// SRS周期
/// </summary>
[JsonProperty("srs_period")]
public int? SrsPeriod { get; set; }
/// <summary>
/// SRS带宽
/// </summary>
[JsonProperty("srs_bandwidth")]
public int? SrsBandwidth { get; set; }
/// <summary>
/// SRS跳频带宽
/// </summary>
[JsonProperty("srs_hopping_bandwidth")]
public int? SrsHoppingBandwidth { get; set; }
}
}

257
src/X1.Domain/Models/NrCellConfiguration/CsiRsConfig.cs

@ -0,0 +1,257 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR CSI-RS配置
/// </summary>
public class CsiRsConfig
{
[JsonProperty("nzp_csi_rs_resource")]
public List<NzpCsiRsResource>? NzpCsiRsResource { get; set; }
[JsonProperty("nzp_csi_rs_resource_set")]
public List<NzpCsiRsResourceSet>? NzpCsiRsResourceSet { get; set; }
[JsonProperty("csi_im_resource")]
public List<CsiImResource>? CsiImResource { get; set; }
[JsonProperty("csi_im_resource_set")]
public List<CsiImResourceSet>? CsiImResourceSet { get; set; }
[JsonProperty("zp_csi_rs_resource")]
public List<ZpCsiRsResource>? ZpCsiRsResource { get; set; }
[JsonProperty("p_zp_csi_rs_resource_set")]
public List<PZpCsiRsResourceSet>? PZpCsiRsResourceSet { get; set; }
[JsonProperty("csi_resource_config")]
public List<CsiResourceConfig>? CsiResourceConfig { get; set; }
[JsonProperty("csi_report_config")]
public List<CsiReportConfig>? CsiReportConfig { get; set; }
}
/// <summary>
/// NZP CSI-RS资源
/// </summary>
public class NzpCsiRsResource
{
[JsonProperty("csi_rs_id")]
public int? CsiRsId { get; set; }
[JsonProperty("n_ports")]
public int? NPorts { get; set; }
[JsonProperty("frequency_domain_allocation")]
public string? FrequencyDomainAllocation { get; set; }
[JsonProperty("bitmap")]
public string? Bitmap { get; set; }
[JsonProperty("cdm_type")]
public string? CdmType { get; set; }
[JsonProperty("density")]
public double? Density { get; set; }
[JsonProperty("first_symb")]
public int? FirstSymb { get; set; }
[JsonProperty("rb_start")]
public int? RbStart { get; set; }
[JsonProperty("l_crb")]
public int? LCrb { get; set; }
[JsonProperty("power_control_offset")]
public int? PowerControlOffset { get; set; }
[JsonProperty("power_control_offset_ss")]
public int? PowerControlOffsetSs { get; set; }
[JsonProperty("scrambling_id")]
public int? ScramblingId { get; set; }
[JsonProperty("period")]
public int? Period { get; set; }
[JsonProperty("offset")]
public int? Offset { get; set; }
[JsonProperty("qcl_info_periodic_csi_rs")]
public int? QclInfoPeriodicCsiRs { get; set; }
}
/// <summary>
/// NZP CSI-RS资源集
/// </summary>
public class NzpCsiRsResourceSet
{
[JsonProperty("csi_rs_set_id")]
public int? CsiRsSetId { get; set; }
[JsonProperty("nzp_csi_rs_resources")]
public List<int>? NzpCsiRsResources { get; set; }
[JsonProperty("repetition")]
public bool? Repetition { get; set; }
[JsonProperty("trs_info")]
public bool? TrsInfo { get; set; }
}
/// <summary>
/// CSI-IM资源
/// </summary>
public class CsiImResource
{
[JsonProperty("csi_im_id")]
public int? CsiImId { get; set; }
[JsonProperty("pattern")]
public int? Pattern { get; set; }
[JsonProperty("subcarrier_location")]
public int? SubcarrierLocation { get; set; }
[JsonProperty("symbol_location")]
public int? SymbolLocation { get; set; }
[JsonProperty("rb_start")]
public int? RbStart { get; set; }
[JsonProperty("l_crb")]
public int? LCrb { get; set; }
[JsonProperty("period")]
public int? Period { get; set; }
[JsonProperty("offset")]
public int? Offset { get; set; }
}
/// <summary>
/// CSI-IM资源集
/// </summary>
public class CsiImResourceSet
{
[JsonProperty("csi_im_set_id")]
public int? CsiImSetId { get; set; }
[JsonProperty("csi_im_resources")]
public List<int>? CsiImResources { get; set; }
}
/// <summary>
/// ZP CSI-RS资源
/// </summary>
public class ZpCsiRsResource
{
[JsonProperty("csi_rs_id")]
public int? CsiRsId { get; set; }
[JsonProperty("frequency_domain_allocation")]
public string? FrequencyDomainAllocation { get; set; }
[JsonProperty("bitmap")]
public string? Bitmap { get; set; }
[JsonProperty("n_ports")]
public int? NPorts { get; set; }
[JsonProperty("cdm_type")]
public string? CdmType { get; set; }
[JsonProperty("density")]
public double? Density { get; set; }
[JsonProperty("first_symb")]
public int? FirstSymb { get; set; }
[JsonProperty("rb_start")]
public int? RbStart { get; set; }
[JsonProperty("l_crb")]
public int? LCrb { get; set; }
[JsonProperty("period")]
public int? Period { get; set; }
[JsonProperty("offset")]
public int? Offset { get; set; }
}
/// <summary>
/// P-ZP CSI-RS资源集
/// </summary>
public class PZpCsiRsResourceSet
{
[JsonProperty("zp_csi_rs_resources")]
public List<int>? ZpCsiRsResources { get; set; }
}
/// <summary>
/// CSI资源配置
/// </summary>
public class CsiResourceConfig
{
[JsonProperty("csi_rsc_config_id")]
public int? CsiRscConfigId { get; set; }
[JsonProperty("nzp_csi_rs_resource_set_list")]
public List<int>? NzpCsiRsResourceSetList { get; set; }
[JsonProperty("csi_im_resource_set_list")]
public List<int>? CsiImResourceSetList { get; set; }
[JsonProperty("resource_type")]
public string? ResourceType { get; set; }
}
/// <summary>
/// CSI报告配置
/// </summary>
public class CsiReportConfig
{
[JsonProperty("resources_for_channel_measurement")]
public int? ResourcesForChannelMeasurement { get; set; }
[JsonProperty("csi_im_resources_for_interference")]
public int? CsiImResourcesForInterference { get; set; }
[JsonProperty("report_config_type")]
public string? ReportConfigType { get; set; }
[JsonProperty("period")]
public int? Period { get; set; }
[JsonProperty("report_quantity")]
public string? ReportQuantity { get; set; }
[JsonProperty("codebook_config")]
public CodebookConfig? CodebookConfig { get; set; }
[JsonProperty("cqi_table")]
public int? CqiTable { get; set; }
[JsonProperty("subband_size")]
public string? SubbandSize { get; set; }
}
/// <summary>
/// 码本配置
/// </summary>
public class CodebookConfig
{
[JsonProperty("codebook_type")]
public string? CodebookType { get; set; }
[JsonProperty("sub_type")]
public string? SubType { get; set; }
[JsonProperty("codebook_mode")]
public int? CodebookMode { get; set; }
}
}

52
src/X1.Domain/Models/NrCellConfiguration/MacConfig.cs

@ -0,0 +1,52 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR MAC配置
/// </summary>
public class MacConfig
{
[JsonProperty("msg3_max_harq_tx")]
public int? Msg3MaxHarqTx { get; set; }
[JsonProperty("ul_max_harq_tx")]
public int? UlMaxHarqTx { get; set; }
[JsonProperty("dl_max_harq_tx")]
public int? DlMaxHarqTx { get; set; }
[JsonProperty("ul_max_consecutive_retx")]
public int? UlMaxConsecutiveRetx { get; set; }
[JsonProperty("dl_max_consecutive_retx")]
public int? DlMaxConsecutiveRetx { get; set; }
[JsonProperty("periodic_bsr_timer")]
public int? PeriodicBsrTimer { get; set; }
[JsonProperty("retx_bsr_timer")]
public int? RetxBsrTimer { get; set; }
[JsonProperty("periodic_phr_timer")]
public int? PeriodicPhrTimer { get; set; }
[JsonProperty("prohibit_phr_timer")]
public int? ProhibitPhrTimer { get; set; }
[JsonProperty("phr_tx_power_factor_change")]
public string? PhrTxPowerFactorChange { get; set; }
[JsonProperty("sr_prohibit_timer")]
public int? SrProhibitTimer { get; set; }
[JsonProperty("sr_trans_max")]
public int? SrTransMax { get; set; }
[JsonProperty("time_alignment_tx_timer")]
public int? TimeAlignmentTxTimer { get; set; }
[JsonProperty("time_alignment_timer_dedicated")]
public int? TimeAlignmentTimerDedicated { get; set; }
}
}

212
src/X1.Domain/Models/NrCellConfiguration/NrCellConfiguration.cs

@ -0,0 +1,212 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR小区配置主实体类
/// </summary>
public class NrCellConfiguration
{
[JsonProperty("plmn_list")]
public List<PlmnConfig>? PlmnList { get; set; }
[JsonProperty("cell_id")]
public int? CellId { get; set; }
[JsonProperty("n_id_cell")]
public int? NIdCell { get; set; }
[JsonProperty("ims_emergency_support")]
public bool? ImsEmergencySupport { get; set; }
[JsonProperty("ignore_ue_as_release")]
public bool? IgnoreUeAsRelease { get; set; }
[JsonProperty("compute_ber")]
public bool? ComputeBer { get; set; }
[JsonProperty("ue_count_max")]
public int? UeCountMax { get; set; }
[JsonProperty("cell_barred")]
public bool? CellBarred { get; set; }
[JsonProperty("intra_freq_reselection")]
public bool? IntraFreqReselection { get; set; }
[JsonProperty("q_rx_lev_min")]
public int? QRxLevMin { get; set; }
[JsonProperty("delta_rx_lev_min")]
public int? DeltaRxLevMin { get; set; }
[JsonProperty("root_sequence_index")]
public int? RootSequenceIndex { get; set; }
[JsonProperty("q_qual_min")]
public int? QQualMin { get; set; }
[JsonProperty("si_window_length")]
public int? SiWindowLength { get; set; }
[JsonProperty("pws_max_segment_len")]
public int? PwsMaxSegmentLen { get; set; }
[JsonProperty("pws_si_periodicity")]
public int? PwsSiPeriodicity { get; set; }
[JsonProperty("paging")]
public PagingConfig? Paging { get; set; }
[JsonProperty("subcarrier_spacing")]
public int? SubcarrierSpacing { get; set; }
[JsonProperty("cipher_algo_pref")]
public List<int>? CipherAlgoPref { get; set; }
[JsonProperty("integ_algo_pref")]
public List<int>? IntegAlgoPref { get; set; }
[JsonProperty("gbr_ul_ratio")]
public double? GbrUlRatio { get; set; }
[JsonProperty("gbr_dl_ratio")]
public double? GbrDlRatio { get; set; }
[JsonProperty("ignore_gbr_congestion")]
public bool? IgnoreGbrCongestion { get; set; }
[JsonProperty("srb3_support")]
public bool? Srb3Support { get; set; }
[JsonProperty("srb_config")]
public List<SrbConfig>? SrbConfig { get; set; }
[JsonProperty("cell_gain")]
public double? CellGain { get; set; }
[JsonProperty("band")]
public int? Band { get; set; }
[JsonProperty("dl_nr_arfcn")]
public int? DlNrArfcn { get; set; }
[JsonProperty("n_antenna_dl")]
public int? NAntennaDl { get; set; }
[JsonProperty("n_antenna_ul")]
public int? NAntennaUl { get; set; }
[JsonProperty("bandwidth")]
public int? Bandwidth { get; set; }
[JsonProperty("ul_frequency_shift_7p5_khz")]
public bool? UlFrequencyShift7p5Khz { get; set; }
[JsonProperty("pdsch_harq_ack_max")]
public int? PdschHarqAckMax { get; set; }
[JsonProperty("dmrs_type_a_pos")]
public int? DmrsTypeAPos { get; set; }
[JsonProperty("p_max")]
public double? PMax { get; set; }
[JsonProperty("rx_epre_in_dbfs")]
public bool? RxEpreInDbfs { get; set; }
[JsonProperty("rx_epre_offset")]
public double? RxEpreOffset { get; set; }
[JsonProperty("rach_ignore_count")]
public int? RachIgnoreCount { get; set; }
[JsonProperty("rar_backoff_index")]
public int? RarBackoffIndex { get; set; }
[JsonProperty("dummy_ue_contention_resolution_id")]
public bool? DummyUeContentionResolutionId { get; set; }
[JsonProperty("alternate_retx_scheme")]
public bool? AlternateRetxScheme { get; set; }
[JsonProperty("tdd_ul_dl_config")]
public TddUlDlConfig? TddUlDlConfig { get; set; }
[JsonProperty("n_timing_advance_offset")]
public int? NTimingAdvanceOffset { get; set; }
[JsonProperty("rf_port")]
public int? RfPort { get; set; }
[JsonProperty("gscn")]
public int? Gscn { get; set; }
[JsonProperty("ssb_period")]
public int? SsbPeriod { get; set; }
[JsonProperty("ssb_pos_bitmap")]
public string? SsbPosBitmap { get; set; }
[JsonProperty("ss_pbch_block_power")]
public int? SsPbchBlockPower { get; set; }
[JsonProperty("manual_ref_signal_power")]
public bool? ManualRefSignalPower { get; set; }
[JsonProperty("ssb_subcarrier_spacing")]
public int? SsbSubcarrierSpacing { get; set; }
[JsonProperty("csi_rs")]
public CsiRsConfig? CsiRs { get; set; }
[JsonProperty("prach")]
public PrachConfig? Prach { get; set; }
[JsonProperty("pdcch")]
public PdcchConfig? Pdcch { get; set; }
[JsonProperty("pdsch")]
public PdschConfig? Pdsch { get; set; }
[JsonProperty("pucch")]
public PucchConfig? Pucch { get; set; }
[JsonProperty("pusch")]
public PuschConfig? Pusch { get; set; }
[JsonProperty("sr_period")]
public int? SrPeriod { get; set; }
[JsonProperty("force_dl_schedule")]
public bool? ForceDlSchedule { get; set; }
[JsonProperty("force_full_bsr")]
public bool? ForceFullBsr { get; set; }
[JsonProperty("mac_config")]
public MacConfig? MacConfig { get; set; }
[JsonProperty("inactivity_timer")]
public int? InactivityTimer { get; set; }
[JsonProperty("eps_fallback_preferred_method")]
public string? EpsFallbackPreferredMethod { get; set; }
[JsonProperty("ho_from_meas")]
public bool? HoFromMeas { get; set; }
[JsonProperty("ho_cfra")]
public bool? HoCfra { get; set; }
[JsonProperty("t304")]
public int? T304 { get; set; }
[JsonProperty("timers_and_constants")]
public TimersAndConstants? TimersAndConstants { get; set; }
[JsonProperty("drb_config")]
public string? DrbConfig { get; set; }
}
}

17
src/X1.Domain/Models/NrCellConfiguration/NrCellConfigurationCollection.cs

@ -0,0 +1,17 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR小区配置集合
/// </summary>
public class NrCellConfigurationCollection
{
[JsonProperty("nr_cells")]
public List<NrCellConfiguration> NrCells { get; set; } = new List<NrCellConfiguration>();
[JsonProperty("total_count")]
public int TotalCount => NrCells.Count;
}
}

19
src/X1.Domain/Models/NrCellConfiguration/PagingConfig.cs

@ -0,0 +1,19 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR分页配置
/// </summary>
public class PagingConfig
{
[JsonProperty("cycle")]
public int? Cycle { get; set; }
[JsonProperty("n_frac")]
public int? NFrac { get; set; }
[JsonProperty("ns")]
public int? Ns { get; set; }
}
}

101
src/X1.Domain/Models/NrCellConfiguration/PdcchConfig.cs

@ -0,0 +1,101 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PDCCH配置
/// </summary>
public class PdcchConfig
{
[JsonProperty("css")]
public CssConfig? Css { get; set; }
[JsonProperty("dedicated_coreset")]
public DedicatedCoreset? DedicatedCoreset { get; set; }
[JsonProperty("uss")]
public UssConfig? Uss { get; set; }
[JsonProperty("rar_al_index")]
public int? RarAlIndex { get; set; }
[JsonProperty("al_index")]
public int? AlIndex { get; set; }
[JsonProperty("n_rb_coreset0")]
public int? NRbCoreset0 { get; set; }
[JsonProperty("n_symb_coreset0")]
public int? NSymbCoreset0 { get; set; }
[JsonProperty("search_space0_index")]
public int? SearchSpace0Index { get; set; }
[JsonProperty("si_al_index")]
public int? SiAlIndex { get; set; }
[JsonProperty("paging_al_index")]
public int? PagingAlIndex { get; set; }
}
/// <summary>
/// CSS配置
/// </summary>
public class CssConfig
{
[JsonProperty("n_candidates")]
public List<int>? NCandidates { get; set; }
[JsonProperty("start_symb")]
public int? StartSymb { get; set; }
}
/// <summary>
/// 专用CORESET配置
/// </summary>
public class DedicatedCoreset
{
[JsonProperty("rb_start")]
public int? RbStart { get; set; }
[JsonProperty("l_crb")]
public int? LCrb { get; set; }
[JsonProperty("duration")]
public int? Duration { get; set; }
[JsonProperty("interleaved")]
public bool? Interleaved { get; set; }
[JsonProperty("shift_index")]
public int? ShiftIndex { get; set; }
[JsonProperty("precoder_granularity")]
public string? PrecoderGranularity { get; set; }
[JsonProperty("dmrs_scid")]
public int? DmrsScid { get; set; }
}
/// <summary>
/// USS配置
/// </summary>
public class UssConfig
{
[JsonProperty("n_candidates")]
public List<int>? NCandidates { get; set; }
[JsonProperty("start_symb")]
public int? StartSymb { get; set; }
[JsonProperty("dci_0_1_and_1_1")]
public bool? Dci01And11 { get; set; }
[JsonProperty("force_dci_0_0")]
public bool? ForceDci00 { get; set; }
[JsonProperty("force_dci_1_0")]
public bool? ForceDci10 { get; set; }
}
}

95
src/X1.Domain/Models/NrCellConfiguration/PdschConfig.cs

@ -0,0 +1,95 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PDSCH配置
/// </summary>
public class PdschConfig
{
[JsonProperty("mapping_type")]
public string? MappingType { get; set; }
[JsonProperty("start_symb")]
public int? StartSymb { get; set; }
[JsonProperty("n_symb")]
public int? NSymb { get; set; }
[JsonProperty("dmrs_add_pos")]
public int? DmrsAddPos { get; set; }
[JsonProperty("dmrs_max_len")]
public int? DmrsMaxLen { get; set; }
[JsonProperty("dmrs_type")]
public int? DmrsType { get; set; }
[JsonProperty("dmrs_scid0")]
public int? DmrsScid0 { get; set; }
[JsonProperty("dmrs_scid1")]
public int? DmrsScid1 { get; set; }
[JsonProperty("k0")]
public int? K0 { get; set; }
[JsonProperty("k1")]
public List<int>? K1 { get; set; }
[JsonProperty("n_harq_process")]
public int? NHarqProcess { get; set; }
[JsonProperty("mcs_table")]
public string? McsTable { get; set; }
[JsonProperty("n_layer")]
public int? NLayer { get; set; }
[JsonProperty("dmrs_len")]
public int? DmrsLen { get; set; }
[JsonProperty("fixed_rb_alloc")]
public bool? FixedRbAlloc { get; set; }
[JsonProperty("mcs")]
public int? Mcs { get; set; }
[JsonProperty("data_scid")]
public int? DataScid { get; set; }
[JsonProperty("n_scid")]
public int? NScid { get; set; }
[JsonProperty("x_overhead")]
public int? XOverhead { get; set; }
[JsonProperty("ra_type")]
public string? RaType { get; set; }
[JsonProperty("vrb_to_prb_interleaver")]
public int? VrbToPrbInterleaver { get; set; }
[JsonProperty("rar_mcs")]
public int? RarMcs { get; set; }
[JsonProperty("rar_tb_scaling")]
public int? RarTbScaling { get; set; }
[JsonProperty("cqi_adapt_fer")]
public double? CqiAdaptFer { get; set; }
[JsonProperty("cqi_adapt_amp")]
public int? CqiAdaptAmp { get; set; }
[JsonProperty("initial_cqi")]
public int? InitialCqi { get; set; }
[JsonProperty("si_mcs")]
public int? SiMcs { get; set; }
[JsonProperty("paging_mcs")]
public int? PagingMcs { get; set; }
}
}

19
src/X1.Domain/Models/NrCellConfiguration/PlmnConfig.cs

@ -0,0 +1,19 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PLMN配置
/// </summary>
public class PlmnConfig
{
[JsonProperty("plmn")]
public string? Plmn { get; set; }
[JsonProperty("tac")]
public int? Tac { get; set; }
[JsonProperty("reserved")]
public bool? Reserved { get; set; }
}
}

52
src/X1.Domain/Models/NrCellConfiguration/PrachConfig.cs

@ -0,0 +1,52 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PRACH配置
/// </summary>
public class PrachConfig
{
[JsonProperty("prach_config_index")]
public int? PrachConfigIndex { get; set; }
[JsonProperty("msg1_subcarrier_spacing")]
public int? Msg1SubcarrierSpacing { get; set; }
[JsonProperty("msg1_fdm")]
public int? Msg1Fdm { get; set; }
[JsonProperty("msg1_frequency_start")]
public int? Msg1FrequencyStart { get; set; }
[JsonProperty("zero_correlation_zone_config")]
public int? ZeroCorrelationZoneConfig { get; set; }
[JsonProperty("preamble_received_target_power")]
public int? PreambleReceivedTargetPower { get; set; }
[JsonProperty("preamble_trans_max")]
public int? PreambleTransMax { get; set; }
[JsonProperty("power_ramping_step")]
public int? PowerRampingStep { get; set; }
[JsonProperty("ra_response_window")]
public int? RaResponseWindow { get; set; }
[JsonProperty("restricted_set_config")]
public string? RestrictedSetConfig { get; set; }
[JsonProperty("ra_contention_resolution_timer")]
public int? RaContentionResolutionTimer { get; set; }
[JsonProperty("ssb_per_prach_occasion")]
public string? SsbPerPrachOccasion { get; set; }
[JsonProperty("cb_preambles_per_ssb")]
public int? CbPreamblesPerSsb { get; set; }
[JsonProperty("total_number_of_ra_preambles")]
public int? TotalNumberOfRaPreambles { get; set; }
}
}

91
src/X1.Domain/Models/NrCellConfiguration/PucchConfig.cs

@ -0,0 +1,91 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PUCCH配置
/// </summary>
public class PucchConfig
{
[JsonProperty("pucch_resource_common")]
public int? PucchResourceCommon { get; set; }
[JsonProperty("pucch_group_hopping")]
public string? PucchGroupHopping { get; set; }
[JsonProperty("hopping_id")]
public int? HoppingId { get; set; }
[JsonProperty("p0_nominal")]
public int? P0Nominal { get; set; }
[JsonProperty("short_pucch_an_rsc_count")]
public int? ShortPucchAnRscCount { get; set; }
[JsonProperty("long_pucch_an_rsc_count")]
public int? LongPucchAnRscCount { get; set; }
[JsonProperty("pucch02_min_start_symb")]
public int? Pucch02MinStartSymb { get; set; }
[JsonProperty("pucch1")]
public Pucch1Config? Pucch1 { get; set; }
[JsonProperty("pucch3")]
public Pucch3Config? Pucch3 { get; set; }
}
/// <summary>
/// PUCCH1配置
/// </summary>
public class Pucch1Config
{
[JsonProperty("n_cs")]
public int? NCs { get; set; }
[JsonProperty("n_occ")]
public int? NOcc { get; set; }
[JsonProperty("freq_hopping")]
public bool? FreqHopping { get; set; }
[JsonProperty("start_symb")]
public int? StartSymb { get; set; }
[JsonProperty("n_symb")]
public int? NSymb { get; set; }
}
/// <summary>
/// PUCCH3配置
/// </summary>
public class Pucch3Config
{
[JsonProperty("bpsk")]
public bool? Bpsk { get; set; }
[JsonProperty("additional_dmrs")]
public bool? AdditionalDmrs { get; set; }
[JsonProperty("freq_hopping")]
public bool? FreqHopping { get; set; }
[JsonProperty("start_symb")]
public int? StartSymb { get; set; }
[JsonProperty("n_symb")]
public int? NSymb { get; set; }
[JsonProperty("max_code_rate")]
public string? MaxCodeRate { get; set; }
[JsonProperty("simultaneous_harq_ack_csi")]
public bool? SimultaneousHarqAckCsi { get; set; }
[JsonProperty("n_prb")]
public int? NPrb { get; set; }
[JsonProperty("n_prb_csi")]
public int? NPrbCsi { get; set; }
}
}

122
src/X1.Domain/Models/NrCellConfiguration/PuschConfig.cs

@ -0,0 +1,122 @@
using System.Collections.Generic;
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR PUSCH配置
/// </summary>
public class PuschConfig
{
[JsonProperty("mapping_type")]
public string? MappingType { get; set; }
[JsonProperty("n_symb")]
public int? NSymb { get; set; }
[JsonProperty("dmrs_add_pos")]
public int? DmrsAddPos { get; set; }
[JsonProperty("dmrs_max_len")]
public int? DmrsMaxLen { get; set; }
[JsonProperty("dmrs_type")]
public int? DmrsType { get; set; }
[JsonProperty("dmrs_scid0")]
public int? DmrsScid0 { get; set; }
[JsonProperty("dmrs_scid1")]
public int? DmrsScid1 { get; set; }
[JsonProperty("tf_precoding")]
public bool? TfPrecoding { get; set; }
[JsonProperty("msg3_tf_precoding")]
public bool? Msg3TfPrecoding { get; set; }
[JsonProperty("n_id_rs")]
public int? NIdRs { get; set; }
[JsonProperty("group_hopping")]
public bool? GroupHopping { get; set; }
[JsonProperty("sequence_hopping")]
public bool? SequenceHopping { get; set; }
[JsonProperty("mcs_table")]
public string? McsTable { get; set; }
[JsonProperty("mcs_table_tp")]
public string? McsTableTp { get; set; }
[JsonProperty("tp_pi2_bpsk")]
public bool? TpPi2Bpsk { get; set; }
[JsonProperty("partial_slots")]
public bool? PartialSlots { get; set; }
[JsonProperty("ldpc_max_its")]
public int? LdpcMaxIts { get; set; }
[JsonProperty("fixed_rb_alloc")]
public bool? FixedRbAlloc { get; set; }
[JsonProperty("tx_config")]
public string? TxConfig { get; set; }
[JsonProperty("codebook_subset")]
public string? CodebookSubset { get; set; }
[JsonProperty("max_rank")]
public int? MaxRank { get; set; }
[JsonProperty("n_layer")]
public int? NLayer { get; set; }
[JsonProperty("mcs")]
public int? Mcs { get; set; }
[JsonProperty("k2")]
public List<int>? K2 { get; set; }
[JsonProperty("msg3_k2")]
public int? Msg3K2 { get; set; }
[JsonProperty("msg3_delta_power")]
public int? Msg3DeltaPower { get; set; }
[JsonProperty("msg3_mcs")]
public int? Msg3Mcs { get; set; }
[JsonProperty("msg3_alpha")]
public string? Msg3Alpha { get; set; }
[JsonProperty("p0_nominal_with_grant")]
public int? P0NominalWithGrant { get; set; }
[JsonProperty("alpha")]
public string? Alpha { get; set; }
[JsonProperty("beta_offset_ack_index")]
public int? BetaOffsetAckIndex { get; set; }
[JsonProperty("data_scid")]
public int? DataScid { get; set; }
[JsonProperty("n_scid")]
public int? NScid { get; set; }
[JsonProperty("x_overhead")]
public int? XOverhead { get; set; }
[JsonProperty("cqi_adapt_amp")]
public int? CqiAdaptAmp { get; set; }
[JsonProperty("uci_scaling")]
public double? UciScaling { get; set; }
[JsonProperty("ul_snr_adapt_fer")]
public double? UlSnrAdaptFer { get; set; }
}
}

95
src/X1.Domain/Models/NrCellConfiguration/README.md

@ -0,0 +1,95 @@
# 5G NR小区配置模型
本目录包含5G NR(New Radio)小区配置的实体类定义,用于处理5G网络的小区配置参数。
## 文件结构
### 主要配置类
- `NrCellConfiguration.cs` - 5G NR小区配置主实体类
- `NrCellConfigurationCollection.cs` - 5G NR小区配置集合类
### 子配置类
- `PlmnConfig.cs` - PLMN配置
- `PagingConfig.cs` - 分页配置
- `SrbConfig.cs` - SRB配置
- `TddUlDlConfig.cs` - TDD UL/DL配置
- `CsiRsConfig.cs` - CSI-RS配置
- `PrachConfig.cs` - PRACH配置
- `PdcchConfig.cs` - PDCCH配置
- `PdschConfig.cs` - PDSCH配置
- `PucchConfig.cs` - PUCCH配置
- `PuschConfig.cs` - PUSCH配置
- `MacConfig.cs` - MAC配置
- `TimersAndConstants.cs` - 定时器和常量配置
## 主要特性
### 可空类型支持
所有属性都支持可空类型(nullable),确保在配置参数缺失时不会出现异常。
### JSON序列化
使用Newtonsoft.Json进行JSON序列化和反序列化,支持标准的JSON格式。
### 完整的5G NR参数
包含5G NR网络所需的所有主要配置参数:
- 小区基本参数(小区ID、频段、带宽等)
- 物理层配置(PDCCH、PDSCH、PUCCH、PUSCH等)
- 信道配置(CSI-RS、PRACH等)
- MAC层配置
- 定时器和常量配置
## 使用示例
```csharp
// 创建5G NR小区配置
var nrCellConfig = new NrCellConfiguration
{
CellId = 23,
NIdCell = 1,
Band = 78,
Bandwidth = 100,
DlNrArfcn = 630000,
SubcarrierSpacing = 30,
// ... 其他配置参数
};
// 序列化为JSON
string json = JsonConvert.SerializeObject(nrCellConfig, Formatting.Indented);
// 从JSON反序列化
var config = JsonConvert.DeserializeObject<NrCellConfiguration>(json);
```
## 配置参数说明
### 基本参数
- `cell_id`: 小区ID
- `n_id_cell`: 小区物理层ID
- `band`: 频段号
- `bandwidth`: 带宽(MHz)
- `dl_nr_arfcn`: 下行NR ARFCN
### 物理层配置
- `pdcch`: PDCCH配置
- `pdsch`: PDSCH配置
- `pucch`: PUCCH配置
- `pusch`: PUSCH配置
- `prach`: PRACH配置
### 信道配置
- `csi_rs`: CSI-RS配置
- `ssb_period`: SSB周期
- `ssb_pos_bitmap`: SSB位置位图
### 其他配置
- `mac_config`: MAC层配置
- `timers_and_constants`: 定时器和常量
- `srb_config`: SRB配置
- `plmn_list`: PLMN列表
## 注意事项
1. 所有数值类型属性都支持可空类型,确保配置的灵活性
2. 字符串类型属性也支持可空,避免空引用异常
3. 集合类型属性在未初始化时默认为空列表
4. 配置参数遵循3GPP 5G NR标准规范

22
src/X1.Domain/Models/NrCellConfiguration/SrbConfig.cs

@ -0,0 +1,22 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR SRB配置
/// </summary>
public class SrbConfig
{
[JsonProperty("id")]
public int? Id { get; set; }
[JsonProperty("maxRetxThreshold")]
public int? MaxRetxThreshold { get; set; }
[JsonProperty("t_PollRetransmit")]
public int? TPollRetransmit { get; set; }
[JsonProperty("t_Reassembly")]
public int? TReassembly { get; set; }
}
}

37
src/X1.Domain/Models/NrCellConfiguration/TddUlDlConfig.cs

@ -0,0 +1,37 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR TDD UL/DL配置
/// </summary>
public class TddUlDlConfig
{
[JsonProperty("pattern1")]
public TddPattern? Pattern1 { get; set; }
[JsonProperty("pattern2")]
public TddPattern? Pattern2 { get; set; }
}
/// <summary>
/// TDD模式配置
/// </summary>
public class TddPattern
{
[JsonProperty("period")]
public double? Period { get; set; }
[JsonProperty("dl_slots")]
public int? DlSlots { get; set; }
[JsonProperty("ul_slots")]
public int? UlSlots { get; set; }
[JsonProperty("dl_symbols")]
public int? DlSymbols { get; set; }
[JsonProperty("ul_symbols")]
public int? UlSymbols { get; set; }
}
}

31
src/X1.Domain/Models/NrCellConfiguration/TimersAndConstants.cs

@ -0,0 +1,31 @@
using Newtonsoft.Json;
namespace X1.Domain.Models.NrCellConfiguration
{
/// <summary>
/// 5G NR定时器和常量配置
/// </summary>
public class TimersAndConstants
{
[JsonProperty("t300")]
public int? T300 { get; set; }
[JsonProperty("t301")]
public int? T301 { get; set; }
[JsonProperty("t310")]
public int? T310 { get; set; }
[JsonProperty("n310")]
public int? N310 { get; set; }
[JsonProperty("t311")]
public int? T311 { get; set; }
[JsonProperty("n311")]
public int? N311 { get; set; }
[JsonProperty("t319")]
public int? T319 { get; set; }
}
}

4
src/X1.Domain/X1.Domain.csproj

@ -15,4 +15,8 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>
<Folder Include="Models\NrCellConfiguration\" />
</ItemGroup>
</Project>

Loading…
Cancel
Save