blob: 402ce2c3ba1790417e8692d90bc063d18bc5090d [file] [log] [blame] [edit]
/*
* BRLTTY - A background process providing access to the console screen (when in
* text mode) for a blind person using a refreshable braille display.
*
* Copyright (C) 1995-2023 by The BRLTTY Developers.
*
* BRLTTY 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>.
*/
#ifndef BRLTTY_INCLUDED_SERIAL_INTERNAL
#define BRLTTY_INCLUDED_SERIAL_INTERNAL
#include "prologue.h"
#include <stdio.h>
#include "io_serial.h"
#include "thread.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef void SerialFlowControlProc (SerialDevice *serial);
struct SerialDeviceStruct {
char *devicePath;
int fileDescriptor;
FILE *stream;
SerialAttributes originalAttributes;
SerialAttributes currentAttributes;
SerialAttributes pendingAttributes;
SerialLines linesState;
SerialLines waitLines;
#ifdef HAVE_POSIX_THREADS
SerialFlowControlProc *currentFlowControlProc;
SerialFlowControlProc *pendingFlowControlProc;
pthread_t flowControlThread;
unsigned flowControlRunning:1;
unsigned flowControlStop:1;
#endif /* HAVE_POSIX_THREADS */
SerialPackageFields package;
};
typedef struct {
unsigned int baud;
SerialSpeed speed;
} SerialBaudEntry;
extern const SerialBaudEntry *serialGetBaudEntry (unsigned int baud);
#define SERIAL_BAUD_TABLE_DECLARATION const SerialBaudEntry serialBaudTable[]
extern SERIAL_BAUD_TABLE_DECLARATION;
#define BEGIN_SERIAL_BAUD_TABLE SERIAL_BAUD_TABLE_DECLARATION = {
#define END_SERIAL_BAUD_TABLE {0} };
extern void serialPutInitialAttributes (SerialAttributes *attributes);
extern int serialPutSpeed (SerialAttributes *attributes, SerialSpeed speed);
extern int serialPutDataBits (SerialAttributes *attributes, unsigned int bits);
extern int serialPutStopBits (SerialAttributes *attributes, SerialStopBits bits);
extern int serialPutParity (SerialAttributes *attributes, SerialParity parity);
extern SerialFlowControl serialPutFlowControl (SerialAttributes *attributes, SerialFlowControl flow);
extern int serialPutModemState (SerialAttributes *attributes, int enabled);
extern unsigned int serialGetDataBits (const SerialAttributes *attributes);
extern unsigned int serialGetStopBits (const SerialAttributes *attributes);
extern unsigned int serialGetParityBits (const SerialAttributes *attributes);
extern int serialGetAttributes (SerialDevice *serial, SerialAttributes *attributes);
extern int serialPutAttributes (SerialDevice *serial, const SerialAttributes *attributes);
extern int serialCancelInput (SerialDevice *serial);
extern int serialCancelOutput (SerialDevice *serial);
extern int serialPollInput (SerialDevice *serial, int timeout);
extern int serialDrainOutput (SerialDevice *serial);
extern ssize_t serialGetData (
SerialDevice *serial,
void *buffer, size_t size,
int initialTimeout, int subsequentTimeout
);
extern ssize_t serialPutData (
SerialDevice *serial,
const void *data, size_t size
);
extern int serialGetLines (SerialDevice *serial);
extern int serialPutLines (SerialDevice *serial, SerialLines high, SerialLines low);
extern int serialRegisterWaitLines (SerialDevice *serial, SerialLines lines);
extern int serialMonitorWaitLines (SerialDevice *serial);
extern int serialConnectDevice (SerialDevice *serial, const char *device);
extern int serialPrepareDevice (SerialDevice *serial);
extern void serialDisconnectDevice (SerialDevice *serial);
extern int serialEnsureFileDescriptor (SerialDevice *serial);
extern void serialClearError (SerialDevice *serial);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLTTY_INCLUDED_SERIAL_INTERNAL */