kopia lustrzana https://github.com/pimoroni/pimoroni-pico
DV Display: Allow scrolling by single pixel in x coordinate
rodzic
1a54f7b77d
commit
b9cd998709
|
@ -20,10 +20,10 @@ namespace pimoroni {
|
||||||
display_height = display_height_;
|
display_height = display_height_;
|
||||||
mode = mode_;
|
mode = mode_;
|
||||||
|
|
||||||
if (frame_width == 0) frame_width = display_width_;
|
if (frame_width_ == 0) frame_width = display_width_;
|
||||||
else frame_width = frame_width_;
|
else frame_width = frame_width_;
|
||||||
|
|
||||||
if (frame_height == 0) frame_height = display_height_;
|
if (frame_height_ == 0) frame_height = display_height_;
|
||||||
else frame_height = frame_height_;
|
else frame_height = frame_height_;
|
||||||
|
|
||||||
bank = 0;
|
bank = 0;
|
||||||
|
@ -130,9 +130,6 @@ namespace pimoroni {
|
||||||
|
|
||||||
void DVDisplay::set_display_offset(const Point& p) {
|
void DVDisplay::set_display_offset(const Point& p) {
|
||||||
int32_t offset = (int32_t)point_to_address(p) - (int32_t)point_to_address({0,0});
|
int32_t offset = (int32_t)point_to_address(p) - (int32_t)point_to_address({0,0});
|
||||||
while (offset & 3) {
|
|
||||||
offset -= pixel_size();
|
|
||||||
}
|
|
||||||
i2c->write_bytes(I2C_ADDR, I2C_REG_SCROLL, (uint8_t*)&offset, 4);
|
i2c->write_bytes(I2C_ADDR, I2C_REG_SCROLL, (uint8_t*)&offset, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -148,8 +148,6 @@ namespace pimoroni {
|
||||||
|
|
||||||
// Set the top left corner of the display within the frame, if a larger
|
// Set the top left corner of the display within the frame, if a larger
|
||||||
// frame is specified than the display.
|
// frame is specified than the display.
|
||||||
// Note that the supplied x coordinate is rounded down to the previous multiple of 2 in RGB555 mode
|
|
||||||
// or multiple of 4 in palette or RGB888 modes
|
|
||||||
void set_display_offset(const Point& p);
|
void set_display_offset(const Point& p);
|
||||||
|
|
||||||
uint8_t get_gpio();
|
uint8_t get_gpio();
|
||||||
|
|
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
|
@ -9,18 +9,18 @@
|
||||||
|
|
||||||
using namespace pimoroni;
|
using namespace pimoroni;
|
||||||
|
|
||||||
#define DISPLAY_WIDTH 720
|
#define DISPLAY_WIDTH 360
|
||||||
#define DISPLAY_HEIGHT 480
|
#define DISPLAY_HEIGHT 480
|
||||||
|
|
||||||
#define FRAME_WIDTH 720
|
#define FRAME_WIDTH 1000
|
||||||
#define FRAME_HEIGHT 720
|
#define FRAME_HEIGHT 480
|
||||||
|
|
||||||
#define READ_EDID 0
|
#define READ_EDID 0
|
||||||
#if READ_EDID
|
#if READ_EDID
|
||||||
extern "C" { int decode_edid(unsigned char* edid); }
|
extern "C" { int decode_edid(unsigned char* edid); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define USE_PALETTE 1
|
#define USE_PALETTE 0
|
||||||
|
|
||||||
void on_uart_rx() {
|
void on_uart_rx() {
|
||||||
while (uart_is_readable(uart1)) {
|
while (uart_is_readable(uart1)) {
|
||||||
|
@ -205,11 +205,19 @@ int main() {
|
||||||
//printf("%02x %02x\n", display.get_gpio(), display.get_gpio_hi());
|
//printf("%02x %02x\n", display.get_gpio(), display.get_gpio_hi());
|
||||||
|
|
||||||
display.set_display_offset(scroll);
|
display.set_display_offset(scroll);
|
||||||
|
#if 1
|
||||||
|
scroll.x += scroll_dir;
|
||||||
|
if (scroll.x + DISPLAY_WIDTH > FRAME_WIDTH || scroll.x < 0) {
|
||||||
|
scroll_dir = -scroll_dir;
|
||||||
|
scroll.x += scroll_dir;
|
||||||
|
}
|
||||||
|
#else
|
||||||
scroll.y += scroll_dir;
|
scroll.y += scroll_dir;
|
||||||
if (scroll.y + DISPLAY_HEIGHT > FRAME_HEIGHT || scroll.y < 0) {
|
if (scroll.y + DISPLAY_HEIGHT > FRAME_HEIGHT || scroll.y < 0) {
|
||||||
scroll_dir = -scroll_dir;
|
scroll_dir = -scroll_dir;
|
||||||
scroll.y += scroll_dir;
|
scroll.y += scroll_dir;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
++frames;
|
++frames;
|
||||||
display.set_gpio_hi_pull_up_all(frames & 0x3F);
|
display.set_gpio_hi_pull_up_all(frames & 0x3F);
|
||||||
|
|
Ładowanie…
Reference in New Issue