From f13a84aaa0c54ede53bb44f75abec9ed1b71375f Mon Sep 17 00:00:00 2001 From: Lewis Moten Date: Tue, 14 May 2024 02:25:19 -0400 Subject: [PATCH] add crc and sequence numbers to packets --- Panels/PacketizationPanel.js | 40 +++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/Panels/PacketizationPanel.js b/Panels/PacketizationPanel.js index 209e161..1ca212c 100644 --- a/Panels/PacketizationPanel.js +++ b/Panels/PacketizationPanel.js @@ -1,5 +1,5 @@ import BasePanel from './BasePanel'; -import { byteSize } from '../Humanize'; +import { byteSize, metricNumber } from '../Humanize'; class PacketizationPanel extends BasePanel { constructor() { @@ -38,7 +38,23 @@ class PacketizationPanel extends BasePanel { this.addDynamicText('size', 'n/a') this.closeField(); - this.addCheckboxes('packet-encoding', [ + this.openField('CRC'); + this.addDropdown('packet-crc', [ + {text: 'None', value: 0}, + {text: 'CRC-8', value: 8}, + {text: 'CRC-16', value: 16}, + {text: 'CRC-32', value: 32}, + ], 'packetCrcChange'); + this.closeField(); + + this.openField('Sequence Numbers'); + this.addText('2^'); + this.addInputNumber('sequence-power', 0, {min: 0, max: 16, eventName: 'sequenceNumberPowerChange', translation: 'power of 2'}); + this.addText(' '); + this.addDynamicText('sequence-max', 'n/a') + this.closeField(); + + this.addCheckboxes('packet-options', [ { text: 'Error Correction', id: 'error-correction', checked: true, eventName: 'errorCorrectionChange' }, ]); @@ -55,6 +71,11 @@ class PacketizationPanel extends BasePanel { this.addEventListener('dataSizePowerChange', this.handleDataSizePowerChange); this.dispatcher.emit('dataSizePowerChange', {value: this.getDataSizePower()}); this.dispatcher.emit('dataSizeChange', {value: this.getDataSize()}); + + this.addEventListener('sequenceNumberPowerChange', ({value}) => { + this.setValueById('sequence-max', metricNumber(this.getMaxSequenceNumber())) + }) + this.dispatcher.emit('sequenceNumberPowerChange', ({ value: this.getMaxSequenceNumber() })) }; getSizePower = () => this.getNumberById('size-power'); @@ -81,7 +102,20 @@ class PacketizationPanel extends BasePanel { setDataSizeCrc = bitLength => this.setValueById('data-size-crc', bitLength) getDataCrc = () => this.getNumberById('data-crc'); - setDataCrc = bitLength => this.setValueById('data-crc', bitLength) + setDataCrc = bitLength => this.setValueById('data-crc', bitLength); + + getPacketCrc = () => this.getNumberById('packet-crc'); + setPacketCrc = (bitLength) => this.setValueById('packet-crc', bitLength); + + getSequenceNumberPower = () => this.getNumberById('sequence-power'); + setSequenceNumberPower = (count) => { + this.setValueById('sequence-power', count); + this.dispatcher.emit('sequenceNumberPowerChange', {value: this.getMaxSequenceNumber()}); + } + getMaxSequenceNumber = () => { + const power = this.getSequenceNumberPower(); + return power === 0 ? Infinity : 2 ** power; + } getInterleaving = () => this.getCheckedById('interleaving'); setInterleaving = (value) => this.setCheckedById('interleaving', value);