Include.pcm_split.File "/common/pcm/split.conf"

# This profile only exposes the most common channel configurations to limit
# combinatorial complexity:
#
#  - Analog line outputs in stereo as well as 4.0 and 5.1 surround,
#  - analog microphone and instrument inputs in mono only,
#  - ADAT outputs and inputs in direct 8‐channel mapping, and
#  - all other outputs and inputs in stereo.

Macro [
	{
		SplitPCM {
			Name "ucx2_stereo_out"
			Direction Playback
			Format S24_3LE
			Channels 2
			HWChannels 20
			HWChannelPos0 FL
			HWChannelPos1 FR
			HWChannelPos2 FL
			HWChannelPos3 FR
			HWChannelPos4 FL
			HWChannelPos5 FR
			HWChannelPos6 FL
			HWChannelPos7 FR
			HWChannelPos8 FL
			HWChannelPos9 FR
			HWChannelPos10 FL
			HWChannelPos11 FR
			HWChannelPos12 FL
			HWChannelPos13 FR
			HWChannelPos14 FL
			HWChannelPos15 FR
			HWChannelPos16 FL
			HWChannelPos17 FR
			HWChannelPos18 FL
			HWChannelPos19 FR
		}
	}
	{
		SplitPCM {
			Name "ucx2_surround40_out"
			Direction Playback
			Format S24_3LE
			Channels 4
			HWChannels 20
			HWChannelPos0 FL
			HWChannelPos1 FR
			HWChannelPos2 RL
			HWChannelPos3 RR
			HWChannelPos4 UNKNOWN
			HWChannelPos5 UNKNOWN
			HWChannelPos6 UNKNOWN
			HWChannelPos7 UNKNOWN
			HWChannelPos8 UNKNOWN
			HWChannelPos9 UNKNOWN
			HWChannelPos10 UNKNOWN
			HWChannelPos11 UNKNOWN
			HWChannelPos12 FL
			HWChannelPos13 FR
			HWChannelPos14 RL
			HWChannelPos15 RR
			HWChannelPos16 FL
			HWChannelPos17 FR
			HWChannelPos18 RL
			HWChannelPos19 RR
		}
	}
	{
		SplitPCM {
			Name "ucx2_surround51_out"
			Direction Playback
			Format S24_3LE
			Channels 6
			HWChannels 20
			HWChannelPos0 FL
			HWChannelPos1 FR
			HWChannelPos2 RL
			HWChannelPos3 RR
			HWChannelPos4 FC
			HWChannelPos5 LFE
			HWChannelPos6 UNKNOWN
			HWChannelPos7 UNKNOWN
			HWChannelPos8 UNKNOWN
			HWChannelPos9 UNKNOWN
			HWChannelPos10 UNKNOWN
			HWChannelPos11 UNKNOWN
			HWChannelPos12 FL
			HWChannelPos13 FR
			HWChannelPos14 RL
			HWChannelPos15 RR
			HWChannelPos16 FC
			HWChannelPos17 LFE
			HWChannelPos18 UNKNOWN
			HWChannelPos19 UNKNOWN
		}
	}
	{
		SplitPCM {
			Name "ucx2_adat_out"
			Direction Playback
			Format S24_3LE
			Channels 8
			HWChannels 20
			HWChannelPos0 UNKNOWN
			HWChannelPos1 UNKNOWN
			HWChannelPos2 UNKNOWN
			HWChannelPos3 UNKNOWN
			HWChannelPos4 UNKNOWN
			HWChannelPos5 UNKNOWN
			HWChannelPos6 UNKNOWN
			HWChannelPos7 UNKNOWN
			HWChannelPos8 UNKNOWN
			HWChannelPos9 UNKNOWN
			HWChannelPos10 UNKNOWN
			HWChannelPos11 UNKNOWN
			HWChannelPos12 UNKNOWN
			HWChannelPos13 UNKNOWN
			HWChannelPos14 UNKNOWN
			HWChannelPos15 UNKNOWN
			HWChannelPos16 UNKNOWN
			HWChannelPos17 UNKNOWN
			HWChannelPos18 UNKNOWN
			HWChannelPos19 UNKNOWN
		}
	}
	{
		SplitPCM {
			Name "ucx2_mono_in"
			Direction Capture
			Format S24_3LE
			Channels 1
			HWChannels 20
			HWChannelPos0 MONO
			HWChannelPos1 MONO
			HWChannelPos2 MONO
			HWChannelPos3 MONO
			HWChannelPos4 MONO
			HWChannelPos5 MONO
			HWChannelPos6 MONO
			HWChannelPos7 MONO
			HWChannelPos8 MONO
			HWChannelPos9 MONO
			HWChannelPos10 MONO
			HWChannelPos11 MONO
			HWChannelPos12 MONO
			HWChannelPos13 MONO
			HWChannelPos14 MONO
			HWChannelPos15 MONO
			HWChannelPos16 MONO
			HWChannelPos17 MONO
			HWChannelPos18 MONO
			HWChannelPos19 MONO
		}
	}
	{
		SplitPCM {
			Name "ucx2_stereo_in"
			Direction Capture
			Format S24_3LE
			Channels 2
			HWChannels 20
			HWChannelPos0 FL
			HWChannelPos1 FR
			HWChannelPos2 FL
			HWChannelPos3 FR
			HWChannelPos4 FL
			HWChannelPos5 FR
			HWChannelPos6 FL
			HWChannelPos7 FR
			HWChannelPos8 FL
			HWChannelPos9 FR
			HWChannelPos10 FL
			HWChannelPos11 FR
			HWChannelPos12 FL
			HWChannelPos13 FR
			HWChannelPos14 FL
			HWChannelPos15 FR
			HWChannelPos16 FL
			HWChannelPos17 FR
			HWChannelPos18 FL
			HWChannelPos19 FR
		}
	}
	{
		SplitPCM {
			Name "ucx2_adat_in"
			Direction Capture
			Format S24_3LE
			Channels 8
			HWChannels 20
			HWChannelPos0 UNKNOWN
			HWChannelPos1 UNKNOWN
			HWChannelPos2 UNKNOWN
			HWChannelPos3 UNKNOWN
			HWChannelPos4 UNKNOWN
			HWChannelPos5 UNKNOWN
			HWChannelPos6 UNKNOWN
			HWChannelPos7 UNKNOWN
			HWChannelPos8 UNKNOWN
			HWChannelPos9 UNKNOWN
			HWChannelPos10 UNKNOWN
			HWChannelPos11 UNKNOWN
			HWChannelPos12 UNKNOWN
			HWChannelPos13 UNKNOWN
			HWChannelPos14 UNKNOWN
			HWChannelPos15 UNKNOWN
			HWChannelPos16 UNKNOWN
			HWChannelPos17 UNKNOWN
			HWChannelPos18 UNKNOWN
			HWChannelPos19 UNKNOWN
		}
	}
]

# Analog outputs

SectionDevice.Headphones {
	Comment "Headphones"

	Value {
		PlackbackPriority 255
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 6
		Channel1 7
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Line 1" {
	Comment "Line Output 1+2"

	Value {
		PlackbackPriority 192
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 0
		Channel1 1
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Line 2" {
	Comment "Line Output 3+4"

	Value {
		PlackbackPriority 191
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 2
		Channel1 3
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Line 3" {
	Comment "Line Output 5+6"

	Value {
		PlackbackPriority 190
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 4
		Channel1 5
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

# Analog outputs in 4.0 surround configuration

SectionDevice."Line 4" {
	Comment "Line Output 1-4 (4.0 Surround)"

	ConflictingDevice [
		"Line 1"
		"Line 2"
	]

	Value {
		PlackbackPriority 160
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_surround40_out"
		Direction Playback
		HWChannels 20
		Channels 4
		Channel0 0
		Channel1 1
		Channel2 2
		Channel3 3
		ChannelPos0 FL
		ChannelPos1 FR
		ChannelPos2 RL
		ChannelPos3 RR
	}
}

# Analog outputs in 5.1 surround configuration

SectionDevice."Line 5" {
	Comment "Line Output 1-6 (5.1 Surround)"

	Value {
		PlackbackPriority 144
	}

	ConflictingDevice [
		"Line 1"
		"Line 2"
		"Line 3"
		"Line 4"
	]

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_surround51_out"
		Direction Playback
		HWChannels 20
		Channels 6
		Channel0 0
		Channel1 1
		Channel2 2
		Channel3 3
		Channel4 4
		Channel5 5
		ChannelPos0 FL
		ChannelPos1 FR
		ChannelPos2 RL
		ChannelPos3 RR
		ChannelPos4 FC
		ChannelPos5 LFE
	}
}

# Analog inputs

SectionDevice."Mic 1" {
	Comment "Line Input 1 (Microphone)"

	Value {
		CapturePriority 176
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_mono_in"
		Direction Capture
		HWChannels 20
		Channels 1
		Channel0 0
		ChannelPos0 MONO
	}
}

SectionDevice."Mic 2" {
	Comment "Line Input 2 (Microphone)"

	Value {
		CapturePriority 175
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_mono_in"
		Direction Capture
		HWChannels 20
		Channels 1
		Channel0 1
		ChannelPos0 MONO
	}
}

SectionDevice."Line 6" {
	Comment "Line Input 3 (Instrument)"

	Value {
		CapturePriority 174
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_mono_in"
		Direction Capture
		HWChannels 20
		Channels 1
		Channel0 2
		ChannelPos0 MONO
	}
}

SectionDevice."Line 7" {
	Comment "Line Input 4 (Instrument)"

	Value {
		CapturePriority 173
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_mono_in"
		Direction Capture
		HWChannels 20
		Channels 1
		Channel0 3
		ChannelPos0 MONO
	}
}

SectionDevice."Line 8" {
	Comment "Line Input 5+6"

	Value {
		CapturePriority 172
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_in"
		Direction Capture
		HWChannels 20
		Channels 2
		Channel0 4
		Channel1 5
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Line 9" {
	Comment "Line Input 7+8"

	Value {
		CapturePriority 171
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_in"
		Direction Capture
		HWChannels 20
		Channels 2
		Channel0 6
		Channel1 7
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

# Digital (consumer) outputs

SectionDevice."SPDIF 1" {
	Comment "AES3 (S/PDIF) Coax Output"

	Value {
		PlackbackPriority 112
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 8
		Channel1 9
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."SPDIF 2" {
	Comment "S/PDIF Optical Output"

	ConflictingDevice [
		"Direct 1"
	]

	Value {
		PlackbackPriority 111
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 12
		Channel1 13
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

# Digital (consumer) inputs

SectionDevice."SPDIF 3" {
	Comment "AES3 (S/PDIF) Coax Input"

	Value {
		CapturePriority 112
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_in"
		Direction Capture
		HWChannels 20
		Channels 2
		Channel0 8
		Channel1 9
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

# Digital (professional) outputs

SectionDevice."SPDIF 4" {
	Comment "AES3 XLR Ouptut"

	Value {
		PlackbackPriority 80
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_out"
		Direction Playback
		HWChannels 20
		Channels 2
		Channel0 10
		Channel1 11
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Direct 1" {
	Comment "ADAT Optical Output"

	Value {
		PlackbackPriority 48
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_adat_out"
		Direction Playback
		HWChannels 20
		Channels 8
		Channel0 12
		Channel1 13
		Channel2 14
		Channel3 15
		Channel4 16
		Channel5 17
		Channel6 18
		Channel7 19
		ChannelPos0 UNKNOWN
		ChannelPos1 UNKNOWN
		ChannelPos2 UNKNOWN
		ChannelPos3 UNKNOWN
		ChannelPos4 UNKNOWN
		ChannelPos5 UNKNOWN
		ChannelPos6 UNKNOWN
		ChannelPos7 UNKNOWN
	}
}

# Digital (professional) inputs

SectionDevice."SPDIF 5" {
	Comment "AES3 (S/PDIF) XLR Input"

	Value {
		CapturePriority 80
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_stereo_in"
		Direction Capture
		HWChannels 20
		Channels 2
		Channel0 10
		Channel1 11
		ChannelPos0 FL
		ChannelPos1 FR
	}
}

SectionDevice."Direct 2" {
	Comment "ADAT Optical Input"

	Value {
		CapturePriority 48
	}

	Macro.pcm_split.SplitPCMDevice {
		Name "ucx2_adat_in"
		Direction Capture
		HWChannels 20
		Channels 8
		Channel0 12
		Channel1 13
		Channel2 14
		Channel3 15
		Channel4 16
		Channel5 17
		Channel6 18
		Channel7 19
		ChannelPos0 UNKNOWN
		ChannelPos1 UNKNOWN
		ChannelPos2 UNKNOWN
		ChannelPos3 UNKNOWN
		ChannelPos4 UNKNOWN
		ChannelPos5 UNKNOWN
		ChannelPos6 UNKNOWN
		ChannelPos7 UNKNOWN
	}
}
