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