| /* 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 */ |