Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/accessibility/speakup/spk_types.h
25922 views
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 st_var_header {
108
char *name;
109
enum var_id_t var_id;
110
enum var_type_t var_type;
111
void *p_val; /* ptr to programs variable to store value */
112
void *data; /* 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
231