kopia lustrzana https://github.com/pimoroni/pimoroni-pico
50 wiersze
1.3 KiB
C++
50 wiersze
1.3 KiB
C++
#pragma once
|
|
|
|
#include "hardware/pio.h"
|
|
#include "pico_graphics.hpp"
|
|
|
|
namespace pimoroni {
|
|
|
|
class PicoUnicorn {
|
|
public:
|
|
static const int WIDTH = 16;
|
|
static const int HEIGHT = 7;
|
|
static const uint8_t A = 12;
|
|
static const uint8_t B = 13;
|
|
static const uint8_t X = 14;
|
|
static const uint8_t Y = 15;
|
|
|
|
static const uint32_t ROW_COUNT = 7;
|
|
static const uint32_t ROW_BYTES = 12;
|
|
static const uint32_t BCD_FRAMES = 15; // includes fet discharge frame
|
|
static const uint32_t BITSTREAM_LENGTH = (ROW_COUNT * ROW_BYTES * BCD_FRAMES);
|
|
|
|
private:
|
|
static PIO bitstream_pio;
|
|
static uint bitstream_sm;
|
|
static uint bitstream_sm_offset;
|
|
|
|
// must be aligned for 32bit dma transfer
|
|
alignas(4) uint8_t bitstream[BITSTREAM_LENGTH] = {0};
|
|
const uint32_t bitstream_addr = (uint32_t)bitstream;
|
|
static PicoUnicorn* unicorn;
|
|
|
|
public:
|
|
PicoUnicorn();
|
|
~PicoUnicorn();
|
|
|
|
void init();
|
|
|
|
void clear();
|
|
void set_pixel(uint8_t x, uint8_t y, uint8_t r, uint8_t g, uint8_t b);
|
|
void set_pixel(uint8_t x, uint8_t y, uint8_t v);
|
|
|
|
bool is_pressed(uint8_t button);
|
|
|
|
void update(PicoGraphics *graphics);
|
|
private:
|
|
void partial_teardown();
|
|
void dma_safe_abort(uint channel);
|
|
};
|
|
|
|
} |