xref: /openbsd/usr.bin/sndiod/sock.h (revision 9b7c3dbb)
1 /*	$OpenBSD: sock.h,v 1.4 2015/11/25 18:46:21 ratchov Exp $	*/
2 /*
3  * Copyright (c) 2008-2012 Alexandre Ratchov <alex@caoua.org>
4  *
5  * Permission to use, copy, modify, and distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 #ifndef SOCK_H
18 #define SOCK_H
19 
20 #include "amsg.h"
21 
22 struct opt;
23 struct file;
24 struct slot;
25 struct midi;
26 
27 struct sock {
28 	struct sock *next;
29 	int fd;
30 	struct file *file;
31 	struct amsg rmsg, wmsg;		/* messages being sent/received */
32 	unsigned int wmax;		/* max bytes we're allowed to write */
33 	unsigned int rmax;		/* max bytes we're allowed to read */
34 	unsigned int rsize;		/* input bytes to read (DATA msg) */
35 	unsigned int wsize;		/* output bytes to write (DATA msg) */
36 	unsigned int rtodo;		/* input bytes not read yet */
37 	unsigned int wtodo;		/* output bytes not written yet */
38 #define SOCK_RIDLE	0		/* not expecting messages */
39 #define SOCK_RMSG	1		/* expecting a message */
40 #define SOCK_RDATA	2		/* data chunk being read */
41 #define SOCK_RRET	3		/* reply being returned */
42 	unsigned int rstate;		/* state of the read-end FSM */
43 #define SOCK_WIDLE	0		/* nothing to do */
44 #define SOCK_WMSG	1		/* amsg being written */
45 #define SOCK_WDATA	2		/* data chunk being written */
46 	unsigned int wstate;		/* state of the write-end FSM */
47 #define SOCK_AUTH	0		/* waiting for AUTH message */
48 #define SOCK_HELLO	1		/* waiting for HELLO message */
49 #define SOCK_INIT	2		/* parameter negotiation */
50 #define SOCK_START	3		/* filling play buffers */
51 #define SOCK_STOP	4		/* draining rec buffers */
52 	unsigned int pstate;		/* one of the above */
53 	int tickpending;		/* tick waiting to be transmitted */
54 	int fillpending;		/* flowctl waiting to be transmitted */
55 	int stoppending;		/* last STOP ack to be sent */
56 	unsigned int walign;		/* align written data to this */
57 	unsigned int ralign;		/* read data is aligned to this */
58 	int lastvol;			/* last volume */
59 	struct opt *opt;		/* "subdevice" definition */
60 	struct slot *slot;		/* audio device slot number */
61 	struct midi *midi;		/* midi endpoint */
62 	struct port *port;		/* midi port */
63 };
64 
65 struct sock *sock_new(int fd);
66 void sock_close(struct sock *);
67 extern struct sock *sock_list;
68 
69 #endif /* !defined(SOCK_H) */
70