LCOV - code coverage report
Current view: top level - zephyr/debug - mipi_stp_decoder.h Coverage Total Hit
Test: new.info Lines: 88.2 % 17 15
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Nordic Semiconductor ASA.
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_DEBUG_MIPI_STP_DECODER_H__
       8              : #define ZEPHYR_INCLUDE_DEBUG_MIPI_STP_DECODER_H__
       9              : 
      10              : #include <zephyr/kernel.h>
      11              : 
      12              : #ifdef __cplusplus
      13              : extern "C" {
      14              : #endif
      15              : 
      16              : /**
      17              :  * @defgroup mipi_stp_decoder_apis STP Decoder API
      18              :  * @ingroup debug
      19              :  * @{
      20              :  */
      21              : 
      22              : /** @brief STPv2 opcodes. */
      23            0 : enum mipi_stp_decoder_ctrl_type {
      24              :         STP_DATA4 = 1,
      25              :         STP_DATA8 = 2,
      26              :         STP_DATA16 = 4,
      27              :         STP_DATA32 = 8,
      28              :         STP_DATA64 = 16,
      29              :         STP_DECODER_NULL = 128,
      30              :         STP_DECODER_MAJOR,
      31              :         STP_DECODER_MERROR,
      32              :         STP_DECODER_CHANNEL,
      33              :         STP_DECODER_VERSION,
      34              :         STP_DECODER_FREQ,
      35              :         STP_DECODER_GERROR,
      36              :         STP_DECODER_FLAG,
      37              :         STP_DECODER_ASYNC,
      38              :         STP_DECODER_NOT_SUPPORTED,
      39              : };
      40              : 
      41              : /** @brief Convert type to a string literal.
      42              :  *
      43              :  * @param _type type
      44              :  * @return String literal.
      45              :  */
      46            1 : #define STP_DECODER_TYPE2STR(_type) \
      47              :         _type == STP_DATA4 ? "DATA4" : (\
      48              :         _type == STP_DATA8 ? "DATA8" : (\
      49              :         _type == STP_DATA16 ? "DATA16" : (\
      50              :         _type == STP_DATA32 ? "DATA32" : (\
      51              :         _type == STP_DATA64 ? "DATA64" : (\
      52              :         _type == STP_DECODER_NULL ? "NULL" : (\
      53              :         _type == STP_DECODER_MAJOR ? "MAJOR" : (\
      54              :         _type == STP_DECODER_MERROR ? "MERROR" : (\
      55              :         _type == STP_DECODER_CHANNEL ? "CHANNEL" : (\
      56              :         _type == STP_DECODER_VERSION ? "VERSION" : (\
      57              :         _type == STP_DECODER_FREQ ? "FREQ" : (\
      58              :         _type == STP_DECODER_GERROR ? "GERROR" : (\
      59              :         _type == STP_DECODER_FLAG ? "FLAG" : (\
      60              :         _type == STP_DECODER_ASYNC ? "ASYNC" : (\
      61              :         "Unknown"))))))))))))))
      62              : 
      63              : /** @brief Union with data associated with a given STP opcode. */
      64            1 : union mipi_stp_decoder_data {
      65              :         /** ID - used for major and channel. */
      66            1 :         uint16_t id;
      67              : 
      68              :         /** Frequency. */
      69            1 :         uint64_t freq;
      70              : 
      71              :         /** Version. */
      72            1 :         uint32_t ver;
      73              : 
      74              :         /** Error code. */
      75            1 :         uint32_t err;
      76              : 
      77              :         /** Dummy. */
      78            1 :         uint32_t dummy;
      79              : 
      80              :         /** Data. */
      81            1 :         uint64_t data;
      82              : };
      83              : 
      84              : /** @brief Callback signature.
      85              :  *
      86              :  * Callback is called whenever an element from STPv2 stream is decoded.
      87              :  *
      88              :  * @note Callback is called with interrupts locked.
      89              :  *
      90              :  * @param type          Type. See @ref mipi_stp_decoder_ctrl_type.
      91              :  * @param data          Data. Data associated with a given @p type.
      92              :  * @param ts            Timestamp. Present if not NULL.
      93              :  * @param marked        Set to true if opcode was marked.
      94              :  */
      95            1 : typedef void (*mipi_stp_decoder_cb)(enum mipi_stp_decoder_ctrl_type type,
      96              :                                     union mipi_stp_decoder_data data,
      97              :                                     uint64_t *ts, bool marked);
      98              : 
      99              : /** @brief Decoder configuration. */
     100            1 : struct mipi_stp_decoder_config {
     101              :         /** Indicates that decoder start in out of sync state. */
     102            1 :         bool start_out_of_sync;
     103              : 
     104              :         /** Callback. */
     105            1 :         mipi_stp_decoder_cb cb;
     106              : };
     107              : 
     108              : /** @brief Initialize the decoder.
     109              :  *
     110              :  * @param config        Configuration.
     111              :  *
     112              :  * @retval 0            On successful initialization.
     113              :  * @retval negative     On failure.
     114              :  */
     115            1 : int mipi_stp_decoder_init(const struct mipi_stp_decoder_config *config);
     116              : 
     117              : /** @brief Decode STPv2 stream.
     118              :  *
     119              :  * Function decodes the stream and calls the callback for every decoded element.
     120              :  *
     121              :  * @param data          Data.
     122              :  * @param len           Data length.
     123              :  *
     124              :  * @retval 0            On successful decoding.
     125              :  * @retval negative     On failure.
     126              :  */
     127            1 : int mipi_stp_decoder_decode(const uint8_t *data, size_t len);
     128              : 
     129              : /** @brief Indicate synchronization loss.
     130              :  *
     131              :  * If detected, then decoder starts to look for ASYNC marker and drops all data
     132              :  * until ASYNC is found. Synchronization can be lost when there is data loss (e.g.
     133              :  * due to overflow).
     134              :  */
     135            1 : void mipi_stp_decoder_sync_loss(void);
     136              : 
     137              : /**
     138              :  * @}
     139              :  */
     140              : 
     141              : #ifdef __cplusplus
     142              : }
     143              : #endif
     144              : 
     145              : #endif /* ZEPHYR_INCLUDE_DEBUG_MIPI_STP_DECODER_H__ */
        

Generated by: LCOV version 2.0-1