106 lines
4.4 KiB
Python
106 lines
4.4 KiB
Python
class CH10Packet:
|
|
def __init__(self, packetData):
|
|
offset = 0;
|
|
self.msgFormat = packetData[offset] & 0x0F
|
|
self.msgType = (packetData[offset] >> 4) & 0x0F
|
|
offset += 1
|
|
self.msgSeqNo = (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 3
|
|
self.uSync = (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 2
|
|
self.channelID = (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 2
|
|
self.pktLen = (packetData[offset+3] << 24) | (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 4
|
|
self.dataLen = (packetData[offset+3] << 24) | (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 4
|
|
self.dataTypeVer = (packetData[offset])
|
|
offset += 1
|
|
self.seqNumber = (packetData[offset])
|
|
offset += 1
|
|
self.pktFlags = (packetData[offset])
|
|
offset += 1
|
|
self.dataType = (packetData[offset])
|
|
|
|
self.bIncludesSecondaryTimeHeader = False
|
|
if (self.pktFlags / 128.0 >= 1.0):
|
|
self.bIncludesSecondaryTimeHeader = True
|
|
|
|
if self.dataType != 0X21:
|
|
return
|
|
|
|
if self.dataType == 0x00 or self.dataType == 0x01:
|
|
return
|
|
|
|
offset += 1
|
|
self.aubyRelTime = (packetData[offset+5] << 40) | (packetData[offset+4] << 32) | (packetData[offset+3] << 24) | (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
|
|
offset += 6
|
|
self.checksum = (packetData[offset+1] << 8) | (packetData[offset])
|
|
|
|
offset += 2
|
|
if(self.bIncludesSecondaryTimeHeader):
|
|
self.secondaryTimeNs = (packetData[offset+3] << 24) | (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 4
|
|
self.secondaryTimeSec = (packetData[offset+3] << 24) | (packetData[offset+2] << 16) | (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 4
|
|
offset += 2 #rsv
|
|
self.checksumSecondary = (packetData[offset+1] << 8) | (packetData[offset])
|
|
offset += 2
|
|
|
|
self.Ch10AnalogMode = packetData[offset] & 0x03
|
|
self.Ch10AnalogLength = (packetData[offset] >> 2) & 0x3F
|
|
offset += 1
|
|
self.Ch10AnalogSubChannelID = (packetData[offset])
|
|
offset += 1
|
|
self.Ch10AnalogSubChannelCount = (packetData[offset])
|
|
offset += 1
|
|
self.Ch10AnalogFactor = packetData[offset] & 0x0F
|
|
self.Ch10AnalogSAME = (packetData[offset] >> 4) & 0x0F
|
|
offset += 1
|
|
|
|
self.bIsTSRAIR = False
|
|
if(self.Ch10AnalogSubChannelCount==18):
|
|
self.bIsTSRAIR = True
|
|
|
|
self.sampleData = list()
|
|
self.sampleCount = ((self.dataLen - 4) / self.Ch10AnalogSubChannelCount)/2.0
|
|
i = 1
|
|
while i <= self.sampleCount:
|
|
thisSample = list()
|
|
ii = 1
|
|
if(self.bIncludesSecondaryTimeHeader):
|
|
val = float(self.secondaryTimeSec) + (float(self.secondaryTimeNs)/1000000000.0) + (i/8000.0)
|
|
|
|
thisSample.append(val)
|
|
# datetime.datetime.utcfromtimestamp(self.secondaryTimeSec)
|
|
# .strftime('%Y-%m-%d %H:%M:%S') + f':{self.secondaryTimeNs}')
|
|
else:
|
|
thisSample.append(self.aubyRelTime)
|
|
|
|
while ii <= self.Ch10AnalogSubChannelCount:
|
|
thisSample.append(toSigned16(self.bIsTSRAIR,(packetData[offset+1] << 8) | (packetData[offset])))
|
|
offset+=2
|
|
ii += 1
|
|
|
|
self.sampleData.append(thisSample)
|
|
i += 1
|
|
|
|
class CH10TMATPacket:
|
|
def __init__(self, packetData):
|
|
offset = 0;
|
|
self.Version = packetData[offset] & 0xFF
|
|
if self.Version != 0x11:
|
|
return
|
|
offset += 1
|
|
self.SetupRecordConfigurationChange = (packetData[offset]) & 0x01
|
|
self.Format = (packetData[offset] & 0x02) >> 1
|
|
offset = 40
|
|
self.tmats = packetData[offset:len(packetData)+1].decode("utf-8")
|
|
|
|
def toSigned16(bIsTSRAIR, n):
|
|
if bIsTSRAIR:
|
|
n = n & 0xffff
|
|
return (n ^ 0x8000) - 0x8000
|
|
else:
|
|
return n - 0x8000 |