File Index
Files and directories
Sign in
FILE

spk_types.h

File preview with syntax highlighting.

linux-6.19.14/drivers/accessibility/speakup/spk_types.h C
  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
 20enum var_type_t {
 21	VAR_NUM = 0,
 22	VAR_TIME,
 23	VAR_STRING,
 24	VAR_PROC
 25};
 26
 27enum {
 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 */
 39enum 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
 55typedef 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
 60struct 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
 73struct 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
107struct 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
115struct 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
125struct punc_var_t {
126	enum var_id_t var_id;
127	short value;
128};
129
130struct string_var_t {
131	char *default_val;
132};
133
134struct 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
142struct st_bits_data { /* punc, repeats, word delim bits */
143	char *name;
144	char *value;
145	short mask;
146};
147
148struct synth_indexing {
149	char *command;
150	unsigned char lowindex;
151	unsigned char highindex;
152	unsigned char currindex;
153};
154
155struct spk_synth;
156
157struct 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
168struct 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
218struct speakup_info_t {
219	spinlock_t spinlock;
220	int port_tts;
221	int flushing;
222};
223
224struct bleep {
225	short freq;
226	unsigned long jiffies;
227	int active;
228};
229#endif
~/ Read-only file preview.