LCOV - code coverage report
Current view: top level - zephyr/data - cobs.h Coverage Total Hit
Test: new.info Lines: 71.4 % 7 5
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Kelly Helmut Lord
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_DATA_COBS_H_
       8              : #define ZEPHYR_INCLUDE_DATA_COBS_H_
       9              : 
      10              : #include <stddef.h>
      11              : #include <sys/types.h>
      12              : #include <zephyr/sys/util.h>
      13              : #include <zephyr/net_buf.h>
      14              : 
      15              : #ifdef __cplusplus
      16              : extern "C" {
      17              : #endif
      18              : 
      19            0 : #define COBS_DEFAULT_DELIMITER 0x00
      20              : 
      21              : /**
      22              :  * Flag indicating that encode and decode should include an implicit end delimiter
      23              :  */
      24            1 : #define COBS_FLAG_TRAILING_DELIMITER BIT(8)
      25              : 
      26              : /**
      27              :  * Macro for extracting delimiter from flags. 8 LSB of "flags" is used for the delimiter
      28              :  * Example usage:
      29              :  * cobs_encode(src_buf, dst_buf, COBS_FLAG_TRAILING_DELIMITER | COBS_FLAG_CUSTOM_DELIMITER(0x7F));
      30              :  */
      31            1 : #define COBS_FLAG_CUSTOM_DELIMITER(x) ((x) & 0xff)
      32              : 
      33              : /**
      34              :  * @defgroup cobs COBS (Consistent Overhead Byte Stuffing)
      35              :  * @ingroup utilities
      36              :  * @{
      37              :  *
      38              :  * @brief COBS encoding and decoding functions with custom delimiter support
      39              :  *
      40              :  * Provides functions for COBS encoding/decoding with configurable delimiters.
      41              :  * The implementation handles both standard zero-delimited COBS and custom
      42              :  * delimiter variants.
      43              :  */
      44              : 
      45              : /**
      46              :  * @brief Calculate maximum encoded buffer size
      47              :  *
      48              :  * @param decoded_size  Size of input data to be encoded
      49              :  * @param flags         COBS_FLAG_TRAILING_DELIMITER to include termination byte in calculation
      50              :  *
      51              :  * @return Required buffer size for worst-case encoding scenario
      52              :  */
      53            1 : static inline size_t cobs_max_encoded_len(size_t decoded_size, uint32_t flags)
      54              : {
      55              :         if (flags & COBS_FLAG_TRAILING_DELIMITER) {
      56              :                 return decoded_size + decoded_size / 254 + 1 + 1;
      57              :         } else {
      58              :                 return decoded_size + decoded_size / 254 + 1;
      59              :         }
      60              : }
      61              : 
      62              : /**
      63              :  * @brief Standard COBS encoding
      64              :  *
      65              :  * @param src        Source buffer to decode
      66              :  * @param dst        Destination buffer for decoded data
      67              :  * @param flags      Decoding flags (reserved)
      68              :  *
      69              :  * @retval 0        Success
      70              :  * @retval -ENOMEM  Insufficient destination space
      71              :  * @retval -EINVAL  Invalid COBS structure or parameters
      72              :  */
      73              : 
      74            1 : int cobs_encode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
      75              : 
      76              : /**
      77              :  * @brief Standard COBS decoding
      78              :  *
      79              :  * @param src        Source buffer to decode
      80              :  * @param dst        Destination buffer for decoded data
      81              :  * @param flags      Decoding flags (reserved)
      82              :  *
      83              :  * @retval 0        Success
      84              :  * @retval -ENOMEM  Insufficient destination space
      85              :  * @retval -EINVAL  Invalid COBS structure or parameters
      86              :  */
      87            1 : int cobs_decode(struct net_buf *src, struct net_buf *dst, uint32_t flags);
      88              : 
      89              : /** @} */
      90              : 
      91              : #ifdef __cplusplus
      92              : }
      93              : #endif
      94              : 
      95              : #endif /* ZEPHYR_INCLUDE_DATA_COBS_H_ */
        

Generated by: LCOV version 2.0-1