1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * OSS compatible sequencer driver
4  *
5  * seq_oss_event.h - OSS event queue record
6  *
7  * Copyright (C) 1998,99 Takashi Iwai <tiwai@suse.de>
8  */
9 
10 #ifndef __SEQ_OSS_EVENT_H
11 #define __SEQ_OSS_EVENT_H
12 
13 #include "seq_oss_device.h"
14 
15 #define SHORT_EVENT_SIZE	4
16 #define LONG_EVENT_SIZE		8
17 
18 /* short event (4bytes) */
19 struct evrec_short {
20 	unsigned char code;
21 	unsigned char parm1;
22 	unsigned char dev;
23 	unsigned char parm2;
24 };
25 
26 /* short note events (4bytes) */
27 struct evrec_note {
28 	unsigned char code;
29 	unsigned char chn;
30 	unsigned char note;
31 	unsigned char vel;
32 };
33 
34 /* long timer events (8bytes) */
35 struct evrec_timer {
36 	unsigned char code;
37 	unsigned char cmd;
38 	unsigned char dummy1, dummy2;
39 	unsigned int time;
40 };
41 
42 /* long extended events (8bytes) */
43 struct evrec_extended {
44 	unsigned char code;
45 	unsigned char cmd;
46 	unsigned char dev;
47 	unsigned char chn;
48 	unsigned char p1, p2, p3, p4;
49 };
50 
51 /* long channel events (8bytes) */
52 struct evrec_long {
53 	unsigned char code;
54 	unsigned char dev;
55 	unsigned char cmd;
56 	unsigned char chn;
57 	unsigned char p1, p2;
58 	unsigned short val;
59 };
60 
61 /* channel voice events (8bytes) */
62 struct evrec_voice {
63 	unsigned char code;
64 	unsigned char dev;
65 	unsigned char cmd;
66 	unsigned char chn;
67 	unsigned char note, parm;
68 	unsigned short dummy;
69 };
70 
71 /* sysex events (8bytes) */
72 struct evrec_sysex {
73 	unsigned char code;
74 	unsigned char dev;
75 	unsigned char buf[6];
76 };
77 
78 /* event record */
79 union evrec {
80 	struct evrec_short s;
81 	struct evrec_note n;
82 	struct evrec_long l;
83 	struct evrec_voice v;
84 	struct evrec_timer t;
85 	struct evrec_extended e;
86 	struct evrec_sysex x;
87 	unsigned int echo;
88 	unsigned char c[LONG_EVENT_SIZE];
89 };
90 
91 #define ev_is_long(ev) ((ev)->s.code >= 128)
92 #define ev_length(ev) ((ev)->s.code >= 128 ? LONG_EVENT_SIZE : SHORT_EVENT_SIZE)
93 
94 int snd_seq_oss_process_event(struct seq_oss_devinfo *dp, union evrec *q, struct snd_seq_event *ev);
95 int snd_seq_oss_process_timer_event(struct seq_oss_timer *rec, union evrec *q);
96 int snd_seq_oss_event_input(struct snd_seq_event *ev, int direct, void *private_data, int atomic, int hop);
97 
98 
99 #endif /* __SEQ_OSS_EVENT_H */
100