LtiMainLaChannelAgent constructor

LtiMainLaChannelAgent({
  1. required Axi5SystemInterface sys,
  2. required LtiLaChannelInterface la,
  3. required Component parent,
  4. String name = 'ltiMainLaChannelAgent',
  5. int? timeoutCycles,
  6. int? dropDelayCycles,
})

Constructs a new LtiMainLaChannelAgent.

Implementation

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

  sequencer =
      Sequencer<LtiLaChannelPacket>('ltiMainLaChannelAgentSequencer', this);

  driver = LtiLaChannelDriver(
    parent: this,
    sys: sys,
    la: la,
    sequencer: sequencer,
    timeoutCycles: timeoutCycles,
    dropDelayCycles: dropDelayCycles,
    hasCredits: (vc) => _creditCounts[vc] > 0,
    updateCredits: (vc) => _creditCounts[vc]--,
  );

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

  // credit returns
  monitor.stream.listen((c) {
    final lv = LogicValue.ofInt(c.credit, la.vcCount);
    for (var i = 0; i < lv.width; i++) {
      if (lv[i].toBool()) {
        _creditCounts[i]++;
      }
    }
  });
}