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