brewpanel/slcd.c

Sun, 08 Nov 2015 20:30:04 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 08 Nov 2015 20:30:04 +0100
changeset 415
d9b7e0705f56
parent 412
f1a042a59b61
child 426
e54611453d29
permissions
-rw-r--r--

Added cursor control, but no blinking yet.

412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * Copyright (C) 2015
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 *
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * Michiel Broek <mbroek at mbse dot eu>
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * This file is part of the mbsePi-apps
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * mbsePi-apps is free software; you can redistribute it and/or modify it
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by the
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * Free Software Foundation; either version 2, or (at your option) any
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * later version.
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 *
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * mbsePi-apps is distributed in the hope that it will be useful, but
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * General Public License for more details.
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * along with mbsePi-apps; see the file COPYING. If not, write to the Free
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *****************************************************************************/
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 /*
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 * Simulated LCD driver based on HD44780U displays.
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 #include "brewpanel.h"
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 #include "slcd.h"
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29 #include "sdlgui.h"
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 #ifdef HAVE_SDL_SDL_H
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 // HD44780U Commands
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
36 //#define SLCD_CLEAR 0x01
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
37 //#define SLCD_HOME 0x02
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
38 //#define SLCD_ENTRY 0x04
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
39 //#define SLCD_CTRL 0x08
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
40 //#define SLCD_CDSHIFT 0x10
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
41 //#define SLCD_FUNC 0x20
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
42 //#define SLCD_CGRAM 0x40
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
43 //#define SLCD_DGRAM 0x80
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 // // Bits in the entry register
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 //
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 // #define LCD_ENTRY_SH 0x01
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 // #define LCD_ENTRY_ID 0x02
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
49
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
50 // Bits in the control register
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
51 #define SLCD_BLINK_CTRL 0x01
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
52 #define SLCD_CURSOR_CTRL 0x02
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
53 #define SLCD_DISPLAY_CTRL 0x04
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 struct slcdDataStruct
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 int x; /* Start x pixels */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 int y; /* Start y pixels */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 int w; /* Width in pixels */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 int h; /* Height in pixels */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 int cols; /* Width in characters */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 int rows; /* Height in characters */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 int cx; /* Cursor x position */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 int cy; /* Cursor y position */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 Uint8 cgram[8][8]; /* Characters in CGRAM */
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
67 int control; /* Control register */
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 };
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 struct slcdDataStruct *slcds [MAX_SLCDS] ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 void slcdHome(int fd)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 struct slcdDataStruct *lcd = slcds [fd];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 lcd->cx = lcd->cy = 0;
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
79 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 void slcdClear(int fd)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 struct slcdDataStruct *lcd = slcds [fd];
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
87 int i;
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 lcd->cx = lcd->cy = 0;
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
90 for (i = 0; i < (lcd->cols * lcd->rows); i++)
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
91 slcdPutchar(fd, ' ');
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
92 lcd->cx = lcd->cy = 0;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
93 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 void slcdDisplay(int fd, int state)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 {
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
100 struct slcdDataStruct *lcd = slcds [fd];
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
101
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
102 if (state)
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
103 lcd->control |= SLCD_DISPLAY_CTRL;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
104 else
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
105 lcd->control &= ~SLCD_DISPLAY_CTRL;
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 void slcdCursor(int fd, int state)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 {
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
112 struct slcdDataStruct *lcd = slcds [fd];
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
113
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
114 if (state)
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
115 lcd->control |= SLCD_CURSOR_CTRL;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
116 else
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
117 lcd->control &= ~SLCD_CURSOR_CTRL;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
118 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 void slcdCursorBlink(int fd, int state)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 {
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
125 struct slcdDataStruct *lcd = slcds [fd];
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
127 if (state)
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
128 lcd->control |= SLCD_BLINK_CTRL;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
129 else
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
130 lcd->control &= ~SLCD_BLINK_CTRL;
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
131 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 void slcdPosition(int fd, int x, int y)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138 struct slcdDataStruct *lcd = slcds [fd];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 if ((x > lcd->cols) || (x < 0))
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 return ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 if ((y > lcd->rows) || (y < 0))
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 return ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 lcd->cx = x ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 lcd->cy = y ;
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
147 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 void slcdCharDef(int fd, int index, Uint8 data[8])
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 struct slcdDataStruct *lcd = slcds [fd];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 int i;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 for (i = 0 ; i < 8 ; i++)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 lcd->cgram[index][i] = data[i];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 void slcdPutchar(int fd, Uint8 data)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 struct slcdDataStruct *lcd = slcds [fd];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 SDLGui_Char(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, data, 0);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 if (++lcd->cx == lcd->cols) {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 lcd->cx = 0;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172 if (++lcd->cy == lcd->rows)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173 lcd->cy = 0;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 }
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
175 SDLGui_Cursor(lcd->x + (lcd->cx * 12) + 12, lcd->y + (lcd->cy * 18) + 8, lcd->control & SLCD_CURSOR_CTRL, lcd->control & SLCD_BLINK_CTRL);
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 void slcdPuts(int fd, const char *string)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 while (*string)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 slcdPutchar(fd, *string++);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 void slcdPrintf(int fd, const char *message, ...)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 va_list argp;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 char buffer[1024];
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 va_start(argp, message);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 vsnprintf(buffer, 1023, message, argp);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 va_end(argp);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 slcdPuts(fd, buffer);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 int slcdInit(int fd, int x, int y, int w, int h, int cols, int rows)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 static int initialised = 0;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 int i, j;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 struct slcdDataStruct *lcd;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 if (initialised == 0) {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 initialised = 1 ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 for (i = 0 ; i < MAX_SLCDS ; ++i)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 slcds[i] = NULL ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 if ((rows < 0) || (rows > 20))
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 return -1 ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 if ((cols < 0) || (cols > 20))
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 return -1 ;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 /*
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 * Create LCD
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 if (slcds[fd] != NULL) {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 syslog(LOG_NOTICE, "slcdInit fd=%d already in use", fd);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 return -1;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 if ((lcd = (struct slcdDataStruct *)malloc (sizeof (struct slcdDataStruct))) == NULL) {
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 return -1;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 lcd->x = x;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 lcd->y = y;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 lcd->w = w;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 lcd->h = h;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 lcd->cols = cols;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 lcd->rows = rows;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 lcd->cx = 0;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 lcd->cy = 0;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 for (i = 0; i < 8; i++)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 for (j = 0; j < 8; j++)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 lcd->cgram[i][j] = 0;
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
241 lcd->control = 0;
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 slcds[fd] = lcd;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 slcdDisplay(fd, TRUE);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 slcdCursor(fd, FALSE);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 slcdCursorBlink(fd, FALSE);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 slcdClear(fd);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 /*
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 * Most LCD's start with the top row filled with blocks.
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 */
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 for (i = 0; i < lcd->cols; i++)
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 slcdPutchar(fd, 0x0ff);
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255
415
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
256 slcdDisplay(fd, TRUE);
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
257 slcdCursor(fd, FALSE);
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
258 slcdCursorBlink(fd, FALSE);
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
259 slcdClear(fd);
d9b7e0705f56 Added cursor control, but no blinking yet.
Michiel Broek <mbroek@mbse.eu>
parents: 412
diff changeset
260
412
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 return fd;
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 }
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264
f1a042a59b61 Basic ideas to write to the simulated LCD display are in place.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 #endif

mercurial