1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef SPEAKUP_TYPES_H |
3 | #define SPEAKUP_TYPES_H |
4 | |
5 | /* This file includes all of the typedefs and structs used in speakup. */ |
6 | |
7 | #include <linux/types.h> |
8 | #include <linux/fs.h> |
9 | #include <linux/errno.h> |
10 | #include <linux/delay.h> |
11 | #include <linux/wait.h> /* for wait_queue */ |
12 | #include <linux/init.h> /* for __init */ |
13 | #include <linux/module.h> |
14 | #include <linux/vt_kern.h> |
15 | #include <linux/spinlock.h> |
16 | #include <linux/mutex.h> |
17 | #include <linux/io.h> /* for inb_p, outb_p, inb, outb, etc... */ |
18 | #include <linux/device.h> |
19 | |
20 | enum var_type_t { |
21 | VAR_NUM = 0, |
22 | VAR_TIME, |
23 | VAR_STRING, |
24 | VAR_PROC |
25 | }; |
26 | |
27 | enum { |
28 | E_DEFAULT = 0, |
29 | E_SET, |
30 | E_INC, |
31 | E_DEC, |
32 | E_NEW_DEFAULT, |
33 | }; |
34 | |
35 | /* |
36 | * Note: add new members at the end, speakupmap.h depends on the values of the |
37 | * enum starting from SPELL_DELAY (see inc_dec_var) |
38 | */ |
39 | enum var_id_t { |
40 | VERSION = 0, SYNTH, SILENT, SYNTH_DIRECT, |
41 | KEYMAP, CHARS, |
42 | PUNC_SOME, PUNC_MOST, PUNC_ALL, |
43 | DELIM, REPEATS, EXNUMBER, |
44 | DELAY, TRIGGER, JIFFY, FULL, /* all timers must be together */ |
45 | BLEEP_TIME, CURSOR_TIME, BELL_POS, |
46 | SAY_CONTROL, SAY_WORD_CTL, NO_INTERRUPT, KEY_ECHO, |
47 | SPELL_DELAY, PUNC_LEVEL, READING_PUNC, |
48 | ATTRIB_BLEEP, BLEEPS, |
49 | RATE, PITCH, VOL, TONE, PUNCT, VOICE, FREQUENCY, LANG, |
50 | DIRECT, PAUSE, |
51 | CAPS_START, CAPS_STOP, CHARTAB, INFLECTION, FLUSH, |
52 | CUR_PHONETIC, MAXVARS |
53 | }; |
54 | |
55 | typedef int (*special_func)(struct vc_data *vc, u_char type, u_char ch, |
56 | u_short key); |
57 | |
58 | #define COLOR_BUFFER_SIZE 160 |
59 | |
60 | struct spk_highlight_color_track { |
61 | /* Count of each background color */ |
62 | unsigned int bgcount[8]; |
63 | /* Buffer for characters drawn with each background color */ |
64 | u16 highbuf[8][COLOR_BUFFER_SIZE]; |
65 | /* Current index into highbuf */ |
66 | unsigned int highsize[8]; |
67 | /* Reading Position for each color */ |
68 | u_long rpos[8], rx[8], ry[8]; |
69 | /* Real Cursor Y Position */ |
70 | ulong cy; |
71 | }; |
72 | |
73 | struct st_spk_t { |
74 | u_long reading_x, cursor_x; |
75 | u_long reading_y, cursor_y; |
76 | u_long reading_pos, cursor_pos; |
77 | u_long go_x, go_pos; |
78 | u_long w_top, w_bottom, w_left, w_right; |
79 | u_char w_start, w_enabled; |
80 | u_char reading_attr, old_attr; |
81 | char parked, shut_up; |
82 | struct spk_highlight_color_track ht; |
83 | int tty_stopped; |
84 | }; |
85 | |
86 | /* now some defines to make these easier to use. */ |
87 | #define spk_shut_up (speakup_console[vc->vc_num]->shut_up) |
88 | #define spk_killed (speakup_console[vc->vc_num]->shut_up & 0x40) |
89 | #define spk_x (speakup_console[vc->vc_num]->reading_x) |
90 | #define spk_cx (speakup_console[vc->vc_num]->cursor_x) |
91 | #define spk_y (speakup_console[vc->vc_num]->reading_y) |
92 | #define spk_cy (speakup_console[vc->vc_num]->cursor_y) |
93 | #define spk_pos (speakup_console[vc->vc_num]->reading_pos) |
94 | #define spk_cp (speakup_console[vc->vc_num]->cursor_pos) |
95 | #define goto_pos (speakup_console[vc->vc_num]->go_pos) |
96 | #define goto_x (speakup_console[vc->vc_num]->go_x) |
97 | #define win_top (speakup_console[vc->vc_num]->w_top) |
98 | #define win_bottom (speakup_console[vc->vc_num]->w_bottom) |
99 | #define win_left (speakup_console[vc->vc_num]->w_left) |
100 | #define win_right (speakup_console[vc->vc_num]->w_right) |
101 | #define win_start (speakup_console[vc->vc_num]->w_start) |
102 | #define win_enabled (speakup_console[vc->vc_num]->w_enabled) |
103 | #define spk_attr (speakup_console[vc->vc_num]->reading_attr) |
104 | #define spk_old_attr (speakup_console[vc->vc_num]->old_attr) |
105 | #define spk_parked (speakup_console[vc->vc_num]->parked) |
106 | |
107 | struct { |
108 | char *; |
109 | enum var_id_t ; |
110 | enum var_type_t ; |
111 | void *; /* ptr to programs variable to store value */ |
112 | void *; /* ptr to the vars data */ |
113 | }; |
114 | |
115 | struct num_var_t { |
116 | char *synth_fmt; |
117 | int default_val; |
118 | int low; |
119 | int high; |
120 | short offset, multiplier; /* for fiddling rates etc. */ |
121 | char *out_str; /* if synth needs char representation of number */ |
122 | int value; /* current value */ |
123 | }; |
124 | |
125 | struct punc_var_t { |
126 | enum var_id_t var_id; |
127 | short value; |
128 | }; |
129 | |
130 | struct string_var_t { |
131 | char *default_val; |
132 | }; |
133 | |
134 | struct var_t { |
135 | enum var_id_t var_id; |
136 | union { |
137 | struct num_var_t n; |
138 | struct string_var_t s; |
139 | } u; |
140 | }; |
141 | |
142 | struct st_bits_data { /* punc, repeats, word delim bits */ |
143 | char *name; |
144 | char *value; |
145 | short mask; |
146 | }; |
147 | |
148 | struct synth_indexing { |
149 | char *command; |
150 | unsigned char lowindex; |
151 | unsigned char highindex; |
152 | unsigned char currindex; |
153 | }; |
154 | |
155 | struct spk_synth; |
156 | |
157 | struct spk_io_ops { |
158 | int (*synth_out)(struct spk_synth *synth, const char ch); |
159 | int (*synth_out_unicode)(struct spk_synth *synth, u16 ch); |
160 | void (*send_xchar)(struct spk_synth *synth, char ch); |
161 | void (*tiocmset)(struct spk_synth *synth, unsigned int set, unsigned int clear); |
162 | unsigned char (*synth_in)(struct spk_synth *synth); |
163 | unsigned char (*synth_in_nowait)(struct spk_synth *synth); |
164 | void (*flush_buffer)(struct spk_synth *synth); |
165 | int (*wait_for_xmitr)(struct spk_synth *synth); |
166 | }; |
167 | |
168 | struct spk_synth { |
169 | struct list_head node; |
170 | |
171 | const char *name; |
172 | const char *version; |
173 | const char *long_name; |
174 | const char *init; |
175 | char procspeech; |
176 | char clear; |
177 | int delay; |
178 | int trigger; |
179 | int jiffies; |
180 | int full; |
181 | int flush_time; |
182 | int ser; |
183 | char *dev_name; |
184 | short flags; |
185 | short startup; |
186 | const int checkval; /* for validating a proper synth module */ |
187 | struct var_t *vars; |
188 | int *default_pitch; |
189 | int *default_vol; |
190 | struct spk_io_ops *io_ops; |
191 | int (*probe)(struct spk_synth *synth); |
192 | void (*release)(struct spk_synth *synth); |
193 | const char *(*synth_immediate)(struct spk_synth *synth, |
194 | const char *buff); |
195 | void (*catch_up)(struct spk_synth *synth); |
196 | void (*flush)(struct spk_synth *synth); |
197 | int (*is_alive)(struct spk_synth *synth); |
198 | int (*synth_adjust)(struct spk_synth *synth, struct st_var_header *var); |
199 | void (*read_buff_add)(u_char c); |
200 | unsigned char (*get_index)(struct spk_synth *synth); |
201 | struct synth_indexing indexing; |
202 | int alive; |
203 | struct attribute_group attributes; |
204 | |
205 | void *dev; |
206 | }; |
207 | |
208 | /* |
209 | * module_spk_synth() - Helper macro for registering a speakup driver |
210 | * @__spk_synth: spk_synth struct |
211 | * Helper macro for speakup drivers which do not do anything special in module |
212 | * init/exit. This eliminates a lot of boilerplate. Each module may only |
213 | * use this macro once, and calling it replaces module_init() and module_exit() |
214 | */ |
215 | #define module_spk_synth(__spk_synth) \ |
216 | module_driver(__spk_synth, synth_add, synth_remove) |
217 | |
218 | struct speakup_info_t { |
219 | spinlock_t spinlock; |
220 | int port_tts; |
221 | int flushing; |
222 | }; |
223 | |
224 | struct bleep { |
225 | short freq; |
226 | unsigned long jiffies; |
227 | int active; |
228 | }; |
229 | #endif |
230 | |