#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include <stdlib.h>
#include <stdint.h>

struct pbuf {
  struct pbuf *next;
  void *payload;
  uint16_t tot_len;
  uint16_t len;
  uint8_t type_internal;
  uint8_t flags;
  //LWIP_PBUF_REF_T ref;

  uint8_t if_idx;
};
typedef void sFONT;

#define ERR_OK 0
#define LCD_COLOR_BLACK 0
#define LCD_COLOR_WHITE 1

#define LCD_FONT16 0

struct tftp_context {
  void* (*open)(const char* fname, const char* mode, uint8_t write);
  void (*close)(void* handle);
  int (*read)(void* handle, void* buf, int bytes);
  int (*write)(void* handle, struct pbuf* p);
};

void tftp_cleanup(void);
uint32_t logger_get_timestamp(void);
int tftp_init(struct tftp_context* context);
void lcd_display_text(uint8_t* text, uint16_t x_pos, uint16_t y_pos, uint32_t color, uint32_t bg_color, sFONT *font);
void lcd_draw_bmp_img(uint8_t* bmp_buff, uint32_t x_pos, uint32_t y_pos);
void lcd_clear(uint32_t color);

#ifdef __cplusplus
}
#endif