LCOV - code coverage report
Current view: top level - zephyr/debug - mipi_stp_decoder.h Hit Total Coverage
Test: new.info Lines: 15 17 88.2 %
Date: 2024-12-22 00:14:23

          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 os_services
      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 1.14