Ability to read EDID

dv_stick
Mike Bell 2023-05-21 00:30:22 +01:00 zatwierdzone przez Phil Howard
rodzic 31b480d138
commit 4ed1d61336
4 zmienionych plików z 2299 dodań i 1724 usunięć

Wyświetl plik

@ -96,6 +96,10 @@ namespace pimoroni {
return i2c.reg_read_uint8(I2C_ADDR, I2C_REG_GPIO_HI);
}
void DVDisplay::get_edid(uint8_t* edid) {
i2c.read_bytes(I2C_ADDR, I2C_REG_EDID, edid, 128);
}
void DVDisplay::write(uint32_t address, size_t len, const uint16_t colour)
{
uint32_t val = colour | ((uint32_t)colour << 16);
@ -132,6 +136,20 @@ namespace pimoroni {
write(pointToAddress(p), l, colour);
}
void DVDisplay::write_pixel_span(const Point &p, uint l, uint16_t *data)
{
uint32_t offset = 0;
if (((uintptr_t)data & 0x2) != 0) {
uint32_t val = *data++;
ram.write(pointToAddress(p), &val, 2);
--l;
offset = 2;
}
if (l > 0) {
ram.write(pointToAddress(p) + offset, (uint32_t*)data, l << 1);
}
}
void DVDisplay::read_pixel_span(const Point &p, uint l, uint16_t *data)
{
read(pointToAddress(p), l, data);

Wyświetl plik

@ -40,6 +40,7 @@ namespace pimoroni {
static constexpr uint I2C_REG_START = 0xF9;
static constexpr uint I2C_REG_GPIO = 0xC0;
static constexpr uint I2C_REG_GPIO_HI = 0xC8;
static constexpr uint I2C_REG_EDID = 0xED;
static constexpr uint32_t base_address = 0x10000;
uint16_t width = 0;
@ -96,6 +97,7 @@ namespace pimoroni {
void write_pixel(const Point &p, uint16_t colour) override;
void write_pixel_span(const Point &p, uint l, uint16_t colour) override;
void write_pixel_span(const Point &p, uint l, uint16_t *data);
void read_pixel_span(const Point &p, uint l, uint16_t *data) override;
void init();
@ -107,6 +109,9 @@ namespace pimoroni {
bool is_button_b_pressed() { return (get_driver_gpio() & 0x1) != 0x1; }
bool is_button_c_pressed() { return (get_driver_gpio() & 0x2) != 0x2; }
// The supplied buffer must be at least 128 bytes long
void get_edid(uint8_t* edid);
private:
static constexpr int PIXEL_BUFFER_LEN_IN_WORDS = 16;
uint32_t pixel_buffer[PIXEL_BUFFER_LEN_IN_WORDS];