seq_oss_event.h (2133B)
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) */ 19struct 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) */ 27struct 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) */ 35struct 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) */ 43struct 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) */ 52struct 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) */ 62struct 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) */ 72struct evrec_sysex { 73 unsigned char code; 74 unsigned char dev; 75 unsigned char buf[6]; 76}; 77 78/* event record */ 79union 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 94int snd_seq_oss_process_event(struct seq_oss_devinfo *dp, union evrec *q, struct snd_seq_event *ev); 95int snd_seq_oss_process_timer_event(struct seq_oss_timer *rec, union evrec *q); 96int 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 */