100 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * OSS compatible sequencer driver4 *5 * seq_oss_event.h - OSS event queue record6 *7 * Copyright (C) 1998,99 Takashi Iwai <tiwai@suse.de>8 */9 10#ifndef __SEQ_OSS_EVENT_H11#define __SEQ_OSS_EVENT_H12 13#include "seq_oss_device.h"14 15#define SHORT_EVENT_SIZE 416#define LONG_EVENT_SIZE 817 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 */100