aboutsummaryrefslogtreecommitdiffstats
path: root/host/python/uhd/chdr.py
blob: 577606cc83ccd7e5fb49e95aec42e2632d27fe2f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#
# Copyright 2020 Ettus Research, a National Instruments Brand
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
from . import libpyuhd as lib

ChdrPacket = lib.chdr.ChdrPacket
Endianness = lib.chdr.Endianness
ChdrWidth = lib.chdr.ChdrWidth
ChdrHeader = lib.chdr.ChdrHeader
CtrlPayload = lib.chdr.CtrlPayload
CtrlStatus = lib.chdr.CtrlStatus
PacketType = lib.chdr.PacketType
CtrlOpCode = lib.chdr.CtrlOpCode
MgmtPayload = lib.chdr.MgmtPayload
MgmtHop = lib.chdr.MgmtHop
MgmtOp = lib.chdr.MgmtOp
MgmtOpCode = lib.chdr.MgmtOpCode
MgmtOpSelDest = lib.chdr.MgmtOpSelDest
MgmtOpCfg = lib.chdr.MgmtOpCfg
MgmtOpNodeInfo = lib.chdr.MgmtOpNodeInfo
StrsPayload = lib.chdr.StrsPayload
StrsStatus = lib.chdr.StrsStatus
StrcPayload = lib.chdr.StrcPayload
StrcOpCode = lib.chdr.StrcOpCode

def __get_payload(self):
    pkt_type = self.get_header().pkt_type
    if pkt_type == PacketType.MGMT:
        return self.get_payload_mgmt()
    elif pkt_type == PacketType.CTRL:
        return self.get_payload_ctrl()
    elif pkt_type == PacketType.STRC:
        return self.get_payload_strc()
    elif pkt_type == PacketType.STRS:
        return self.get_payload_strs()
    elif pkt_type in {PacketType.DATA_NO_TS, PacketType.DATA_WITH_TS}:
        raise RuntimeError("Cannot deserialize a Data Payload")
    else:
        raise RuntimeError("Invalid pkt_type in ChdrHeader")

ChdrPacket.get_payload = __get_payload

def __to_string_with_payload(self):
    pkt_type = self.get_header().pkt_type
    if pkt_type == PacketType.MGMT:
        return self.to_string_with_payload_mgmt()
    elif pkt_type == PacketType.CTRL:
        return self.to_string_with_payload_ctrl()
    elif pkt_type == PacketType.STRC:
        return self.to_string_with_payload_strc()
    elif pkt_type == PacketType.STRS:
        return self.to_string_with_payload_strs()
    elif pkt_type in {PacketType.DATA_NO_TS, PacketType.DATA_WITH_TS}:
        return self.__str__()
    else:
        raise RuntimeError("Invalid pkt_type in ChdrHeader")

ChdrPacket.to_string_with_payload = __to_string_with_payload