root/drivers/staging/speakup/spk_types.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */