Files
esp-idf/components/esp_driver_bitscrambler/include/driver/bitscrambler_loopback.h
Jeroen Domburg a88e719e33 feat(driver): BitScrambler support
This adds an assembler for the BitScrambler assembly language,
plus unit tests for it. It also adds the loopback driver,
which can do BitScrambler operations on memory-to-memory
transfers. Documentation is also included.
2024-12-30 09:39:23 +08:00

59 lines
2.3 KiB
C

/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include "driver/bitscrambler.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Create handle for BitScrambler in loopback mode
*
* @note Use bitscrambler_free to free created handle.
*
* @param[out] handle BitScrambler handle
* @param attach_to Peripheral to attach to. One of SOC_BITSCRAMBLER_ATTACH_. The BitScrambler
* must be attached to some peripheral, even in loopback mode. This peripheral does not
* need to be initialized for the BitScrambler to work. However, it can be initialized
* and will work as normal, with the exception that DMA functionality for this peripheral
* cannot be used.
* @param max_transfer_sz_bytes Maximum transfer size, in bytes, of either the incoming or outgoing data
* fed to bitscrambler_loopback_run.
*
* @returns
* - ESP_OK
* - ESP_ERR_NO_MEM: No memory available
* - ESP_ERR_NOT_FOUND: No free hardware channel available
* - ESP_ERR_INVALID_ARG: Invalid argument passed to function
* - ESP_FAIL: Bitscrambler object creation failed because of some other error
*/
esp_err_t bitscrambler_loopback_create(bitscrambler_handle_t *handle, int attach_to, size_t max_transfer_sz_bytes);
/**
* @brief Run Bitscrambler program on a data buffer
*
* @param bs BitScrambler handle. This BitScrambler should have a program loaded using
* bitscrambler_load_program()
* @param buffer_in Data to feed into the BitScrambler
* @param length_bytes_in Size of the data in buffer_in, in bytes
* @param buffer_out Buffer for BitScrambler to write processed data to
* @param length_bytes_out Size of output buffer
* @param[out] bytes_written Pointer to variable to store the size of actual data written
* to output buffer. Can be NULL if not needed.
*
* @returns
* - ESP_OK
* - ESP_ERR_INVALID_SIZE if a buffer size exceeds max_transfer_sz_bytes
* - ESP_ERR_TIMEOUT if BitScrambler program does not complete
*/
esp_err_t bitscrambler_loopback_run(bitscrambler_handle_t bs, void *buffer_in, size_t length_bytes_in, void *buffer_out, size_t length_bytes_out, size_t *bytes_written);
#ifdef __cplusplus
}
#endif