1 /*
2  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3  *
4  * This software may be freely used, copied, modified, and distributed
5  * provided that the above copyright notice is preserved in all copies of the
6  * software.
7  */
8 
9 /* -*-C-*-
10  *
11  * $Revision: 1.3 $
12  *     $Date: 2004/12/27 14:00:54 $
13  *
14  */
15 #ifndef angsd_unixcomm_h
16 #define angsd_unixcomm_h
17 
18 #include <errno.h>
19 
20 #if defined(BSD)
21 #  define ERRNO_FOR_BLOCKED_IO EWOULDBLOCK
22 #else
23 #  define ERRNO_FOR_BLOCKED_IO EAGAIN
24 #endif
25 
26 /*
27  *  Function: Unix_MatchValidSerialDevice
28  *   Purpose: check that the serial driver/port name is valid
29  *            and return the actual device name if it is.
30  *
31  *    Params:
32  *       Input: name    Name of device going to be used
33  *
34  *   Returns:
35  *          OK: Pointer to name of the device matched
36  *       Error or unrecognised deivce: 0
37  */
38 extern const char *Unix_MatchValidSerialDevice(const char *name);
39 
40 /*
41  *  Function: Unix_IsSerialInUse
42  *   Purpose: check whether the serial port is in use
43  *
44  *    Params:
45  *       Input: Nothing
46  *
47  *   Returns:
48  *          OK: 0       Serial device not in use
49  *       Error: -1      Serial device in use
50  */
51 extern int Unix_IsSerialInUse(void);
52 
53 /*
54  *  Function: Unix_OpenSerial
55  *   Purpose: open the serial port
56  *
57  *    Params:
58  *       Input: name    Name of device to open
59  *
60  *   Returns: Unix 'open' returns
61  */
62 extern int Unix_OpenSerial(const char *name);
63 
64 /*
65  *  Function: Unix_CloseSerial
66  *   Purpose: close the serial port
67  *
68  *    Params:
69  *       Input: Nothing
70  *
71  *   Returns: Nothing
72  */
73 extern void Unix_CloseSerial(void);
74 
75 /*
76  *  Function: Unix_ReadSerial
77  *   Purpose: reads a specified number of bytes (or less) from the serial port
78  *
79  *    Params:
80  *       Input: buf     Buffer to store read bytes
81  *              n       Maximum number of bytes to read
82  *
83  *   Returns: Unix 'read' returns
84  */
85 extern int Unix_ReadSerial(unsigned char *buf, int n, bool block);
86 
87 /*
88  *  Function: Unix_WriteSerial
89  *   Purpose: writes a specified number of bytes (or less) to the serial port
90  *
91  *    Params:
92  *       Input: buf     Buffer to write bytes from
93  *              n       Maximum number of bytes to write
94  *
95  *   Returns: Unix 'write' returns
96  */
97 extern int Unix_WriteSerial(unsigned char *buf, int n);
98 
99 /*
100  *  Function: Unix_ResetSerial
101  *   Purpose: resets the serial port for another operation
102  *
103  *    Params:
104  *       Input: Nothing
105  *
106  *   Returns: Nothing
107  */
108 extern void Unix_ResetSerial(void);
109 
110 /*
111  *  Function: Unix_SetSerialBaudRate
112  *   Purpose: check that the serial driver/port name is valid
113  *
114  *    Params:
115  *       Input: baudrate    termios value for baud rate
116  *
117  *   Returns: Nothing
118  */
119 extern void Unix_SetSerialBaudRate(int baudrate);
120 
121 /*
122  *  Function: Unix_ioctlNonBlocking
123  *   Purpose: sets the serial port to non-blocking IO
124  *
125  *    Params:
126  *       Input: Nothing
127  *
128  *   Returns: Nothing
129  */
130 extern void Unix_ioctlNonBlocking(void);
131 
132 /*
133  *  Function: Unix_IsValidParallelDevice
134  *   Purpose: check whether the combined serial and parallel device specification
135  *            is ok, and return the ports selected
136  *
137  *    Params:
138  *       Input: portstring - is a string which specifies which serial
139  *                           and parallel ports are to be used. Can
140  *                           include s=<val> and p=<val> separated by a
141  *                           comma.
142  *
143  *   Returns:
144  *       Output: *sername  - returns the device name of the chosen serial port
145  *               *parname  - returns the device name of the chosen parallel port
146  *               If either of these is NULL on return then the match failed.
147  */
148 extern void Unix_IsValidParallelDevice(
149   const char *portstring, char **sername, char **parname
150 );
151 
152 /*
153  *  Function: Unix_IsParallelInUse
154  *   Purpose: check whether the parallel port is in use
155  *
156  *    Params:
157  *       Input: Nothing
158  *
159  *   Returns:
160  *          OK: 0       Parallel device not in use
161  *       Error: -1      Parallel device in use
162  */
163 extern int Unix_IsParallelInUse(void);
164 
165 /*
166  *  Function: Unix_OpenParallel
167  *   Purpose: open the parallel port
168  *
169  *    Params:
170  *       Input: name    Name of device to open
171  *
172  *   Returns: Unix 'open' returns
173  */
174 extern int Unix_OpenParallel(const char *name);
175 
176 /*
177  *  Function: Unix_CloseParallel
178  *   Purpose: close the parallel port
179  *
180  *    Params:
181  *       Input: Nothing
182  *
183  *   Returns: Nothing
184  */
185 extern void Unix_CloseParallel(void);
186 
187 /*
188  *  Function: Unix_WriteParallel
189  *   Purpose: writes a specified number of bytes (or less) to the parallel port
190  *
191  *    Params:
192  *       Input: buf     Buffer to write bytes from
193  *              n       Maximum number of bytes to write
194  *
195  *   Returns: Unix 'write' returns
196  */
197 extern unsigned int Unix_WriteParallel(unsigned char *buf, int n);
198 
199 /*
200  *  Function: Unix_ResetParallel
201  *   Purpose: resets the parallel port for another operation
202  *
203  *    Params:
204  *       Input: Nothing
205  *
206  *   Returns: Nothing
207  */
208 extern void Unix_ResetParallel(void);
209 
210 #endif /* ndef angsd_unixcomm_h */
211 
212 /* EOF unixcomm.h */
213