summaryrefslogtreecommitdiff
path: root/apps/plugins/lib/xlcd_scroll.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/lib/xlcd_scroll.c')
-rw-r--r--apps/plugins/lib/xlcd_scroll.c107
1 files changed, 81 insertions, 26 deletions
diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c
index ab9ee1c4cb..89427b6118 100644
--- a/apps/plugins/lib/xlcd_scroll.c
+++ b/apps/plugins/lib/xlcd_scroll.c
@@ -33,6 +33,11 @@ static const unsigned short patterns[4] = {0xFFFF, 0xFF00, 0x00FF, 0x0000};
33#if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE 33#if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE
34void xlcd_scroll_left(int count) 34void xlcd_scroll_left(int count)
35{ 35{
36 /*size_t dst_stride;*/
37 /*struct viewport *vp_main = NULL;*/
38 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
39
40
36 int length, oldmode; 41 int length, oldmode;
37 42
38 if ((unsigned)count >= LCD_WIDTH) 43 if ((unsigned)count >= LCD_WIDTH)
@@ -43,8 +48,7 @@ void xlcd_scroll_left(int count)
43 48
44 length = (LCD_WIDTH-count)*LCD_FBHEIGHT; 49 length = (LCD_WIDTH-count)*LCD_FBHEIGHT;
45 50
46 rb->memmove(*rb->lcd_framebuffer, *rb->lcd_framebuffer + LCD_HEIGHT*count, 51 rb->memmove(lcd_fb, lcd_fb + LCD_HEIGHT*count, length * sizeof(fb_data));
47 length * sizeof(fb_data));
48 52
49 oldmode = rb->lcd_get_drawmode(); 53 oldmode = rb->lcd_get_drawmode();
50 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 54 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
@@ -55,6 +59,11 @@ void xlcd_scroll_left(int count)
55/* Scroll right */ 59/* Scroll right */
56void xlcd_scroll_right(int count) 60void xlcd_scroll_right(int count)
57{ 61{
62 /*size_t dst_stride;*/
63 /*struct viewport *vp_main = NULL;*/
64 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
65
66
58 int length, oldmode; 67 int length, oldmode;
59 68
60 if ((unsigned)count >= LCD_WIDTH) 69 if ((unsigned)count >= LCD_WIDTH)
@@ -65,8 +74,8 @@ void xlcd_scroll_right(int count)
65 74
66 length = (LCD_WIDTH-count)*LCD_FBHEIGHT; 75 length = (LCD_WIDTH-count)*LCD_FBHEIGHT;
67 76
68 rb->memmove(*rb->lcd_framebuffer + LCD_HEIGHT*count, 77 rb->memmove(lcd_fb + LCD_HEIGHT*count,
69 *rb->lcd_framebuffer, length * sizeof(fb_data)); 78 lcd_fb, length * sizeof(fb_data));
70 79
71 oldmode = rb->lcd_get_drawmode(); 80 oldmode = rb->lcd_get_drawmode();
72 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 81 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
@@ -77,6 +86,11 @@ void xlcd_scroll_right(int count)
77/* Scroll up */ 86/* Scroll up */
78void xlcd_scroll_up(int count) 87void xlcd_scroll_up(int count)
79{ 88{
89 /*size_t dst_stride;*/
90 /*struct viewport *vp_main = NULL;*/
91 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
92
93
80 int width, length, oldmode; 94 int width, length, oldmode;
81 95
82 fb_data *data; 96 fb_data *data;
@@ -90,7 +104,7 @@ void xlcd_scroll_up(int count)
90 length = LCD_HEIGHT - count; 104 length = LCD_HEIGHT - count;
91 105
92 width = LCD_WIDTH-1; 106 width = LCD_WIDTH-1;
93 data = *rb->lcd_framebuffer; 107 data = lcd_fb;
94 108
95 do { 109 do {
96 rb->memmove(data,data + count,length * sizeof(fb_data)); 110 rb->memmove(data,data + count,length * sizeof(fb_data));
@@ -106,6 +120,11 @@ void xlcd_scroll_up(int count)
106/* Scroll down */ 120/* Scroll down */
107void xlcd_scroll_down(int count) 121void xlcd_scroll_down(int count)
108{ 122{
123 /*size_t dst_stride;*/
124 /*struct viewport *vp_main = NULL;*/
125 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
126
127
109 int width, length, oldmode; 128 int width, length, oldmode;
110 129
111 fb_data *data; 130 fb_data *data;
@@ -119,7 +138,7 @@ void xlcd_scroll_down(int count)
119 length = LCD_HEIGHT - count; 138 length = LCD_HEIGHT - count;
120 139
121 width = LCD_WIDTH-1; 140 width = LCD_WIDTH-1;
122 data = *rb->lcd_framebuffer; 141 data = lcd_fb;
123 142
124 do { 143 do {
125 rb->memmove(data + count, data, length * sizeof(fb_data)); 144 rb->memmove(data + count, data, length * sizeof(fb_data));
@@ -138,6 +157,11 @@ void xlcd_scroll_down(int count)
138/* Scroll left */ 157/* Scroll left */
139void xlcd_scroll_left(int count) 158void xlcd_scroll_left(int count)
140{ 159{
160 /*size_t dst_stride;*/
161 /*struct viewport *vp_main = NULL;*/
162 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
163
164
141 int bitcount=0, oldmode; 165 int bitcount=0, oldmode;
142 int blockcount=0, blocklen; 166 int blockcount=0, blocklen;
143 167
@@ -155,7 +179,7 @@ void xlcd_scroll_left(int count)
155 179
156 if (blockcount) 180 if (blockcount)
157 { 181 {
158 unsigned char *data = *rb->lcd_framebuffer; 182 unsigned char *data = lcd_fb;
159 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT; 183 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT;
160 184
161 do 185 do
@@ -168,7 +192,7 @@ void xlcd_scroll_left(int count)
168 if (bitcount) 192 if (bitcount)
169 { 193 {
170 int bx, y; 194 int bx, y;
171 unsigned char *addr = *rb->lcd_framebuffer + blocklen; 195 unsigned char *addr = lcd_fb + blocklen;
172#if LCD_DEPTH == 2 196#if LCD_DEPTH == 2
173 unsigned fill = (0x55 * (~rb->lcd_get_background() & 3)) << bitcount; 197 unsigned fill = (0x55 * (~rb->lcd_get_background() & 3)) << bitcount;
174#endif 198#endif
@@ -196,6 +220,11 @@ void xlcd_scroll_left(int count)
196/* Scroll right */ 220/* Scroll right */
197void xlcd_scroll_right(int count) 221void xlcd_scroll_right(int count)
198{ 222{
223 /*size_t dst_stride;*/
224 /*struct viewport *vp_main = NULL;*/
225 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
226
227
199 int bitcount=0, oldmode; 228 int bitcount=0, oldmode;
200 int blockcount=0, blocklen; 229 int blockcount=0, blocklen;
201 230
@@ -213,7 +242,7 @@ void xlcd_scroll_right(int count)
213 242
214 if (blockcount) 243 if (blockcount)
215 { 244 {
216 unsigned char *data = *rb->lcd_framebuffer; 245 unsigned char *data = lcd_fb;
217 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT; 246 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT;
218 247
219 do 248 do
@@ -226,7 +255,7 @@ void xlcd_scroll_right(int count)
226 if (bitcount) 255 if (bitcount)
227 { 256 {
228 int bx, y; 257 int bx, y;
229 unsigned char *addr = *rb->lcd_framebuffer + blockcount; 258 unsigned char *addr = lcd_fb + blockcount;
230#if LCD_DEPTH == 2 259#if LCD_DEPTH == 2
231 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3); 260 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3);
232#endif 261#endif
@@ -256,6 +285,11 @@ void xlcd_scroll_right(int count)
256/* Scroll left */ 285/* Scroll left */
257void xlcd_scroll_left(int count) 286void xlcd_scroll_left(int count)
258{ 287{
288 /*size_t dst_stride;*/
289 /*struct viewport *vp_main = NULL;*/
290 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
291
292
259 fb_data *data, *data_end; 293 fb_data *data, *data_end;
260 int length, oldmode; 294 int length, oldmode;
261 295
@@ -265,7 +299,7 @@ void xlcd_scroll_left(int count)
265 return; 299 return;
266 } 300 }
267 301
268 data = *rb->lcd_framebuffer; 302 data = lcd_fb;
269 data_end = data + LCD_WIDTH*LCD_FBHEIGHT; 303 data_end = data + LCD_WIDTH*LCD_FBHEIGHT;
270 length = LCD_WIDTH - count; 304 length = LCD_WIDTH - count;
271 305
@@ -285,6 +319,11 @@ void xlcd_scroll_left(int count)
285/* Scroll right */ 319/* Scroll right */
286void xlcd_scroll_right(int count) 320void xlcd_scroll_right(int count)
287{ 321{
322 /*size_t dst_stride;*/
323 /*struct viewport *vp_main = NULL;*/
324 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
325
326
288 fb_data *data, *data_end; 327 fb_data *data, *data_end;
289 int length, oldmode; 328 int length, oldmode;
290 329
@@ -294,7 +333,7 @@ void xlcd_scroll_right(int count)
294 return; 333 return;
295 } 334 }
296 335
297 data = *rb->lcd_framebuffer; 336 data = lcd_fb;
298 data_end = data + LCD_WIDTH*LCD_FBHEIGHT; 337 data_end = data + LCD_WIDTH*LCD_FBHEIGHT;
299 length = LCD_WIDTH - count; 338 length = LCD_WIDTH - count;
300 339
@@ -318,6 +357,10 @@ void xlcd_scroll_right(int count)
318/* Scroll up */ 357/* Scroll up */
319void xlcd_scroll_up(int count) 358void xlcd_scroll_up(int count)
320{ 359{
360 /*size_t dst_stride;*/
361 /*struct viewport *vp_main = NULL;*/
362 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
363
321 int length, oldmode; 364 int length, oldmode;
322 365
323 if ((unsigned)count >= LCD_HEIGHT) 366 if ((unsigned)count >= LCD_HEIGHT)
@@ -328,8 +371,8 @@ void xlcd_scroll_up(int count)
328 371
329 length = LCD_HEIGHT - count; 372 length = LCD_HEIGHT - count;
330 373
331 rb->memmove(*rb->lcd_framebuffer, 374 rb->memmove(lcd_fb,
332 *rb->lcd_framebuffer + count * LCD_FBWIDTH, 375 lcd_fb + count * LCD_FBWIDTH,
333 length * LCD_FBWIDTH * sizeof(fb_data)); 376 length * LCD_FBWIDTH * sizeof(fb_data));
334 377
335 oldmode = rb->lcd_get_drawmode(); 378 oldmode = rb->lcd_get_drawmode();
@@ -341,6 +384,10 @@ void xlcd_scroll_up(int count)
341/* Scroll down */ 384/* Scroll down */
342void xlcd_scroll_down(int count) 385void xlcd_scroll_down(int count)
343{ 386{
387 /*size_t dst_stride;*/
388 /*struct viewport *vp_main = NULL;*/
389 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
390
344 int length, oldmode; 391 int length, oldmode;
345 392
346 if ((unsigned)count >= LCD_HEIGHT) 393 if ((unsigned)count >= LCD_HEIGHT)
@@ -351,8 +398,8 @@ void xlcd_scroll_down(int count)
351 398
352 length = LCD_HEIGHT - count; 399 length = LCD_HEIGHT - count;
353 400
354 rb->memmove(*rb->lcd_framebuffer + count * LCD_FBWIDTH, 401 rb->memmove(lcd_fb + count * LCD_FBWIDTH,
355 *rb->lcd_framebuffer, 402 lcd_fb,
356 length * LCD_FBWIDTH * sizeof(fb_data)); 403 length * LCD_FBWIDTH * sizeof(fb_data));
357 404
358 oldmode = rb->lcd_get_drawmode(); 405 oldmode = rb->lcd_get_drawmode();
@@ -367,6 +414,10 @@ void xlcd_scroll_down(int count)
367/* Scroll up */ 414/* Scroll up */
368void xlcd_scroll_up(int count) 415void xlcd_scroll_up(int count)
369{ 416{
417 /*size_t dst_stride;*/
418 /*struct viewport *vp_main = NULL;*/
419 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
420
370 int bitcount=0, oldmode; 421 int bitcount=0, oldmode;
371 int blockcount=0, blocklen; 422 int blockcount=0, blocklen;
372 423
@@ -388,8 +439,8 @@ void xlcd_scroll_up(int count)
388 439
389 if (blockcount) 440 if (blockcount)
390 { 441 {
391 rb->memmove(*rb->lcd_framebuffer, 442 rb->memmove(lcd_fb,
392 *rb->lcd_framebuffer + blockcount * LCD_FBWIDTH, 443 lcd_fb + blockcount * LCD_FBWIDTH,
393 blocklen * LCD_FBWIDTH * sizeof(fb_data)); 444 blocklen * LCD_FBWIDTH * sizeof(fb_data));
394 } 445 }
395 if (bitcount) 446 if (bitcount)
@@ -424,7 +475,7 @@ void xlcd_scroll_up(int count)
424 : /* inputs */ 475 : /* inputs */
425 [wide]"r"(LCD_FBWIDTH), 476 [wide]"r"(LCD_FBWIDTH),
426 [rows]"r"(blocklen), 477 [rows]"r"(blocklen),
427 [addr]"a"(*rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), 478 [addr]"a"(lcd_fb + blocklen * LCD_FBWIDTH),
428 [cnt] "d"(bitcount), 479 [cnt] "d"(bitcount),
429 [bkg] "d"(0x55 * (~rb->lcd_get_background() & 3)) 480 [bkg] "d"(0x55 * (~rb->lcd_get_background() & 3))
430 : /* clobbers */ 481 : /* clobbers */
@@ -432,7 +483,7 @@ void xlcd_scroll_up(int count)
432 ); 483 );
433#else /* C version */ 484#else /* C version */
434 int x, by; 485 int x, by;
435 unsigned char *addr = *rb->lcd_framebuffer + blocklen * LCD_FBWIDTH; 486 unsigned char *addr = lcd_fb + blocklen * LCD_FBWIDTH;
436#if LCD_DEPTH == 2 487#if LCD_DEPTH == 2
437 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3); 488 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3);
438#else 489#else
@@ -457,7 +508,7 @@ void xlcd_scroll_up(int count)
457 508
458#if LCD_DEPTH == 2 509#if LCD_DEPTH == 2
459 int x, by; 510 int x, by;
460 fb_data *addr = *rb->lcd_framebuffer + blocklen * LCD_FBWIDTH; 511 fb_data *addr = lcd_fb + blocklen * LCD_FBWIDTH;
461 unsigned fill, mask; 512 unsigned fill, mask;
462 513
463 fill = patterns[rb->lcd_get_background() & 3] << 8; 514 fill = patterns[rb->lcd_get_background() & 3] << 8;
@@ -491,6 +542,10 @@ void xlcd_scroll_up(int count)
491/* Scroll up */ 542/* Scroll up */
492void xlcd_scroll_down(int count) 543void xlcd_scroll_down(int count)
493{ 544{
545 /*size_t dst_stride;*/
546 /*struct viewport *vp_main = NULL;*/
547 fb_data *lcd_fb = get_framebuffer(NULL, NULL);
548
494 int bitcount=0, oldmode; 549 int bitcount=0, oldmode;
495 int blockcount=0, blocklen; 550 int blockcount=0, blocklen;
496 551
@@ -512,8 +567,8 @@ void xlcd_scroll_down(int count)
512 567
513 if (blockcount) 568 if (blockcount)
514 { 569 {
515 rb->memmove(*rb->lcd_framebuffer + blockcount * LCD_FBWIDTH, 570 rb->memmove(lcd_fb + blockcount * LCD_FBWIDTH,
516 *rb->lcd_framebuffer, 571 lcd_fb,
517 blocklen * LCD_FBWIDTH * sizeof(fb_data)); 572 blocklen * LCD_FBWIDTH * sizeof(fb_data));
518 } 573 }
519 if (bitcount) 574 if (bitcount)
@@ -548,7 +603,7 @@ void xlcd_scroll_down(int count)
548 : /* inputs */ 603 : /* inputs */
549 [wide]"r"(LCD_WIDTH), 604 [wide]"r"(LCD_WIDTH),
550 [rows]"r"(blocklen), 605 [rows]"r"(blocklen),
551 [addr]"a"(*rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), 606 [addr]"a"(lcd_fb + blockcount * LCD_FBWIDTH),
552 [cnt] "d"(bitcount), 607 [cnt] "d"(bitcount),
553 [bkg] "d"((0x55 * (~rb->lcd_get_background() & 3)) << bitcount) 608 [bkg] "d"((0x55 * (~rb->lcd_get_background() & 3)) << bitcount)
554 : /* clobbers */ 609 : /* clobbers */
@@ -556,7 +611,7 @@ void xlcd_scroll_down(int count)
556 ); 611 );
557#else /* C version */ 612#else /* C version */
558 int x, by; 613 int x, by;
559 unsigned char *addr = *rb->lcd_framebuffer + blockcount * LCD_FBWIDTH; 614 unsigned char *addr = lcd_fb + blockcount * LCD_FBWIDTH;
560#if LCD_DEPTH == 2 615#if LCD_DEPTH == 2
561 unsigned fill = (0x55 * (~rb->lcd_get_background() & 3)) << bitcount; 616 unsigned fill = (0x55 * (~rb->lcd_get_background() & 3)) << bitcount;
562#else 617#else
@@ -581,7 +636,7 @@ void xlcd_scroll_down(int count)
581 636
582#if LCD_DEPTH == 2 637#if LCD_DEPTH == 2
583 int x, by; 638 int x, by;
584 fb_data *addr = *rb->lcd_framebuffer + blockcount * LCD_FBWIDTH; 639 fb_data *addr = lcd_fb + blockcount * LCD_FBWIDTH;
585 unsigned fill, mask; 640 unsigned fill, mask;
586 641
587 fill = patterns[rb->lcd_get_background() & 3] >> (8 - bitcount); 642 fill = patterns[rb->lcd_get_background() & 3] >> (8 - bitcount);