Blame view

include/sound/asound_fm.h 4.21 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
  #ifndef __SOUND_ASOUND_FM_H
  #define __SOUND_ASOUND_FM_H
  
  /*
   *  Advanced Linux Sound Architecture - ALSA
   *
   *  Interface file between ALSA driver & user space
c1017a4cd   Jaroslav Kysela   [ALSA] Changed Ja...
8
   *  Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   *                           4Front Technologies
   *
   *  Direct FM control
   *
   *   This program is free software; you can redistribute it and/or modify
   *   it under the terms of the GNU General Public License as published by
   *   the Free Software Foundation; either version 2 of the License, or
   *   (at your option) any later version.
   *
   *   This program is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *   GNU General Public License for more details.
   *
   *   You should have received a copy of the GNU General Public License
   *   along with this program; if not, write to the Free Software
   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
   *
   */
  
  #define SNDRV_DM_FM_MODE_OPL2	0x00
  #define SNDRV_DM_FM_MODE_OPL3	0x01
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
31
  struct snd_dm_fm_info {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
32
33
  	unsigned char fm_mode;		/* OPL mode, see SNDRV_DM_FM_MODE_XXX */
  	unsigned char rhythm;		/* percussion mode flag */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
34
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
37
38
  
  /*
   *  Data structure composing an FM "note" or sound event.
   */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
39
  struct snd_dm_fm_voice {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  	unsigned char op;		/* operator cell (0 or 1) */
  	unsigned char voice;		/* FM voice (0 to 17) */
  
  	unsigned char am;		/* amplitude modulation */
  	unsigned char vibrato;		/* vibrato effect */
  	unsigned char do_sustain;	/* sustain phase */
  	unsigned char kbd_scale;	/* keyboard scaling */
  	unsigned char harmonic;		/* 4 bits: harmonic and multiplier */
  	unsigned char scale_level;	/* 2 bits: decrease output freq rises */
  	unsigned char volume;		/* 6 bits: volume */
  
  	unsigned char attack;		/* 4 bits: attack rate */
  	unsigned char decay;		/* 4 bits: decay rate */
  	unsigned char sustain;		/* 4 bits: sustain level */
  	unsigned char release;		/* 4 bits: release rate */
  
  	unsigned char feedback;		/* 3 bits: feedback for op0 */
  	unsigned char connection;	/* 0 for serial, 1 for parallel */
  	unsigned char left;		/* stereo left */
  	unsigned char right;		/* stereo right */
  	unsigned char waveform;		/* 3 bits: waveform shape */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
61
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
66
  
  /*
   *  This describes an FM note by its voice, octave, frequency number (10bit)
   *  and key on/off.
   */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
67
  struct snd_dm_fm_note {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
71
  	unsigned char voice;	/* 0-17 voice channel */
  	unsigned char octave;	/* 3 bits: what octave to play */
  	unsigned int fnum;	/* 10 bits: frequency number */
  	unsigned char key_on;	/* set for active, clear for silent */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
72
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
74
75
76
  
  /*
   *  FM parameters that apply globally to all voices, and thus are not "notes"
   */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
77
  struct snd_dm_fm_params {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
78
79
80
81
82
83
84
85
86
87
88
  	unsigned char am_depth;		/* amplitude modulation depth (1=hi) */
  	unsigned char vib_depth;	/* vibrato depth (1=hi) */
  	unsigned char kbd_split;	/* keyboard split */
  	unsigned char rhythm;		/* percussion mode select */
  
  	/* This block is the percussion instrument data */
  	unsigned char bass;
  	unsigned char snare;
  	unsigned char tomtom;
  	unsigned char cymbal;
  	unsigned char hihat;
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
89
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
90
91
92
93
  
  /*
   *  FM mode ioctl settings
   */
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
94
  #define SNDRV_DM_FM_IOCTL_INFO		_IOR('H', 0x20, struct snd_dm_fm_info)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  #define SNDRV_DM_FM_IOCTL_RESET		_IO ('H', 0x21)
5b1646a8e   Takashi Iwai   [ALSA] Remove xxx...
96
97
98
  #define SNDRV_DM_FM_IOCTL_PLAY_NOTE	_IOW('H', 0x22, struct snd_dm_fm_note)
  #define SNDRV_DM_FM_IOCTL_SET_VOICE	_IOW('H', 0x23, struct snd_dm_fm_voice)
  #define SNDRV_DM_FM_IOCTL_SET_PARAMS	_IOW('H', 0x24, struct snd_dm_fm_params)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
99
100
101
  #define SNDRV_DM_FM_IOCTL_SET_MODE	_IOW('H', 0x25, int)
  /* for OPL3 only */
  #define SNDRV_DM_FM_IOCTL_SET_CONNECTION	_IOW('H', 0x26, int)
224a03325   Takashi Iwai   [ALSA] opl3 - Use...
102
103
  /* SBI patch management */
  #define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES	_IO ('H', 0x40)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
110
  
  #define SNDRV_DM_FM_OSS_IOCTL_RESET		0x20
  #define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE		0x21
  #define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE		0x22
  #define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS	0x23
  #define SNDRV_DM_FM_OSS_IOCTL_SET_MODE		0x24
  #define SNDRV_DM_FM_OSS_IOCTL_SET_OPL		0x25
224a03325   Takashi Iwai   [ALSA] opl3 - Use...
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  /*
   * Patch Record - fixed size for write
   */
  
  #define FM_KEY_SBI	"SBI\032"
  #define FM_KEY_2OP	"2OP\032"
  #define FM_KEY_4OP	"4OP\032"
  
  struct sbi_patch {
  	unsigned char prog;
  	unsigned char bank;
  	char key[4];
  	char name[25];
  	char extension[7];
  	unsigned char data[32];
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127
  #endif /* __SOUND_ASOUND_FM_H */