v1.8.0: PPS as standard request/response packets; fix res-byte flag docs
- Split the PPS exchange into the two standard GSMTAP-SIM subtypes: 0x02 (PPS_REQ, raw request bytes, span ss..es_req) and 0x03 (PPS_RSP, raw response bytes, span es_req..end), replacing the single 0x02 packet with concatenated request+response that deviated from libosmocore's gsmtap.h. Wireshark now dissects both halves; simtrace2-pysniff needs no change (its importer already maps 0x03 to 'pps' and _decode_pps() parses the 0xFF-leading response frame). PPS annotation/log unchanged. - gsmtap_stream.py: GSMTAP_SIM_PPS_REQ/RSP constants; header field labels aligned with libosmocore's struct (signal_dbm/snr_db). - Docs: GSMTAP event tables (EN/RU) updated, PPS deviation note removed; corrected the res-byte flag attribution -- upstream simtrace2 never sets res, so the GSMTAP_FLAG_BAD_FCS carriage is this decoder's own extension (semantics mirror simtrace2's USB data flags). - Tests: assert the PPS subtype values; baseline regenerated (only the version line and test listing differed -- no decode-metric changes). 68/68 unit tests.
This commit is contained in:
1 parent
c222eecb3c
commit
e5a2b7c83b
7 files changed
+103
-54
No files matched your search
@@ -24,11 +24,11 @@ import traceback
|
||||
from collections import deque
|
||||
|
||||
from .gsmtap_stream import (GsmtapStreamSender,
|
||||
GSMTAP_SIM_APDU, GSMTAP_SIM_ATR, GSMTAP_SIM_PPS,
|
||||
GSMTAP_SIM_APDU, GSMTAP_SIM_ATR, GSMTAP_SIM_PPS_REQ, GSMTAP_SIM_PPS_RSP,
|
||||
GSMTAP_SIM_RST_EVENT, GSMTAP_SIM_VCC_EVENT,
|
||||
GSMTAP_FLAG_BAD_FCS)
|
||||
|
||||
VERSION = '1.7.1'
|
||||
VERSION = '1.8.0'
|
||||
|
||||
|
||||
|
||||
@@ -1921,7 +1921,11 @@ class Decoder(srd.Decoder):
|
||||
if (lrc != 0):
|
||||
self.put(ss, self.samplenum, self.out_ann, [0, ["INVALID Checksum on PPS Request, got={got:02x} expected={expected:02x}".format(got=pck,expected=(lrc ^ pps ^ pps0))]])
|
||||
self.log("INVALID Checksum on PPS Request", hex(lrc))
|
||||
|
||||
# End of the request frame: the response starts on the next byte.
|
||||
# Keep the boundary sample so the two halves can be emitted as the
|
||||
# separate standard GSMTAP subtypes (PPS_REQ / PPS_RSP).
|
||||
es_req = self.samplenum
|
||||
|
||||
r_lrc = 0
|
||||
r_pps = self.read_byte()
|
||||
pps_rsp = [r_pps]
|
||||
@@ -2019,7 +2023,10 @@ class Decoder(srd.Decoder):
|
||||
self.log("INVALID PPS. Request & Response not matching.", hex(r_lrc))
|
||||
self.put(ss, self.samplenum, self.out_ann, [0, ["INVALID PPS. Request & Response not matching"]])
|
||||
self.put(ss, self.samplenum, self.out_ann, [3, ["PPS", "PPS DI={di} FI={fi} clock_skip={clock_skip}".format(di=self.di,fi=self.fi,clock_skip=self.clock_skip)]])
|
||||
self.emit_packet(GSMTAP_SIM_PPS, bytes(pps_req + pps_rsp), ss, self.samplenum)
|
||||
# Standard GSMTAP-SIM framing: request and response are separate
|
||||
# packets (sub_type 0x02 / 0x03), each with its own sample span.
|
||||
self.emit_packet(GSMTAP_SIM_PPS_REQ, bytes(pps_req), ss, es_req)
|
||||
self.emit_packet(GSMTAP_SIM_PPS_RSP, bytes(pps_rsp), es_req, self.samplenum)
|
||||
|
||||
|
||||
def _at_eof(self):
|
||||
|
||||
Reference in new issue
Block a user