123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647 |
- /* Programs/brlapi.h. Generated from brlapi.h.in by configure. */
- /*
- * libbrlapi - A library providing access to braille terminals for applications.
- *
- * Copyright (C) 2002-2020 by
- * Samuel Thibault <Samuel.Thibault@ens-lyon.org>
- * Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
- *
- * libbrlapi comes with ABSOLUTELY NO WARRANTY.
- *
- * This is free software, placed under the terms of the
- * GNU Lesser General Public License, as published by the Free Software
- * Foundation; either version 2.1 of the License, or (at your option) any
- * later version. Please see the file LICENSE-LGPL for details.
- *
- * Web Page: http://brltty.app/
- *
- * This software is maintained by Dave Mielke <dave@mielke.cc>.
- */
- /** \file
- * \brief Types, defines and functions prototypes for \e BrlAPI's library
- */
- #ifndef BRLAPI_INCLUDED
- #define BRLAPI_INCLUDED
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- /* #undef BRLAPI_WIN32 */
- /** \defgroup brlapi_version Version of the BrlAPI library
- * @{ */
- /** Library version. */
- #define BRLAPI_RELEASE "0.8.0"
- /** Library major version. */
- #define BRLAPI_MAJOR 0
- /** Library minor version. */
- #define BRLAPI_MINOR 8
- /** Library revision. */
- #define BRLAPI_REVISION 0
- /** Returns the version of the library */
- void brlapi_getLibraryVersion(int* major, int* minor, int* revision);
- /** @} */
- /* Types are defined there */
- #include <sys/types.h>
- #ifdef BRLAPI_WIN32
- #include <windows.h>
- #define BRLAPI_STDCALL __stdcall
- #else /* BRLAPI_WIN32 */
- #define BRLAPI_STDCALL
- #endif /* BRLAPI_WIN32 */
- #ifdef _MSC_VER
- typedef __int64 uint64_t;
- typedef __int32 uint32_t;
- #define UINT64_C(x) (x##Ui64)
- #define PRIx64 "I64x"
- typedef signed int ssize_t;
- #else /* _MSC_VER */
- /* this is for uint*_t */
- #include <stdint.h>
- /* NULL is defined there */
- #include <unistd.h>
- #include <inttypes.h> /* For PRIx64 */
- #endif /* _MSC_VER */
- #include <wchar.h>
- /** \defgroup brlapi_handles BrlAPI handles
- *
- * Each function provided by BrlAPI comes in two versions.
- *
- * 1. A version whose name is prefixed by brlapi_ for clients opening only
- * one simultaneous connection with BrlAPI (most frequen case)
- *
- * 2. A version whose name is prefixed by brlapi__ for use by clients
- * wishing to open more than one connection to BrlAPI.
- *
- * A function called brlapi__foo is used in exactly the same way as its
- * brlapi_foo counterpart, except that it takes an additional argument
- * (the first one), which is a handle letting the client refer to a given
- * connection in a similar manner to what file descriptors do.
- *
- * In case you want to check that your code is not erroneously using brlapi_foo
- * functions, define BRLAPI_NO_SINGLE_SESSION before including <brlapi.h>: that
- * will disable the declaration of all single session functions.
- *
- * @{ */
- /** Type for BrlAPI hanles */
- typedef struct brlapi_handle_t brlapi_handle_t;
- /** Returns the size of an object of type brlapi_handle_t in bytes */
- size_t BRLAPI_STDCALL brlapi_getHandleSize(void);
- /** @} */
- /** \defgroup brlapi_connection Connecting to BrlAPI
- *
- * Before calling any other function of the library, calling
- * brlapi_openConnection() is needed to establish a connection to
- * \e BrlAPI 's server.
- * When the connection is not needed any more, brlapi_closeConnection() must be
- * called to close the connection.
- *
- * @{ */
- /** Default port number on which connections to \e BrlAPI can be established */
- #define BRLAPI_SOCKETPORTNUM 4101
- #define BRLAPI_SOCKETPORT "4101"
- /** Default unix path on which connections to \e BrlAPI can be established */
- #define BRLAPI_SOCKETPATH "/run/brltty/BrlAPI"
- /** \e brltty 's settings directory
- *
- * This is where authorization key and driver-dependent key names are found
- * for instance. */
- #define BRLAPI_ETCDIR "/etc"
- /** Default name of the file containing \e BrlAPI 's authorization key
- *
- * This name is relative to BRLAPI_ETCDIR */
- #define BRLAPI_AUTHKEYFILE "brlapi.key"
- /** Default authorization setting */
- #ifdef BRLAPI_WIN32
- /* No authentication by default on Windows */
- #define BRLAPI_DEFAUTH "none"
- #else /* BRLAPI_WIN32 */
- #define BRLAPI_DEFAUTH_KEYFILE "keyfile:" BRLAPI_ETCDIR "/" BRLAPI_AUTHKEYFILE
- #ifdef USE_POLKIT
- #define BRLAPI_DEFAUTH_POLKIT "+polkit"
- #else /* USE_POLKIT */
- #define BRLAPI_DEFAUTH_POLKIT ""
- #endif /* USE_POLKIT */
- #define BRLAPI_DEFAUTH BRLAPI_DEFAUTH_KEYFILE BRLAPI_DEFAUTH_POLKIT
- #endif /* BRLAPI_WIN32 */
- #ifdef __MINGW32__
- typedef HANDLE brlapi_fileDescriptor;
- #else /* __MINGW32__ */
- typedef int brlapi_fileDescriptor;
- #endif /* __MINGW32__ */
- /** \brief Settings structure for \e BrlAPI connection
- *
- * This structure holds every parameter needed to connect to \e BrlAPI: which
- * file the authorization key can be found in and which computer to connect to.
- *
- * \par Examples:
- * \code
- * brlapi_connectionSettings_t settings;
- *
- * settings.auth="/etc/brlapi.key";
- * settings.host="foo";
- * \endcode
- *
- * \e libbrlapi will read authorization key from file \p /etc/brlapi.key
- * and connect to the machine called "foo", on the default TCP port.
- *
- * \code
- * settings.host="10.1.0.2";
- * \endcode
- *
- * lets directly enter an IP address instead of a machine name.
- *
- * \code
- * settings.host=":1";
- * \endcode
- *
- * lets \e libbrlapi connect to the local computer, on port
- * BRLAPI_SOCKETPORTNUM+1
- *
- * \sa brlapi_openConnection()
- */
- typedef struct {
- /** For security reasons, \e libbrlapi has to get authorized to connect to the
- * \e BrlAPI server. This can be done via a secret key, for instance. This is
- * the path to the file which holds it; it will hence have to be readable by
- * the application.
- *
- * Setting \c NULL defaults it to local installation setup or to the content
- * of the BRLAPI_AUTH environment variable, if it exists. */
- const char* auth;
- /** This tells where the \e BrlAPI server resides: it might be listening on
- * another computer, on any TCP port. It should look like "foo:1", which
- * means TCP port number BRLAPI_SOCKETPORTNUM+1 on computer called "foo".
- * \note Please check that resolving this name works before complaining
- *
- * Settings \c NULL defaults it to localhost, using the local installation's
- * default TCP port, or to the content of the BRLAPI_HOST environment
- * variable, if it exists. */
- const char* host;
- } brlapi_connectionSettings_t;
- /* BRLAPI_SETTINGS_INITIALIZER */
- /** Allows to initialize a structure of type \e brlapi_connectionSettings_t *
- * with default values. */
- #define BRLAPI_SETTINGS_INITIALIZER \
- { NULL, NULL }
- /* brlapi_openConnection */
- /** Open a socket and connect it to \e BrlAPI 's server
- *
- * This function first loads an authorization key as specified in settings.
- * It then creates a TCP socket and connects it to the specified machine, on
- * the specified port. It writes the authorization key on the socket and
- * waits for acknowledgement.
- *
- * \return the file descriptor, or -1 on error
- *
- * \note The file descriptor is returned in case the client wants to
- * communicate with the server without using \e libbrlapi functions. If it uses
- * them however, it won't have to pass the file descriptor later, since the
- * library keeps a copy of it. But that also means that
- * brlapi_openConnection() may be called several times, but \e libbrlapi
- * functions will always work with the last call's descriptor
- *
- * \par Example:
- * \code
- * if (brlapi_openConnection(&settings,&settings)<0) {
- * fprintf(stderr,"couldn't connect to BrlAPI at %s: %s\n",
- * settings.host, brlapi_strerror(&brlapi_error));
- * exit(1);
- * }
- * \endcode
- *
- * \par Errors:
- * \e BrlAPI might not be on this TCP port, the host name might not be
- * resolvable, the authorization may fail,...
- *
- * \param desiredSettings this gives the desired connection parameters, as
- * described in brlapi_connectionSettings_t. If \c NULL, defaults values are
- * used, so that it is generally a good idea to give \c NULL as default, and
- * only fill a brlapi_connectionSettings_t structure when the user gave
- * parameters to the program for instance; \param actualSettings if not \c NULL,
- * parameters which were actually used are stored here, if the application ever
- * needs them.
- *
- * \sa
- * brlapi_connectionSettings_t
- * brlapi_writePacket()
- * brlapi_readPacketHeader()
- * brlapi_readPacketContent()
- * brlapi_readPacket()
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- brlapi_fileDescriptor BRLAPI_STDCALL
- brlapi_openConnection(const brlapi_connectionSettings_t* desiredSettings,
- brlapi_connectionSettings_t* actualSettings);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- brlapi_fileDescriptor BRLAPI_STDCALL
- brlapi__openConnection(brlapi_handle_t* handle,
- const brlapi_connectionSettings_t* desiredSettings,
- brlapi_connectionSettings_t* actualSettings);
- /* brlapi_closeConnection */
- /** Cleanly close the socket
- *
- * This function locks until a closing acknowledgement is received from the
- * server. The socket is then freed, so the file descriptor
- * brlapi_openConnection() gave has no meaning any more
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void BRLAPI_STDCALL brlapi_closeConnection(void);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- void BRLAPI_STDCALL brlapi__closeConnection(brlapi_handle_t* handle);
- /** @} */
- /** \defgroup brlapi_clientData Setting and getting client data
- *
- * Clients can register a pointer to data that can then be used
- * e.g. in exception handlers.
- * @{ */
- /* brlapi__setClientData */
- /** Register a pointer to client data
- *
- * \param data The pointer to the private client data
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void BRLAPI_STDCALL brlapi_setClientData(void* data);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- void BRLAPI_STDCALL brlapi__setClientData(brlapi_handle_t* handle, void* data);
- /* brlapi__getClientData */
- /** Retrieves the pointer to the private client data
- *
- * \return the pointer to the private client data
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void* BRLAPI_STDCALL brlapi_getClientData(void);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- void* BRLAPI_STDCALL brlapi__getClientData(brlapi_handle_t* handle);
- /** @} */
- /** \defgroup brlapi_info Getting Terminal information
- * \brief How to get information about the connected Terminal
- *
- * Before using Raw mode or key codes, the application should always check the
- * type of the connected terminal, to be sure it is really the one it expects.
- *
- * One should also check for display size, so as to adjust further displaying
- * on it.
- * @{
- */
- /** Maximum name length for names embeded in BrlAPI packets, not counting any
- * termination \\0 character */
- #define BRLAPI_MAXNAMELENGTH 31
- /* brlapi_getDriverName */
- /** Return the complete name of the driver used by \e brltty
- *
- * This function fills its argument with the whole name of the braille
- * driver if available, terminated with a '\\0'.
- *
- * \param buffer is the buffer provided by the application;
- * \param size is the maximum size for the name buffer.
- *
- * \return -1 on error, otherwise a positive value giving the size of the needed
- * buffer (including '\\0'). If that value is bigger than \p size, the value was
- * truncated and the caller should retry with a bigger buffer accordingly.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_getDriverName(char* buffer, size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__getDriverName(brlapi_handle_t* handle,
- char* buffer,
- size_t size);
- /* brlapi_getModelIdentifier */
- /** Return an identifier for the device model used by \e brltty
- *
- * This function fills its argument with the whole identifier of the braille
- * device model if available, terminated with a '\\0'.
- *
- * \param buffer is the buffer given by the application;
- * \param size is the maximum size for the identifier buffer.
- *
- * \return -1 on error, otherwise a positive value giving the size of the needed
- * buffer (including '\\0'). If that value is bigger than \p size, the value was
- * truncated and the caller should retry with a bigger buffer accordingly.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_getModelIdentifier(char* buffer, size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__getModelIdentifier(brlapi_handle_t* handle,
- char* buffer,
- size_t size);
- /* brlapi_getDisplaySize */
- /** Return the size of the braille display */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_getDisplaySize(unsigned int* x, unsigned int* y);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__getDisplaySize(brlapi_handle_t* handle,
- unsigned int* x,
- unsigned int* y);
- /** @} */
- /** \defgroup brlapi_tty Entering & leaving tty mode
- * \brief How to take control of ttys for direct braille display / read
- *
- * Before being able to write on the braille display, the application must tell
- * the server which tty it will handle.
- *
- * The application must also specify how braille keys will be delivered to it.
- * Two ways are possible: key codes and commands:
- *
- * - key codes are specific to each braille driver, since the raw key code, as
- * defined in the driver will be given for each key press.
- * Using them leads to building highly driver-dependent applications, which
- * can yet sometimes be useful to mimic existing proprietary applications
- * for instance.
- * - commands means that applications will get exactly the same values as
- * \e brltty. This allows driver-independent clients, which will hopefully
- * be nice to use with a lot of different terminals.
- * \sa brlapi_readKey()
- * @{
- */
- /* brlapi_enterTtyMode */
- /** Ask for some tty, with some key mechanism
- *
- * \param tty
- * - If tty>=0 then take control of the specified tty.
- * - If tty==::BRLAPI_TTY_DEFAULT then take control of the default tty.
- *
- * \param driver tells how the application wants brlapi_readKey() to return
- * key presses. NULL or "" means BRLTTY commands are required,
- * whereas a driver name means that raw key codes returned by this
- * driver are expected.
- *
- * WINDOWPATH and WINDOWID should be propagated when running remote applications
- * via ssh, for instance, along with BRLAPI_HOST and the authorization key (see
- * SendEnv in ssh_config(5) and AcceptEnv in sshd_config(5))
- *
- * \return the used tty number on success, -1 on error
- *
- * \sa brlapi_leaveTtyMode() brlapi_readKey()
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_enterTtyMode(int tty, const char* driver);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__enterTtyMode(brlapi_handle_t* handle,
- int tty,
- const char* driver);
- /** Select the default tty.
- *
- * The library takes the following steps:
- * -# Try to get the tty number from the \c WINDOWID environment variable (for
- * the \c xterm case).
- * -# Try to get the tty number from the \c CONTROLVT environment variable.
- * -# Read \c /proc/self/stat (on \c Linux).
- *
- * \sa brlapi_enterTtyMode()
- */
- #define BRLAPI_TTY_DEFAULT -1
- /* brlapi_enterTtyModeWithPath */
- /** Ask for some tty specified by its path in the tty tree, with some key
- * mechanism
- *
- * \param ttys points on the array of ttys representing the tty path to be got.
- * Can be NULL if nttys is 0.
- * \param count gives the number of elements in ttys.
- * \param driver has the same meaning as in brlapi_enterTtyMode()
- *
- * Providing nttys == 0 means to get the root.
- *
- * \sa brlapi_enterTtyMode()
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_enterTtyModeWithPath(int* ttys,
- int count,
- const char* driver);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__enterTtyModeWithPath(brlapi_handle_t* handle,
- int* ttys,
- int count,
- const char* driver);
- /* brlapi_leaveTtyMode */
- /** Stop controlling the tty
- *
- * \return 0 on success, -1 on error.
- *
- * \sa brlapi_enterTtyMode()
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_leaveTtyMode(void);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__leaveTtyMode(brlapi_handle_t* handle);
- /* brlapi_setFocus */
- /** Tell the current tty to brltty
- *
- * This is intended for focus tellers, such as brltty, xbrlapi, screen, ...
- * brlapi_enterTtyMode() must have been called beforehand to tell where this
- * focus applies in the tty tree.
- *
- * \return 0 on success, -1 on error.
- *
- * \sa brlapi_enterTtyMode() brlapi_leaveTtyMode()
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_setFocus(int tty);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__setFocus(brlapi_handle_t* handle, int tty);
- /** @} */
- /** \defgroup brlapi_write Writing on the braille display
- * \brief Write text to the braille display
- *
- * After brlapi_enterTtyMode() has been called, the application can
- * call one of these functions to write things on the braille display.
- *
- * \note Be sure to call brlapi_enterTtyMode() \e before calling brlapi_write(),
- * or else you'll get an error. This is particularly not always trivial when
- * writing multithreaded applications.
- *
- * \note Dots are coded as described in ISO/TR 11548-1: a dot pattern is coded
- * by a byte in which bit 0 is set iff dot 1 is up, bit 1 is set iff dot 2 is
- * up, ... bit 7 is set iff dot 8 is up. This also corresponds to the low-order
- * byte of the coding of unicode's braille row U+2800.
- *
- * \note Text is translated by the server one to one, by just using a simple
- * wchar_t to pattern table, i.e. no contraction/expansion is performed, because
- * the client would then have no way to know how wide the output would be and
- * thus the quantity of text to feed. If contraction/expansion is desired, the
- * client should perform it itself (e.g. thanks to liblouis or gnome-braille)
- * and send the resulting dot patterns. This is actually exactly the same
- * problem as font rendering on a graphical display: for better control,
- * nowadays all font rasterization is performed on the client side, and mere
- * pixmaps are sent to the X server.
- *
- * @{ */
- /* brlapi_writeText */
- /** Write the given \\0-terminated string to the braille display
- *
- * If the string is too long, it is truncated. If it's too short,
- * it is padded with spaces. The text is assumed to be in the current
- * locale charset set by setlocale(3) if it was called, or the locale charset
- * from the locale environment variables if setlocale(3) was not called.
- *
- * \param cursor gives the cursor position; if equal to ::BRLAPI_CURSOR_OFF, no
- * cursor is shown at all; if cursor==::BRLAPI_CURSOR_LEAVE, the cursor is left
- * where it is
- *
- * \param text points to the string to be displayed.
- *
- * \return 0 on success, -1 on error.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_writeText(int cursor, const char* text);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__writeText(brlapi_handle_t* handle,
- int cursor,
- const char* text);
- /* brlapi_writeWText */
- /** Write the given \\0-terminated unicode string to the braille display
- *
- * If the string is too long, it is truncated. If it's too short,
- * it is padded with spaces.
- *
- * \param cursor gives the cursor position; if equal to ::BRLAPI_CURSOR_OFF, no
- * cursor is shown at all; if cursor==::BRLAPI_CURSOR_LEAVE, the cursor is left
- * where it is
- *
- * \param text points to the string to be displayed.
- *
- * \return 0 on success, -1 on error.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_writeWText(int cursor, const wchar_t* text);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__writeWText(brlapi_handle_t* handle,
- int cursor,
- const wchar_t* text);
- /* brlapi_writeDots */
- /** Write the given dots array to the display
- *
- * \param dots points on an array of dot information, one per character. Its
- * size must hence be the same as what brlapi_getDisplaySize() returns.
- *
- * \return 0 on success, -1 on error.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_writeDots(const unsigned char* dots);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__writeDots(brlapi_handle_t* handle,
- const unsigned char* dots);
- /* brlapi_writeArguments_t */
- /** Structure containing arguments to be given to brlapi_write() */
- typedef struct {
- int displayNumber /** Display number ::BRLAPI_DISPLAY_DEFAULT == unspecified
- */
- ;
- unsigned int regionBegin /** Region of display to update, 1st character of
- display is 1 */
- ;
- unsigned int
- regionSize /** Number of characters held in text, andMask and orMask. */;
- char* text /** Text to display, must hold as many characters as the region
- fields expresses. */
- ;
- int textSize /** Size of text in bytes. If -1, strlen() is used for computing
- it. */
- ;
- unsigned char* andMask /** And attributes; applied first */;
- unsigned char* orMask /** Or attributes; applied \e after ANDing */;
- int cursor /** ::BRLAPI_CURSOR_LEAVE == don't touch, ::BRLAPI_CURSOR_OFF ==
- turn off, 1 = 1st char of display, ... */
- ;
- char* charset /** Text charset. NULL means it is assumed to be 8bits, and the
- same as the server's. "" means current locale's charset. If
- no locale was selected, defaults to NULL's meaning. */
- ;
- } brlapi_writeArguments_t;
- /** Write to the default display on the braille device.
- *
- * \sa brlapi_write() brlapi_writeArguments_t
- */
- #define BRLAPI_DISPLAY_DEFAULT -1
- /** Do not change the cursor's state or position.
- *
- * \sa brlapi_writeText() brlapi_write() brlapi_writeArguments_t
- */
- #define BRLAPI_CURSOR_LEAVE -1
- /** Do not display the cursor.
- *
- * \sa brlapi_writeText() brlapi_write() brlapi_writeArguments_t
- */
- #define BRLAPI_CURSOR_OFF 0
- /* BRLAPI_WRITEARGUMENTS_INITIALIZER */
- /** Allows to initialize a structure of type \e brlapi_writeArguments_t *
- * with default values:
- * displayNumber = ::BRLAPI_DISPLAY_DEFAULT; (unspecified)
- * regionBegin = regionSize = 0; (update the whole display, DEPRECATED and will
- * be forbidden in next release. You must always express the region you wish to
- * update)
- * text = andMask = orMask = NULL; (no text, no attribute)
- * cursor = ::BRLAPI_CURSOR_LEAVE; (don't touch cursor)
- */
- #define BRLAPI_WRITEARGUMENTS_INITIALIZER \
- { \
- .displayNumber = BRLAPI_DISPLAY_DEFAULT, .regionBegin = 0, \
- .regionSize = 0, .text = NULL, .textSize = -1, .andMask = NULL, \
- .orMask = NULL, .cursor = BRLAPI_CURSOR_LEAVE, .charset = NULL \
- }
- /* brlapi_write */
- /** Update a specific region of the braille display and apply and/or masks
- *
- * \param arguments gives information necessary for the update
- *
- * regionBegin and regionSize must be filled for specifying which part of the
- * display will be updated, as well as the size (in characters, not bytes) of
- * the text, andMask and orMask members.
- *
- * If given, the "text" field holds the text that will be displayed in the
- * region. The char string must hold exactly as many characters as the region
- * fields express. For multibyte text, this is the number of \e multibyte
- * caracters. Notably, combining and double-width caracters count for 1.
- *
- * The actual length of the text in \e bytes may be specified thanks to
- * textSize. If -1 is given, it will be computed thanks to strlen(), so "text"
- * must then be a NUL-terminated string.
- *
- * The "andMask" and "orMask" masks, if present, are then applied on top of
- * the text, one byte per character. This hence permits the superimposing of
- * attributes over the text. For instance, setting an andMask mask full of
- * BRLAPI_DOTS(1,1,1,1,1,1,0,0) will only keep (logical AND) dots 1-6,
- * hence dropping dots 7 and 8. On the contrary, setting an orMask full of
- * BRLAPI_DOT7|BRLAPI_DOT8 will add (logical OR) dots 7 and 8.
- *
- * The "charset" field, if present, specifies the charset of the "text" field.
- * If it is "", the current locale's charset (if any) is assumed. Else, the
- * 8-bit charset of the server is assumed.
- *
- * A special invocation is with an unmodified initialized structure: this clears
- * the client's whole display, letting the display of other applications on
- * the same tty or of applications "under" the tty appear. See Concurrency
- * management section of the BrlAPI documentation for more details.
- *
- * \return 0 on success, -1 on error.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_write(const brlapi_writeArguments_t* arguments);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__write(brlapi_handle_t* handle,
- const brlapi_writeArguments_t* arguments);
- /** @} */
- #include "brlapi_keycodes.h"
- /** \defgroup brlapi_keys Reading key presses
- * \brief How to read key presses from the braille terminal
- *
- * Once brlapi_enterTtyMode() has been called, the application can call
- * brlapi_readKey() to read key presses. Either key codes (see \ref
- * brlapi_keycodes) or commands will be returned, depending on parameters given
- * to brlapi_enterTtyMode().
- *
- * Key presses are buffered, so that calling brlapi_readKey() in non-blocking
- * mode from time to time should suffice.
- *
- * @{
- */
- /* brlapi_expandedKeyCode_t */
- /** Structure holding the components of a key code as returned by
- * brlapi_expandKeyCode() */
- typedef struct {
- unsigned int type /** the type value */;
- unsigned int command /** the command value */;
- unsigned int argument /** the argument value */;
- unsigned int flags /** the flags value */;
- } brlapi_expandedKeyCode_t;
- /* brlapi_expandKeyCode */
- /** Expand the components of a key code
- *
- * \param code the key code to be expanded
- * \param expansion pointer to the structure that receives the components
- *
- * \return 0 on success, -1 on error
- */
- int BRLAPI_STDCALL brlapi_expandKeyCode(brlapi_keyCode_t code,
- brlapi_expandedKeyCode_t* expansion);
- /* brlapi_describedKeyCode_t */
- /** Structure holding the components of a key code as returned by
- * brlapi_describeKeyCode() */
- typedef struct {
- const char* type /** the type name */;
- const char* command /** the command name */;
- unsigned int argument /** the argument value */;
- unsigned int flags /** the flag count */;
- const char* flag[64 - BRLAPI_KEY_FLAGS_SHIFT] /** the flag names */;
- brlapi_expandedKeyCode_t values /** the actual values of the components */;
- } brlapi_describedKeyCode_t;
- /* brlapi_describeKeyCode */
- /** Describe the components of a key code.
- *
- * \param code the keycode to be described
- * \param description pointer to the structure that receives the description
- *
- * \return 0 on success, -1 on error
- */
- int BRLAPI_STDCALL
- brlapi_describeKeyCode(brlapi_keyCode_t code,
- brlapi_describedKeyCode_t* description);
- /** Unicode braille row */
- #define BRLAPI_UC_ROW 0x2800UL
- /* brlapi_readKey */
- /** Read a key from the braille keyboard
- *
- * This function returns one key press's code.
- *
- * If NULL or "" was given to brlapi_enterTtyMode(), a \e brltty command is
- * returned, as described in the documentation for ::brlapi_keyCode_t . It is
- * hence pretty driver-independent, and should be used by default when no other
- * option is possible.
- *
- * By default, all commands but those which restart drivers and switch
- * virtual terminals are returned to the application and not to brltty.
- * If the application doesn't want to see some command events,
- * it should call brlapi_ignoreKeys()
- *
- * If some driver name was given to brlapi_enterTtyMode(), a raw keycode is
- * returned, as specified by the terminal driver, usually in <brltty/brldefs-xy>
- * where xy is the driver's code. It generally corresponds to the very code that
- * the terminal tells to the driver. This should only be used by applications
- * which are dedicated to a particular braille terminal. Hence, checking the
- * terminal type thanks to a call to brlapi_getDriverName() before getting tty
- * control is a pretty good idea.
- *
- * By default, all the keypresses will be passed to the client, none will go
- * through brltty, so the application will have to handle console switching
- * itself for instance.
- *
- * \param wait tells whether the call should block until a key is pressed (1)
- * or should only probe key presses (0);
- * \param code holds the key code if a key press is indeed read.
- *
- * \return -1 on error or signal interrupt and *code is then undefined, 0 if
- * block was 0 and no key was pressed so far, or 1 and *code holds the key code.
- *
- * Programming hints:
- *
- * If your application is only driven by braille command keypresses, you can
- * just call brlapi_readKey(1, &code) so that it keeps blocking, waiting for
- * keypresses.
- *
- * Else, you'll probably want to use the file descriptor returned by
- * brlapi_openConnection() in your "big polling loop". For instance:
- *
- * - in a \c select() loop, just add it to the \c readfds and \c exceptfds file
- * descriptor sets;
- * - in a gtk or atspi application, use
- * \c g_io_add_watch(fileDescriptor, \c G_IO_IN|G_IO_ERR|G_IO_HUP, \c f, \c
- * data) for adding a callback called \c f;
- * - in an Xt/Xaw/motif-based application, use
- * \c XtAppAddInput(app_context, \c fileDescriptor, \c
- * XtInputReadMask|XtInputExceptMask, \c f, \c data)
- * - etc.
- *
- * and then, when you detect inbound trafic on the file descriptor, do something
- * like this:
- *
- * while (brlapi_readKey(0, &code) {
- * // process keycode code
- * // ...
- * }
- *
- * The \c while loop is needed for processing \e all pending key presses, else
- * some of them may be left in libbrlapi's internal key buffer and you wouldn't
- * get them immediately.
- *
- * \note If the read is interrupted by a signal, brlapi_readKey() will return
- * -1, brlapi_errno will be BRLAPI_ERROR_LIBCERR and errno will be EINTR.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_readKey(int wait, brlapi_keyCode_t* code);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__readKey(brlapi_handle_t* handle,
- int wait,
- brlapi_keyCode_t* code);
- /* brlapi_readKeyWithTimeout */
- /** Read a key from the braille keyboard, unless a timeout expires
- *
- * This function works like brlapi_readKey, except that parameter \e wait is
- * replaced by a \e timeout_ms parameter
- *
- * \param timeout_ms specifies how long the function should wait for a keypress.
- * \param code holds the key code if a key press is indeed read.
- *
- * \return -1 on error or signal interrupt and *code is then undefined, 0 if
- * the timeout expired and no key was pressed, or 1 and *code holds the key
- * code.
- *
- * If the timeout expires without any key being pressed, 0 is returned.
- *
- * If timeout_ms is set to 0, this function looks for key events that have been
- * already received, but does not wait at all if no event was received.
- *
- * If timeout_ms is set to a negative value, this function behaves like
- * brlapi_readKey, i.e. it uses an infinite timeout.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_readKeyWithTimeout(int timeout_ms,
- brlapi_keyCode_t* code);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__readKeyWithTimeout(brlapi_handle_t* handle,
- int timeout_ms,
- brlapi_keyCode_t* code);
- /** types of key ranges */
- typedef enum {
- brlapi_rangeType_all, /**< all keys, code must be 0 */
- brlapi_rangeType_type, /**< all keys of a given type */
- brlapi_rangeType_command, /**< all keys of a given command block, i.e.
- matching the key type and command parts */
- brlapi_rangeType_key, /**< a given key with any flags */
- brlapi_rangeType_code, /**< a given key code */
- } brlapi_rangeType_t;
- /* brlapi_ignoreKeys */
- /** Ignore some key presses from the braille keyboard
- *
- * This function asks the server to give the provided keys to \e brltty, rather
- * than returning them to the application via brlapi_readKey().
- *
- * \param type type of keys to be ignored
- * \param keys array of keys to be ignored
- * \param count number of keys
- *
- * \note The given codes should be \e brltty commands (NULL or "" was given to
- * brlapi_enterTtyMode())
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_ignoreKeys(brlapi_rangeType_t type,
- const brlapi_keyCode_t keys[],
- unsigned int count);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__ignoreKeys(brlapi_handle_t* handle,
- brlapi_rangeType_t type,
- const brlapi_keyCode_t keys[],
- unsigned int count);
- /* brlapi_acceptKeys */
- /** Accept some key presses from the braille keyboard
- *
- * This function asks the server to give the provided keys to the application,
- * and not give them to \e brltty.
- *
- * \param type type of keys to be ignored
- * \param keys array of keys to be ignored
- * \param count number of keys
- *
- * \note The given codes should be \e brltty commands (NULL or "" was given to
- * brlapi_enterTtyMode())
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_acceptKeys(brlapi_rangeType_t type,
- const brlapi_keyCode_t keys[],
- unsigned int count);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__acceptKeys(brlapi_handle_t* handle,
- brlapi_rangeType_t type,
- const brlapi_keyCode_t keys[],
- unsigned int count);
- /* brlapi_ignoreAllKeys */
- /** Ignore all key presses from the braille keyboard
- *
- * This function asks the server to give all keys to \e brltty, rather than
- * returning them to the application via brlapi_readKey().
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_ignoreAllKeys(void);
- #define brlapi_ignoreAllKeys() brlapi_ignoreKeys(brlapi_rangeType_all, NULL, 0)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__ignoreAllKeys(brlapi_handle_t* handle);
- #define brlapi__ignoreAllKeys(handle) \
- brlapi__ignoreKeys(handle, brlapi_rangeType_all, NULL, 0)
- /* brlapi_acceptAllKeys */
- /** Accept all key presses from the braille keyboard
- *
- * This function asks the server to give all keys to the application, and not
- * give them to \e brltty.
- *
- * Warning: after calling this function, make sure to call brlapi_ignoreKeys()
- * for ignoring important keys like BRL_CMD_SWITCHVT_PREV/NEXT and such.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_acceptAllKeys(void);
- #define brlapi_acceptAllKeys() brlapi_acceptKeys(brlapi_rangeType_all, NULL, 0)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__acceptAllKeys(brlapi_handle_t* handle);
- #define brlapi__acceptAllKeys(handle) \
- brlapi__acceptKeys(handle, brlapi_rangeType_all, NULL, 0)
- /** Type for raw keycode ranges
- *
- * Denotes the set of keycodes between \e first and \e last (inclusive)
- */
- typedef struct {
- brlapi_keyCode_t first; /**< first key of the range */
- brlapi_keyCode_t last; /**< last key of the range */
- } brlapi_range_t;
- /* brlapi_ignoreKeyRanges */
- /** Ignore some key presses from the braille keyboard
- *
- * This function asks the server to give the provided key ranges to \e brltty,
- * rather than returning them to the application via brlapi_readKey().
- *
- * \param ranges key ranges, which are inclusive
- * \param count number of ranges
- *
- * \note The given codes should be raw keycodes (i.e. some driver name was given
- * to brlapi_enterTtyMode()) */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_ignoreKeyRanges(const brlapi_range_t ranges[],
- unsigned int count);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__ignoreKeyRanges(brlapi_handle_t* handle,
- const brlapi_range_t ranges[],
- unsigned int count);
- /* brlapi_acceptKeyRanges */
- /** Accept some key presses from the braille keyboard
- *
- * This function asks the server to return the provided key ranges (inclusive)
- * to the application, and not give them to \e brltty.
- *
- * \param ranges key ranges, which are inclusive
- * \param count number of ranges
- *
- * \note The given codes should be raw keycodes (i.e. some driver name was given
- * to brlapi_enterTtyMode()) */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_acceptKeyRanges(const brlapi_range_t ranges[],
- unsigned int count);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__acceptKeyRanges(brlapi_handle_t* handle,
- const brlapi_range_t ranges[],
- unsigned int count);
- /** @} */
- /** \defgroup brlapi_driverspecific Driver-Specific modes
- * \brief Raw and Suspend Modes mechanism
- *
- * If the application wants to directly talk to the braille terminal, it should
- * use Raw Mode. In this special mode, the driver gives the whole control of the
- * terminal to it: \e brltty doesn't work any more.
- *
- * For this, it simply has to call brlapi_enterRawMode(), then brlapi_sendRaw()
- * and brlapi_recvRaw(), and finally give control back thanks to
- * brlapi_leaveRawMode().
- *
- * Special care of the terminal should be taken, since one might completely
- * trash the terminal's data, or even lock it! The application should always
- * check for terminal's type thanks to brlapi_getDriverName().
- *
- * The client can also make brltty close the driver by using
- * brlapi_suspendDriver(), and resume it again with brlapi_resumeDriver(). This
- * should not be used if possible: raw mode should be sufficient for any use. If
- * not, please ask for features :)
- *
- * @{
- */
- /* brlapi_enterRawMode */
- /** Switch to Raw mode
- * \param driver Specifies the name of the driver for which the raw
- * communication will be established.
- * \return 0 on success, -1 on error */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_enterRawMode(const char* driver);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__enterRawMode(brlapi_handle_t* handle,
- const char* driver);
- /* brlapi_leaveRawMode */
- /** Leave Raw mode
- * \return 0 on success, -1 on error */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_leaveRawMode(void);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__leaveRawMode(brlapi_handle_t* handle);
- /* brlapi_sendRaw */
- /** Send Raw data
- *
- * \param buffer points on the data;
- * \param size holds the packet size.
- * \return size on success, -1 on error */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- ssize_t BRLAPI_STDCALL brlapi_sendRaw(const void* buffer, size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- ssize_t BRLAPI_STDCALL brlapi__sendRaw(brlapi_handle_t* handle,
- const void* buffer,
- size_t size);
- /* brlapi_recvRaw */
- /** Get Raw data
- *
- * \param buffer points on a buffer where the function will store the received
- * data;
- * \param size holds the buffer size.
- * \return its size, -1 on error or signal interruption */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- ssize_t BRLAPI_STDCALL brlapi_recvRaw(void* buffer, size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- ssize_t BRLAPI_STDCALL brlapi__recvRaw(brlapi_handle_t* handle,
- void* buffer,
- size_t size);
- /* brlapi_suspendDriver */
- /** Suspend braille driver
- * \param driver Specifies the name of the driver which will be suspended.
- * \return -1 on error
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_suspendDriver(const char* driver);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__suspendDriver(brlapi_handle_t* handle,
- const char* driver);
- /* brlapi_resumeDriver */
- /** Resume braille driver
- * \return -1 on error
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_resumeDriver(void);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__resumeDriver(brlapi_handle_t* handle);
- /** @} */
- #include "brlapi_param.h"
- /** \defgroup brlapi_parameterManagement Parameter management
- * \brief How to manage BrlAPI parameters
- *
- * There are several kinds of parameters:
- * - states associated with the braille device itself, such as its size or
- * parameters of the device port
- * - states of the BrlAPI connection itself, such as the displaying level or
- * key passing preferences.
- * - general states such as the cut buffer,
- * - braille parameters: braille table, contraction, cursor shape, etc,
- * - browse parameters: line skip, beep, etc.
- *
- * Some of them are subdivided in subparameters. Others have only subparameter
- * 0.
- *
- * Some of them are read-only, others are read/write.
- *
- * A client can either request the immediate content of a parameter by
- * using brlapi_getParameter(); set the content of a parameter by using
- * brlapi_setParameter(); or register a callback that may be called immediately
- * and on each change of a given parameter, by using brlapi_watchParameter().
- *
- * @{ */
- /** Flags for parameter requests */
- typedef uint32_t brlapi_param_flags_t;
- #define BRLAPI_PARAMF_LOCAL \
- 0X00 /**< Refer to the value local to the connection instead of the global \
- value */
- #define BRLAPI_PARAMF_GLOBAL \
- 0X01 /**< Refer to the global value instead of the value local to the \
- connection */
- #define BRLAPI_PARAMF_SELF \
- 0X02 /**< Specify whether to receive notifications of value self-changes */
- /* brlapi_getParameter */
- /** Get the content of a parameter
- *
- * brlapi_getParameter gets the current content of a parameter
- *
- * \param parameter is the parameter whose content shall be gotten;
- * \param subparam is a specific instance of the parameter;
- * \param flags specify which value and how it should be returned;
- * \param data is a buffer where content of the parameter shall be stored;
- * \param len is the size of the buffer.
- *
- * \return the real size of the parameter's content. If the parameter does not
- * fit in the provided buffer, it is truncated to len bytes (but the real size
- * of the parameter is still returned). In that case, the client must call
- * brlapi_getParameter again with a big enough buffer.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- ssize_t BRLAPI_STDCALL brlapi_getParameter(brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- void* data,
- size_t len);
- #endif
- ssize_t BRLAPI_STDCALL brlapi__getParameter(brlapi_handle_t* handle,
- brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- void* data,
- size_t len);
- /* brlapi_getParameterAlloc */
- /** Return the content of a parameter
- *
- * brlapi_getParameterAlloc gets the current content of a parameter, by
- * returning it as a newly-allocated buffer. The buffer is allocated to one byte
- * more than the parameter value. This byte is set to zero. This allows, for
- * string parameters, to be able to immediately use it as a C string.
- *
- * \param parameter is the parameter whose content shall be gotten;
- * \param subparam is a specific instance of the parameter;
- * \param flags specify which value and how it should be returned;
- * \param len is the address where to store the size of the parameter value.
- *
- * \return a newly-allocated buffer that contains the value of the parameter.
- * The caller must call free() on it after use. NULL is returned on errors
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void* BRLAPI_STDCALL brlapi_getParameterAlloc(brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- size_t* len);
- #endif
- void* BRLAPI_STDCALL brlapi__getParameterAlloc(brlapi_handle_t* handle,
- brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- size_t* len);
- /* brlapi_setParameter */
- /** Set the content of a parameter
- *
- * brlapi_setParameter sets the content of a parameter
- *
- * \param parameter is the parameter to set;
- * \param subparam is a specific instance of the parameter;
- * \param flags specify which value and how it should be set;
- * \param data is a buffer containing the data to store in the parameter;
- * \param len is the size of the data.
- *
- * \return 0 on success, -1 on error (read-only parameter for instance).
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_setParameter(brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- const void* data,
- size_t len);
- #endif
- int BRLAPI_STDCALL brlapi__setParameter(brlapi_handle_t* handle,
- brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- const void* data,
- size_t len);
- /* brlapi_paramCallback_t */
- /** Callback for parameter changes
- *
- * When a parameter gets changed, application-defined callbacks set by the
- * brlapi_watchParameter() function are called.
- *
- * \param parameter is the parameter that changed;
- * \param flags specify which value and how it was changed;
- * \param priv is the void pointer that was passed to the brlapi_watchParameter
- * call which registered the callback; \param data is a buffer containing the
- * new value of the parameter; \param len is the size of the data.
- *
- * This callback only gets called when the application calls some brlapi_
- * function (i.e. BrlAPI gets direct control of the execution).
- */
- typedef void (*brlapi_paramCallback_t)(brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- void* priv,
- const void* data,
- size_t len);
- /* brlapi_paramCallbackDescriptor_t */
- /** Type for callback descriptors
- * This is returned by brlapi_watchParameter, to be passed to
- * brlapi_unwatchParameter.
- */
- typedef void* brlapi_paramCallbackDescriptor_t;
- /* brlapi_watchParameter */
- /** Set a parameter change callback
- *
- * brlapi_watchParameter registers a parameter change callback: whenever the
- * given parameter changes, the given function is called.
- *
- * \param parameter is the parameter to watch;
- * \param subparam is a specific instance of the parameter;
- * \param flags specify which value and how it should be monitored;
- * \param func is the function to call on parameter change;
- * \param priv is a void pointer which will be passed as such to the function;
- * \param data is a buffer where the current content of the parameter shall be
- * stored;
- * \param len is the size of the buffer.
- *
- * \return the callback descriptor (to be passed to brlapi_unwatchParameter to
- * unregister the callback), or NULL on error.
- *
- * \note Default parameter callbacks don't do anything, except the ones for
- * display size which just raise SIGWINCH.
- * \note If data is NULL, the callback will be called immediately by
- * brlapi_watchParameter, for providing the initial value
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- brlapi_paramCallbackDescriptor_t BRLAPI_STDCALL
- brlapi_watchParameter(brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- brlapi_paramCallback_t func,
- void* priv,
- void* data,
- size_t len);
- #endif
- brlapi_paramCallbackDescriptor_t BRLAPI_STDCALL
- brlapi__watchParameter(brlapi_handle_t* handle,
- brlapi_param_t parameter,
- brlapi_param_subparam_t subparam,
- brlapi_param_flags_t flags,
- brlapi_paramCallback_t func,
- void* priv,
- void* data,
- size_t len);
- /* brlapi_unwatchParameter */
- /** Clear a parameter change callback
- *
- * brlapi_unwatchParameter unregisters a parameter change callback: the
- * callback function previously registered with brlapi_watchParameter will
- * not be called any longer.
- *
- * \param descriptor refers to the callback to be removed.
- *
- * \return 0 on success, -1 on error.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL
- brlapi_unwatchParameter(brlapi_paramCallbackDescriptor_t descriptor);
- #endif
- int BRLAPI_STDCALL
- brlapi__unwatchParameter(brlapi_handle_t* handle,
- brlapi_paramCallbackDescriptor_t descriptor);
- /** @} */
- /** \defgroup brlapi_misc Miscellaneous functions
- * @{ */
- /* brlapi_pause */
- /**
- * Waits until an event is received from the BrlAPI server
- * \param timeout_ms specifies an optional timeout which can be zero for
- * polling, or -1 for infinite wait \return nothing
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void BRLAPI_STDCALL brlapi_pause(int timeout_ms);
- #endif
- void BRLAPI_STDCALL brlapi__pause(brlapi_handle_t* handle, int timeout_ms);
- /** @} */
- /** \defgroup brlapi_error Error handling
- * \brief How to handle errors
- *
- * When a function fails, ::brlapi_errno will hold an error
- * code to explain why it failed. It should always be reported somehow.
- *
- * Although most errors are reported that way, some (called exceptions)
- * are reported asynchronously for efficiency reasons, because they always
- * just report a programming error. The affected functions are: brlapi_setFocus,
- * brlapi_write* and brlapi_sendRaw. When they happen, the next call to
- * brlapi_something will close the connection and call the \e exception
- * handler. If the exception handler returns, the brlapi_something function will
- * return an end-of-file error.
- *
- * The default exception handler (brlapi_defaultExceptionHandler()) dumps
- * the guilty packet before abort()ing. It can be replaced by calling
- * brlapi_setExceptionHandler(). For instance, the Java and Python bindings use
- * this for raising a Java or Python exception that may be caught.
- *
- * @{ */
- /* Error codes */
- #define BRLAPI_ERROR_SUCCESS 0 /**< Success */
- #define BRLAPI_ERROR_NOMEM 1 /**< Not enough memory */
- #define BRLAPI_ERROR_TTYBUSY \
- 2 /**< A connection is already running in this tty */
- #define BRLAPI_ERROR_DEVICEBUSY \
- 3 /**< A connection is already using RAW or suspend mode */
- #define BRLAPI_ERROR_UNKNOWN_INSTRUCTION 4 /**< Not implemented in protocol */
- #define BRLAPI_ERROR_ILLEGAL_INSTRUCTION 5 /**< Forbiden in current mode */
- #define BRLAPI_ERROR_INVALID_PARAMETER 6 /**< Out of range or have no sense */
- #define BRLAPI_ERROR_INVALID_PACKET 7 /**< Invalid size */
- #define BRLAPI_ERROR_CONNREFUSED 8 /**< Connection refused */
- #define BRLAPI_ERROR_OPNOTSUPP 9 /**< Operation not supported */
- #define BRLAPI_ERROR_GAIERR 10 /**< Getaddrinfo error */
- #define BRLAPI_ERROR_LIBCERR 11 /**< Libc error */
- #define BRLAPI_ERROR_UNKNOWNTTY 12 /**< Couldn't find out the tty number */
- #define BRLAPI_ERROR_PROTOCOL_VERSION 13 /**< Bad protocol version */
- #define BRLAPI_ERROR_EOF 14 /**< Unexpected end of file */
- #define BRLAPI_ERROR_EMPTYKEY 15 /**< Key file empty */
- #define BRLAPI_ERROR_DRIVERERROR \
- 16 /**< Packet returned by driver too large \
- */
- #define BRLAPI_ERROR_AUTHENTICATION 17 /**< Authentication failed */
- #define BRLAPI_ERROR_READONLY_PARAMETER \
- 18 /**< Parameter can not be changed \
- */
- /* brlapi_errlist */
- /** Error message list
- *
- * These are the string constants used by brlapi_perror().
- */
- extern const char* brlapi_errlist[];
- /* brlapi_nerr */
- /** Number of error messages */
- extern const int brlapi_nerr;
- /* brlapi_perror */
- /** Print a BrlAPI error message
- *
- * brlapi_perror() reads ::brlapi_error, and acts just like perror().
- */
- void BRLAPI_STDCALL brlapi_perror(const char* s);
- /* brlapi_error_t */
- /** All information that is needed to describe brlapi errors */
- typedef struct {
- int brlerrno;
- int libcerrno;
- int gaierrno;
- const char* errfun;
- } brlapi_error_t;
- /** Get per-thread error location
- *
- * In multithreaded software, ::brlapi_error is thread-specific, so api.h
- * cheats about the brlapi_error token and actually calls
- * brlapi_error_location().
- *
- * This gets the thread specific location of global variable ::brlapi_error
- */
- brlapi_error_t* BRLAPI_STDCALL brlapi_error_location(void);
- /** Global variable brlapi_error
- *
- * ::brlapi_error is a global left-value containing the last error information.
- * Its errno field is not reset to BRLAPI_ERROR_SUCCESS on success.
- *
- * This information may be copied in brlapi_error_t variables for later use
- * with the brlapi_strerror function.
- */
- extern brlapi_error_t brlapi_error;
- /** Shorthand for brlapi_error.errno */
- extern int brlapi_errno;
- /** Shorthand for brlapi_error.libcerrno */
- extern int brlapi_libcerrno;
- /** Shorthand for brlapi_error.gaierrno */
- extern int brlapi_gaierrno;
- /** Shorthand for brlapi_error.errfun */
- extern const char* brlapi_errfun;
- /** Cheat about the brlapi_error C token */
- #define brlapi_error (*brlapi_error_location())
- /** Cheat about the brlapi_errno C token */
- #define brlapi_errno (brlapi_error.brlerrno)
- /** Cheat about the brlapi_libcerrno C token */
- #define brlapi_libcerrno (brlapi_error.libcerrno)
- /** Cheat about the brlapi_gaierrno C token */
- #define brlapi_gaierrno (brlapi_error.gaierrno)
- /** Cheat about the brlapi_errfun C token */
- #define brlapi_errfun (brlapi_error.errfun)
- /* brlapi_strerror */
- /** Get plain error message
- *
- * brlapi_strerror() returns the plain error message corresponding to its
- * argument.
- */
- const char* BRLAPI_STDCALL brlapi_strerror(const brlapi_error_t* error);
- /** Type for packet type. Only unsigned can cross networks, 32bits */
- typedef uint32_t brlapi_packetType_t;
- /* brlapi_getPacketTypeName */
- /** Get plain packet type
- *
- * brlapi_getPacketTypeName() returns the plain packet type name corresponding
- * to its argument.
- */
- const char* BRLAPI_STDCALL brlapi_getPacketTypeName(brlapi_packetType_t type);
- /* brlapi_exceptionHandler_t */
- /** Types for exception handlers
- *
- * Types of exception handlers which are to be given to
- * brlapi_setExceptionHandler() and brlapi__setExceptionHandler().
- *
- * \param handle is the handle corresponding to the guilty connection;
- * \param error is a BRLAPI_ERROR_ error code;
- * \param type is the type of the guilty packet;
- * \param packet points to the content of the guilty packet (might be a little
- * bit truncated); \param size gives the guilty packet's size.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- typedef void(BRLAPI_STDCALL* brlapi_exceptionHandler_t)(
- int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- typedef void(BRLAPI_STDCALL* brlapi__exceptionHandler_t)(
- brlapi_handle_t* handle,
- int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t size);
- /* brlapi_strexception */
- /** Describes an exception
- *
- * brlapi_strexception() puts a text describing the given exception in buffer.
- *
- * The beginning of the guilty packet is dumped as a sequence of hex bytes.
- *
- * \return the size of the text describing the exception, following
- * snprintf()'s semantics.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_strexception(char* buffer,
- size_t bufferSize,
- int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t packetSize);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__strexception(brlapi_handle_t* handle,
- char* buffer,
- size_t bufferSize,
- int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t packetSize);
- /* brlapi_setExceptionHandler */
- /** Set a new exception handler
- *
- * brlapi_setExceptionHandler() replaces the previous exception handler with
- * the handler parameter. The previous exception handler is returned to make
- * chaining error handlers possible.
- *
- * The default handler just prints the exception and abort()s.
- */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- brlapi_exceptionHandler_t BRLAPI_STDCALL
- brlapi_setExceptionHandler(brlapi_exceptionHandler_t handler);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- brlapi__exceptionHandler_t BRLAPI_STDCALL
- brlapi__setExceptionHandler(brlapi_handle_t* handle,
- brlapi__exceptionHandler_t handler);
- #ifndef BRLAPI_NO_SINGLE_SESSION
- void BRLAPI_STDCALL brlapi_defaultExceptionHandler(int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t size);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- void BRLAPI_STDCALL brlapi__defaultExceptionHandler(brlapi_handle_t* handle,
- int error,
- brlapi_packetType_t type,
- const void* packet,
- size_t size);
- /** @} */
- /* Windows-specific tricks - don't look at this */
- #ifdef BRLAPI_WIN32
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_writeTextWin(int cursor, const void* str, int wide);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__writeTextWin(brlapi_handle_t* handle,
- int cursor,
- const void* str,
- int wide);
- #ifndef BRLAPI_NO_SINGLE_SESSION
- int BRLAPI_STDCALL brlapi_writeWin(const brlapi_writeArguments_t* s, int wide);
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- int BRLAPI_STDCALL brlapi__writeWin(brlapi_handle_t* handle,
- const brlapi_writeArguments_t* s,
- int wide);
- #ifdef UNICODE
- #ifndef BRLAPI_NO_SINGLE_SESSION
- #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 1)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- #define brlapi__writeText(handle, cursor, str) \
- brlapi__writeTextWin(handle, cursor, str, 1)
- #ifndef BRLAPI_NO_SINGLE_SESSION
- #define brlapi_write(s) brlapi_writeWin(s, 1)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 1)
- #else /* UNICODE */
- #ifndef BRLAPI_NO_SINGLE_SESSION
- #define brlapi_writeText(cursor, str) brlapi_writeTextWin(cursor, str, 0)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- #define brlapi__writeText(handle, cursor, str) \
- brlapi__writeTextWin(handle, cursor, str, 0)
- #ifndef BRLAPI_NO_SINGLE_SESSION
- #define brlapi_write(s) brlapi_writeWin(s, 0)
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- #define brlapi__write(handle, s) brlapi__writeWin(handle, s, 0)
- #endif /* UNICODE */
- #endif /* BRLAPI_WIN32 */
- #ifndef BRLAPI_NO_DEPRECATED
- /** \defgroup brlapi_deprecated Deprecated names
- *
- * With version 0.5.0, BrlAPI is now provided through including <brlapi.h> and
- * got a big renaming pass. Old names are still available through macros, but
- * they are deprecated since they will get dropped in the next release. This
- * documentation is for you to know the new names.
- *
- * For checking that you have completely switched to new names, just define
- * BRLAPI_NO_DEPRECATED: that will disable compatibility macros.
- *
- * @{ */
- #define brlapi_settings_t brlapi_connectionSettings_t
- /** brlapi_writeStruct, replaced by brlapi_writeArguments_t */
- typedef struct {
- int displayNumber;
- unsigned int regionBegin;
- unsigned int regionSize;
- char* text;
- int textSize;
- unsigned char* attrAnd;
- unsigned char* attrOr;
- int cursor;
- char* charset;
- } brlapi_writeStruct;
- #define BRLAPI_WRITESTRUCT_INITIALIZER BRLAPI_WRITEARGUMENTS_INITIALIZER
- #define brl_keycode_t brlapi_keyCode_t
- #define brl_type_t brlapi_packetType_t
- #define BRLCOMMANDS NULL
- #define BRL_KEYCODE_MAX BRLAPI_KEY_MAX
- #ifndef BRLAPI_NO_SINGLE_SESSION
- #define brlapi_initializeConnection brlapi_openConnection
- #define brlapi_getTty brlapi_enterTtyMode
- #define brlapi_getTtyPath brlapi_enterTtyModeWithPath
- #define brlapi_leaveTty brlapi_leaveTtyMode
- #define brlapi_unignoreKeyRange brlapi_acceptKeyRange
- #define brlapi_unignoreKeySet brlapi_acceptKeySet
- #define brlapi_getRaw brlapi_enterRawMode
- #define brlapi_leaveRaw brlapi_leaveRawMode
- #define brlapi_suspend brlapi_suspendDriver
- #define brlapi_resume brlapi_resumeDriver
- #endif /* BRLAPI_NO_SINGLE_SESSION */
- #define BRLERR_SUCCESS BRLAPI_ERROR_SUCCESS
- #define BRLERR_NOMEM BRLAPI_ERROR_NOMEM
- #define BRLERR_TTYBUSY BRLAPI_ERROR_TTYBUSY
- #define BRLERR_DEVICEBUSY BRLAPI_ERROR_DEVICEBUSY
- #define BRLERR_UNKNOWN_INSTRUCTION BRLAPI_ERROR_UNKNOWN_INSTRUCTION
- #define BRLERR_ILLEGAL_INSTRUCTION BRLAPI_ERROR_ILLEGAL_INSTRUCTION
- #define BRLERR_INVALID_PARAMETER BRLAPI_ERROR_INVALID_PARAMETER
- #define BRLERR_INVALID_PACKET BRLAPI_ERROR_INVALID_PACKET
- #define BRLERR_CONNREFUSED BRLAPI_ERROR_CONNREFUSED
- #define BRLERR_OPNOTSUPP BRLAPI_ERROR_OPNOTSUPP
- #define BRLERR_GAIERR BRLAPI_ERROR_GAIERR
- #define BRLERR_LIBCERR BRLAPI_ERROR_LIBCERR
- #define BRLERR_UNKNOWNTTY BRLAPI_ERROR_UNKNOWNTTY
- #define BRLERR_PROTOCOL_VERSION BRLAPI_ERROR_PROTOCOL_VERSION
- #define BRLERR_EOF BRLAPI_ERROR_EOF
- #define BRLERR_EMPTYKEY BRLAPI_ERROR_EMPTYKEY
- #define BRLERR_DRIVERERROR BRLAPI_ERROR_DRIVERERROR
- /** @} */
- #endif /* BRLAPI_NO_DEPRECATED */
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* BRLAPI_INCLUDED */
|