generated from Embedded_Projects/Fire_RT1052_Pro_Template
72 lines
2.3 KiB
C
72 lines
2.3 KiB
C
#include "whd_buffer_api.h"
|
|
|
|
/* LwIP provided pbuf management */
|
|
#include "lwip/debug.h"
|
|
#include "lwip/pbuf.h"
|
|
|
|
#define SDIO_BLOCK_SIZE (64U)
|
|
|
|
whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size,
|
|
unsigned long timeout_ms) {
|
|
UNUSED_PARAMETER(direction);
|
|
UNUSED_PARAMETER(timeout_ms);
|
|
|
|
struct pbuf *p_buffer = NULL;
|
|
if ((direction == WHD_NETWORK_TX) && (size <= PBUF_POOL_BUFSIZE)) {
|
|
p_buffer = pbuf_alloc(PBUF_RAW, size, PBUF_POOL);
|
|
} else {
|
|
p_buffer = pbuf_alloc(PBUF_RAW, size + SDIO_BLOCK_SIZE, PBUF_RAM);
|
|
if (p_buffer != NULL) {
|
|
p_buffer->len = size;
|
|
p_buffer->tot_len -= SDIO_BLOCK_SIZE;
|
|
}
|
|
}
|
|
if (p_buffer != NULL) {
|
|
*buffer = p_buffer;
|
|
return WHD_SUCCESS;
|
|
} return WHD_BUFFER_ALLOC_FAIL;
|
|
|
|
}
|
|
|
|
void cy_buffer_release(whd_buffer_t buffer, whd_buffer_dir_t direction) {
|
|
UNUSED_PARAMETER(direction);
|
|
(void)pbuf_free((struct pbuf *)buffer);
|
|
}
|
|
|
|
uint8_t *cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer) {
|
|
LWIP_ASSERT("CY network buffer is NULL", buffer != NULL);
|
|
struct pbuf *p_buffer = (struct pbuf *)buffer;
|
|
return (uint8_t *)p_buffer->payload;
|
|
}
|
|
|
|
uint16_t cy_buffer_get_current_piece_size(whd_buffer_t buffer) {
|
|
LWIP_ASSERT("CY network buffer is NULL", buffer != NULL);
|
|
struct pbuf *p_buffer = (struct pbuf *)buffer;
|
|
return (uint16_t)p_buffer->len;
|
|
}
|
|
|
|
whd_result_t cy_buffer_set_size(whd_buffer_t buffer, unsigned short size) {
|
|
LWIP_ASSERT("CY network buffer is NULL", buffer != NULL);
|
|
struct pbuf *p_buffer = (struct pbuf *)buffer;
|
|
|
|
if (size > (unsigned short)WHD_LINK_MTU + LWIP_MEM_ALIGN_SIZE(LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))) +
|
|
LWIP_MEM_ALIGN_SIZE(size)) {
|
|
return WHD_PMK_WRONG_LENGTH;
|
|
}
|
|
|
|
p_buffer->tot_len = size;
|
|
p_buffer->len = size;
|
|
|
|
return CY_RSLT_SUCCESS;
|
|
}
|
|
|
|
whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t *buffer, int32_t add_remove_amount) {
|
|
LWIP_ASSERT("CY network buffer is NULL", buffer != NULL);
|
|
struct pbuf **p_buffer = (struct pbuf **)buffer;
|
|
|
|
if ((u8_t)0 != pbuf_header(*p_buffer, (s16_t)(-add_remove_amount))) {
|
|
return WHD_PMK_WRONG_LENGTH;
|
|
}
|
|
|
|
return WHD_SUCCESS;
|
|
} |