LtiSubordinateLtChannelAgent constructor

LtiSubordinateLtChannelAgent({
  1. required Axi5SystemInterface sys,
  2. required LtiLtChannelInterface lt,
  3. required Component parent,
  4. String name = 'ltiSubordinateLtChannelAgent',
  5. int? timeoutCycles,
  6. int? dropDelayCycles,
})

Constructs a new LtiSubordinateLtChannelAgent.

Implementation

LtiSubordinateLtChannelAgent({
  required this.sys,
  required this.lt,
  required Component parent,
  String name = 'ltiSubordinateLtChannelAgent',
  this.timeoutCycles,
  this.dropDelayCycles,
}) : super(name, parent) {
  // credit tracking per virtual channel
  for (var i = 0; i < lt.vcCount; i++) {
    _creditCounts.add(0);
  }

  sequencer = Sequencer<LtiLtChannelPacket>(
      'ltiSubordinateLtChannelAgentSequencer', this);

  driver = LtiLtChannelDriver(
    parent: this,
    sys: sys,
    lt: lt,
    sequencer: sequencer,
    timeoutCycles: timeoutCycles,
    dropDelayCycles: dropDelayCycles,
    hasCredits: () => _creditCounts[0] > 0, // only 1 VC
    updateCredits: () => _creditCounts[0]--,
  );

  monitor = LtiCreditMonitor(sys: sys, trans: lt, parent: this);

  // credit returns
  monitor.stream.listen((c) {
    // only 1 VC
    if (c.credit > 0) {
      _creditCounts[0]++;
    }
  });
}