summaryrefslogtreecommitdiff
path: root/apps/plugins/lib/grey_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/lib/grey_core.c')
-rw-r--r--apps/plugins/lib/grey_core.c58
1 files changed, 33 insertions, 25 deletions
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c
index 43eed9b022..5ba5f41404 100644
--- a/apps/plugins/lib/grey_core.c
+++ b/apps/plugins/lib/grey_core.c
@@ -373,7 +373,10 @@ bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size,
373 return false; 373 return false;
374 374
375#ifndef SIMULATOR 375#ifndef SIMULATOR
376 /* Init to white */
376 _grey_rb->memset(_grey_info.values, 0x80, plane_size); 377 _grey_rb->memset(_grey_info.values, 0x80, plane_size);
378
379 /* Init phases with random bits */
377 dst = (unsigned*)(_grey_info.phases); 380 dst = (unsigned*)(_grey_info.phases);
378 end = (unsigned*)(_grey_info.phases + plane_size); 381 end = (unsigned*)(_grey_info.phases + plane_size);
379 382
@@ -516,7 +519,7 @@ void grey_update_rect(int x, int y, int width, int height)
516 519
517void grey_update_rect(int x, int y, int width, int height) 520void grey_update_rect(int x, int y, int width, int height)
518{ 521{
519 unsigned char *src; 522 unsigned char *src, *dst;
520 523
521 if ((width <= 0) || (height <= 0)) 524 if ((width <= 0) || (height <= 0))
522 return; /* nothing to do */ 525 return; /* nothing to do */
@@ -527,26 +530,31 @@ void grey_update_rect(int x, int y, int width, int height)
527 width = _grey_info.width - x; 530 width = _grey_info.width - x;
528 531
529 src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x; 532 src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x;
533
534#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
535 dst = _grey_info.values + _GREY_MULUQ(_grey_info.width, y) + x;
530 536
531 do 537 do
538 {
539 _grey_rb->memcpy(dst, src, width);
540 dst += _grey_info.width;
541 src += _grey_info.width;
542 }
543 while (--height > 0);
544
545#else /* LCD_PIXELFORMAT == VRTICAL_PACKING */
546 do
532 { 547 {
533#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
534 int idx = _GREY_MULUQ(_grey_info.width, y) + x;
535#else
536#if LCD_DEPTH == 1
537 int idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (x << 3) + (~y & 7);
538#elif LCD_DEPTH == 2
539 int idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (x << 2) + (~y & 3);
540#endif
541#endif /* LCD_PIXELFORMAT */
542 unsigned char *dst_row = _grey_info.values + idx;
543 unsigned char *src_row = src; 548 unsigned char *src_row = src;
544 unsigned char *src_end = src + width; 549 unsigned char *src_end = src + width;
545 550
551 dst = _grey_info.values
552 + _GREY_MULUQ(_grey_info.width, y & ~_GREY_BMASK)
553 + (x << _GREY_BSHIFT) + (~y & _GREY_BMASK);
546 do 554 do
547 { 555 {
548 *dst_row = *src_row++; 556 *dst = *src_row++;
549 dst_row += _GREY_X_ADVANCE; 557 dst += _GREY_BSIZE;
550 } 558 }
551 while (src_row < src_end); 559 while (src_row < src_end);
552 560
@@ -554,6 +562,8 @@ void grey_update_rect(int x, int y, int width, int height)
554 src += _grey_info.width; 562 src += _grey_info.width;
555 } 563 }
556 while (--height > 0); 564 while (--height > 0);
565
566#endif /* LCD_PIXELFORMAT */
557} 567}
558 568
559#endif /* !SIMULATOR */ 569#endif /* !SIMULATOR */
@@ -687,18 +697,12 @@ static void grey_screendump_hook(int fd)
687#ifdef SIMULATOR 697#ifdef SIMULATOR
688 unsigned char *src = _grey_info.buffer 698 unsigned char *src = _grey_info.buffer
689 + _GREY_MULUQ(_grey_info.width, gy) + gx; 699 + _GREY_MULUQ(_grey_info.width, gy) + gx;
690
691 for (i = 0; i < 4; i++)
692 linebuf[x + i] = BMP_FIXEDCOLORS + *src++;
693#else 700#else
694 unsigned char *src = _grey_info.values 701 unsigned char *src = _grey_info.values
695 + _GREY_MULUQ(_grey_info.width, gy) + gx; 702 + _GREY_MULUQ(_grey_info.width, gy) + gx;
696 for (i = 0; i < 4; i++)
697 {
698 linebuf[x + i] = BMP_FIXEDCOLORS + *src;
699 src += _GREY_X_ADVANCE;
700 }
701#endif 703#endif
704 for (i = 0; i < 4; i++)
705 linebuf[x + i] = BMP_FIXEDCOLORS + *src++;
702 } 706 }
703 else 707 else
704 { 708 {
@@ -730,7 +734,9 @@ static void grey_screendump_hook(int fd)
730#else 734#else
731 linebuf[x] = BMP_FIXEDCOLORS 735 linebuf[x] = BMP_FIXEDCOLORS
732 + _grey_info.values[_GREY_MULUQ(_grey_info.width, 736 + _grey_info.values[_GREY_MULUQ(_grey_info.width,
733 gy & ~7) + (gx << 3) + (~gy & 7)]; 737 gy & ~_GREY_BMASK)
738 + (gx << _GREY_BSHIFT)
739 + (~gy & _GREY_BMASK)];
734#endif 740#endif
735 } 741 }
736 else 742 else
@@ -757,7 +763,9 @@ static void grey_screendump_hook(int fd)
757#else 763#else
758 linebuf[x] = BMP_FIXEDCOLORS 764 linebuf[x] = BMP_FIXEDCOLORS
759 + _grey_info.values[_GREY_MULUQ(_grey_info.width, 765 + _grey_info.values[_GREY_MULUQ(_grey_info.width,
760 gy & ~3) + (gx << 2) + (~gy & 3)]; 766 gy & ~_GREY_BMASK)
767 + (gx << _GREY_BSHIFT)
768 + (~gy & _GREY_BMASK)];
761#endif 769#endif
762 } 770 }
763 else 771 else