DTM TRAFFIC, SESSION EVENTS 로그 개선

- Receiver에 expected packet type 필드 제거
- 로그 아래로 쌓기
- Clear 버튼 추가
- Trasmitter 세션에서는 packet report 숨김
This commit is contained in:
2026-05-20 11:05:28 +09:00
parent fadeba40cc
commit 1bf60d01f3
4 changed files with 250 additions and 125 deletions
+34 -24
View File
@@ -68,19 +68,32 @@ const DTM_SETUP_CONTROL = {
5: 'TX/RX select',
};
const DTM_PKT_TYPE = {
0: 'PRBS9',
1: '11110000',
2: '10101010',
3: 'constant carrier',
};
const dtmChannelLabel = byte0 => {
const channel = byte0 & 0x3f;
const mhz = 2402 + 2 * channel;
return `ch ${channel} (${mhz} MHz)`;
};
const DTM_PAYLOAD_LABEL = {
0: 'PRBS9',
1: '11110000',
2: '10101010',
3: 'Constant carrier',
};
const dtmTransmitterTestNote = (b0, b1) => {
const channel = b0 & 0x3f;
const mhz = 2402 + 2 * channel;
const lengthField = (b1 >> 2) & 0x3f;
const pattern = DTM_PAYLOAD_LABEL[b1 & 0x03] ?? `type ${b1 & 0x03}`;
return `Transmitter test - transmit on ch ${channel}(${mhz}MHz), len ${lengthField}, ${pattern}`;
};
const dtmPacketReportNote = count => {
const noun = count === 1 ? 'packet' : 'packets';
return `Receiver report - ${count} ${noun} received on active RX channel (LE DTM event)`;
};
const dtmTxNote = buffer => {
const b0 = buffer[0];
const b1 = buffer[1];
@@ -96,15 +109,11 @@ const dtmTxNote = buffer => {
}
if (cmdType === 1) {
const length = (b1 >> 2) & 0x3f;
const pkt = DTM_PKT_TYPE[b1 & 0x03] ?? `type ${b1 & 0x03}`;
return `Receiver test — listen on ${dtmChannelLabel(b0)}, len ${length}, ${pkt}`;
return `Receiver test - listen on ${dtmChannelLabel(b0)}`;
}
if (cmdType === 2) {
const length = (b1 >> 2) & 0x3f;
const pkt = DTM_PKT_TYPE[b1 & 0x03] ?? `type ${b1 & 0x03}`;
return `Transmitter test — transmit on ${dtmChannelLabel(b0)}, len ${length}, ${pkt}`;
return dtmTransmitterTestNote(b0, b1);
}
if (cmdType === 3) {
@@ -125,11 +134,6 @@ const dtmRxNote = buffer => {
const b0 = buffer[0];
const b1 = buffer[1];
const packetCount = parsePacketReportCount(buffer);
if (packetCount !== null) {
return `Packet report — ${packetCount} packet(s) received on active RX channel (LE DTM event)`;
}
if ((b1 & 0x01) !== 0) {
const rawDbm = (b1 & 0xfe) >> 1;
const modifier = b0 & 0x01 ? -128 : 0;
@@ -198,15 +202,21 @@ class DTMTransport {
this.#dataBuffer =
this.#dataBuffer.length > 2 ? this.#dataBuffer.subarray(2) : undefined;
this.#eventEmitter.emit('traffic', {
direction: 'rx',
data: Array.from(response),
note: dtmRxNote(response),
});
const packetCount = parsePacketReportCount(response);
if (packetCount !== null) {
this.#eventEmitter.emit('packetReport', packetCount);
this.#eventEmitter.emit('traffic', {
direction: 'rx',
data: Array.from(response),
note: dtmPacketReportNote(packetCount),
kind: 'packetReport',
});
} else {
this.#eventEmitter.emit('traffic', {
direction: 'rx',
data: Array.from(response),
note: dtmRxNote(response),
});
}
if (this.#callback) {
+4 -1
View File
@@ -189,9 +189,9 @@ const attachEvents = (sessionId, instance) => {
emitForSession(sessionId, {
type: 'ended',
channel: event.channel,
packets: event.packets ?? 0,
mode: event.type,
data: [...status.lastReceived],
...(typeof event.packets === 'number' ? { packets: event.packets } : {}),
});
});
@@ -210,6 +210,9 @@ const attachEvents = (sessionId, instance) => {
});
instance.onTraffic(event => {
if (sessionId === 'transmitter' && event.kind === 'packetReport') {
return;
}
emitForSession(sessionId, {
type: 'traffic',
direction: event.direction,