Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
nearlink-sdr 1.0.9 文档
nearlink-sdr 1.0.9 文档
  • 快速入门
  • 操作指南
    • 运行链路仿真
    • 添加新的调制方式
    • QoS 服务质量管理
    • 使用 SLE 节点实体
    • Rust 加速模块
    • SDR E310 部署规划
    • 构建文档
  • 技术参考
    • nearlink_sdr
      • nearlink_sdr.mac
        • nearlink_sdr.mac.access
        • nearlink_sdr.mac.broadcast
        • nearlink_sdr.mac.crypto
        • nearlink_sdr.mac.frame
        • nearlink_sdr.mac.link_control
        • nearlink_sdr.mac.link_manager
        • nearlink_sdr.mac.power_control
        • nearlink_sdr.mac.qos
        • nearlink_sdr.mac.scheduler
        • nearlink_sdr.mac.security
        • nearlink_sdr.mac.security_manager
        • nearlink_sdr.mac.signaling
        • nearlink_sdr.mac.smf
        • nearlink_sdr.mac.smf_scheduler
      • nearlink_sdr.sim
        • nearlink_sdr.sim.link_sim
        • nearlink_sdr.sim.usrp_sim
      • nearlink_sdr.common
        • nearlink_sdr.common.bch
        • nearlink_sdr.common.code_block_seg
        • nearlink_sdr.common.crc
        • nearlink_sdr.common.m_sequence
        • nearlink_sdr.common.mcs
        • nearlink_sdr.common.polar
        • nearlink_sdr.common.prbs
        • nearlink_sdr.common.scrambler
      • nearlink_sdr.phy
        • nearlink_sdr.phy.channel
        • nearlink_sdr.phy.control_info
        • nearlink_sdr.phy.data_link
        • nearlink_sdr.phy.equalizer
        • nearlink_sdr.phy.frame
        • nearlink_sdr.phy.freq_hopping
        • nearlink_sdr.phy.gfsk
        • nearlink_sdr.phy.mac_interface
        • nearlink_sdr.phy.measurement
        • nearlink_sdr.phy.measurement_frame
        • nearlink_sdr.phy.measurement_tx
        • nearlink_sdr.phy.mock_backend
        • nearlink_sdr.phy.multitone
        • nearlink_sdr.phy.pilot
        • nearlink_sdr.phy.pluto_backend
        • nearlink_sdr.phy.preamble
        • nearlink_sdr.phy.psk
        • nearlink_sdr.phy.rf_compliance
        • nearlink_sdr.phy.rx_pipeline
        • nearlink_sdr.phy.sdr_backend
        • nearlink_sdr.phy.sync_sequence
        • nearlink_sdr.phy.tx_pipeline
        • nearlink_sdr.phy.uhd_backend
        • nearlink_sdr.phy.usrp
        • nearlink_sdr.phy.uwb_measurement_security
        • nearlink_sdr.phy.uwb_pulse
      • nearlink_sdr.node
  • 设计说明
    • SparkLink SLE 协议总览
    • 物理层原理
    • 物理层详解
    • MAC 层详解
    • 安全子系统详解
    • 端到端数据流
    • 系统架构
    • 标准条款映射
  • 更新日志
  • API Reference
    • nearlink_sdr
      • nearlink_sdr.mac
        • nearlink_sdr.mac.access
        • nearlink_sdr.mac.broadcast
        • nearlink_sdr.mac.crypto
        • nearlink_sdr.mac.frame
        • nearlink_sdr.mac.link_control
        • nearlink_sdr.mac.link_manager
        • nearlink_sdr.mac.power_control
        • nearlink_sdr.mac.qos
        • nearlink_sdr.mac.scheduler
        • nearlink_sdr.mac.security
        • nearlink_sdr.mac.security_manager
        • nearlink_sdr.mac.signaling
        • nearlink_sdr.mac.smf
        • nearlink_sdr.mac.smf_scheduler
      • nearlink_sdr.sim
        • nearlink_sdr.sim.link_sim
        • nearlink_sdr.sim.usrp_sim
      • nearlink_sdr.common
        • nearlink_sdr.common.bch
        • nearlink_sdr.common.code_block_seg
        • nearlink_sdr.common.crc
        • nearlink_sdr.common.m_sequence
        • nearlink_sdr.common.mcs
        • nearlink_sdr.common.polar
        • nearlink_sdr.common.prbs
        • nearlink_sdr.common.scrambler
      • nearlink_sdr.phy
        • nearlink_sdr.phy.channel
        • nearlink_sdr.phy.control_info
        • nearlink_sdr.phy.data_link
        • nearlink_sdr.phy.equalizer
        • nearlink_sdr.phy.frame
        • nearlink_sdr.phy.freq_hopping
        • nearlink_sdr.phy.gfsk
        • nearlink_sdr.phy.mac_interface
        • nearlink_sdr.phy.measurement
        • nearlink_sdr.phy.measurement_frame
        • nearlink_sdr.phy.measurement_tx
        • nearlink_sdr.phy.mock_backend
        • nearlink_sdr.phy.multitone
        • nearlink_sdr.phy.pilot
        • nearlink_sdr.phy.pluto_backend
        • nearlink_sdr.phy.preamble
        • nearlink_sdr.phy.psk
        • nearlink_sdr.phy.rf_compliance
        • nearlink_sdr.phy.rx_pipeline
        • nearlink_sdr.phy.sdr_backend
        • nearlink_sdr.phy.sync_sequence
        • nearlink_sdr.phy.tx_pipeline
        • nearlink_sdr.phy.uhd_backend
        • nearlink_sdr.phy.usrp
        • nearlink_sdr.phy.uwb_measurement_security
        • nearlink_sdr.phy.uwb_pulse
      • nearlink_sdr.node
Back to top
View this page

nearlink_sdr.phy.data_link¶

异步/同步数据链路传输规程 (标准 6.5.1 ~ 6.5.3)。

实现数据链路参数管理、流控决策、同步数据丢弃机制、 事件组集合调度, 以及同步业务适配 (周期/非周期) 的 分段重组逻辑。

Module Contents¶

Classes¶

AdaptMode

同步业务适配方式 (6.5.3.1)。

AperiodicFragment

非周期适配分片 (6.5.3.3)。

AperiodicServiceAdaptor

同步数据链路非周期适配 (6.5.3.3)。

AsyncDataLinkParams

异步数据链路参数 (6.5.1.2)。

AsyncFlowControl

异步数据链路流控决策 (6.5.1.3)。

EventGroupSet

事件组集合 (6.5.2.5)。

PeriodicServiceAdaptor

同步数据链路周期适配 (6.5.3.2)。

SyncDataDiscard

同步数据丢弃机制 (6.5.2.4)。

SyncDataLinkParams

同步数据链路参数 (6.5.2.2)。

SyncFlowControl

同步数据链路流控 (6.5.2.3)。

TransmissionMode

传输模式 (6.5.1.4 ~ 6.5.1.7, 6.5.2.6 ~ 6.5.2.10)。

API¶

class nearlink_sdr.phy.data_link.AdaptMode[源代码]¶

Bases: enum.IntEnum

同步业务适配方式 (6.5.3.1)。

Initialization

Initialize self. See help(type(self)) for accurate signature.

PERIODIC¶

0

APERIODIC¶

1

class nearlink_sdr.phy.data_link.AperiodicFragment[源代码]¶

非周期适配分片 (6.5.3.3)。

is_first: bool¶

False

is_last: bool¶

False

time_offset_us: int¶

0

data: bytes¶

b''

class nearlink_sdr.phy.data_link.AperiodicServiceAdaptor(pdu_max: int = 251, header_size: int = 4)[源代码]¶

同步数据链路非周期适配 (6.5.3.3)。

将 SDU 分片, 每个包含首段的分片携带时间偏移量。

Initialization

fragment_sdu(sdu: bytes, time_offset_us: int = 0) → list[nearlink_sdr.phy.data_link.AperiodicFragment][源代码]¶

将 SDU 分片。

reassemble_sdu(fragments: list[nearlink_sdr.phy.data_link.AperiodicFragment]) → tuple[bytes, int][源代码]¶

从分片重组 SDU, 返回 (sdu, time_offset_us)。

rx_deliver_time(event_group_start_us: int, sync_anchor_delay_us: int, discard_period: int, event_group_period_us: int, sdu_period_us: int, sdu_time_offset_us: int) → int[源代码]¶

接收端 r1 (6.5.3.3.2)。

class nearlink_sdr.phy.data_link.AsyncDataLinkParams[源代码]¶

异步数据链路参数 (6.5.1.2)。

event_group_start_us: int¶

0

event_group_period_us: int¶

0

event_period_us: int¶

0

intra_event_interval_us: int¶

0

inter_event_interval_us: int¶

0

event_group_interval_us: int¶

0

first_tx: bool¶

True

tx_pdu_max: int¶

251

rx_pdu_max: int¶

251

tx_max_time_us: int¶

0

rx_max_time_us: int¶

0

tx_time_offset: int¶

0

rx_time_offset: int¶

0

tx_max_time_offset: int¶

0

rx_max_time_offset: int¶

0

tx_sdu_max: int¶

0

rx_sdu_max: int¶

0

mode: nearlink_sdr.phy.data_link.TransmissionMode¶

None

property max_event_length: int¶

事件最大长度 = 先发最大偏移 + 后发最大偏移。

class nearlink_sdr.phy.data_link.AsyncFlowControl[源代码]¶

异步数据链路流控决策 (6.5.1.3)。

根据标准规则, 判断先发节点是否应停止在当前事件组 后续事件中发送。

should_stop_unicast_tx(tx_flow_ctrl: int, rx_flow_ctrl: int | None, rx_ack: bool | None, rx_data_len: int | None) → bool[源代码]¶

单播先发节点停止条件 (6.5.1.3)。

条件一: 先发发送 flow_ctrl=0 且收到后发 flow_ctrl=0, ACK, data_len=0 条件二: 先发发送了消息但未收到后发消息 (rx 参数为 None)

should_stop_multicast_semi_reliable(tx_flow_ctrl: int, any_nack: bool) → bool[源代码]¶

半可靠组播组长停止条件。

组长发送 flow=0 且未收到任何 NACK。

should_stop_multicast_full(tx_flow_ctrl: int, member_feedbacks: list[tuple[int, bool, int]]) → bool[源代码]¶

非半可靠组播/双向组播组长停止条件。

组长发送 flow=0, 收到所有组员 flow=0、ACK、data_len=0。

should_stop_feedback_multicast_leader(tx_flow_ctrl: int, member_feedbacks: list[tuple[int, bool, int]]) → bool[源代码]¶

反馈组播组长停止条件, 同 should_stop_multicast_full。

should_stop_feedback_multicast_member(prev_flow_ctrl: int, leader_ack: bool) → bool[源代码]¶

反馈组播组员停止条件。

前一事件中组员发送 flow=0, 当前事件收到组长 ACK=成功。

class nearlink_sdr.phy.data_link.EventGroupSet[源代码]¶

事件组集合 (6.5.2.5)。

多个具有相同事件组周期的事件组可组合为事件组集合。

event_group_count: int¶

1

event_group_spacing_slots: int¶

0

event_group_period_us: int¶

0

schedule_slot_us: int¶

125

event_group_offsets() → list[int][源代码]¶

返回集合中各事件组相对于集合起始的偏移 (μs)。

set_duration_us() → int[源代码]¶

集合总时长 (μs): 最后一个事件组起始 + 事件组周期。

validate() → bool[源代码]¶

校验事件组集合的时间资源不能交叠。

class nearlink_sdr.phy.data_link.PeriodicServiceAdaptor[源代码]¶

同步数据链路周期适配 (6.5.3.2)。

将上层 SDU 分段为 PDU, 并按事件组周期进行时间同步。

sdu_max: int¶

256

pdu_max: int¶

251

event_group_period_us: int¶

0

sdu_period_us: int¶

0

sync_ref_delay_us: int¶

0

sync_anchor_delay_us: int¶

0

discard_period: int¶

3

property segments_per_sdu: int¶

每个 SDU 需要的 PDU 分段数。

property sdus_per_event_group: int¶

每个事件组周期内传输的 SDU 数量。

property frames_per_event_group: int¶

每个事件组周期内传输的无线帧数。

segment_sdu(sdu: bytes) → list[bytes][源代码]¶

将 SDU 分段为 PDU 列表。

reassemble_sdu(pdus: list[bytes]) → bytes[源代码]¶

将 PDU 列表重组为 SDU。

tx_accept_time(event_group_start_us: int) → int[源代码]¶

发送端 t0: 开始接收 SDU 的时刻。

rx_deliver_time(event_group_start_us: int) → int[源代码]¶

接收端 r1: 向高层递交第一个 SDU 的时刻。

class nearlink_sdr.phy.data_link.SyncDataDiscard[源代码]¶

同步数据丢弃机制 (6.5.2.4)。

跟踪发送序列号、本地基准值和有效载荷计数, 支持 主动丢弃和被动丢弃判定。

new_pkt_count: int¶

2

discard_period: int¶

3

tx_sn: int¶

0

event_group_index: int¶

0

payload_count: int¶

0

property local_baseline: int¶

本地基准值 (6.5.2.4)。

on_ack() → None[源代码]¶

收到 ACK, 发送序列号 +1。

on_nack_or_timeout() → None[源代码]¶

收到 NACK 或未收到反馈, 序列号不变。

on_event_group_boundary() → None[源代码]¶

跨事件组边界, 更新序列号和事件组索引。

is_discarded(payload_id: int) → bool[源代码]¶

判定 payload_id 是否已被被动丢弃。

should_active_discard(max_retransmit: int) → bool[源代码]¶

主动丢弃判定: 对于 FT3/FT4, 发送端可自主决定。

active_discard() → None[源代码]¶

执行主动丢弃, 翻转序列号发送下一包。

class nearlink_sdr.phy.data_link.SyncDataLinkParams[源代码]¶

同步数据链路参数 (6.5.2.2)。

event_group_start_us: int¶

0

event_group_period_us: int¶

0

event_period_us: int¶

0

intra_event_interval_us: int¶

0

inter_event_interval_us: int¶

0

event_group_interval_us: int¶

0

event_count: int¶

1

first_tx: bool¶

True

tx_pdu_max: int¶

251

rx_pdu_max: int¶

251

tx_max_time_us: int¶

0

rx_max_time_us: int¶

0

tx_time_offset: int¶

0

rx_time_offset: int¶

0

tx_max_time_offset: int¶

0

rx_max_time_offset: int¶

0

tx_sdu_max: int¶

0

rx_sdu_max: int¶

0

new_pkt_count: int¶

1

discard_period: int¶

3

adapt_mode: nearlink_sdr.phy.data_link.AdaptMode¶

None

sync_anchor_delay_us: int¶

0

sync_ref_delay_us: int¶

0

mode: nearlink_sdr.phy.data_link.TransmissionMode¶

None

property max_event_length: int¶
class nearlink_sdr.phy.data_link.SyncFlowControl[源代码]¶

同步数据链路流控 (6.5.2.3)。

与异步流控逻辑基本一致, 但同步链路中先发节点在 满足停止条件后直接停止, 后发节点的行为由事件组 内事件总数约束。

should_stop_unicast_tx(tx_flow_ctrl: int, rx_flow_ctrl: int | None, rx_ack: bool | None, rx_data_len: int | None) → bool[源代码]¶

单播先发停止 (6.5.2.3)。

should_stop_multicast_semi_reliable(tx_flow_ctrl: int, any_nack: bool) → bool[源代码]¶
should_stop_multicast_full(tx_flow_ctrl: int, member_feedbacks: list[tuple[int, bool, int]]) → bool[源代码]¶
should_stop_feedback_leader(tx_flow_ctrl: int, member_feedbacks: list[tuple[int, bool, int]]) → bool[源代码]¶
should_stop_feedback_member(prev_flow_ctrl: int, leader_ack: bool) → bool[源代码]¶
class nearlink_sdr.phy.data_link.TransmissionMode[源代码]¶

Bases: enum.IntEnum

传输模式 (6.5.1.4 ~ 6.5.1.7, 6.5.2.6 ~ 6.5.2.10)。

Initialization

Initialize self. See help(type(self)) for accurate signature.

UNICAST¶

0

MULTICAST¶

1

BIDIRECTIONAL_MULTICAST¶

2

FEEDBACK_MULTICAST¶

3

BROADCAST_ASYNC¶

4

BROADCAST_SYNC¶

5

Next
nearlink_sdr.phy.equalizer
Previous
nearlink_sdr.phy.control_info
Copyright ©
Made with Sphinx and @pradyunsg's Furo
On this page
  • nearlink_sdr.phy.data_link
    • Module Contents
      • Classes
      • API
        • AdaptMode
          • AdaptMode.PERIODIC
          • AdaptMode.APERIODIC
        • AperiodicFragment
          • AperiodicFragment.is_first
          • AperiodicFragment.is_last
          • AperiodicFragment.time_offset_us
          • AperiodicFragment.data
        • AperiodicServiceAdaptor
          • AperiodicServiceAdaptor.fragment_sdu()
          • AperiodicServiceAdaptor.reassemble_sdu()
          • AperiodicServiceAdaptor.rx_deliver_time()
        • AsyncDataLinkParams
          • AsyncDataLinkParams.event_group_start_us
          • AsyncDataLinkParams.event_group_period_us
          • AsyncDataLinkParams.event_period_us
          • AsyncDataLinkParams.intra_event_interval_us
          • AsyncDataLinkParams.inter_event_interval_us
          • AsyncDataLinkParams.event_group_interval_us
          • AsyncDataLinkParams.first_tx
          • AsyncDataLinkParams.tx_pdu_max
          • AsyncDataLinkParams.rx_pdu_max
          • AsyncDataLinkParams.tx_max_time_us
          • AsyncDataLinkParams.rx_max_time_us
          • AsyncDataLinkParams.tx_time_offset
          • AsyncDataLinkParams.rx_time_offset
          • AsyncDataLinkParams.tx_max_time_offset
          • AsyncDataLinkParams.rx_max_time_offset
          • AsyncDataLinkParams.tx_sdu_max
          • AsyncDataLinkParams.rx_sdu_max
          • AsyncDataLinkParams.mode
          • AsyncDataLinkParams.max_event_length
        • AsyncFlowControl
          • AsyncFlowControl.should_stop_unicast_tx()
          • AsyncFlowControl.should_stop_multicast_semi_reliable()
          • AsyncFlowControl.should_stop_multicast_full()
          • AsyncFlowControl.should_stop_feedback_multicast_leader()
          • AsyncFlowControl.should_stop_feedback_multicast_member()
        • EventGroupSet
          • EventGroupSet.event_group_count
          • EventGroupSet.event_group_spacing_slots
          • EventGroupSet.event_group_period_us
          • EventGroupSet.schedule_slot_us
          • EventGroupSet.event_group_offsets()
          • EventGroupSet.set_duration_us()
          • EventGroupSet.validate()
        • PeriodicServiceAdaptor
          • PeriodicServiceAdaptor.sdu_max
          • PeriodicServiceAdaptor.pdu_max
          • PeriodicServiceAdaptor.event_group_period_us
          • PeriodicServiceAdaptor.sdu_period_us
          • PeriodicServiceAdaptor.sync_ref_delay_us
          • PeriodicServiceAdaptor.sync_anchor_delay_us
          • PeriodicServiceAdaptor.discard_period
          • PeriodicServiceAdaptor.segments_per_sdu
          • PeriodicServiceAdaptor.sdus_per_event_group
          • PeriodicServiceAdaptor.frames_per_event_group
          • PeriodicServiceAdaptor.segment_sdu()
          • PeriodicServiceAdaptor.reassemble_sdu()
          • PeriodicServiceAdaptor.tx_accept_time()
          • PeriodicServiceAdaptor.rx_deliver_time()
        • SyncDataDiscard
          • SyncDataDiscard.new_pkt_count
          • SyncDataDiscard.discard_period
          • SyncDataDiscard.tx_sn
          • SyncDataDiscard.event_group_index
          • SyncDataDiscard.payload_count
          • SyncDataDiscard.local_baseline
          • SyncDataDiscard.on_ack()
          • SyncDataDiscard.on_nack_or_timeout()
          • SyncDataDiscard.on_event_group_boundary()
          • SyncDataDiscard.is_discarded()
          • SyncDataDiscard.should_active_discard()
          • SyncDataDiscard.active_discard()
        • SyncDataLinkParams
          • SyncDataLinkParams.event_group_start_us
          • SyncDataLinkParams.event_group_period_us
          • SyncDataLinkParams.event_period_us
          • SyncDataLinkParams.intra_event_interval_us
          • SyncDataLinkParams.inter_event_interval_us
          • SyncDataLinkParams.event_group_interval_us
          • SyncDataLinkParams.event_count
          • SyncDataLinkParams.first_tx
          • SyncDataLinkParams.tx_pdu_max
          • SyncDataLinkParams.rx_pdu_max
          • SyncDataLinkParams.tx_max_time_us
          • SyncDataLinkParams.rx_max_time_us
          • SyncDataLinkParams.tx_time_offset
          • SyncDataLinkParams.rx_time_offset
          • SyncDataLinkParams.tx_max_time_offset
          • SyncDataLinkParams.rx_max_time_offset
          • SyncDataLinkParams.tx_sdu_max
          • SyncDataLinkParams.rx_sdu_max
          • SyncDataLinkParams.new_pkt_count
          • SyncDataLinkParams.discard_period
          • SyncDataLinkParams.adapt_mode
          • SyncDataLinkParams.sync_anchor_delay_us
          • SyncDataLinkParams.sync_ref_delay_us
          • SyncDataLinkParams.mode
          • SyncDataLinkParams.max_event_length
        • SyncFlowControl
          • SyncFlowControl.should_stop_unicast_tx()
          • SyncFlowControl.should_stop_multicast_semi_reliable()
          • SyncFlowControl.should_stop_multicast_full()
          • SyncFlowControl.should_stop_feedback_leader()
          • SyncFlowControl.should_stop_feedback_member()
        • TransmissionMode
          • TransmissionMode.UNICAST
          • TransmissionMode.MULTICAST
          • TransmissionMode.BIDIRECTIONAL_MULTICAST
          • TransmissionMode.FEEDBACK_MULTICAST
          • TransmissionMode.BROADCAST_ASYNC
          • TransmissionMode.BROADCAST_SYNC