Source code for pyspex.lib.tmtc_def

#
# This file is part of pyspex
#
# https://github.com/rmvanhees/pyspex.git
#
# Copyright (c) 2019-2023 SRON - Netherlands Institute for Space Research
#    All Rights Reserved
#
# License:  BSD-3-Clause
"""
Defines the SPEXone telemetry packets as numpy data-types.

References
----------
* SPX1-TN-005 Telemetry and Telecommand Handbook, issue 14, date 15-Mar-2021
"""
from __future__ import annotations

__all__ = ['tmtc_dtype']

import numpy as np


def __tmtc_def(apid: int) -> list:
    """Returna list of tuples with the definition os SPEXone telemetry packets.

    Parameters
    ----------
    apid : int
       SPEXone telemetry APID.
       Implemented APIDs: 0x350 (Science), 0x320 (NomHK) and 0x322 (DemHK).

    Returns
    -------
    list of tuples
       Definition of a numpy structured datatype.
    """
    if apid == 0x350:                           # *** Science TM ***
        return [                                # offs  start in packet
            ('ICUSWVER', '>u2'),                # 0     0x000c
            ('MPS_ID', 'u1'),                   # 2     0x000e
            ('MPS_VER', 'u1'),                  # 3     0x000f
            ('TS1_DEM_N_T', '>u4'),             # 4     0x0010
            ('TS2_HOUSING_N_T', '>u4'),         # 8     0x0014
            ('TS3_RADIATOR_N_T', '>u4'),        # 12    0x0018
            ('TS4_DEM_R_T', '>u4'),             # 16    0x001c
            ('TS5_HOUSING_R_T', '>u4'),         # 20    0x0020
            ('TS6_RADIATOR_R_T', '>u4'),        # 24    0x0024
            ('ICU_5V_T', '>i2'),                # 28    0x0028
            ('ICU_4V_T', '>i2'),                # 30    0x002a
            ('ICU_HG1_T', '>i2'),               # 32    0x002c
            ('ICU_HG2_T', '>i2'),               # 34    0x002e
            ('ICU_MID_T', '>i2'),               # 36    0x0030
            ('ICU_MCU_T', '>i2'),               # 38    0x0032
            ('ICU_DIGV_T', '>i2'),              # 40    0x0034
            ('ICU_4P0V_V', '>u2'),              # 42    0x0036
            ('ICU_3P3V_V', '>u2'),              # 44    0x0038
            ('ICU_1P2V_V', '>u2'),              # 46    0x003a
            ('ICU_4P0V_I', '>u2'),              # 48    0x003c
            ('ICU_3P3V_I', '>u2'),              # 50    0x003e
            ('ICU_1P2V_I', '>u2'),              # 52    0x0040
            ('ICU_5P0V_V', '>u2'),              # 54    0x0042
            ('ICU_5P0V_I', '>u2'),              # 56    0x0044
            ('DEM_V', '>u2'),                   # 58    0x0046
            ('DEM_I', '>u2'),                   # 60    0x0048
            ('LED1_ANODE_V', '>u4'),            # 62    0x004a
            ('LED1_CATH_V', '>u4'),             # 66    0x004e
            ('LED1_I', '>u4'),                  # 70    0x0052
            ('LED2_ANODE_V', '>u4'),            # 74    0x0056
            ('LED2_CATH_V', '>u4'),             # 78    0x005a
            ('LED2_I', '>u4'),                  # 82    0x005e
            ('ADC1_VCC', '>u4'),                # 86    0x0062
            ('ADC1_REF', '>u4'),                # 90    0x0066
            ('ADC1_T', '>u4'),                  # 94    0x006a
            ('ADC2_VCC', '>u4'),                # 98    0x006e
            ('ADC2_REF', '>u4'),                # 102   0x0072
            ('ADC2_T', '>u4'),                  # 106   0x0076
            ('REG_FW_VERSION', 'u1'),           # 110   0x007a
            ('REG_NCOADDFRAMES', 'u1'),         # 111   0x007b
            ('REG_IGEN_SELECT', 'u1'),          # 112   0x007c
            ('REG_FULL_FRAME', 'u1'),           # 113   0x007d
            ('REG_BINNING_TABLE_START', '>u4'),  # 114  0x007e
            ('REG_CMV_OUTPUTMODE', 'u1'),       # 118   0x0082
            ('dummy_01', 'u1'),                 # 119   0x0083
            ('REG_COADD_BUF_START', '>u4'),     # 120   0x0084
            ('REG_COADD_RESA_START', '>u4'),    # 124   0x0088
            ('REG_COADD_RESB_START', '>u4'),    # 128   0x008c
            ('REG_FRAME_BUFA_START', '>u4'),    # 132   0x0090
            ('REG_FRAME_BUFB_START', '>u4'),    # 136   0x0094
            ('REG_LINE_ENABLE_START', '>u4'),   # 140   0x0098
            ('DET_REG000', 'u1'),               # 144   0x009c
            ('dummy_02', 'u1'),                 # 145   0x009d
            ('DET_NUMLINES', '>u2'),            # 146   0x009e
            ('DET_START1', '>u2'),              # 148   0x00a0
            ('DET_START2', '>u2'),              # 150   0x00a2
            ('DET_START3', '>u2'),              # 152   0x00a4
            ('DET_START4', '>u2'),              # 154   0x00a6
            ('DET_START5', '>u2'),              # 156   0x00a8
            ('DET_START6', '>u2'),              # 158   0x00aa
            ('DET_START7', '>u2'),              # 160   0x00ac
            ('DET_START8', '>u2'),              # 152   0x00ae
            ('DET_NUMLINES1', '>u2'),           # 164   0x00b0
            ('DET_NUMLINES2', '>u2'),           # 166   0x00b2
            ('DET_NUMLINES3', '>u2'),           # 168   0x00b4
            ('DET_NUMLINES4', '>u2'),           # 170   0x00b6
            ('DET_NUMLINES5', '>u2'),           # 172   0x00b8
            ('DET_NUMLINES6', '>u2'),           # 174   0x00ba
            ('DET_NUMLINES7', '>u2'),           # 176   0x00bc
            ('DET_NUMLINES8', '>u2'),           # 178   0x00be
            ('DET_SUBS', '>u2'),                # 180   0x00c0
            ('DET_SUBA', '>u2'),                # 182   0x00c2
            ('DET_MONO', 'u1'),                 # 184   0x00c4
            ('DET_IMFLIP', 'u1'),               # 185   0x00c5
            ('DET_EXPCNTR', 'u1'),              # 186   0x00c6
            ('DET_ILVDS', 'u1'),                # 187   0x00c7
            ('DET_EXPTIME', '>u4'),             # 188   0x00c8
            ('DET_EXPSTEP', '>u4'),             # 192   0x00cc
            ('DET_KP1', '>u4'),                 # 196   0x00d0
            ('DET_KP2', '>u4'),                 # 200   0x00d4
            ('DET_NOFSLOPES', 'u1'),            # 204   0x00D8
            ('DET_EXPSEQ', 'u1'),               # 205   0x00d9
            ('DET_EXPTIME2', '>u4'),            # 206   0x00da
            ('DET_EXPSTEP2', '>u4'),            # 210   0x00de
            ('DET_REG062', 'u1'),               # 214   0x00e2
            ('DET_REG063', 'u1'),               # 215   0x00e3
            ('DET_REG064', 'u1'),               # 216   0x00e4
            ('DET_REG065', 'u1'),               # 217   0x00e5
            ('DET_REG066', 'u1'),               # 218   0x00e6
            ('DET_REG067', 'u1'),               # 219   0x00e7
            ('DET_REG068', 'u1'),               # 220   0x00e8
            ('DET_EXP2_SEQ', 'u1'),             # 221   0x00e9
            ('DET_NOFFRAMES', '>u2'),           # 222   0x00ea
            ('DET_OUTMODE', 'u1'),              # 224   0x00ec
            ('DET_FOTLEN', 'u1'),               # 225   0x00ed
            ('DET_ILVDSRCVR', 'u1'),            # 226   0x00ee
            ('DET_REG075', 'u1'),               # 227   0x00ef
            ('DET_REG076', 'u1'),               # 228   0x00f0
            ('DET_CALIB', 'u1'),                # 229   0x00f1
            ('DET_TRAINPTRN', '>u2'),           # 230   0x00f2
            ('DET_CHENA', '>u4'),               # 232   0x00f4
            ('DET_ICOL', 'u1'),                 # 236   0x00F8
            ('DET_ICOLPR', 'u1'),               # 237   0x00f9
            ('DET_IADC', 'u1'),                 # 238   0x00fa
            ('DET_IAMP', 'u1'),                 # 239   0x00fb
            ('DET_VTFL1', 'u1'),                # 240   0x00fc
            ('DET_VTFL2', 'u1'),                # 241   0x00fd
            ('DET_VTFL3', 'u1'),                # 242   0x00fe
            ('DET_VRSTL', 'u1'),                # 243   0x00ff
            ('DET_REG092', 'u1'),               # 244   0x0100
            ('DET_REG093', 'u1'),               # 245   0x0101
            ('DET_VPRECH', 'u1'),               # 246   0x0102
            ('DET_VREF', 'u1'),                 # 247   0x0103
            ('DET_REG096', 'u1'),               # 248   0x0104
            ('DET_REG097', 'u1'),               # 249   0x0105
            ('DET_VRAMP1', 'u1'),               # 250   0x0106
            ('DET_VRAMP2', 'u1'),               # 251   0x0107
            ('DET_OFFSET', '>u2'),              # 252   0x0108
            ('DET_PGAGAIN', 'u1'),              # 254   0x010a
            ('DET_ADCGAIN', 'u1'),              # 255   0x010b
            ('DET_REG104', 'u1'),               # 256   0x010c
            ('DET_REG105', 'u1'),               # 257   0x010d
            ('DET_REG106', 'u1'),               # 258   0x010e
            ('DET_REG107', 'u1'),               # 259   0x010f
            ('DET_TDIG1', 'u1'),                # 260   0x0110
            ('DET_TDIG2', 'u1'),                # 261   0x0111
            ('DET_REG110', 'u1'),               # 262   0x0112
            ('DET_BITMODE', 'u1'),              # 263   0x0113
            ('DET_ADCRES', 'u1'),               # 264   0x0114
            ('DET_PLLENA', 'u1'),               # 265   0x0115
            ('DET_PLLINFRE', 'u1'),             # 266   0x0116
            ('DET_PLLBYP', 'u1'),               # 267   0x0117
            ('DET_PLLRATE', 'u1'),              # 268   0x0118
            ('DET_PLLLOAD', 'u1'),              # 269   0x0119
            ('DET_DETDUM', 'u1'),               # 270   0x011a
            ('DET_REG119', 'u1'),               # 271   0x011b
            ('DET_REG120', 'u1'),               # 272   0x011c
            ('DET_BLACKCOL', 'u1'),             # 273   0x011d
            ('DET_REG122', 'u1'),               # 274   0x011e
            ('DET_VBLACKSUN', 'u1'),            # 275   0x011f
            ('DET_REG124', 'u1'),               # 276   0x0120
            ('DET_REG125', 'u1'),               # 277   0x0121
            ('DET_T', '>u2'),                   # 278   0x0122
            ('FTI', '>u2'),                     # 280   0x0124  (100 usec)
            ('IMDMODE', 'u1'),                  # 282   0x0126
            ('dummy_03', 'u1'),                 # 283   0x0127
            ('IMRLEN', '>u4')                   # 284   0x0128
        ]                                       # 288

    if apid == 0x320:                           # ***** NomHK *****
        return [                                # offs  start in packet
            ('SEQCNT', '>u2'),                  # 0     0x000c
            ('TCPKTID', '>u2'),                 # 2     0x000e
            ('TCPKTSEQCTRL', '>u2'),            # 4     0x0010
            ('TCREJCODE', 'u1'),                # 6     0x0012
            ('TCFAILCODE', 'u1'),               # 7     0x0013
            ('TCREJPKTID', '>u2'),              # 8     0x0014
            ('TCFAILPKTID', '>u2'),             # 10    0x0016
            ('TCACCCNT', '>u2'),                # 12    0x0018
            ('TCREJCNT', '>u2'),                # 14    0x001a
            ('TCEXECCNT', '>u2'),               # 16    0x001c
            ('TCFAILCNT', '>u2'),               # 18    0x001e
            ('ICUSWVER', '>u2'),                # 20    0x0020
            ('SYSSTATE', '>u4'),                # 22    0x0022
            ('ICUMODE', 'u1'),                  # 26    0x0026
            ('EXTPPSSTAT', 'u1'),               # 27    0x0027
            ('TIMEMSGSTAT', 'u1'),              # 28    0x0028
            ('OBTSYNCSTAT', 'u1'),              # 29    0x0029
            ('MPS_ID', 'u1'),                   # 30    0x002a
            ('MPS_VER', 'u1'),                  # 31    0x002b
            ('EVNTCNT_DEBUG', 'u1'),            # 32    0x002c
            ('EVNTCNT_PROG', 'u1'),             # 33    0x002d
            ('EVNTCNT_WARN', 'u1'),             # 34    0x002e
            ('EVNTCNT_ERR', 'u1'),              # 35    0x002f
            ('EVNTCNT_FATAL', 'u1'),            # 36    0x0030
            ('BOOTSTATEPREV', 'u1'),            # 37    0x0031
            ('BOOTCNTGOOD_IM0', '>u4'),         # 38    0x0032
            ('BOOTCNTGOOD_IM1', '>u4'),         # 42    0x0036
            ('BOOTCNTGOOD_IM2', '>u4'),         # 46    0x003a
            ('BOOTCNTGOOD_IM3', '>u4'),         # 50    0x003e
            ('BOOTATTEMPTS_CURRIM', 'u1'),      # 54    0x0042
            ('dummy_01', 'u1'),                 # 55    0x0043
            ('SWIMG_LOADED', 'u1'),             # 56    0x0044
            ('SWIMG_DEFAULT', 'u1'),            # 57    0x0045
            ('SWIMG_NXTBOOT', 'u1'),            # 58    0x0046
            ('WRITEPROT', 'u1'),                # 59    0x0047
            ('BOOTCAUSE', 'u1'),                # 60    0x0048
            ('TCVER_STAT', 'u1'),               # 61    0x0049
            ('SPW_REG_A', '>u4'),               # 62    0x004a
            ('SPW_REG_B', '>u4'),               # 66    0x004e
            ('LAST_CRC', '>u4'),                # 70    0x0052
            ('SCITM_PKTINTVL', '>u2'),          # 74    0x0056
            ('SCITM_BUFFREE', '>u4'),           # 76    0x0058
            ('SWEXECTIMEWC', '>u8'),            # 80    0x005c
            ('ERRCNT_PLACEHOLDER_03', '>u2'),   # 88    0x0064
            # ('FillerByte', 'u1')              # 90    0x0066
            ('TS1_DEM_N_T', '>u4'),
            # ('FillerByte', 'u1')              # 94    0x006a
            ('TS2_HOUSING_N_T', '>u4'),
            # ('FillerByte', 'u1')              # 98    0x006e
            ('TS3_RADIATOR_N_T', '>u4'),
            # ('FillerByte', 'u1')              # 102   0x0072
            ('TS4_DEM_R_T', '>u4'),
            # ('FillerByte', 'u1')              # 106   0x0076
            ('TS5_HOUSING_R_T', '>u4'),
            # ('FillerByte', 'u1')              # 110   0x007a
            ('TS6_RADIATOR_R_T', '>u4'),
            ('ICU_5V_T', '>u2'),                # 114   0x007e
            ('ICU_4V_T', '>u2'),                # 116   0x0080
            ('ICU_HG1_T', '>u2'),               # 118   0x0082
            ('ICU_HG2_T', '>u2'),               # 120   0x0084
            ('ICU_MID_T', '>u2'),               # 122   0x0086
            ('ICU_MCU_T', '>u2'),               # 124   0x0088
            ('ICU_DIGV_T', '>u2'),              # 126   0x008a
            ('ICU_4P0V_V', '>u2'),              # 128   0x008c
            ('ICU_3P3V_V', '>u2'),              # 130   0x008e
            ('ICU_1P2V_V', '>u2'),              # 132   0x0090
            ('ICU_4P0V_I', '>u2'),              # 134   0x0092
            ('ICU_3P3V_I', '>u2'),              # 136   0x0094
            ('ICU_1P2V_I', '>u2'),              # 138   0x0096
            ('DEM_STATUS', 'u1'),               # 140   0x0098
            ('dummy_02', 'u1'),                 # 141   0x0099
            ('ICU_5P0V_V', '>u2'),              # 142   0x009a
            ('ICU_5P0V_I', '>u2'),              # 144   0x009c
            ('DEMSPWSTAT', 'u1'),               # 146   0x009e
            ('DEMRESETCNT', 'u1'),              # 147   0x009f
            ('HTRGRP1_V', '>u2'),               # 148   0x00a0
            ('HTRGRP2_V', '>u2'),               # 150   0x00a2
            ('HTR1_I', '>u2'),                  # 152   0x00a4
            ('HTR2_I', '>u2'),                  # 154   0x00a6
            ('HTR3_I', '>u2'),                  # 156   0x00a8
            ('HTR4_I', '>u2'),                  # 158   0x00aa
            ('HTR1_CALCPVAL', '>f4'),           # 160   0x00ac
            ('HTR2_CALCPVAL', '>f4'),           # 164   0x00b0
            ('HTR3_CALCPVAL', '>f4'),           # 168   0x00b4
            ('HTR4_CALCPVAL', '>f4'),           # 172   0x00b8
            ('HTR1_CALCIVAL', '>f4'),           # 176   0x00bc
            ('HTR2_CALCIVAL', '>f4'),           # 180   0x00c0
            ('HTR3_CALCIVAL', '>f4'),           # 184   0x00c4
            ('HTR4_CALCIVAL', '>f4'),           # 188   0x00c8
            ('HTR1_DUTYCYCL', '>u2'),           # 192   0x00cc
            ('HTR2_DUTYCYCL', '>u2'),           # 194   0x00ce
            ('HTR3_DUTYCYCL', '>u2'),           # 196   0x00d0
            ('HTR4_DUTYCYCL', '>u2'),           # 198   0x00d2
            ('LED1_ENADIS', 'u1'),              # 200   0x00d4
            ('LED2_ENADIS', 'u1'),              # 201   0x00d5
            # ('FillerByte', 'u1')              # 202   0x00d6
            ('LED1_ANODE_V', '>u4'),
            # ('FillerByte', 'u1')              # 206   0x00da
            ('LED1_CATH_V', '>u4'),
            # ('FillerByte', 'u1')              # 210   0x00de
            ('LED1_I', '>u4'),
            # ('FillerByte', 'u1')              # 214   0x00e2
            ('LED2_ANODE_V', '>u4'),
            # ('FillerByte', 'u1')              # 218   0x00e6
            ('LED2_CATH_V', '>u4'),
            # ('FillerByte', 'u1')              # 222   0x00ea
            ('LED2_I', '>u4'),
            # ('FillerByte', 'u1')              # 226   0x00ee
            ('ADC1_VCC', '>u4'),
            # ('FillerByte', 'u1')              # 230   0x00f2
            ('ADC1_GAIN', '>u4'),
            # ('FillerByte', 'u1')              # 234   0x00f6
            ('ADC1_REF', '>u4'),
            # ('FillerByte', 'u1')              # 238   0x00fa
            ('ADC1_T', '>u4'),
            # ('FillerByte', 'u1')              # 242   0x00fe
            ('ADC1_OFFSET', '>u4'),
            # ('FillerByte', 'u1')              # 246   0x0102
            ('ADC2_VCC', '>u4'),
            # ('FillerByte', 'u1')              # 250   0x0106
            ('ADC2_GAIN', '>u4'),
            # ('FillerByte', 'u1')              # 254   0x010a
            ('ADC2_REF', '>u4'),
            # ('FillerByte', 'u1')              # 258   0x010e
            ('ADC2_T', '>u4'),
            # ('FillerByte', 'u1')              # 262   0x0112
            ('ADC2_OFFSET', '>u4'),
            ('DEM_V', '>u2'),                   # 266   0x0116
            ('DEM_I', '>u2'),                   # 268   0x0118
            ('REG_FW_VERSION', 'u1'),           # 270   0x011a
            ('dummy_03', 'u1'),                 # 271   0x011b
            ('DET_T', '>u2'),                   # 272   0x011c
            ('REG_SPW_ERROR', 'u1'),            # 274   0x011e
            ('REG_CMV_OUTOFSYNC', 'u1'),        # 275   0x011f
            ('REG_OCD_ACTUAL', 'u1'),           # 276   0x0120
            ('REG_OCD_STICKY', 'u1'),           # 277   0x0121
            ('REG_PWR_SENS', 'u1'),             # 278   0x0122
            ('REG_FLASH_STATUS', 'u1'),         # 279   0x0123
            ('REG_FLASH_EDAC_BLOCK', '>u2'),    # 280   0x0124
            ('SW_MAIN_LOOP_COUNT', '>u4')       # 282   0x0126
        ]                                       # 286

    if apid == 0x322:                           # ***** DemHK *****
        return [                                # offs  start in packet
            ('REG_STATUS', 'u1'),               # 0     0x000c
            ('REG_NCOADDFRAMES', 'u1'),         # 1     0x000d
            ('REG_IGEN_SELECT', 'u1'),          # 2     0x000e
            ('REG_FIFO_STATUS', 'u1'),          # 3     0x000f
            ('REG_SPW_TURBO', 'u1'),            # 4     0x0010
            ('REG_IGEN_MODE', 'u1'),            # 5     0x0011
            ('REG_IGEN_VALUE', '>u2'),          # 6     0x0012
            ('REG_FULL_FRAME', 'u1'),           # 8     0x0014
            ('dummy_01', 'u1'),                 # 9     0x0015
            ('REG_FLASH_ERASE', '<u4'),         # 10    0x0016 LE
            ('REG_BINNING_TABLE_START', '>u4'),  # 14   0x001a
            ('REG_CMV_OUTPUTMODE', 'u1'),       # 18    0x001e
            ('REG_DETECT_ENABLE', 'u1'),        # 19    0x001f
            ('REG_POWERUP_DELAY', '<u4'),       # 20    0x0020 LE
            # ('FillerByte', 'u1')
            ('REG_LU_THRESHOLD', '<u2'),        # 24    0x0024 LE
            ('REG_COADD_BUF_START', '<u4'),     # 26    0x0026 LE
            ('REG_COADD_RESA_START', '<u4'),    # 30    0x002a LE
            ('REG_COADD_RESB_START', '<u4'),    # 34    0x002e LE
            ('REG_FRAME_BUFA_START', '<u4'),    # 38    0x0032 LE
            ('REG_FRAME_BUFB_START', '<u4'),    # 42    0x0036 LE
            ('dummy_02', 'u1'),                 # 46    0x003a
            ('REG_FLASH_PAGE_SPR_BYTE', 'u1'),  # 47    0x003b
            ('REG_LINE_ENABLE_START', '<u4'),   # 48    0x003c LE
            ('DET_REG000', 'u1'),               # 52    0x0040
            ('dummy_03', 'u1'),                 # 53    0x0041
            ('DET_NUMLINES', '>u2'),            # 54    0x0042
            ('DET_START1', '>u2'),              # 56    0x0044
            ('DET_START2', '>u2'),              # 58    0x0046
            ('DET_START3', '>u2'),              # 60    0x0048
            ('DET_START4', '>u2'),              # 62    0x004a
            ('DET_START5', '>u2'),              # 64    0x004c
            ('DET_START6', '>u2'),              # 66    0x004e
            ('DET_START7', '>u2'),              # 68    0x0050
            ('DET_START8', '>u2'),              # 70    0x0052
            ('DET_NUMLINES1', '>u2'),           # 72    0x0054
            ('DET_NUMLINES2', '>u2'),           # 74    0x0056
            ('DET_NUMLINES3', '>u2'),           # 76    0x0058
            ('DET_NUMLINES4', '>u2'),           # 78    0x005a
            ('DET_NUMLINES5', '>u2'),           # 80    0x005c
            ('DET_NUMLINES6', '>u2'),           # 82    0x005e
            ('DET_NUMLINES7', '>u2'),           # 84    0x0060
            ('DET_NUMLINES8', '>u2'),           # 86    0x0062
            ('DET_SUBS', '>u2'),                # 88    0x0064
            ('DET_SUBA', '>u2'),                # 90    0x0066
            ('DET_MONO', 'u1'),                 # 92    0x0068
            ('DET_IMFLIP', 'u1'),               # 93    0x0069
            ('DET_EXPCNTR', 'u1'),              # 94    0x006a
            ('dummy_04', 'u1'),                 # 95    0x006b
            ('DET_EXPTIME', '>u4'),             # 96    0x006c
            # ('FillerByte', 'u1')
            ('DET_EXPSTEP', '>u4'),             # 100   0x0070
            # ('FillerByte', 'u1')
            ('DET_KP1', '>u4'),                 # 104   0x0074
            # ('FillerByte', 'u1')
            ('DET_KP2', '>u4'),                 # 108   0x0078
            # ('FillerByte', 'u1')
            ('DET_NOFSLOPES', 'u1'),            # 112   0x007c
            ('DET_EXPSEQ', 'u1'),               # 113   0x007d
            ('DET_EXPTIME2', '>u4'),            # 114   0x007e
            # ('FillerByte', 'u1')
            ('DET_EXPSTEP2', '>u4'),            # 118   0x0082
            # ('FillerByte', 'u1')
            ('DET_REG062', 'u1'),               # 122   0x0086
            ('DET_REG063', 'u1'),               # 123   0x0087
            ('DET_REG064', 'u1'),               # 124   0x0088
            ('DET_REG065', 'u1'),               # 125   0x0089
            ('DET_REG066', 'u1'),               # 126   0x008a
            ('DET_REG067', 'u1'),               # 127   0x008b
            ('DET_REG068', 'u1'),               # 128   0x008c
            ('DET_EXP2_SEQ', 'u1'),             # 129   0x008d
            ('DET_NOFFRAMES', '>u2'),           # 130   0x008e
            ('DET_OUTMODE', 'u1'),              # 132   0x0090
            ('DET_FOTLEN', 'u1'),               # 133   0x0091
            ('DET_ILVDSRCVR', 'u1'),            # 134   0x0092
            ('DET_REG075', 'u1'),               # 135   0x0093
            ('DET_REG076', 'u1'),               # 136   0x0094
            ('DET_CALIB', 'u1'),                # 137   0x0095
            ('DET_TRAINPTRN', '>u2'),           # 138   0x0096
            ('DET_CHENA', '>u4'),               # 140   0x0098
            # ('FillerByte', 'u1')
            ('DET_ILVDS', 'u1'),                # 144   0x009c
            ('DET_ICOL', 'u1'),                 # 145   0x009d
            ('DET_ICOLPR', 'u1'),               # 146   0x009e
            ('DET_IADC', 'u1'),                 # 147   0x009f
            ('DET_IAMP', 'u1'),                 # 148   0x00a0
            ('DET_VTFL1', 'u1'),                # 149   0x00a1
            ('DET_VTFL2', 'u1'),                # 150   0x00a2
            ('DET_VTFL3', 'u1'),                # 151   0x00a3
            ('DET_VRSTL', 'u1'),                # 152   0x00a4
            ('DET_REG092', 'u1'),               # 153   0x00a5
            ('DET_REG093', 'u1'),               # 154   0x00a6
            ('DET_VPRECH', 'u1'),               # 155   0x00a7
            ('DET_VREF', 'u1'),                 # 156   0x00a8
            ('DET_REG096', 'u1'),               # 157   0x00a9
            ('DET_REG097', 'u1'),               # 158   0x00aa
            ('DET_VRAMP1', 'u1'),               # 159   0x00ab
            ('DET_VRAMP2', 'u1'),               # 160   0x00ac
            ('dummy_05', 'u1'),                 # 161   0x00ad
            ('DET_OFFSET', '>u2'),              # 162   0x00ae
            ('DET_PGAGAIN', 'u1'),              # 164   0x00b0
            ('DET_ADCGAIN', 'u1'),              # 165   0x00b1
            ('DET_REG104', 'u1'),               # 166   0x00b2
            ('DET_REG105', 'u1'),               # 167   0x00b3
            ('DET_REG106', 'u1'),               # 168   0x00b4
            ('DET_REG107', 'u1'),               # 169   0x00b5
            ('DET_TDIG1', 'u1'),                # 170   0x00b6
            ('DET_TDIG2', 'u1'),                # 171   0x00b7
            ('DET_REG110', 'u1'),               # 172   0x00b8
            ('DET_BITMODE', 'u1'),              # 173   0x00b9
            ('DET_ADCRES', 'u1'),               # 174   0x00ba
            ('DET_PLLENA', 'u1'),               # 175   0x00bb
            ('DET_PLLINFRE', 'u1'),             # 176   0x00bc
            ('DET_PLLBYP', 'u1'),               # 177   0x00bd
            ('DET_PLLRATE', 'u1'),              # 178   0x00be
            ('DET_PLLLoad', 'u1'),              # 179   0x00bf
            ('DET_DETDum', 'u1'),               # 180   0x00c0
            ('DET_REG119', 'u1'),               # 181   0x00c1
            ('DET_REG120', 'u1'),               # 182   0x00c2
            ('DET_BLACKCOL', 'u1'),             # 183   0x00c3
            ('DET_REG122', 'u1'),               # 184   0x00c4
            ('DET_VBLACKSUN', 'u1'),            # 185   0x00c5
            ('DET_REG124', 'u1'),               # 186   0x00c6
            ('DET_REG125', 'u1')                # 187   0x00c7
        ]                                       # 188

    raise ValueError('Telemetry APID not implemented')


[docs] def tmtc_dtype(apid: int) -> np.dtype: """Obtain SPEXone telemetry packet definition. Parameters ---------- apid : int SPEXone telemetry APID. Implemented APIDs: 0x350 (Science), 0x320 (NomHK) and 0x322 (DemHK). Returns ------- numpy.dtype Definition of Spexone telemetry packet. Examples -------- Usage of `tmtc_dtype`:: >> from pyspex.lib.tmtc_def import tmtc_dtype >> mps_dtype = tmtc_dtype(0x350) """ return np.dtype(__tmtc_def(apid))