Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * OSS compatible sequencer driver
0004  *
0005  * seq_oss_event.h - OSS event queue record
0006  *
0007  * Copyright (C) 1998,99 Takashi Iwai <tiwai@suse.de>
0008  */
0009 
0010 #ifndef __SEQ_OSS_EVENT_H
0011 #define __SEQ_OSS_EVENT_H
0012 
0013 #include "seq_oss_device.h"
0014 
0015 #define SHORT_EVENT_SIZE    4
0016 #define LONG_EVENT_SIZE     8
0017 
0018 /* short event (4bytes) */
0019 struct evrec_short {
0020     unsigned char code;
0021     unsigned char parm1;
0022     unsigned char dev;
0023     unsigned char parm2;
0024 };
0025     
0026 /* short note events (4bytes) */
0027 struct evrec_note {
0028     unsigned char code;
0029     unsigned char chn;
0030     unsigned char note;
0031     unsigned char vel;
0032 };
0033     
0034 /* long timer events (8bytes) */
0035 struct evrec_timer {
0036     unsigned char code;
0037     unsigned char cmd;
0038     unsigned char dummy1, dummy2;
0039     unsigned int time;
0040 };
0041 
0042 /* long extended events (8bytes) */
0043 struct evrec_extended {
0044     unsigned char code;
0045     unsigned char cmd;
0046     unsigned char dev;
0047     unsigned char chn;
0048     unsigned char p1, p2, p3, p4;
0049 };
0050 
0051 /* long channel events (8bytes) */
0052 struct evrec_long {
0053     unsigned char code;
0054     unsigned char dev;
0055     unsigned char cmd;
0056     unsigned char chn;
0057     unsigned char p1, p2;
0058     unsigned short val;
0059 };
0060     
0061 /* channel voice events (8bytes) */
0062 struct evrec_voice {
0063     unsigned char code;
0064     unsigned char dev;
0065     unsigned char cmd;
0066     unsigned char chn;
0067     unsigned char note, parm;
0068     unsigned short dummy;
0069 };
0070 
0071 /* sysex events (8bytes) */
0072 struct evrec_sysex {
0073     unsigned char code;
0074     unsigned char dev;
0075     unsigned char buf[6];
0076 };
0077 
0078 /* event record */
0079 union evrec {
0080     struct evrec_short s;
0081     struct evrec_note n;
0082     struct evrec_long l;
0083     struct evrec_voice v;
0084     struct evrec_timer t;
0085     struct evrec_extended e;
0086     struct evrec_sysex x;
0087     unsigned int echo;
0088     unsigned char c[LONG_EVENT_SIZE];
0089 };
0090 
0091 #define ev_is_long(ev) ((ev)->s.code >= 128)
0092 #define ev_length(ev) ((ev)->s.code >= 128 ? LONG_EVENT_SIZE : SHORT_EVENT_SIZE)
0093 
0094 int snd_seq_oss_process_event(struct seq_oss_devinfo *dp, union evrec *q, struct snd_seq_event *ev);
0095 int snd_seq_oss_process_timer_event(struct seq_oss_timer *rec, union evrec *q);
0096 int snd_seq_oss_event_input(struct snd_seq_event *ev, int direct, void *private_data, int atomic, int hop);
0097 
0098 
0099 #endif /* __SEQ_OSS_EVENT_H */