pimoroni-pico/libraries/badger2040/badger2040.hpp

106 lines
3.3 KiB
C++

#pragma once
#include <string>
#include "drivers/uc8151_legacy/uc8151_legacy.hpp"
#include "libraries/hershey_fonts/hershey_fonts.hpp"
#include "libraries/bitmap_fonts/bitmap_fonts.hpp"
#include "libraries/bitmap_fonts/font6_data.hpp"
#include "libraries/bitmap_fonts/font8_data.hpp"
#include "libraries/bitmap_fonts/font14_outline_data.hpp"
namespace pimoroni {
class Badger2040 {
protected:
UC8151_Legacy uc8151_legacy;
const hershey::font_t *_font = &hershey::futural;
const bitmap::font_t *_bitmap_font = nullptr;
uint8_t _pen = 0;
uint8_t _thickness = 1;
uint32_t _button_states = 0;
uint32_t _wake_button_states = 0;
private:
public:
Badger2040()
: uc8151_legacy(296, 128, spi0, CS, DC, CLK, MOSI, BUSY, RESET) {
};
// Constructor for Python-managed buffer
Badger2040(uint8_t *framebuffer)
: uc8151_legacy(296, 128, framebuffer, spi0, CS, DC, CLK, MOSI, BUSY, RESET) {
};
void init();
void update(bool blocking=false);
void partial_update(int x, int y, int w, int h, bool blocking=false);
void update_speed(uint8_t speed);
uint32_t update_time();
void halt();
void sleep();
bool is_busy();
void power_off();
void invert(bool invert);
// state
void led(uint8_t brightness);
void font(std::string name);
void pen(uint8_t pen);
void thickness(uint8_t thickness);
// inputs (buttons: A, B, C, D, E, USER)
bool pressed(uint8_t button);
bool pressed_to_wake(uint8_t button);
void wait_for_press();
void update_button_states();
uint32_t button_states();
// drawing primitives
void clear();
void pixel(int32_t x, int32_t y);
void line(int32_t x1, int32_t y1, int32_t x2, int32_t y2);
void rectangle(int32_t x, int32_t y, int32_t w, int32_t h);
void icon(const uint8_t *data, int sheet_width, int icon_size, int index, int dx, int dy);
void image(const uint8_t* data);
void image(const uint8_t *data, int w, int h, int x, int y);
void image(const uint8_t *data, int stride, int sx, int sy, int dw, int dh, int dx, int dy);
// text (fonts: sans, sans_bold, gothic, cursive_bold, cursive, serif_italic, serif, serif_bold)
const hershey::font_glyph_t* glyph_data(unsigned char c);
void text(std::string message, int32_t x, int32_t y, float s = 1.0f, float a = 0.0f, uint8_t letter_spacing = 1);
int32_t glyph(unsigned char c, int32_t x, int32_t y, float s = 1.0f, float a = 0.0f);
int32_t measure_text(std::string message, float s = 1.0f, uint8_t letter_spacing = 1);
int32_t measure_glyph(unsigned char c, float s = 1.0f);
void debug_command(uint8_t command, size_t len, const uint8_t *data);
void dump_otp(uint8_t *otp_data);
public:
enum pin {
A = 12,
B = 13,
C = 14,
D = 15,
E = 11,
UP = 15, // alias for D
DOWN = 11, // alias for E
USER = 23,
CS = 17,
CLK = 18,
MOSI = 19,
DC = 20,
RESET = 21,
BUSY = 26,
VBUS_DETECT = 24,
LED = 25,
BATTERY = 29,
ENABLE_3V3 = 10
};
};
}