changing to support individual packet crc
This commit is contained in:
119
index.js
119
index.js
@@ -125,6 +125,8 @@ function handleWindowLoad() {
|
||||
packetizationPanel.setDataSizePower(16);
|
||||
packetizationPanel.setDataSizeCrc(8);
|
||||
packetizationPanel.setDataCrc(16);
|
||||
packetizationPanel.setPacketCrc(8);
|
||||
packetizationPanel.setSequenceNumberPower(16);
|
||||
|
||||
packetizationPanel.setErrorCorrection(true);
|
||||
packetizationPanel.setInterleaving(true);
|
||||
@@ -191,6 +193,8 @@ function handleWindowLoad() {
|
||||
packetizationPanel.addEventListener('dataSizePowerChange', configurationChanged);
|
||||
packetizationPanel.addEventListener('dataSizeCrcChange', configurationChanged);
|
||||
packetizationPanel.addEventListener('dataCrcChange', configurationChanged);
|
||||
packetizationPanel.addEventListener('packetCrcChange', configurationChanged);
|
||||
packetizationPanel.addEventListener('sequenceNumberPowerChange', configurationChanged);
|
||||
|
||||
availableFskPairsPanel.addEventListener('change', (event) => {
|
||||
frequencyGraphPanel.setFskPairs(event.selected);
|
||||
@@ -265,9 +269,7 @@ const handleReceivePanelStart = ({signalStart}) => {
|
||||
const handleReceivePanelReceive = ({signalStart, signalIndex, indexStart, bits}) => {
|
||||
const packetIndex = PacketUtils.getPacketIndex(signalStart, indexStart);
|
||||
const segmentIndex = PacketUtils.getPacketSegmentIndex(signalStart, indexStart);
|
||||
// Getting all 1's for only the first 5 segments?
|
||||
// console.log(signalIndex, packetIndex, segmentIndex, bits.join(''));
|
||||
StreamManager.addBits(packetIndex, segmentIndex, bits);
|
||||
StreamManager.addSample(packetIndex, segmentIndex, bits);
|
||||
}
|
||||
const handleReceivePanelEnd = (e) => {
|
||||
frequencyGraphPanel.setSignalEnd(e.signalEnd);
|
||||
@@ -329,6 +331,8 @@ function updatePacketUtils() {
|
||||
packetEncoding: packetizationPanel.getErrorCorrection(),
|
||||
packetEncodingBitCount: ERROR_CORRECTION_BLOCK_SIZE,
|
||||
packetDecodingBitCount: ERROR_CORRECTION_DATA_SIZE,
|
||||
packetSequenceNumberBitCount: packetizationPanel.getSequenceNumberPower(),
|
||||
packetCrcBitCount: packetizationPanel.getPacketCrc()
|
||||
});
|
||||
speedPanel.setMaximumDurationMilliseconds(PacketUtils.getMaxDurationMilliseconds());
|
||||
speedPanel.setDataBitsPerSecond(PacketUtils.getEffectiveBaud());
|
||||
@@ -446,20 +450,17 @@ function sendBytes(bytes) {
|
||||
dataCrcNumber = CRC.check(bytes, dataCrcBitLength);
|
||||
dataCrcBits = numberToBits(dataCrcNumber, dataCrcBitLength);
|
||||
}
|
||||
console.log('sending headers', {
|
||||
// dataLengthBits,
|
||||
// dataLengthCrcBits,
|
||||
// dataCrcBits,
|
||||
dataCrcHex: numberToHex(packetizationPanel.getDataCrc())(dataCrcNumber),
|
||||
dataSizeCrcHex: numberToHex(packetizationPanel.getDataSizeCrc())(dataSizeCrcNumber),
|
||||
})
|
||||
|
||||
// prefix with headers
|
||||
bits.unshift(
|
||||
const headers = [
|
||||
...dataLengthBits,
|
||||
...dataLengthCrcBits,
|
||||
...dataCrcBits
|
||||
);
|
||||
];
|
||||
// pad headers to take full bytes
|
||||
while(headers.length % 8 !== 0) {
|
||||
headers.push(0);
|
||||
}
|
||||
// prefix bits with headers
|
||||
bits.unshift(...headers);
|
||||
|
||||
const bitCount = bits.length;
|
||||
|
||||
@@ -474,10 +475,12 @@ function sendBytes(bytes) {
|
||||
const packetCount = PacketUtils.getPacketCount(bitCount);
|
||||
const totalDurationSeconds = PacketUtils.getDataTransferDurationSeconds(bitCount);
|
||||
|
||||
const packer = PacketUtils.pack(bits);
|
||||
|
||||
AudioSender.beginAt(startSeconds);
|
||||
// send all packets
|
||||
for(let i = 0; i < packetCount; i++) {
|
||||
let packet = PacketUtils.getPacketBits(bits, i);
|
||||
let packet = packer.getBits(i);
|
||||
SENT_ENCODED_BITS.push(...packet);
|
||||
if(packet.length > packetBitCount) {
|
||||
console.error('Too many bits in the packet. tried to send %s, limited to %s', packet.length, packetBitCount);
|
||||
@@ -576,92 +579,8 @@ function resumeGraph() {
|
||||
}
|
||||
|
||||
function handleStreamManagerChange() {
|
||||
const channelCount = availableFskPairsPanel.getSelectedFskPairs().length;
|
||||
let allRawBits = StreamManager.getStreamBits();
|
||||
let allEncodedBits = StreamManager.getAllPacketBits();
|
||||
let allDecodedBits = StreamManager.getAllPacketBitsDecoded();
|
||||
|
||||
// get packet data before removing decoded bits
|
||||
const transmissionByteCount = StreamManager.getTransferByteCount();
|
||||
const transmissionByteCountCrc = StreamManager.getTransferByteCountCrc();
|
||||
const transmissionByteCountActualCrc = StreamManager.getTransferByteCountActualCrc();
|
||||
|
||||
const trustedLength = StreamManager.isTransferByteCountTrusted();
|
||||
const totalBitsTransferring = parseTotalBitsTransferring(allDecodedBits);
|
||||
|
||||
const transmissionDataCrc = StreamManager.getTransferDataCrc();
|
||||
const transmissionDataActualCrc = StreamManager.getTransferActualDataCrc();
|
||||
const transmissionCrc = document.getElementById('received-packet-original-data-crc');
|
||||
transmissionCrc.innerText = numberToHex(packetizationPanel.getDataCrc())(transmissionDataCrc);
|
||||
const trustedData = StreamManager.isTransferDataTrusted();
|
||||
transmissionCrc.className = trustedData ? 'bit-correct' : 'bit-wrong';
|
||||
if(!trustedData) {
|
||||
transmissionCrc.innerText += ' (Expected ' + numberToHex(packetizationPanel.getDataCrc())(transmissionDataActualCrc) + ')';
|
||||
}
|
||||
|
||||
// reduce all decoded bits based on original data sent
|
||||
allDecodedBits = removeDecodedHeadersAndPadding(allDecodedBits);
|
||||
|
||||
// reduce encoded bits based on original data sent
|
||||
allEncodedBits = removeEncodedPadding(allEncodedBits);
|
||||
|
||||
const encodedBitCount = SENT_ENCODED_BITS.length;
|
||||
const decodedBitCount = SENT_ORIGINAL_BITS.length;
|
||||
const rawBitCount = SENT_TRANSFER_BITS.length;
|
||||
|
||||
const correctRawBits = allRawBits.filter((b, i) => i < rawBitCount && b === SENT_TRANSFER_BITS[i]).length;
|
||||
const correctEncodedBits = allEncodedBits.filter((b, i) => i < encodedBitCount && b === SENT_ENCODED_BITS[i]).length;
|
||||
const correctedDecodedBits = allDecodedBits.filter((b, i) => i < decodedBitCount && b === SENT_ORIGINAL_BITS[i]).length;
|
||||
|
||||
let percentReceived = StreamManager.sumTotalBits() / totalBitsTransferring;
|
||||
receivePanel.setProgress(percentReceived);
|
||||
|
||||
bitsReceivedPanel.setCode(allRawBits
|
||||
.reduce(
|
||||
bitExpectorReducer(
|
||||
SENT_TRANSFER_BITS,
|
||||
PacketUtils.getPacketMaxBitCount() + PacketUtils.getPacketLastSegmentUnusedBitCount(),
|
||||
channelCount,
|
||||
(packetIndex, blockIndex) => `${blockIndex === 0 ? '' : '<br>'}Segment ${blockIndex}: `
|
||||
),
|
||||
''));
|
||||
if(packetizationPanel.getErrorCorrection()) {
|
||||
document.getElementById('received-encoded-bits').innerHTML = allEncodedBits
|
||||
.reduce(
|
||||
bitExpectorReducer(
|
||||
SENT_ENCODED_BITS,
|
||||
PacketUtils.getPacketDataBitCount(),
|
||||
ERROR_CORRECTION_BLOCK_SIZE
|
||||
),
|
||||
'');
|
||||
} else {
|
||||
document.getElementById('received-encoded-bits').innerHTML = 'Not encoded.';
|
||||
}
|
||||
document.getElementById('received-decoded-bits').innerHTML = allDecodedBits
|
||||
.reduce(
|
||||
bitExpectorReducer(
|
||||
SENT_ORIGINAL_BITS,
|
||||
PacketUtils.getPacketDataBitCount(),
|
||||
packetizationPanel.getErrorCorrection() ? ERROR_CORRECTION_DATA_SIZE : 8
|
||||
),
|
||||
'');
|
||||
document.getElementById('received-packet-original-bytes').innerText = transmissionByteCount.toLocaleString();
|
||||
const packetCrc = document.getElementById('received-packet-original-bytes-crc');
|
||||
packetCrc.innerText = numberToHex(packetizationPanel.getDataSizeCrc())(transmissionByteCountCrc);
|
||||
packetCrc.className = trustedLength ? 'bit-correct' : 'bit-wrong';
|
||||
if(!trustedLength) {
|
||||
packetCrc.innerText += ' (Expected ' + numberToHex(packetizationPanel.getDataSizeCrc())(transmissionByteCountActualCrc) + ')';
|
||||
}
|
||||
|
||||
document.getElementById('received-encoded-bits-error-percent').innerText = (
|
||||
Math.floor((1 - (correctEncodedBits / allEncodedBits.length)) * 10000) * 0.01
|
||||
).toLocaleString();
|
||||
document.getElementById('received-raw-bits-error-percent').innerText = (
|
||||
Math.floor((1 - (correctRawBits / allRawBits.length)) * 10000) * 0.01
|
||||
).toLocaleString();
|
||||
document.getElementById('received-decoded-bits-error-percent').innerText = (
|
||||
Math.floor((1 - (correctedDecodedBits / allDecodedBits.length)) * 10000) * 0.01
|
||||
).toLocaleString();
|
||||
receivePanel.setProgress(StreamManager.getPercentReceived());
|
||||
|
||||
const bytes = StreamManager.getDataBytes();
|
||||
const receivedText = bytesToText(bytes);
|
||||
|
||||
Reference in New Issue
Block a user