12067fd92SSamuel Thibault // SPDX-License-Identifier: GPL-2.0+ 22067fd92SSamuel Thibault /* 32067fd92SSamuel Thibault * originally written by: Kirk Reiser <kirk@braille.uwo.ca> 42067fd92SSamuel Thibault * this version considerably modified by David Borowski, david575@rogers.com 52067fd92SSamuel Thibault * eventually modified by Samuel Thibault <samuel.thibault@ens-lyon.org> 62067fd92SSamuel Thibault * 72067fd92SSamuel Thibault * Copyright (C) 1998-99 Kirk Reiser. 82067fd92SSamuel Thibault * Copyright (C) 2003 David Borowski. 92067fd92SSamuel Thibault * Copyright (C) 2007 Samuel Thibault. 102067fd92SSamuel Thibault * 110b4efcb1STom Rix * specifically written as a driver for the speakup screenreview 122067fd92SSamuel Thibault * s not a general device driver. 132067fd92SSamuel Thibault */ 142067fd92SSamuel Thibault #include "spk_priv.h" 152067fd92SSamuel Thibault #include "speakup.h" 162067fd92SSamuel Thibault 172067fd92SSamuel Thibault #define PROCSPEECH '\n' 182067fd92SSamuel Thibault #define DRV_VERSION "2.11" 192067fd92SSamuel Thibault #define SYNTH_CLEAR '!' 202067fd92SSamuel Thibault 212067fd92SSamuel Thibault static struct var_t vars[] = { 222067fd92SSamuel Thibault { CAPS_START, .u.s = {"CAPS_START\n" } }, 232067fd92SSamuel Thibault { CAPS_STOP, .u.s = {"CAPS_STOP\n" } }, 242067fd92SSamuel Thibault { PAUSE, .u.s = {"PAUSE\n"} }, 252067fd92SSamuel Thibault { RATE, .u.n = {"RATE %d\n", 8, 1, 16, 0, 0, NULL } }, 262067fd92SSamuel Thibault { PITCH, .u.n = {"PITCH %d\n", 8, 0, 16, 0, 0, NULL } }, 272067fd92SSamuel Thibault { INFLECTION, .u.n = {"INFLECTION %d\n", 8, 0, 16, 0, 0, NULL } }, 282067fd92SSamuel Thibault { VOL, .u.n = {"VOL %d\n", 8, 0, 16, 0, 0, NULL } }, 292067fd92SSamuel Thibault { TONE, .u.n = {"TONE %d\n", 8, 0, 16, 0, 0, NULL } }, 30*73392920SSamuel Thibault { PUNCT, .u.n = {"PUNCT %d\n", 0, 0, 3, 0, 0, NULL } }, 312067fd92SSamuel Thibault { DIRECT, .u.n = {NULL, 0, 0, 1, 0, 0, NULL } }, 322067fd92SSamuel Thibault V_LAST_VAR 332067fd92SSamuel Thibault }; 342067fd92SSamuel Thibault 352067fd92SSamuel Thibault /* 362067fd92SSamuel Thibault * These attributes will appear in /sys/accessibility/speakup/dummy. 372067fd92SSamuel Thibault */ 382067fd92SSamuel Thibault static struct kobj_attribute caps_start_attribute = 392067fd92SSamuel Thibault __ATTR(caps_start, 0644, spk_var_show, spk_var_store); 402067fd92SSamuel Thibault static struct kobj_attribute caps_stop_attribute = 412067fd92SSamuel Thibault __ATTR(caps_stop, 0644, spk_var_show, spk_var_store); 422067fd92SSamuel Thibault static struct kobj_attribute pitch_attribute = 432067fd92SSamuel Thibault __ATTR(pitch, 0644, spk_var_show, spk_var_store); 442067fd92SSamuel Thibault static struct kobj_attribute inflection_attribute = 452067fd92SSamuel Thibault __ATTR(inflection, 0644, spk_var_show, spk_var_store); 46*73392920SSamuel Thibault static struct kobj_attribute punct_attribute = 47*73392920SSamuel Thibault __ATTR(punct, 0644, spk_var_show, spk_var_store); 482067fd92SSamuel Thibault static struct kobj_attribute rate_attribute = 492067fd92SSamuel Thibault __ATTR(rate, 0644, spk_var_show, spk_var_store); 502067fd92SSamuel Thibault static struct kobj_attribute tone_attribute = 512067fd92SSamuel Thibault __ATTR(tone, 0644, spk_var_show, spk_var_store); 522067fd92SSamuel Thibault static struct kobj_attribute vol_attribute = 532067fd92SSamuel Thibault __ATTR(vol, 0644, spk_var_show, spk_var_store); 542067fd92SSamuel Thibault 552067fd92SSamuel Thibault static struct kobj_attribute delay_time_attribute = 562067fd92SSamuel Thibault __ATTR(delay_time, 0644, spk_var_show, spk_var_store); 572067fd92SSamuel Thibault static struct kobj_attribute direct_attribute = 582067fd92SSamuel Thibault __ATTR(direct, 0644, spk_var_show, spk_var_store); 592067fd92SSamuel Thibault static struct kobj_attribute full_time_attribute = 602067fd92SSamuel Thibault __ATTR(full_time, 0644, spk_var_show, spk_var_store); 612067fd92SSamuel Thibault static struct kobj_attribute jiffy_delta_attribute = 622067fd92SSamuel Thibault __ATTR(jiffy_delta, 0644, spk_var_show, spk_var_store); 632067fd92SSamuel Thibault static struct kobj_attribute trigger_time_attribute = 642067fd92SSamuel Thibault __ATTR(trigger_time, 0644, spk_var_show, spk_var_store); 652067fd92SSamuel Thibault 662067fd92SSamuel Thibault /* 672067fd92SSamuel Thibault * Create a group of attributes so that we can create and destroy them all 682067fd92SSamuel Thibault * at once. 692067fd92SSamuel Thibault */ 702067fd92SSamuel Thibault static struct attribute *synth_attrs[] = { 712067fd92SSamuel Thibault &caps_start_attribute.attr, 722067fd92SSamuel Thibault &caps_stop_attribute.attr, 732067fd92SSamuel Thibault &pitch_attribute.attr, 742067fd92SSamuel Thibault &inflection_attribute.attr, 75*73392920SSamuel Thibault &punct_attribute.attr, 762067fd92SSamuel Thibault &rate_attribute.attr, 772067fd92SSamuel Thibault &tone_attribute.attr, 782067fd92SSamuel Thibault &vol_attribute.attr, 792067fd92SSamuel Thibault &delay_time_attribute.attr, 802067fd92SSamuel Thibault &direct_attribute.attr, 812067fd92SSamuel Thibault &full_time_attribute.attr, 822067fd92SSamuel Thibault &jiffy_delta_attribute.attr, 832067fd92SSamuel Thibault &trigger_time_attribute.attr, 842067fd92SSamuel Thibault NULL, /* need to NULL terminate the list of attributes */ 852067fd92SSamuel Thibault }; 862067fd92SSamuel Thibault 87a79db45fSSamuel Thibault static void read_buff_add(u_char c) 88a79db45fSSamuel Thibault { 89a79db45fSSamuel Thibault pr_info("speakup_dummy: got character %02x\n", c); 90a79db45fSSamuel Thibault } 91a79db45fSSamuel Thibault 922067fd92SSamuel Thibault static struct spk_synth synth_dummy = { 932067fd92SSamuel Thibault .name = "dummy", 942067fd92SSamuel Thibault .version = DRV_VERSION, 952067fd92SSamuel Thibault .long_name = "Dummy", 962067fd92SSamuel Thibault .init = "Speakup\n", 972067fd92SSamuel Thibault .procspeech = PROCSPEECH, 982067fd92SSamuel Thibault .clear = SYNTH_CLEAR, 992067fd92SSamuel Thibault .delay = 500, 1002067fd92SSamuel Thibault .trigger = 50, 1012067fd92SSamuel Thibault .jiffies = 50, 1022067fd92SSamuel Thibault .full = 40000, 1032067fd92SSamuel Thibault .dev_name = SYNTH_DEFAULT_DEV, 1042067fd92SSamuel Thibault .startup = SYNTH_START, 1052067fd92SSamuel Thibault .checkval = SYNTH_CHECK, 1062067fd92SSamuel Thibault .vars = vars, 1072067fd92SSamuel Thibault .io_ops = &spk_ttyio_ops, 1082067fd92SSamuel Thibault .probe = spk_ttyio_synth_probe, 1092067fd92SSamuel Thibault .release = spk_ttyio_release, 1102067fd92SSamuel Thibault .synth_immediate = spk_ttyio_synth_immediate, 1112067fd92SSamuel Thibault .catch_up = spk_do_catch_up_unicode, 1122067fd92SSamuel Thibault .flush = spk_synth_flush, 1132067fd92SSamuel Thibault .is_alive = spk_synth_is_alive_restart, 1142067fd92SSamuel Thibault .synth_adjust = NULL, 115a79db45fSSamuel Thibault .read_buff_add = read_buff_add, 1162067fd92SSamuel Thibault .get_index = NULL, 1172067fd92SSamuel Thibault .indexing = { 1182067fd92SSamuel Thibault .command = NULL, 1192067fd92SSamuel Thibault .lowindex = 0, 1202067fd92SSamuel Thibault .highindex = 0, 1212067fd92SSamuel Thibault .currindex = 0, 1222067fd92SSamuel Thibault }, 1232067fd92SSamuel Thibault .attributes = { 1242067fd92SSamuel Thibault .attrs = synth_attrs, 1252067fd92SSamuel Thibault .name = "dummy", 1262067fd92SSamuel Thibault }, 1272067fd92SSamuel Thibault }; 1282067fd92SSamuel Thibault 1292067fd92SSamuel Thibault module_param_named(ser, synth_dummy.ser, int, 0444); 1302067fd92SSamuel Thibault module_param_named(dev, synth_dummy.dev_name, charp, 0444); 1312067fd92SSamuel Thibault module_param_named(start, synth_dummy.startup, short, 0444); 1322067fd92SSamuel Thibault 1332067fd92SSamuel Thibault MODULE_PARM_DESC(ser, "Set the serial port for the synthesizer (0-based)."); 1342067fd92SSamuel Thibault MODULE_PARM_DESC(dev, "Set the device e.g. ttyUSB0, for the synthesizer."); 1352067fd92SSamuel Thibault MODULE_PARM_DESC(start, "Start the synthesizer once it is loaded."); 1362067fd92SSamuel Thibault 1372067fd92SSamuel Thibault module_spk_synth(synth_dummy); 1382067fd92SSamuel Thibault 1392067fd92SSamuel Thibault MODULE_AUTHOR("Samuel Thibault <samuel.thibault@ens-lyon.org>"); 1402067fd92SSamuel Thibault MODULE_DESCRIPTION("Speakup support for text console"); 1412067fd92SSamuel Thibault MODULE_LICENSE("GPL"); 1422067fd92SSamuel Thibault MODULE_VERSION(DRV_VERSION); 1432067fd92SSamuel Thibault 144