Embedded SDK
Embedded SDK
Loading...
Searching...
No Matches
buffer.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h> // uint*_t
4#include <stddef.h> // size_t
5#include <stdbool.h> // bool
6
7#include "macros.h"
8
12typedef enum {
14 LE
16
20typedef struct {
21 uint8_t *ptr;
22 size_t size;
23 size_t offset;
24} buffer_t;
25
37bool buffer_can_read(const buffer_t *buffer, size_t n);
38
50bool buffer_seek_set(buffer_t *buffer, size_t offset);
51
63bool buffer_seek_cur(buffer_t *buffer, size_t offset);
64
76bool buffer_seek_end(buffer_t *buffer, size_t offset);
77
89bool buffer_read_u8(buffer_t *buffer, uint8_t *value);
90
104bool buffer_read_u16(buffer_t *buffer, uint16_t *value, endianness_t endianness);
105
119bool buffer_read_u32(buffer_t *buffer, uint32_t *value, endianness_t endianness);
120
134bool buffer_read_u64(buffer_t *buffer, uint64_t *value, endianness_t endianness);
135
149bool buffer_read_varint(buffer_t *buffer, uint64_t *value);
150
164bool buffer_read_bip32_path(buffer_t *buffer, uint32_t *out, size_t out_len);
165
179bool buffer_copy(const buffer_t *buffer, uint8_t *out, size_t out_len);
180
194bool buffer_move(buffer_t *buffer, uint8_t *out, size_t out_len);
195
205static inline uint8_t *buffer_get_cur(const buffer_t *buffer)
206{
207 return (uint8_t *) (buffer->ptr + buffer->offset);
208}
209
222bool buffer_peek(const buffer_t *buffer, uint8_t *value);
223
238bool buffer_peek_n(const buffer_t *buffer, size_t n, uint8_t *value);
239
254WEAK bool buffer_read_bytes(buffer_t *buffer, uint8_t *out, size_t n);
255
267bool buffer_write_u8(buffer_t *buffer, uint8_t value);
268
282bool buffer_write_u16(buffer_t *buffer, uint16_t value, endianness_t endianness);
283
297bool buffer_write_u32(buffer_t *buffer, uint32_t value, endianness_t endianness);
298
312bool buffer_write_u64(buffer_t *buffer, uint64_t value, endianness_t endianness);
313
327bool buffer_write_bytes(buffer_t *buffer, const uint8_t *data, size_t n);
328
340static inline buffer_t buffer_create(void *ptr, size_t size)
341{
342 return (buffer_t){.ptr = ptr, .size = size, .offset = 0};
343}
bool buffer_read_varint(buffer_t *buffer, uint64_t *value)
Definition buffer.c:131
bool buffer_seek_end(buffer_t *buffer, size_t offset)
Definition buffer.c:58
bool buffer_read_u16(buffer_t *buffer, uint16_t *value, endianness_t endianness)
Definition buffer.c:83
bool buffer_write_u16(buffer_t *buffer, uint16_t value, endianness_t endianness)
Definition buffer.c:218
bool buffer_copy(const buffer_t *buffer, uint8_t *out, size_t out_len)
Definition buffer.c:156
bool buffer_seek_cur(buffer_t *buffer, size_t offset)
Definition buffer.c:46
bool buffer_read_bip32_path(buffer_t *buffer, uint32_t *out, size_t out_len)
Definition buffer.c:144
bool buffer_write_bytes(buffer_t *buffer, const uint8_t *data, size_t n)
Definition buffer.c:270
bool buffer_seek_set(buffer_t *buffer, size_t offset)
Definition buffer.c:35
bool buffer_can_read(const buffer_t *buffer, size_t n)
Definition buffer.c:28
bool buffer_write_u64(buffer_t *buffer, uint64_t value, endianness_t endianness)
Definition buffer.c:252
bool buffer_peek(const buffer_t *buffer, uint8_t *value)
Definition buffer.c:178
bool buffer_write_u32(buffer_t *buffer, uint32_t value, endianness_t endianness)
Definition buffer.c:235
endianness_t
Definition buffer.h:12
@ LE
Big Endian.
Definition buffer.h:14
@ BE
Definition buffer.h:13
bool buffer_write_u8(buffer_t *buffer, uint8_t value)
Definition buffer.c:206
bool buffer_read_u64(buffer_t *buffer, uint64_t *value, endianness_t endianness)
Definition buffer.c:115
WEAK bool buffer_read_bytes(buffer_t *buffer, uint8_t *out, size_t n)
Definition buffer.c:194
bool buffer_peek_n(const buffer_t *buffer, size_t n, uint8_t *value)
Definition buffer.c:183
bool buffer_move(buffer_t *buffer, uint8_t *out, size_t out_len)
Definition buffer.c:167
bool buffer_read_u32(buffer_t *buffer, uint32_t *value, endianness_t endianness)
Definition buffer.c:99
bool buffer_read_u8(buffer_t *buffer, uint8_t *value)
Definition buffer.c:69
#define WEAK
Definition macros.h:8
uint8_t * ptr
Definition buffer.h:21
size_t size
Pointer to byte buffer.
Definition buffer.h:22
size_t offset
Size of byte buffer.
Definition buffer.h:23