7 #ifndef _PICO_UTIL_BUFFER_H
8 #define _PICO_UTIL_BUFFER_H
10 #include "pico/types.h"
18 #ifdef PICO_BUFFER_USB_ALLOC_HACK
19 #include "hardware/address_mapped.h"
46 #ifdef PICO_BUFFER_USB_ALLOC_HACK
47 #if !defined(USB_DPRAM_MAX) || (USB_DPRAM_MAX > 0)
48 #include "hardware/structs/usb.h"
50 #define USB_DPRAM_SIZE 4096
54 inline static bool pico_buffer_alloc_in_place(
mem_buffer_t *buffer,
size_t size) {
55 #ifdef PICO_BUFFER_USB_ALLOC_HACK
56 extern uint8_t *usb_ram_alloc_ptr;
57 if ((usb_ram_alloc_ptr + size) <= (uint8_t *)USBCTRL_DPRAM_BASE + USB_DPRAM_SIZE) {
58 buffer->bytes = usb_ram_alloc_ptr;
61 printf(
"balloc %d %p->%p\n", size, buffer->bytes, ((uint8_t *)buffer->bytes) + size);
63 usb_ram_alloc_ptr += size;
67 buffer->bytes = (uint8_t *) calloc(1, size);
76 inline static mem_buffer_t *pico_buffer_wrap(uint8_t *bytes,
size_t size) {
79 buffer->bytes = bytes;
85 inline static mem_buffer_t *pico_buffer_alloc(
size_t size) {
88 if (!pico_buffer_alloc_in_place(b, size)) {
Wrapper structure around a memory buffer.
Definition: buffer.h:40