| Software Interface ALSA-DSP MADI Driver |
| |
| (translated from German, so no good English ;-), |
| 2004 - winfried ritsch |
| |
| |
| |
| Full functionality has been added to the driver. Since some of |
| the Controls and startup-options are ALSA-Standard and only the |
| special Controls are described and discussed below. |
| |
| |
| hardware functionality: |
| |
| |
| Audio transmission: |
| |
| number of channels -- depends on transmission mode |
| |
| The number of channels chosen is from 1..Nmax. The reason to |
| use for a lower number of channels is only resource allocation, |
| since unused DMA channels are disabled and less memory is |
| allocated. So also the throughput of the PCI system can be |
| scaled. (Only important for low performance boards). |
| |
| Single Speed -- 1..64 channels |
| |
| (Note: Choosing the 56channel mode for transmission or as |
| receiver, only 56 are transmitted/received over the MADI, but |
| all 64 channels are available for the mixer, so channel count |
| for the driver) |
| |
| Double Speed -- 1..32 channels |
| |
| Note: Choosing the 56-channel mode for |
| transmission/receive-mode , only 28 are transmitted/received |
| over the MADI, but all 32 channels are available for the mixer, |
| so channel count for the driver |
| |
| |
| Quad Speed -- 1..16 channels |
| |
| Note: Choosing the 56-channel mode for |
| transmission/receive-mode , only 14 are transmitted/received |
| over the MADI, but all 16 channels are available for the mixer, |
| so channel count for the driver |
| |
| Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE) |
| |
| Sample Rates -- |
| |
| Single Speed -- 32000, 44100, 48000 |
| |
| Double Speed -- 64000, 88200, 96000 (untested) |
| |
| Quad Speed -- 128000, 176400, 192000 (untested) |
| |
| access-mode -- MMAP (memory mapped), Not interleaved |
| (PCM_NON-INTERLEAVED) |
| |
| buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples |
| |
| fragments -- 2 |
| |
| Hardware-pointer -- 2 Modi |
| |
| |
| The Card supports the readout of the actual Buffer-pointer, |
| where DMA reads/writes. Since of the bulk mode of PCI it is only |
| 64 Byte accurate. SO it is not really usable for the |
| ALSA-mid-level functions (here the buffer-ID gives a better |
| result), but if MMAP is used by the application. Therefore it |
| can be configured at load-time with the parameter |
| precise-pointer. |
| |
| |
| (Hint: Experimenting I found that the pointer is maximum 64 to |
| large never to small. So if you subtract 64 you always have a |
| safe pointer for writing, which is used on this mode inside |
| ALSA. In theory now you can get now a latency as low as 16 |
| Samples, which is a quarter of the interrupt possibilities.) |
| |
| Precise Pointer -- off |
| interrupt used for pointer-calculation |
| |
| Precise Pointer -- on |
| hardware pointer used. |
| |
| Controller: |
| |
| |
| Since DSP-MADI-Mixer has 8152 Fader, it does not make sense to |
| use the standard mixer-controls, since this would break most of |
| (especially graphic) ALSA-Mixer GUIs. So Mixer control has be |
| provided by a 2-dimensional controller using the |
| hwdep-interface. |
| |
| Also all 128+256 Peak and RMS-Meter can be accessed via the |
| hwdep-interface. Since it could be a performance problem always |
| copying and converting Peak and RMS-Levels even if you just need |
| one, I decided to export the hardware structure, so that of |
| needed some driver-guru can implement a memory-mapping of mixer |
| or peak-meters over ioctl, or also to do only copying and no |
| conversion. A test-application shows the usage of the controller. |
| |
| Latency Controls --- not implemented !!! |
| |
| |
| Note: Within the windows-driver the latency is accessible of a |
| control-panel, but buffer-sizes are controlled with ALSA from |
| hwparams-calls and should not be changed in run-state, I did not |
| implement it here. |
| |
| |
| System Clock -- suspended !!!! |
| |
| Name -- "System Clock Mode" |
| |
| Access -- Read Write |
| |
| Values -- "Master" "Slave" |
| |
| |
| !!!! This is a hardware-function but is in conflict with the |
| Clock-source controller, which is a kind of ALSA-standard. I |
| makes sense to set the card to a special mode (master at some |
| frequency or slave), since even not using an Audio-application |
| a studio should have working synchronisations setup. So use |
| Clock-source-controller instead !!!! |
| |
| Clock Source |
| |
| Name -- "Sample Clock Source" |
| |
| Access -- Read Write |
| |
| Values -- "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", |
| "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", |
| "Internal 96.0 kHz" |
| |
| Choose between Master at a specific Frequency and so also the |
| Speed-mode or Slave (Autosync). Also see "Preferred Sync Ref" |
| |
| |
| !!!! This is no pure hardware function but was implemented by |
| ALSA by some ALSA-drivers before, so I use it also. !!! |
| |
| |
| Preferred Sync Ref |
| |
| Name -- "Preferred Sync Reference" |
| |
| Access -- Read Write |
| |
| Values -- "Word" "MADI" |
| |
| |
| Within the Auto-sync-Mode the preferred Sync Source can be |
| chosen. If it is not available another is used if possible. |
| |
| Note: Since MADI has a much higher bit-rate than word-clock, the |
| card should synchronise better in MADI Mode. But since the |
| RME-PLL is very good, there are almost no problems with |
| word-clock too. I never found a difference. |
| |
| |
| TX 64 channel --- |
| |
| Name -- "TX 64 channels mode" |
| |
| Access -- Read Write |
| |
| Values -- 0 1 |
| |
| Using 64-channel-modus (1) or 56-channel-modus for |
| MADI-transmission (0). |
| |
| |
| Note: This control is for output only. Input-mode is detected |
| automatically from hardware sending MADI. |
| |
| |
| Clear TMS --- |
| |
| Name -- "Clear Track Marker" |
| |
| Access -- Read Write |
| |
| Values -- 0 1 |
| |
| |
| Don't use to lower 5 Audio-bits on AES as additional Bits. |
| |
| |
| Safe Mode oder Auto Input --- |
| |
| Name -- "Safe Mode" |
| |
| Access -- Read Write |
| |
| Values -- 0 1 |
| |
| (default on) |
| |
| If on (1), then if either the optical or coaxial connection |
| has a failure, there is a takeover to the working one, with no |
| sample failure. Its only useful if you use the second as a |
| backup connection. |
| |
| Input --- |
| |
| Name -- "Input Select" |
| |
| Access -- Read Write |
| |
| Values -- optical coaxial |
| |
| |
| Choosing the Input, optical or coaxial. If Safe-mode is active, |
| this is the preferred Input. |
| |
| -------------- Mixer ---------------------- |
| |
| Mixer |
| |
| Name -- "Mixer" |
| |
| Access -- Read Write |
| |
| Values - <channel-number 0-127> <Value 0-65535> |
| |
| |
| Here as a first value the channel-index is taken to get/set the |
| corresponding mixer channel, where 0-63 are the input to output |
| fader and 64-127 the playback to outputs fader. Value 0 |
| is channel muted 0 and 32768 an amplification of 1. |
| |
| Chn 1-64 |
| |
| fast mixer for the ALSA-mixer utils. The diagonal of the |
| mixer-matrix is implemented from playback to output. |
| |
| |
| Line Out |
| |
| Name -- "Line Out" |
| |
| Access -- Read Write |
| |
| Values -- 0 1 |
| |
| Switching on and off the analog out, which has nothing to do |
| with mixing or routing. the analog outs reflects channel 63,64. |
| |
| |
| --- information (only read access): |
| |
| Sample Rate |
| |
| Name -- "System Sample Rate" |
| |
| Access -- Read-only |
| |
| getting the sample rate. |
| |
| |
| External Rate measured |
| |
| Name -- "External Rate" |
| |
| Access -- Read only |
| |
| |
| Should be "Autosync Rate", but Name used is |
| ALSA-Scheme. External Sample frequency liked used on Autosync is |
| reported. |
| |
| |
| MADI Sync Status |
| |
| Name -- "MADI Sync Lock Status" |
| |
| Access -- Read |
| |
| Values -- 0,1,2 |
| |
| MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced. |
| |
| |
| Word Clock Sync Status |
| |
| Name -- "Word Clock Lock Status" |
| |
| Access -- Read |
| |
| Values -- 0,1,2 |
| |
| Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced. |
| |
| AutoSync |
| |
| Name -- "AutoSync Reference" |
| |
| Access -- Read |
| |
| Values -- "WordClock", "MADI", "None" |
| |
| Sync-Reference is either "WordClock", "MADI" or none. |
| |
| RX 64ch --- noch nicht implementiert |
| |
| MADI-Receiver is in 64 channel mode oder 56 channel mode. |
| |
| |
| AB_inp --- not tested |
| |
| Used input for Auto-Input. |
| |
| |
| actual Buffer Position --- not implemented |
| |
| !!! this is a ALSA internal function, so no control is used !!! |
| |
| |
| |
| Calling Parameter: |
| |
| index int array (min = 1, max = 8), |
| "Index value for RME HDSPM interface." card-index within ALSA |
| |
| note: ALSA-standard |
| |
| id string array (min = 1, max = 8), |
| "ID string for RME HDSPM interface." |
| |
| note: ALSA-standard |
| |
| enable int array (min = 1, max = 8), |
| "Enable/disable specific HDSPM sound-cards." |
| |
| note: ALSA-standard |
| |
| precise_ptr int array (min = 1, max = 8), |
| "Enable precise pointer, or disable." |
| |
| note: Use only when the application supports this (which is a special case). |
| |
| line_outs_monitor int array (min = 1, max = 8), |
| "Send playback streams to analog outs by default." |
| |
| |
| note: each playback channel is mixed to the same numbered output |
| channel (routed). This is against the ALSA-convention, where all |
| channels have to be muted on after loading the driver, but was |
| used before on other cards, so i historically use it again) |
| |
| |
| |
| enable_monitor int array (min = 1, max = 8), |
| "Enable Analog Out on Channel 63/64 by default." |
| |
| note: here the analog output is enabled (but not routed). |