ILI9341 read_pixels().

Improves on / abstracts prior interface, which just handed back uint16_ts from the LCD's parallel interface.
This commit is contained in:
Jared Boone 2016-02-19 15:31:56 -08:00
parent bdaa13c103
commit 77eb0c5d24
2 changed files with 42 additions and 0 deletions

View file

@ -179,6 +179,11 @@ void lcd_ramwr_start() {
io.lcd_data_write_command_and_data(0x2c, {});
}
void lcd_ramrd_start() {
io.lcd_data_write_command_and_data(0x2e, {});
io.lcd_read_word();
}
void lcd_caset(const uint_fast16_t start_column, uint_fast16_t end_column) {
lcd_set(0x2a, start_column, end_column);
}
@ -196,12 +201,27 @@ void lcd_start_ram_write(
lcd_ramwr_start();
}
void lcd_start_ram_read(
const ui::Point p,
const ui::Size s
) {
lcd_caset(p.x, p.x + s.w - 1);
lcd_paset(p.y, p.y + s.h - 1);
lcd_ramrd_start();
}
void lcd_start_ram_write(
const ui::Rect& r
) {
lcd_start_ram_write(r.pos, r.size);
}
void lcd_start_ram_read(
const ui::Rect& r
) {
lcd_start_ram_read(r.pos, r.size);
}
void lcd_vertical_scrolling_definition(
const uint_fast16_t top_fixed_area,
const uint_fast16_t vertical_scrolling_area,
@ -299,6 +319,19 @@ void ILI9341::draw_pixels(
io.lcd_write_pixels(colors, count);
}
void ILI9341::read_pixels(
const ui::Rect r,
ui::ColorRGB888* const colors,
const size_t count
) {
/* TODO: Assert that rectangle width x height < count */
lcd_start_ram_read(r);
io.lcd_read_bytes(
reinterpret_cast<uint8_t*>(colors),
count * sizeof(ui::ColorRGB888)
);
}
void ILI9341::draw_bitmap(
const ui::Point p,
const ui::Size size,