annotate target-utils/lunadrv/lcdout.c @ 1011:6d9b10633f10 default tip

etmsync Pirelli IMEI retrieval: fix poor use of printf() Bug reported by Vadim Yanitskiy <fixeria@osmocom.org>: the construct where a static-allocated string was passed to printf() without any format arguments causes newer compilers to report a security problem. Given that formatted output is not needed here, just fixed string output, change printf() to fputs(), and direct the error message to stderr while at it.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 23 May 2024 17:29:57 +0000
parents db9a8e88e63f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
700
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * Generic LCD output operations are implemented here. All of the basic
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * LCD controller registers needed for these operations are the same
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * between ILI9225, ILI9225G and ST7775R controllers.
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <sys/types.h>
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include "types.h"
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include "luna.h"
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 set_lcd_addr_region(xstart, xend, ystart, yend)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 /* set window area */
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 LCD_REG_WR(0x36, xend);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 LCD_REG_WR(0x37, xstart);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 LCD_REG_WR(0x38, yend);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 LCD_REG_WR(0x39, ystart);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 /* set current write address */
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 LCD_REG_WR(0x20, xstart);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 LCD_REG_WR(0x21, ystart);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 /* set up for GRAM write */
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 LCD_IR = 0x22;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 void
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 cmd_fill(argbulk)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 char *argbulk;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 char *argv[2];
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 u_long pixval;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 unsigned n;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 if (parse_args(argbulk, 1, 1, argv, 0) < 0)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 if (parse_hexarg(argv[0], 4, &pixval) < 0) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 printf("ERROR: arg must be a valid 16-bit hex value\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 set_lcd_addr_region(0, 175, 0, 219);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 for (n = 0; n < 176 * 220; n++)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 LCD_DR = pixval;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 void
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 cmd_rect(argbulk)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 char *argbulk;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 char *argv[6];
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 u_long pixval;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 int xstart, xend, ystart, yend;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 int npix;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 if (parse_args(argbulk, 5, 5, argv, 0) < 0)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 xstart = atoi(argv[0]);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 if (xstart < 0 || xstart > 175) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 range_err: printf("ERROR: coordinate arg out of range\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 xend = atoi(argv[1]);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 if (xend < 0 || xend > 175)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 goto range_err;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 ystart = atoi(argv[2]);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 if (ystart < 0 || ystart > 219)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 goto range_err;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 yend = atoi(argv[3]);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 if (yend < 0 || yend > 219)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 goto range_err;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 if (xend < xstart || yend < ystart) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 printf("ERROR: negative range\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 if (parse_hexarg(argv[4], 4, &pixval) < 0) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 printf("ERROR: pixel arg must be a valid 16-bit hex value\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 set_lcd_addr_region(xstart, xend, ystart, yend);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 npix = (xend + 1 - xstart) * (yend + 1 - ystart);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 while (npix--)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 LCD_DR = pixval;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 void
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 cmd_mem2lcd(argbulk)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 char *argbulk;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 char *argv[2];
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 u_long addr;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 const u16 *rdmem;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 unsigned n;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 if (parse_args(argbulk, 1, 1, argv, 0) < 0)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 if (parse_hexarg(argv[0], 8, &addr) < 0) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 printf("ERROR: argument must be a valid 32-bit hex address\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 if (addr & 1) {
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 printf("ERROR: unaligned address\n");
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 return;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 }
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 rdmem = (const u16 *) addr;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 set_lcd_addr_region(0, 175, 0, 219);
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 for (n = 0; n < 176 * 220; n++)
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 LCD_DR = *rdmem++;
db9a8e88e63f target-utils lunadrv program written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 }