Initial commit - project started Aug 2020 (!)
This commit is contained in:
commit
a0cdf56b1b
|
@ -0,0 +1,5 @@
|
|||
github-cache/
|
||||
package-cache/
|
||||
SqueakDebug.log
|
||||
squeak-output.log
|
||||
fonts/from-github/Roboto*ttf
|
|
@ -0,0 +1,45 @@
|
|||
AbstractLauncher subclass: #LinuxIODevStartup
|
||||
instanceVariableNames: ''
|
||||
classVariableNames: ''
|
||||
poolDictionaries: ''
|
||||
category: 'DevSupport-LinuxIO'!
|
||||
|
||||
!LinuxIODevStartup methods!
|
||||
startUp
|
||||
| i |
|
||||
FileDirectory setDefaultDirectory: (UnixProcess env at: 'HOME'), '/src/squeak-phone'.
|
||||
Utilities authorInitials: (UnixProcess env at: 'USER').
|
||||
|
||||
NetNameResolver localHostName caseOf: {
|
||||
['zip'] -> [
|
||||
PhoneWorldMorph uninstall.
|
||||
DisplayScreen fullScreenOn.
|
||||
].
|
||||
} otherwise: [].
|
||||
|
||||
i := Installer mc directory: (UnixProcess env at: 'HOME'), '/Archives/Monticello'.
|
||||
self update: 'SyndicatedActors' from: i.
|
||||
self update: 'LinuxIO' from: i.
|
||||
self update: 'SqueakPhone' from: i.
|
||||
|
||||
"If we run the following either here directly, or in the UI
|
||||
process, it appears to lock up the image at 100% CPU usage."
|
||||
[RFBServer allowEmptyPasswords: true; stop; start] forkAt: Processor lowestPriority + 1.
|
||||
!
|
||||
update: packageName from: anInstaller
|
||||
| wc |
|
||||
wc := MCWorkingCopy allManagers detect: [:m | m package name = packageName] ifNone: [nil].
|
||||
(wc isNil or: [wc modified not]) ifTrue: [anInstaller install: packageName]
|
||||
!
|
||||
!
|
||||
|
||||
LinuxIODevStartup activate!
|
||||
|
||||
Utilities commonRequestStrings: 'DisplayDevice fixDPI "Autodetect"
|
||||
DisplayDevice fixDPI: 500 "Cellphoneish"
|
||||
DisplayDevice fixDPI: 256 "Comfortable on my 27-inch monitor"
|
||||
DisplayDevice fixDPI: 163 "Nominal for a 4k 27-inch monitor"
|
||||
-
|
||||
', Utilities commonRequestStrings contents!
|
||||
|
||||
SyndicateSnippets stdio1!
|
|
@ -0,0 +1,30 @@
|
|||
.PHONY: build-images untag untag-all veryclean dev sudo-dev
|
||||
|
||||
SQUEAKERFLAGS=
|
||||
BUILDFLAGS=
|
||||
|
||||
build-images:
|
||||
squeaker $(SQUEAKERFLAGS) build $(BUILDFLAGS) -t squeak-phone-base -f Squeakerfile.phone-base.st .
|
||||
squeaker $(SQUEAKERFLAGS) build $(BUILDFLAGS) -t squeak-phone -f Squeakerfile.phone.st .
|
||||
squeaker $(SQUEAKERFLAGS) build $(BUILDFLAGS) -t squeak-phone-dev -f Squeakerfile.phone-dev.st .
|
||||
|
||||
untag:
|
||||
squeaker untag squeak-phone squeak-phone-dev
|
||||
|
||||
untag-all: untag
|
||||
squeaker untag squeak-phone-base
|
||||
|
||||
clean: untag
|
||||
squeaker gc
|
||||
|
||||
veryclean: untag-all
|
||||
squeaker gc
|
||||
|
||||
dev: build-images
|
||||
squeaker run squeak-phone-dev
|
||||
|
||||
sudo-dev: build-images
|
||||
squeaker run --root squeak-phone-dev
|
||||
|
||||
images/%: build-images
|
||||
squeaker create squeak-phone "$@"
|
|
@ -0,0 +1 @@
|
|||
'From Squeak6.0alpha of 8 October 2020 [latest update: #19909] on 29 November 2021 at 12:41:42 pm'!
!AbstractResizerMorph class methodsFor: 'preferences' stamp: 'tonyg 10/6/2020 00:49'!
gripThickness
"A number in pixels that encodes the area were the user can target splitters or edge grips."
<preference: 'Grip Thickness'
category: 'windows'
description: 'A number in pixels that encodes the area were the user can target splitters or edge grips such as in application windows. Bigger grips make it easier to click on them.'
type: #Number>
^ GripThickness ifNil: [(UserInterfaceTheme current get: #gripThickness) ifNil: [4]]! !
!AbstractResizerMorph class methodsFor: 'preferences' stamp: 'tonyg 10/6/2020 01:03'!
handleLength
<preference: 'Handle Length'
category: 'windows'
description: 'AThe size of a grip handle if shown. Can be interpreted as width or height, depending of the resizer orientation. Does not affect the clickable area. See grip thickness for that.'
type: #Number>
^ HandleLength ifNil: [(UserInterfaceTheme current get: #handleLength) ifNil: [25]]! !
!ScrollPane class methodsFor: 'defaults' stamp: 'tonyg 10/6/2020 11:21'!
scrollBarThickness
^ Preferences scrollBarsNarrow
ifTrue: [(UserInterfaceTheme current get: #scrollBarThicknessNarrow) ifNil: [10]]
ifFalse: [(UserInterfaceTheme current get: #scrollBarThickness) ifNil: [14]]! !
|
|
@ -0,0 +1,67 @@
|
|||
# How to use pmbootstrap
|
||||
|
||||
Switching devices:
|
||||
|
||||
pmbootstrap config device <new_device>
|
||||
|
||||
e.g.
|
||||
|
||||
pmbootstrap config device pine64-pinephone
|
||||
pmbootstrap config device samsung-herolte
|
||||
pmbootstrap config device qemu-amd64
|
||||
|
||||
Building for Samsung Galaxy S7 (samsung-herolte):
|
||||
|
||||
pmbootstrap install --android-recovery-zip
|
||||
|
||||
Building for Pinephone (pine64-pinephone):
|
||||
|
||||
pmbootstrap install --sdcard BLOCKDEV
|
||||
|
||||
Building for qemu-amd64:
|
||||
|
||||
pmbootstrap install
|
||||
pmbootstrap qemu
|
||||
|
||||
# How to install on Samsung Galaxy S7
|
||||
|
||||
(See https://wiki.postmarketos.org/wiki/Installation_from_recovery_mode )
|
||||
|
||||
Reboot holding power + home + volup to enter the recovery. Choose
|
||||
Advanced, ADB sideload.
|
||||
|
||||
Then run
|
||||
|
||||
pmbootstrap flasher --method adb sideload
|
||||
|
||||
# How to use RNDIS to connect via ssh over USB
|
||||
|
||||
(See https://wiki.postmarketos.org/wiki/USB_Network )
|
||||
|
||||
For pinephone, which *does* get a MAC address for the RNDIS device:
|
||||
|
||||
sudo ip a del 10.42.0.1/32 dev usb0
|
||||
sudo ip a add 172.16.42.2/32 dev usb0
|
||||
sudo ip r add 172.16.0.0/16 dev usb0
|
||||
SSH_AUTH_SOCK= ssh user@172.16.42.1
|
||||
|
||||
... or, huh, just use DHCP to get an address from the phone! It turns
|
||||
out to work.
|
||||
|
||||
The equivalent for samsung-herolte is similar but requires inventing a
|
||||
MAC address and assigning it at the link layer:
|
||||
|
||||
sudo ip link set dev eth0 address 12:12:12:12:12:12
|
||||
sudo ip a add 172.16.42.2/32 dev eth0
|
||||
sudo ip r add 172.16.0.0/16 dev eth0
|
||||
SSH_AUTH_SOCK= ssh user@172.16.42.1
|
||||
|
||||
# How to set up WiFi on a running instance
|
||||
|
||||
(See https://wiki.postmarketos.org/wiki/WiFi)
|
||||
|
||||
When you pick "none" UI, you get no nmcli *or* wpa_supplicant.
|
||||
|
||||
Pick "console". Then you get both.
|
||||
|
||||
sudo nmcli device wifi connect <SSID> password <PASSWORD> ifname wlan0
|
|
@ -0,0 +1 @@
|
|||
from: 'http://files.squeak.org/6.0alpha/Squeak6.0alpha-21379-64bit/Squeak6.0alpha-21379-64bit.zip'!
World submorphs
select: [:m |
(m isKindOf: PreferenceWizardMorph) or:
[m isSystemWindow and: [m label beginsWith: 'Welcome to Squeak']]]
thenDo: [:m | m delete].
!
"Preferences."
CommunityTheme createDark apply.
Model useColorfulWindows: true.
[Preferences setDemoFonts] valueSupplyingAnswer: true.
Cursor useBiggerCursors: true.
Preferences enable: #mouseOverForKeyboardFocus.
Preferences disable: #balloonHelpEnabled.
Preferences disable: #alternativeBrowseIt.
TextEditor autoEnclose: false.
Model windowActiveOnFirstClick: true.
!
MCMcmUpdater default doUpdate: false!
Metacello new configuration: 'FFI'; load!
Installer ss project: 'OSProcess'; install: 'OSProcess'!
Installer ss project: 'CommandShell'; install: 'CommandShell'!
Installer ss project: 'JSON'; install: 'JSON'!
Installer ss project: 'Snarl'; install: 'Snarl'.
Project current instVarNamed: #uiManager put: nil.
!
|
|
@ -0,0 +1 @@
|
|||
from: #'squeak-phone'!
fileIn: 'DevSupport.st'!
|
|
@ -0,0 +1 @@
|
|||
from: #'squeak-phone-base'!
MCMcmUpdater default doUpdate: false!
resource: 'fonts/from-github/Roboto-Regular.ttf'
!
| description |
description := TTFontDescription addFromTTFile: 'fonts/from-github/Roboto-Regular.ttf'.
TTCFont newTextStyleFromTT: description first.
TTCFont registerAll.
"TTCFont installFromFileNames: #('fonts/from-github/Roboto-Regular.ttf')."
TTCFont glyphCacheSize: 8000.
!
Installer ss project: 'BitSyntax'; install: 'BitSyntax-Core'!
(Installer squeak project: 'ss') install: 'RFB'!
Installer ss project: 'Preserves'; install: 'Preserves'!
Installer ss project: 'TouchScrolling'; install: 'TouchScrolling'!
Installer ss project: 'TiledMaps'; install: 'TiledMaps'!
(Installer mc directory: '/home/tonyg/Archives/Monticello')
install: 'BTree-Collections'; install: 'SyndicatedActors'!
(Installer mc directory: '/home/tonyg/Archives/Monticello') install: 'LinuxIO'!
(Installer mc directory: '/home/tonyg/Archives/Monticello') install: 'SqueakPhone'!
CellphoneTheme createDark apply!
PhoneWorldMorph install.
LinuxInputIndex instance.
LinuxInputDaemon instance.
MachineConfiguration instance.
WidgetDaemon instance.
CallManager instance.
AppRegistryDaemon instance.
BacklightControlDaemon instance.
!
resource: 'fonts/Font-Awesome/metadata/icons.json'!
FontAwesome load: 'fonts/Font-Awesome'!
|
|
@ -0,0 +1,46 @@
|
|||
#!/bin/sh
|
||||
# 2021-11-10
|
||||
# revised 2022-01-06 for multiple devices
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
eval "$(ssh pm-rndis cat /etc/deviceinfo)"
|
||||
|
||||
if [ -z "${deviceinfo_codename}" ]
|
||||
then
|
||||
echo Cannot device which device is connected!
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo Connected device: $deviceinfo_codename
|
||||
|
||||
rsnapshot_conf=/tmp/rsnapshot.backups-pm-${deviceinfo_codename}.conf
|
||||
|
||||
cat > $rsnapshot_conf <<EOF
|
||||
config_version 1.2
|
||||
snapshot_root /home/tonyg/src/squeak-phone/devices/${deviceinfo_codename}/backups/home-user
|
||||
no_create_root 0
|
||||
|
||||
cmd_cp /usr/bin/cp
|
||||
cmd_rm /usr/bin/rm
|
||||
cmd_rsync /usr/bin/rsync
|
||||
cmd_ssh /usr/bin/ssh
|
||||
cmd_logger /usr/bin/logger
|
||||
|
||||
logfile /tmp/rsnapshot.backups-pm-${deviceinfo_codename}.log
|
||||
lockfile /tmp/rsnapshot.backups-pm-${deviceinfo_codename}.pid
|
||||
|
||||
retain adhoc 10000
|
||||
|
||||
verbose 2
|
||||
|
||||
one_fs 1
|
||||
|
||||
sync_first 1
|
||||
|
||||
backup user@pm-rndis:/home/user ./
|
||||
EOF
|
||||
|
||||
rsnapshot -c ${rsnapshot_conf} sync
|
||||
rsnapshot -c ${rsnapshot_conf} adhoc
|
|
@ -0,0 +1 @@
|
|||
backups/
|
|
@ -0,0 +1,104 @@
|
|||
## Anatomy of an incoming call
|
||||
|
||||
Regular call strength indicators, but immediately prior to
|
||||
registration changing (just before the call -- did it move me to a new
|
||||
cell for the call because it was a better fit for the traffic that was
|
||||
about to start?):
|
||||
|
||||
09:42:34.644010+01:00 [HayesModem]: +QIND: "csq",99,99
|
||||
|
||||
Interestingly the first 99 there means "not known or not detectable",
|
||||
maybe because we're changing cell and it doesn't know what the signal
|
||||
strength will be like there yet.
|
||||
|
||||
Here we change cell:
|
||||
|
||||
09:42:34.644037+01:00 [HayesModem]: +CREG: 1,"1950","0ADC20C",2
|
||||
09:42:34.644046+01:00 [HayesModem]: +CGREG: 1,"1950","0ADC20C",2
|
||||
|
||||
Oh! A call! The CLIP's final 0 tells us the CLI is "valid". The DSCI
|
||||
tells us call #2 is MT (1), incoming (4), voice (0), from my main
|
||||
phone, which is in international format (145):
|
||||
|
||||
09:42:34.889393+01:00 [HayesModem]: +CRING: VOICE
|
||||
09:42:34.889410+01:00 [HayesModem]: +CLIP: "+31612345678",145,,,,0
|
||||
09:42:34.889418+01:00 [HayesModem]: ^DSCI: 2,1,4,0,+31612345678,145
|
||||
|
||||
We learn the signal strength at the new cell:
|
||||
|
||||
09:42:38.160627+01:00 [HayesModem]: +QIND: "csq",12,99
|
||||
|
||||
We get a time signal from the network:
|
||||
|
||||
09:42:40.069934+01:00 [HayesModem]: +CTZE: "+04",0,"2021/12/16,08:42:39"
|
||||
|
||||
Another ring:
|
||||
|
||||
09:42:40.893283+01:00 [HayesModem]: +CRING: VOICE
|
||||
09:42:40.893309+01:00 [HayesModem]: +CLIP: "+31612345678",145,,,,0
|
||||
|
||||
Another:
|
||||
|
||||
09:42:47.003871+01:00 [HayesModem]: +CRING: VOICE
|
||||
09:42:47.003906+01:00 [HayesModem]: +CLIP: "+31612345678",145,,,,0
|
||||
|
||||
I hung up on the other end. DSCI says call #2, MT, state CALL_END (6), voice (0).
|
||||
|
||||
09:42:47.354649+01:00 [HayesModem]: ^DSCI: 2,1,6,0,+31612345678,145
|
||||
09:42:47.365856+01:00 [HayesModem]: NO CARRIER
|
||||
|
||||
09:42:49.361249+01:00 [HayesModem]: +QIND: "csq",20,99
|
||||
|
||||
Back (?) to the old cell (?):
|
||||
|
||||
09:42:49.368473+01:00 [HayesModem]: +CREG: 1,"FD21","12B1B20",7
|
||||
09:42:49.368493+01:00 [HayesModem]: +CGREG: 1,"FD21","12B1B20",7
|
||||
|
||||
And back to regular signal strength indicators:
|
||||
|
||||
09:42:50.151209+01:00 [HayesModem]: +QIND: "csq",14,99
|
||||
09:42:52.186241+01:00 [HayesModem]: +QIND: "csq",19,99
|
||||
09:43:01.303893+01:00 [HayesModem]: +QIND: "csq",16,99
|
||||
09:43:03.586971+01:00 [HayesModem]: +QIND: "csq",20,99
|
||||
|
||||
# Audio
|
||||
|
||||
Here's the audio config from the factory:
|
||||
|
||||
+QDAI: 1,1,0,1,0,0,1,1
|
||||
|
||||
I'm trying the following on advice from https://xnux.eu/devices/feature/modem-pp.html:
|
||||
|
||||
AT+QDAI=1,0,0,2,0,1,1,1
|
||||
|
||||
Oh, that sucks. Horribly noisy output. Going back to the defaults
|
||||
produces somewhat workable audio:
|
||||
|
||||
AT+QDAI=1,1,0,1,0,0,1,1
|
||||
|
||||
Some experiments:
|
||||
|
||||
AT+QDAI=1,1,0,1,0,0,1,1
|
||||
ok, has a click (default)
|
||||
|
||||
AT+QDAI=1,0,0,1,0,0,1,1
|
||||
noisy, horrible
|
||||
|
||||
AT+QDAI=1,1,0,2,0,1,1,1
|
||||
semi-noisy, underwater mic sound on remote end
|
||||
|
||||
AT+QDAI=1,1,0,1,0,1,1,1
|
||||
ok, has a click
|
||||
|
||||
AT+QDAI=1,1,0,2,0,0,1,1
|
||||
semi-noisy, underwater mic sound on remote end
|
||||
|
||||
# Network
|
||||
|
||||
https://techship.com/faq/how-to-step-by-step-set-up-a-data-connection-over-qmi-interface-using-qmicli-and-in-kernel-driver-qmi-wwan-in-linux/
|
||||
|
||||
ifconfig wwan0 down
|
||||
echo Y | tee /sys/class/net/wwan0/qmi/raw_ip
|
||||
ifconfig wwan0 up
|
||||
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wds-start-network=ip-type=4 --client-no-release-cid
|
||||
udhcpc -v -q -f -n -i wwan0
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 11
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -5200
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 15
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2400
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 28
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 'Mix Mono'
|
||||
value.1 'Mix Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 'Sum Mono'
|
||||
value.1 'Sum Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 Mixer
|
||||
value.1 Mixer
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value 'Left Mixer'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 15
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -4800
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 15
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2400
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 31
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 'Mix Mono'
|
||||
value.1 'Mix Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 'Sum Mono'
|
||||
value.1 'Sum Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 Mixer
|
||||
value.1 Mixer
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value 'Left Mixer'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 15
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -4800
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 -450
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 15
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2400
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 31
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 'Mix Mono'
|
||||
value.1 'Mix Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 'Sum Mono'
|
||||
value.1 'Sum Mono'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 Mixer
|
||||
value.1 Mixer
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value 'Left Mixer'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 43
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2000
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 16
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2250
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 17
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2100
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value true
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value true
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 40
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2300
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 24
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -1050
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 24
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -1050
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value true
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value true
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 43
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2000
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 16
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2250
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 17
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2100
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 40
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2300
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 1
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2400
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 24
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -1050
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 25
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -900
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 'Reverse Stereo'
|
||||
value.1 'Reverse Stereo'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,672 @@
|
|||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 40
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2300
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 24
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -1050
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 24
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -1050
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,673 @@
|
|||
Usage: alsactl
|
||||
state.PinePhone {
|
||||
control.1 {
|
||||
iface CARD
|
||||
name 'Headphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface CARD
|
||||
name 'Headset Microphone Jack'
|
||||
value false
|
||||
comment {
|
||||
access read
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.5 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.6 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.7 {
|
||||
iface MIXER
|
||||
name 'ADC Capture Volume'
|
||||
value.0 0
|
||||
value.1 0
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 -9999999
|
||||
dbvalue.1 -9999999
|
||||
}
|
||||
}
|
||||
control.8 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Volume'
|
||||
value.0 160
|
||||
value.1 160
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 2
|
||||
range '0 - 192'
|
||||
dbmin -9999999
|
||||
dbmax 2400
|
||||
dbvalue.0 0
|
||||
dbvalue.1 0
|
||||
}
|
||||
}
|
||||
control.9 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Volume'
|
||||
value 43
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 63'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2000
|
||||
}
|
||||
}
|
||||
control.10 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.11 {
|
||||
iface MIXER
|
||||
name 'Mic1 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.12 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.13 {
|
||||
iface MIXER
|
||||
name 'Mic2 Boost Volume'
|
||||
value 2
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin 0
|
||||
dbmax 4200
|
||||
dbvalue.0 2700
|
||||
}
|
||||
}
|
||||
control.14 {
|
||||
iface MIXER
|
||||
name 'ADC Gain Capture Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.15 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Volume'
|
||||
value 3
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 7'
|
||||
dbmin -450
|
||||
dbmax 600
|
||||
dbvalue.0 0
|
||||
}
|
||||
}
|
||||
control.16 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Volume'
|
||||
value 16
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -2250
|
||||
}
|
||||
}
|
||||
control.17 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Volume'
|
||||
value 17
|
||||
comment {
|
||||
access 'read write'
|
||||
type INTEGER
|
||||
count 1
|
||||
range '0 - 31'
|
||||
dbmin -9999999
|
||||
dbmax 0
|
||||
dbvalue.0 -9999999
|
||||
}
|
||||
}
|
||||
control.18 {
|
||||
iface MIXER
|
||||
name 'AIF1 AD0 Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.19 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Stereo Capture Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.20 {
|
||||
iface MIXER
|
||||
name 'AIF3 ADC Source Capture Route'
|
||||
value None
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 None
|
||||
item.1 'AIF2 ADCL'
|
||||
item.2 'AIF2 ADCR'
|
||||
}
|
||||
}
|
||||
control.21 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.22 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.23 {
|
||||
iface MIXER
|
||||
name 'AIF1 Data Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.24 {
|
||||
iface MIXER
|
||||
name 'AIF2 Inv Digital ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.25 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF1 DA0 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.26 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer AIF2 DAC Rev Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.27 {
|
||||
iface MIXER
|
||||
name 'AIF2 ADC Mixer ADC Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.28 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Source Playback Route'
|
||||
value AIF2
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 AIF2
|
||||
item.1 AIF3+2
|
||||
item.2 AIF2+3
|
||||
}
|
||||
}
|
||||
control.29 {
|
||||
iface MIXER
|
||||
name 'AIF1 DA0 Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.30 {
|
||||
iface MIXER
|
||||
name 'AIF2 DAC Stereo Playback Route'
|
||||
value.0 Stereo
|
||||
value.1 Stereo
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Reverse Stereo'
|
||||
item.2 'Sum Mono'
|
||||
item.3 'Mix Mono'
|
||||
}
|
||||
}
|
||||
control.31 {
|
||||
iface MIXER
|
||||
name 'AIF1 Slot 0 Digital DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.32 {
|
||||
iface MIXER
|
||||
name 'AIF2 Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.33 {
|
||||
iface MIXER
|
||||
name 'ADC Digital DAC Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.34 {
|
||||
iface MIXER
|
||||
name 'Headphone Source Playback Route'
|
||||
value.0 DAC
|
||||
value.1 DAC
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 DAC
|
||||
item.1 Mixer
|
||||
}
|
||||
}
|
||||
control.35 {
|
||||
iface MIXER
|
||||
name 'Headphone Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.36 {
|
||||
iface MIXER
|
||||
name 'Line Out Source Playback Route'
|
||||
value.0 'Mono Differential'
|
||||
value.1 'Mono Differential'
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 2
|
||||
item.0 Stereo
|
||||
item.1 'Mono Differential'
|
||||
}
|
||||
}
|
||||
control.37 {
|
||||
iface MIXER
|
||||
name 'Line Out Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.38 {
|
||||
iface MIXER
|
||||
name 'Earpiece Source Playback Route'
|
||||
value DACR
|
||||
comment {
|
||||
access 'read write'
|
||||
type ENUMERATED
|
||||
count 1
|
||||
item.0 DACR
|
||||
item.1 DACL
|
||||
item.2 'Right Mixer'
|
||||
item.3 'Left Mixer'
|
||||
}
|
||||
}
|
||||
control.39 {
|
||||
iface MIXER
|
||||
name 'Earpiece Playback Switch'
|
||||
value false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.40 {
|
||||
iface MIXER
|
||||
name 'Mic1 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.41 {
|
||||
iface MIXER
|
||||
name 'Mic2 Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.42 {
|
||||
iface MIXER
|
||||
name 'Line In Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.43 {
|
||||
iface MIXER
|
||||
name 'DAC Playback Switch'
|
||||
value.0 true
|
||||
value.1 true
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.44 {
|
||||
iface MIXER
|
||||
name 'DAC Reversed Playback Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.45 {
|
||||
iface MIXER
|
||||
name 'Mic1 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.46 {
|
||||
iface MIXER
|
||||
name 'Mic2 Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.47 {
|
||||
iface MIXER
|
||||
name 'Line In Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.48 {
|
||||
iface MIXER
|
||||
name 'Mixer Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
control.49 {
|
||||
iface MIXER
|
||||
name 'Mixer Reversed Capture Switch'
|
||||
value.0 false
|
||||
value.1 false
|
||||
comment {
|
||||
access 'read write'
|
||||
type BOOLEAN
|
||||
count 2
|
||||
}
|
||||
}
|
||||
}
|
||||
state.sun9ihdmi {
|
||||
control.1 {
|
||||
iface PCM
|
||||
name 'Playback Channel Map'
|
||||
value.0 0
|
||||
value.1 0
|
||||
value.2 0
|
||||
value.3 0
|
||||
value.4 0
|
||||
value.5 0
|
||||
value.6 0
|
||||
value.7 0
|
||||
comment {
|
||||
access read
|
||||
type INTEGER
|
||||
count 8
|
||||
range '0 - 36'
|
||||
}
|
||||
}
|
||||
control.2 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Mask'
|
||||
value ffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
comment {
|
||||
access read
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.3 {
|
||||
iface PCM
|
||||
name 'IEC958 Playback Default'
|
||||
value '0400000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read write'
|
||||
type IEC958
|
||||
count 1
|
||||
}
|
||||
}
|
||||
control.4 {
|
||||
iface PCM
|
||||
name ELD
|
||||
value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
|
||||
comment {
|
||||
access 'read volatile'
|
||||
type BYTES
|
||||
count 128
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,669 @@
|
|||
2022-01-06T22:59:33+01:00,99
|
||||
2022-01-06T23:00:34+01:00,99
|
||||
2022-01-06T23:01:34+01:00,97
|
||||
2022-01-06T23:02:34+01:00,95
|
||||
2022-01-06T23:03:34+01:00,95
|
||||
2022-01-06T23:04:34+01:00,95
|
||||
2022-01-06T23:05:34+01:00,94
|
||||
2022-01-06T23:06:34+01:00,94
|
||||
2022-01-06T23:07:34+01:00,94
|
||||
2022-01-06T23:08:34+01:00,94
|
||||
2022-01-06T23:09:34+01:00,94
|
||||
2022-01-06T23:10:34+01:00,94
|
||||
2022-01-06T23:11:34+01:00,94
|
||||
2022-01-06T23:12:34+01:00,94
|
||||
2022-01-06T23:13:34+01:00,94
|
||||
2022-01-06T23:14:34+01:00,93
|
||||
2022-01-06T23:15:34+01:00,93
|
||||
2022-01-06T23:16:34+01:00,93
|
||||
2022-01-06T23:17:34+01:00,93
|
||||
2022-01-06T23:18:34+01:00,93
|
||||
2022-01-06T23:19:34+01:00,93
|
||||
2022-01-06T23:20:34+01:00,93
|
||||
2022-01-06T23:21:34+01:00,93
|
||||
2022-01-06T23:22:34+01:00,93
|
||||
2022-01-06T23:23:34+01:00,93
|
||||
2022-01-06T23:24:34+01:00,93
|
||||
2022-01-06T23:25:34+01:00,93
|
||||
2022-01-06T23:26:34+01:00,93
|
||||
2022-01-06T23:27:34+01:00,93
|
||||
2022-01-06T23:28:34+01:00,93
|
||||
2022-01-06T23:29:34+01:00,92
|
||||
2022-01-06T23:30:34+01:00,92
|
||||
2022-01-06T23:31:34+01:00,92
|
||||
2022-01-06T23:32:34+01:00,92
|
||||
2022-01-06T23:33:34+01:00,92
|
||||
2022-01-06T23:34:34+01:00,92
|
||||
2022-01-06T23:35:34+01:00,92
|
||||
2022-01-06T23:36:34+01:00,92
|
||||
2022-01-06T23:37:34+01:00,92
|
||||
2022-01-06T23:38:34+01:00,92
|
||||
2022-01-06T23:39:34+01:00,92
|
||||
2022-01-06T23:40:34+01:00,92
|
||||
2022-01-06T23:41:34+01:00,92
|
||||
2022-01-06T23:42:34+01:00,92
|
||||
2022-01-06T23:43:34+01:00,92
|
||||
2022-01-06T23:44:34+01:00,91
|
||||
2022-01-06T23:45:34+01:00,91
|
||||
2022-01-06T23:46:34+01:00,91
|
||||
2022-01-06T23:47:34+01:00,91
|
||||
2022-01-06T23:48:34+01:00,91
|
||||
2022-01-06T23:49:34+01:00,91
|
||||
2022-01-06T23:50:34+01:00,91
|
||||
2022-01-06T23:51:34+01:00,90
|
||||
2022-01-06T23:52:34+01:00,90
|
||||
2022-01-06T23:53:34+01:00,90
|
||||
2022-01-06T23:54:34+01:00,90
|
||||
2022-01-06T23:55:34+01:00,90
|
||||
2022-01-06T23:56:34+01:00,90
|
||||
2022-01-06T23:57:34+01:00,90
|
||||
2022-01-06T23:58:34+01:00,89
|
||||
2022-01-06T23:59:34+01:00,89
|
||||
2022-01-07T00:00:34+01:00,89
|
||||
2022-01-07T00:01:34+01:00,89
|
||||
2022-01-07T00:02:34+01:00,89
|
||||
2022-01-07T00:03:34+01:00,89
|
||||
2022-01-07T00:04:34+01:00,89
|
||||
2022-01-07T00:05:35+01:00,88
|
||||
2022-01-07T00:06:35+01:00,88
|
||||
2022-01-07T00:07:35+01:00,88
|
||||
2022-01-07T00:08:35+01:00,88
|
||||
2022-01-07T00:09:35+01:00,88
|
||||
2022-01-07T00:10:35+01:00,88
|
||||
2022-01-07T00:11:35+01:00,88
|
||||
2022-01-07T00:12:35+01:00,88
|
||||
2022-01-07T00:13:35+01:00,87
|
||||
2022-01-07T00:14:35+01:00,87
|
||||
2022-01-07T00:15:35+01:00,87
|
||||
2022-01-07T00:16:35+01:00,87
|
||||
2022-01-07T00:17:35+01:00,87
|
||||
2022-01-07T00:18:35+01:00,87
|
||||
2022-01-07T00:19:35+01:00,87
|
||||
2022-01-07T00:20:35+01:00,86
|
||||
2022-01-07T00:21:35+01:00,86
|
||||
2022-01-07T00:22:35+01:00,86
|
||||
2022-01-07T00:23:35+01:00,86
|
||||
2022-01-07T00:24:35+01:00,86
|
||||
2022-01-07T00:25:35+01:00,85
|
||||
2022-01-07T00:26:35+01:00,85
|
||||
2022-01-07T00:27:35+01:00,85
|
||||
2022-01-07T00:28:35+01:00,85
|
||||
2022-01-07T00:29:35+01:00,85
|
||||
2022-01-07T00:30:35+01:00,85
|
||||
2022-01-07T00:31:35+01:00,85
|
||||
2022-01-07T00:32:35+01:00,85
|
||||
2022-01-07T00:33:35+01:00,85
|
||||
2022-01-07T00:34:35+01:00,84
|
||||
2022-01-07T00:35:35+01:00,84
|
||||
2022-01-07T00:36:35+01:00,84
|
||||
2022-01-07T00:37:35+01:00,84
|
||||
2022-01-07T00:38:35+01:00,84
|
||||
2022-01-07T00:39:35+01:00,84
|
||||
2022-01-07T00:40:35+01:00,83
|
||||
2022-01-07T00:41:35+01:00,83
|
||||
2022-01-07T00:42:35+01:00,83
|
||||
2022-01-07T00:43:35+01:00,83
|
||||
2022-01-07T00:44:35+01:00,83
|
||||
2022-01-07T00:45:35+01:00,82
|
||||
2022-01-07T00:46:35+01:00,82
|
||||
2022-01-07T00:47:35+01:00,82
|
||||
2022-01-07T00:48:35+01:00,82
|
||||
2022-01-07T00:49:35+01:00,82
|
||||
2022-01-07T00:50:35+01:00,81
|
||||
2022-01-07T00:51:35+01:00,81
|
||||
2022-01-07T00:52:35+01:00,81
|
||||
2022-01-07T00:53:35+01:00,80
|
||||
2022-01-07T00:54:35+01:00,80
|
||||
2022-01-07T00:55:35+01:00,80
|
||||
2022-01-07T00:56:35+01:00,80
|
||||
2022-01-07T00:57:35+01:00,80
|
||||
2022-01-07T00:58:35+01:00,79
|
||||
2022-01-07T00:59:35+01:00,79
|
||||
2022-01-07T01:00:35+01:00,79
|
||||
2022-01-07T01:01:35+01:00,79
|
||||
2022-01-07T01:02:35+01:00,78
|
||||
2022-01-07T01:03:35+01:00,78
|
||||
2022-01-07T01:04:35+01:00,78
|
||||
2022-01-07T01:05:35+01:00,78
|
||||
2022-01-07T01:06:35+01:00,77
|
||||
2022-01-07T01:07:35+01:00,77
|
||||
2022-01-07T01:08:35+01:00,77
|
||||
2022-01-07T01:09:35+01:00,76
|
||||
2022-01-07T01:10:36+01:00,75
|
||||
2022-01-07T01:11:36+01:00,75
|
||||
2022-01-07T01:12:36+01:00,75
|
||||
2022-01-07T01:13:36+01:00,75
|
||||
2022-01-07T01:14:36+01:00,75
|
||||
2022-01-07T01:15:36+01:00,74
|
||||
2022-01-07T01:16:36+01:00,74
|
||||
2022-01-07T01:17:36+01:00,74
|
||||
2022-01-07T01:18:36+01:00,74
|
||||
2022-01-07T01:19:36+01:00,73
|
||||
2022-01-07T01:20:36+01:00,73
|
||||
2022-01-07T01:21:36+01:00,73
|
||||
2022-01-07T01:22:36+01:00,73
|
||||
2022-01-07T01:23:36+01:00,73
|
||||
2022-01-07T01:24:36+01:00,72
|
||||
2022-01-07T01:25:36+01:00,72
|
||||
2022-01-07T01:26:36+01:00,72
|
||||
2022-01-07T01:27:36+01:00,72
|
||||
2022-01-07T01:28:36+01:00,72
|
||||
2022-01-07T01:29:36+01:00,72
|
||||
2022-01-07T01:30:36+01:00,72
|
||||
2022-01-07T01:31:36+01:00,71
|
||||
2022-01-07T01:32:36+01:00,71
|
||||
2022-01-07T01:33:36+01:00,71
|
||||
2022-01-07T01:34:36+01:00,71
|
||||
2022-01-07T01:35:36+01:00,71
|
||||
2022-01-07T01:36:36+01:00,70
|
||||
2022-01-07T01:37:36+01:00,70
|
||||
2022-01-07T01:38:36+01:00,70
|
||||
2022-01-07T01:39:36+01:00,70
|
||||
2022-01-07T01:40:36+01:00,70
|
||||
2022-01-07T01:41:36+01:00,70
|
||||
2022-01-07T01:42:36+01:00,70
|
||||
2022-01-07T01:43:36+01:00,69
|
||||
2022-01-07T01:44:36+01:00,69
|
||||
2022-01-07T01:45:36+01:00,69
|
||||
2022-01-07T01:46:36+01:00,69
|
||||
2022-01-07T01:47:36+01:00,69
|
||||
2022-01-07T01:48:36+01:00,69
|
||||
2022-01-07T01:49:36+01:00,69
|
||||
2022-01-07T01:50:36+01:00,68
|
||||
2022-01-07T01:51:36+01:00,68
|
||||
2022-01-07T01:52:36+01:00,68
|
||||
2022-01-07T01:53:36+01:00,68
|
||||
2022-01-07T01:54:36+01:00,68
|
||||
2022-01-07T01:55:36+01:00,68
|
||||
2022-01-07T01:56:36+01:00,67
|
||||
2022-01-07T01:57:36+01:00,67
|
||||
2022-01-07T01:58:36+01:00,67
|
||||
2022-01-07T01:59:36+01:00,67
|
||||
2022-01-07T02:00:36+01:00,67
|
||||
2022-01-07T02:01:36+01:00,67
|
||||
2022-01-07T02:02:36+01:00,67
|
||||
2022-01-07T02:03:36+01:00,66
|
||||
2022-01-07T02:04:36+01:00,66
|
||||
2022-01-07T02:05:36+01:00,66
|
||||
2022-01-07T02:06:36+01:00,66
|
||||
2022-01-07T02:07:36+01:00,66
|
||||
2022-01-07T02:08:36+01:00,66
|
||||
2022-01-07T02:09:36+01:00,66
|
||||
2022-01-07T02:10:36+01:00,65
|
||||
2022-01-07T02:11:36+01:00,65
|
||||
2022-01-07T02:12:36+01:00,65
|
||||
2022-01-07T02:13:36+01:00,65
|
||||
2022-01-07T02:14:36+01:00,64
|
||||
2022-01-07T02:15:36+01:00,64
|
||||
2022-01-07T02:16:36+01:00,64
|
||||
2022-01-07T02:17:37+01:00,63
|
||||
2022-01-07T02:18:37+01:00,63
|
||||
2022-01-07T02:19:37+01:00,63
|
||||
2022-01-07T02:20:37+01:00,63
|
||||
2022-01-07T02:21:37+01:00,63
|
||||
2022-01-07T02:22:37+01:00,63
|
||||
2022-01-07T02:23:37+01:00,62
|
||||
2022-01-07T02:24:37+01:00,62
|
||||
2022-01-07T02:25:37+01:00,62
|
||||
2022-01-07T02:26:37+01:00,62
|
||||
2022-01-07T02:27:37+01:00,62
|
||||
2022-01-07T02:28:37+01:00,62
|
||||
2022-01-07T02:29:37+01:00,61
|
||||
2022-01-07T02:30:37+01:00,61
|
||||
2022-01-07T02:31:37+01:00,61
|
||||
2022-01-07T02:32:37+01:00,61
|
||||
2022-01-07T02:33:37+01:00,61
|
||||
2022-01-07T02:34:37+01:00,61
|
||||
2022-01-07T02:35:37+01:00,60
|
||||
2022-01-07T02:36:37+01:00,60
|
||||
2022-01-07T02:37:37+01:00,60
|
||||
2022-01-07T02:38:37+01:00,60
|
||||
2022-01-07T02:39:37+01:00,59
|
||||
2022-01-07T02:40:37+01:00,59
|
||||
2022-01-07T02:41:37+01:00,59
|
||||
2022-01-07T02:42:37+01:00,59
|
||||
2022-01-07T02:43:37+01:00,58
|
||||
2022-01-07T02:44:37+01:00,58
|
||||
2022-01-07T02:45:37+01:00,58
|
||||
2022-01-07T02:46:37+01:00,58
|
||||
2022-01-07T02:47:37+01:00,58
|
||||
2022-01-07T02:48:37+01:00,57
|
||||
2022-01-07T02:49:37+01:00,57
|
||||
2022-01-07T02:50:37+01:00,57
|
||||
2022-01-07T02:51:37+01:00,57
|
||||
2022-01-07T02:52:37+01:00,57
|
||||
2022-01-07T02:53:37+01:00,56
|
||||
2022-01-07T02:54:37+01:00,56
|
||||
2022-01-07T02:55:37+01:00,56
|
||||
2022-01-07T02:56:37+01:00,56
|
||||
2022-01-07T02:57:37+01:00,56
|
||||
2022-01-07T02:58:37+01:00,55
|
||||
2022-01-07T02:59:37+01:00,55
|
||||
2022-01-07T03:00:37+01:00,55
|
||||
2022-01-07T03:01:37+01:00,55
|
||||
2022-01-07T03:02:37+01:00,55
|
||||
2022-01-07T03:03:37+01:00,54
|
||||
2022-01-07T03:04:37+01:00,54
|
||||
2022-01-07T03:05:37+01:00,54
|
||||
2022-01-07T03:06:37+01:00,54
|
||||
2022-01-07T03:07:37+01:00,54
|
||||
2022-01-07T03:08:37+01:00,53
|
||||
2022-01-07T03:09:37+01:00,53
|
||||
2022-01-07T03:10:37+01:00,53
|
||||
2022-01-07T03:11:37+01:00,53
|
||||
2022-01-07T03:12:37+01:00,52
|
||||
2022-01-07T03:13:37+01:00,52
|
||||
2022-01-07T03:14:37+01:00,52
|
||||
2022-01-07T03:15:37+01:00,52
|
||||
2022-01-07T03:16:37+01:00,52
|
||||
2022-01-07T03:17:37+01:00,52
|
||||
2022-01-07T03:18:37+01:00,52
|
||||
2022-01-07T03:19:37+01:00,51
|
||||
2022-01-07T03:20:37+01:00,51
|
||||
2022-01-07T03:21:37+01:00,51
|
||||
2022-01-07T03:22:37+01:00,51
|
||||
2022-01-07T03:23:37+01:00,51
|
||||
2022-01-07T03:24:37+01:00,51
|
||||
2022-01-07T03:25:37+01:00,50
|
||||
2022-01-07T03:26:37+01:00,50
|
||||
2022-01-07T03:27:37+01:00,50
|
||||
2022-01-07T03:28:37+01:00,50
|
||||
2022-01-07T03:29:37+01:00,50
|
||||
2022-01-07T03:30:37+01:00,49
|
||||
2022-01-07T03:31:37+01:00,49
|
||||
2022-01-07T03:32:37+01:00,49
|
||||
2022-01-07T03:33:37+01:00,49
|
||||
2022-01-07T03:34:37+01:00,48
|
||||
2022-01-07T03:35:38+01:00,48
|
||||
2022-01-07T03:36:38+01:00,48
|
||||
2022-01-07T03:37:38+01:00,48
|
||||
2022-01-07T03:38:38+01:00,48
|
||||
2022-01-07T03:39:38+01:00,48
|
||||
2022-01-07T03:40:38+01:00,47
|
||||
2022-01-07T03:41:38+01:00,47
|
||||
2022-01-07T03:42:38+01:00,47
|
||||
2022-01-07T03:43:38+01:00,47
|
||||
2022-01-07T03:44:38+01:00,47
|
||||
2022-01-07T03:45:38+01:00,47
|
||||
2022-01-07T03:46:38+01:00,47
|
||||
2022-01-07T03:47:38+01:00,47
|
||||
2022-01-07T03:48:38+01:00,46
|
||||
2022-01-07T03:49:38+01:00,46
|
||||
2022-01-07T03:50:38+01:00,46
|
||||
2022-01-07T03:51:38+01:00,46
|
||||
2022-01-07T03:52:38+01:00,45
|
||||
2022-01-07T03:53:38+01:00,45
|
||||
2022-01-07T03:54:38+01:00,45
|
||||
2022-01-07T03:55:38+01:00,45
|
||||
2022-01-07T03:56:38+01:00,45
|
||||
2022-01-07T03:57:38+01:00,45
|
||||
2022-01-07T03:58:38+01:00,45
|
||||
2022-01-07T03:59:38+01:00,44
|
||||
2022-01-07T04:00:38+01:00,44
|
||||
2022-01-07T04:01:38+01:00,44
|
||||
2022-01-07T04:02:38+01:00,44
|
||||
2022-01-07T04:03:38+01:00,44
|
||||
2022-01-07T04:04:38+01:00,44
|
||||
2022-01-07T04:05:38+01:00,44
|
||||
2022-01-07T04:06:38+01:00,43
|
||||
2022-01-07T04:07:38+01:00,43
|
||||
2022-01-07T04:08:38+01:00,43
|
||||
2022-01-07T04:09:38+01:00,43
|
||||
2022-01-07T04:10:38+01:00,42
|
||||
2022-01-07T04:11:38+01:00,42
|
||||
2022-01-07T04:12:38+01:00,42
|
||||
2022-01-07T04:13:38+01:00,42
|
||||
2022-01-07T04:14:38+01:00,42
|
||||
2022-01-07T04:15:38+01:00,41
|
||||
2022-01-07T04:16:38+01:00,41
|
||||
2022-01-07T04:17:38+01:00,41
|
||||
2022-01-07T04:18:38+01:00,41
|
||||
2022-01-07T04:19:38+01:00,41
|
||||
2022-01-07T04:20:38+01:00,40
|
||||
2022-01-07T04:21:38+01:00,40
|
||||
2022-01-07T04:22:38+01:00,40
|
||||
2022-01-07T04:23:38+01:00,40
|
||||
2022-01-07T04:24:38+01:00,40
|
||||
2022-01-07T04:25:38+01:00,40
|
||||
2022-01-07T04:26:38+01:00,39
|
||||
2022-01-07T04:27:38+01:00,39
|
||||
2022-01-07T04:28:38+01:00,39
|
||||
2022-01-07T04:29:38+01:00,39
|
||||
2022-01-07T04:30:38+01:00,39
|
||||
2022-01-07T04:31:38+01:00,39
|
||||
2022-01-07T04:32:38+01:00,39
|
||||
2022-01-07T04:33:38+01:00,39
|
||||
2022-01-07T04:34:38+01:00,38
|
||||
2022-01-07T04:35:38+01:00,38
|
||||
2022-01-07T04:36:38+01:00,38
|
||||
2022-01-07T04:37:38+01:00,38
|
||||
2022-01-07T04:38:38+01:00,38
|
||||
2022-01-07T04:39:38+01:00,38
|
||||
2022-01-07T04:40:39+01:00,38
|
||||
2022-01-07T04:41:39+01:00,37
|
||||
2022-01-07T04:42:39+01:00,37
|
||||
2022-01-07T04:43:39+01:00,37
|
||||
2022-01-07T04:44:39+01:00,37
|
||||
2022-01-07T04:45:39+01:00,37
|
||||
2022-01-07T04:46:39+01:00,37
|
||||
2022-01-07T04:47:39+01:00,36
|
||||
2022-01-07T04:48:39+01:00,36
|
||||
2022-01-07T04:49:39+01:00,36
|
||||
2022-01-07T04:50:39+01:00,36
|
||||
2022-01-07T04:51:39+01:00,36
|
||||
2022-01-07T04:52:39+01:00,35
|
||||
2022-01-07T04:53:39+01:00,35
|
||||
2022-01-07T04:54:39+01:00,35
|
||||
2022-01-07T04:55:39+01:00,35
|
||||
2022-01-07T04:56:39+01:00,35
|
||||
2022-01-07T04:57:39+01:00,35
|
||||
2022-01-07T04:58:39+01:00,35
|
||||
2022-01-07T04:59:39+01:00,35
|
||||
2022-01-07T05:00:39+01:00,34
|
||||
2022-01-07T05:01:39+01:00,34
|
||||
2022-01-07T05:02:39+01:00,34
|
||||
2022-01-07T05:03:39+01:00,34
|
||||
2022-01-07T05:04:39+01:00,34
|
||||
2022-01-07T05:05:39+01:00,34
|
||||
2022-01-07T05:06:39+01:00,34
|
||||
2022-01-07T05:07:39+01:00,34
|
||||
2022-01-07T05:08:39+01:00,33
|
||||
2022-01-07T05:09:39+01:00,33
|
||||
2022-01-07T05:10:39+01:00,33
|
||||
2022-01-07T05:11:39+01:00,33
|
||||
2022-01-07T05:12:39+01:00,33
|
||||
2022-01-07T05:13:39+01:00,33
|
||||
2022-01-07T05:14:39+01:00,33
|
||||
2022-01-07T05:15:39+01:00,32
|
||||
2022-01-07T05:16:39+01:00,32
|
||||
2022-01-07T05:17:39+01:00,32
|
||||
2022-01-07T05:18:39+01:00,32
|
||||
2022-01-07T05:19:39+01:00,32
|
||||
2022-01-07T05:20:39+01:00,32
|
||||
2022-01-07T05:21:39+01:00,31
|
||||
2022-01-07T05:22:39+01:00,31
|
||||
2022-01-07T05:23:39+01:00,31
|
||||
2022-01-07T05:24:39+01:00,31
|
||||
2022-01-07T05:25:39+01:00,30
|
||||
2022-01-07T05:26:39+01:00,30
|
||||
2022-01-07T05:27:39+01:00,30
|
||||
2022-01-07T05:28:39+01:00,30
|
||||
2022-01-07T05:29:39+01:00,30
|
||||
2022-01-07T05:30:39+01:00,30
|
||||
2022-01-07T05:31:39+01:00,29
|
||||
2022-01-07T05:32:39+01:00,29
|
||||
2022-01-07T05:33:39+01:00,29
|
||||
2022-01-07T05:34:39+01:00,29
|
||||
2022-01-07T05:35:39+01:00,29
|
||||
2022-01-07T05:36:39+01:00,29
|
||||
2022-01-07T05:37:39+01:00,29
|
||||
2022-01-07T05:38:39+01:00,29
|
||||
2022-01-07T05:39:39+01:00,29
|
||||
2022-01-07T05:40:39+01:00,29
|
||||
2022-01-07T05:41:39+01:00,29
|
||||
2022-01-07T05:42:39+01:00,29
|
||||
2022-01-07T05:43:39+01:00,29
|
||||
2022-01-07T05:44:39+01:00,28
|
||||
2022-01-07T05:45:39+01:00,28
|
||||
2022-01-07T05:46:39+01:00,28
|
||||
2022-01-07T05:47:39+01:00,28
|
||||
2022-01-07T05:48:40+01:00,28
|
||||
2022-01-07T05:49:40+01:00,28
|
||||
2022-01-07T05:50:40+01:00,28
|
||||
2022-01-07T05:51:40+01:00,28
|
||||
2022-01-07T05:52:40+01:00,28
|
||||
2022-01-07T05:53:40+01:00,28
|
||||
2022-01-07T05:54:40+01:00,28
|
||||
2022-01-07T05:55:40+01:00,28
|
||||
2022-01-07T05:56:40+01:00,28
|
||||
2022-01-07T05:57:40+01:00,27
|
||||
2022-01-07T05:58:40+01:00,27
|
||||
2022-01-07T05:59:40+01:00,27
|
||||
2022-01-07T06:00:40+01:00,27
|
||||
2022-01-07T06:01:40+01:00,27
|
||||
2022-01-07T06:02:40+01:00,27
|
||||
2022-01-07T06:03:40+01:00,27
|
||||
2022-01-07T06:04:40+01:00,27
|
||||
2022-01-07T06:05:40+01:00,27
|
||||
2022-01-07T06:06:40+01:00,27
|
||||
2022-01-07T06:07:40+01:00,26
|
||||
2022-01-07T06:08:40+01:00,26
|
||||
2022-01-07T06:09:40+01:00,26
|
||||
2022-01-07T06:10:40+01:00,26
|
||||
2022-01-07T06:11:40+01:00,25
|
||||
2022-01-07T06:12:40+01:00,25
|
||||
2022-01-07T06:13:40+01:00,25
|
||||
2022-01-07T06:14:40+01:00,25
|
||||
2022-01-07T06:15:40+01:00,25
|
||||
2022-01-07T06:16:40+01:00,25
|
||||
2022-01-07T06:17:40+01:00,25
|
||||
2022-01-07T06:18:40+01:00,24
|
||||
2022-01-07T06:19:40+01:00,24
|
||||
2022-01-07T06:20:40+01:00,24
|
||||
2022-01-07T06:21:40+01:00,24
|
||||
2022-01-07T06:22:40+01:00,24
|
||||
2022-01-07T06:23:40+01:00,24
|
||||
2022-01-07T06:24:40+01:00,24
|
||||
2022-01-07T06:25:40+01:00,24
|
||||
2022-01-07T06:26:40+01:00,24
|
||||
2022-01-07T06:27:40+01:00,24
|
||||
2022-01-07T06:28:40+01:00,24
|
||||
2022-01-07T06:29:40+01:00,24
|
||||
2022-01-07T06:30:40+01:00,24
|
||||
2022-01-07T06:31:40+01:00,24
|
||||
2022-01-07T06:32:40+01:00,24
|
||||
2022-01-07T06:33:40+01:00,23
|
||||
2022-01-07T06:34:40+01:00,23
|
||||
2022-01-07T06:35:40+01:00,23
|
||||
2022-01-07T06:36:40+01:00,23
|
||||
2022-01-07T06:37:40+01:00,23
|
||||
2022-01-07T06:38:40+01:00,23
|
||||
2022-01-07T06:39:40+01:00,23
|
||||
2022-01-07T06:40:40+01:00,23
|
||||
2022-01-07T06:41:40+01:00,23
|
||||
2022-01-07T06:42:40+01:00,22
|
||||
2022-01-07T06:43:40+01:00,22
|
||||
2022-01-07T06:44:40+01:00,22
|
||||
2022-01-07T06:45:40+01:00,22
|
||||
2022-01-07T06:46:40+01:00,22
|
||||
2022-01-07T06:47:40+01:00,22
|
||||
2022-01-07T06:48:40+01:00,22
|
||||
2022-01-07T06:49:40+01:00,22
|
||||
2022-01-07T06:50:40+01:00,22
|
||||
2022-01-07T06:51:40+01:00,22
|
||||
2022-01-07T06:52:40+01:00,21
|
||||
2022-01-07T06:53:40+01:00,21
|
||||
2022-01-07T06:54:40+01:00,21
|
||||
2022-01-07T06:55:40+01:00,21
|
||||
2022-01-07T06:56:40+01:00,21
|
||||
2022-01-07T06:57:40+01:00,21
|
||||
2022-01-07T06:58:40+01:00,21
|
||||
2022-01-07T06:59:40+01:00,21
|
||||
2022-01-07T07:00:40+01:00,21
|
||||
2022-01-07T07:01:40+01:00,21
|
||||
2022-01-07T07:02:40+01:00,21
|
||||
2022-01-07T07:03:40+01:00,21
|
||||
2022-01-07T07:04:40+01:00,21
|
||||
2022-01-07T07:05:40+01:00,21
|
||||
2022-01-07T07:06:40+01:00,20
|
||||
2022-01-07T07:07:40+01:00,20
|
||||
2022-01-07T07:08:41+01:00,20
|
||||
2022-01-07T07:09:41+01:00,20
|
||||
2022-01-07T07:10:41+01:00,20
|
||||
2022-01-07T07:11:41+01:00,20
|
||||
2022-01-07T07:12:41+01:00,20
|
||||
2022-01-07T07:13:41+01:00,20
|
||||
2022-01-07T07:14:41+01:00,19
|
||||
2022-01-07T07:15:41+01:00,19
|
||||
2022-01-07T07:16:41+01:00,19
|
||||
2022-01-07T07:17:41+01:00,19
|
||||
2022-01-07T07:18:41+01:00,19
|
||||
2022-01-07T07:19:41+01:00,19
|
||||
2022-01-07T07:20:41+01:00,19
|
||||
2022-01-07T07:21:41+01:00,18
|
||||
2022-01-07T07:22:41+01:00,18
|
||||
2022-01-07T07:23:41+01:00,18
|
||||
2022-01-07T07:24:41+01:00,18
|
||||
2022-01-07T07:25:41+01:00,18
|
||||
2022-01-07T07:26:41+01:00,18
|
||||
2022-01-07T07:27:41+01:00,18
|
||||
2022-01-07T07:28:41+01:00,17
|
||||
2022-01-07T07:29:41+01:00,17
|
||||
2022-01-07T07:30:41+01:00,17
|
||||
2022-01-07T07:31:41+01:00,17
|
||||
2022-01-07T07:32:41+01:00,17
|
||||
2022-01-07T07:33:41+01:00,16
|
||||
2022-01-07T07:34:41+01:00,16
|
||||
2022-01-07T07:35:41+01:00,16
|
||||
2022-01-07T07:36:41+01:00,16
|
||||
2022-01-07T07:37:41+01:00,16
|
||||
2022-01-07T07:38:41+01:00,16
|
||||
2022-01-07T07:39:41+01:00,16
|
||||
2022-01-07T07:40:41+01:00,16
|
||||
2022-01-07T07:41:41+01:00,16
|
||||
2022-01-07T07:42:41+01:00,16
|
||||
2022-01-07T07:43:41+01:00,16
|
||||
2022-01-07T07:44:41+01:00,15
|
||||
2022-01-07T07:45:41+01:00,15
|
||||
2022-01-07T07:46:41+01:00,15
|
||||
2022-01-07T07:47:41+01:00,15
|
||||
2022-01-07T07:48:41+01:00,15
|
||||
2022-01-07T07:49:41+01:00,15
|
||||
2022-01-07T07:50:41+01:00,15
|
||||
2022-01-07T07:51:41+01:00,15
|
||||
2022-01-07T07:52:41+01:00,15
|
||||
2022-01-07T07:53:41+01:00,15
|
||||
2022-01-07T07:54:41+01:00,15
|
||||
2022-01-07T07:55:41+01:00,14
|
||||
2022-01-07T07:56:41+01:00,14
|
||||
2022-01-07T07:57:41+01:00,14
|
||||
2022-01-07T07:58:41+01:00,14
|
||||
2022-01-07T07:59:41+01:00,14
|
||||
2022-01-07T08:00:41+01:00,14
|
||||
2022-01-07T08:01:41+01:00,14
|
||||
2022-01-07T08:02:41+01:00,14
|
||||
2022-01-07T08:03:41+01:00,14
|
||||
2022-01-07T08:04:41+01:00,14
|
||||
2022-01-07T08:05:41+01:00,13
|
||||
2022-01-07T08:06:41+01:00,13
|
||||
2022-01-07T08:07:41+01:00,13
|
||||
2022-01-07T08:08:41+01:00,13
|
||||
2022-01-07T08:09:41+01:00,13
|
||||
2022-01-07T08:10:41+01:00,13
|
||||
2022-01-07T08:11:41+01:00,13
|
||||
2022-01-07T08:12:41+01:00,13
|
||||
2022-01-07T08:13:41+01:00,13
|
||||
2022-01-07T08:14:41+01:00,12
|
||||
2022-01-07T08:15:41+01:00,12
|
||||
2022-01-07T08:16:41+01:00,12
|
||||
2022-01-07T08:17:41+01:00,12
|
||||
2022-01-07T08:18:41+01:00,11
|
||||
2022-01-07T08:19:41+01:00,11
|
||||
2022-01-07T08:20:41+01:00,11
|
||||
2022-01-07T08:21:41+01:00,11
|
||||
2022-01-07T08:22:41+01:00,10
|
||||
2022-01-07T08:23:41+01:00,10
|
||||
2022-01-07T08:24:41+01:00,10
|
||||
2022-01-07T08:25:41+01:00,10
|
||||
2022-01-07T08:26:41+01:00,10
|
||||
2022-01-07T08:27:41+01:00,9
|
||||
2022-01-07T08:28:42+01:00,9
|
||||
2022-01-07T08:29:42+01:00,9
|
||||
2022-01-07T08:30:42+01:00,9
|
||||
2022-01-07T08:31:42+01:00,9
|
||||
2022-01-07T08:32:42+01:00,8
|
||||
2022-01-07T08:33:42+01:00,8
|
||||
2022-01-07T08:34:42+01:00,8
|
||||
2022-01-07T08:35:42+01:00,8
|
||||
2022-01-07T08:36:42+01:00,8
|
||||
2022-01-07T08:37:42+01:00,7
|
||||
2022-01-07T08:38:42+01:00,7
|
||||
2022-01-07T08:39:42+01:00,7
|
||||
2022-01-07T08:40:42+01:00,7
|
||||
2022-01-07T08:41:42+01:00,7
|
||||
2022-01-07T08:42:42+01:00,7
|
||||
2022-01-07T08:43:42+01:00,7
|
||||
2022-01-07T08:44:42+01:00,7
|
||||
2022-01-07T08:45:42+01:00,7
|
||||
2022-01-07T08:46:42+01:00,7
|
||||
2022-01-07T08:47:42+01:00,7
|
||||
2022-01-07T08:48:42+01:00,6
|
||||
2022-01-07T08:49:42+01:00,6
|
||||
2022-01-07T08:50:42+01:00,6
|
||||
2022-01-07T08:51:42+01:00,6
|
||||
2022-01-07T08:52:42+01:00,6
|
||||
2022-01-07T08:53:42+01:00,6
|
||||
2022-01-07T08:54:42+01:00,6
|
||||
2022-01-07T08:55:42+01:00,6
|
||||
2022-01-07T08:56:42+01:00,6
|
||||
2022-01-07T08:57:42+01:00,6
|
||||
2022-01-07T08:58:42+01:00,6
|
||||
2022-01-07T08:59:42+01:00,5
|
||||
2022-01-07T09:00:42+01:00,5
|
||||
2022-01-07T09:01:42+01:00,5
|
||||
2022-01-07T09:02:42+01:00,5
|
||||
2022-01-07T09:03:42+01:00,5
|
||||
2022-01-07T09:04:42+01:00,5
|
||||
2022-01-07T09:05:42+01:00,5
|
||||
2022-01-07T09:06:42+01:00,5
|
||||
2022-01-07T09:07:42+01:00,5
|
||||
2022-01-07T09:08:42+01:00,5
|
||||
2022-01-07T09:09:42+01:00,5
|
||||
2022-01-07T09:10:42+01:00,5
|
||||
2022-01-07T09:11:42+01:00,4
|
||||
2022-01-07T09:12:42+01:00,4
|
||||
2022-01-07T09:13:42+01:00,4
|
||||
2022-01-07T09:14:42+01:00,4
|
||||
2022-01-07T09:15:42+01:00,4
|
||||
2022-01-07T09:16:42+01:00,4
|
||||
2022-01-07T09:17:42+01:00,4
|
||||
2022-01-07T09:18:42+01:00,4
|
||||
2022-01-07T09:19:42+01:00,4
|
||||
2022-01-07T09:20:42+01:00,3
|
||||
2022-01-07T09:21:42+01:00,3
|
||||
2022-01-07T09:22:42+01:00,3
|
||||
2022-01-07T09:23:42+01:00,3
|
||||
2022-01-07T09:24:42+01:00,3
|
||||
2022-01-07T09:25:42+01:00,2
|
||||
2022-01-07T09:26:42+01:00,2
|
||||
2022-01-07T09:27:42+01:00,2
|
||||
2022-01-07T09:28:42+01:00,2
|
||||
2022-01-07T09:29:42+01:00,2
|
||||
2022-01-07T09:30:42+01:00,2
|
||||
2022-01-07T09:31:42+01:00,2
|
||||
2022-01-07T09:32:42+01:00,2
|
||||
2022-01-07T09:33:42+01:00,2
|
||||
2022-01-07T09:34:42+01:00,2
|
||||
2022-01-07T09:35:42+01:00,2
|
||||
2022-01-07T09:36:42+01:00,1
|
||||
2022-01-07T09:37:42+01:00,1
|
||||
2022-01-07T09:38:42+01:00,1
|
||||
2022-01-07T09:39:42+01:00,1
|
||||
2022-01-07T09:40:42+01:00,1
|
||||
2022-01-07T09:41:43+01:00,1
|
||||
2022-01-07T09:42:43+01:00,1
|
||||
2022-01-07T09:43:43+01:00,1
|
||||
2022-01-07T09:44:43+01:00,1
|
||||
2022-01-07T09:45:43+01:00,1
|
||||
2022-01-07T09:46:43+01:00,1
|
||||
2022-01-07T09:47:43+01:00,1
|
||||
2022-01-07T09:48:43+01:00,1
|
||||
2022-01-07T09:49:43+01:00,1
|
||||
2022-01-07T09:50:43+01:00,1
|
||||
2022-01-07T09:51:43+01:00,1
|
||||
2022-01-07T09:52:43+01:00,0
|
||||
2022-01-07T09:53:43+01:00,0
|
||||
2022-01-07T09:54:43+01:00,0
|
||||
2022-01-07T09:55:43+01:00,0
|
||||
2022-01-07T09:56:43+01:00,0
|
||||
2022-01-07T09:57:43+01:00,0
|
||||
2022-01-07T09:58:43+01:00,0
|
||||
2022-01-07T09:59:43+01:00,0
|
||||
2022-01-07T10:00:43+01:00,0
|
||||
2022-01-07T10:01:43+01:00,0
|
||||
2022-01-07T10:02:43+01:00,0
|
||||
2022-01-07T10:03:43+01:00,0
|
||||
2022-01-07T10:04:43+01:00,0
|
||||
2022-01-07T10:05:43+01:00,0
|
||||
2022-01-07T10:06:43+01:00,0
|
||||
2022-01-07T10:07:43+01:00,0
|
|
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -0,0 +1,19 @@
|
|||
#lang racket
|
||||
|
||||
(require plot)
|
||||
(require 2htdp/batch-io)
|
||||
|
||||
(define percentages
|
||||
(read-csv-file/rows "battery-rundown-log.csv"
|
||||
(lambda (row) (string->number (second row)))))
|
||||
|
||||
(plot (lines (for/list [(p percentages)
|
||||
(i (in-naturals))]
|
||||
(vector (/ i 60.0) p))
|
||||
;#:label "PinePhone battery discharge curve"
|
||||
)
|
||||
#:width 640
|
||||
#:title "PinePhone battery discharge curve"
|
||||
#:x-label "Hours elapsed"
|
||||
#:y-label "Percentage capacity remaining"
|
||||
)
|
|
@ -0,0 +1,393 @@
|
|||
/*
|
||||
* Voice call audio setup tool
|
||||
*
|
||||
* Copyright (C) 2020 Ondřej Jirman <megous@megous.com>
|
||||
*
|
||||
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* 2020-09-29: Updated for the new Samuel's digital codec driver
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <inttypes.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <sound/asound.h>
|
||||
#include <sound/tlv.h>
|
||||
|
||||
#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
|
||||
|
||||
void syscall_error(int is_err, const char* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (!is_err)
|
||||
return;
|
||||
|
||||
printf("ERROR: ");
|
||||
va_start(ap, fmt);
|
||||
vprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
printf(": %s\n", strerror(errno));
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void error(const char* fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
printf("ERROR: ");
|
||||
va_start(ap, fmt);
|
||||
vprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
printf("\n");
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
struct audio_control_state {
|
||||
char name[128];
|
||||
union {
|
||||
int64_t i[4];
|
||||
const char* e[4];
|
||||
} vals;
|
||||
bool used;
|
||||
};
|
||||
|
||||
static bool audio_restore_state(struct audio_control_state* controls, int n_controls)
|
||||
{
|
||||
int fd;
|
||||
int ret;
|
||||
|
||||
fd = open("/dev/snd/controlC0", O_CLOEXEC | O_NONBLOCK);
|
||||
if (fd < 0)
|
||||
error("failed to open card\n");
|
||||
|
||||
struct snd_ctl_elem_list el = {
|
||||
.offset = 0,
|
||||
.space = 0,
|
||||
};
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_LIST, &el);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_LIST failed");
|
||||
|
||||
struct snd_ctl_elem_id ids[el.count];
|
||||
el.pids = ids;
|
||||
el.space = el.count;
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_LIST, &el);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_LIST failed");
|
||||
|
||||
for (int i = 0; i < el.used; i++) {
|
||||
struct snd_ctl_elem_info inf = {
|
||||
.id = ids[i],
|
||||
};
|
||||
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_INFO, &inf);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_INFO failed");
|
||||
|
||||
if ((inf.access & SNDRV_CTL_ELEM_ACCESS_READ) && (inf.access & SNDRV_CTL_ELEM_ACCESS_WRITE)) {
|
||||
struct snd_ctl_elem_value val = {
|
||||
.id = ids[i],
|
||||
};
|
||||
int64_t cval = 0;
|
||||
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_READ, &val);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_READ failed");
|
||||
|
||||
struct audio_control_state* cs = NULL;
|
||||
for (int j = 0; j < n_controls; j++) {
|
||||
if (!strcmp(controls[j].name, ids[i].name)) {
|
||||
cs = &controls[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cs) {
|
||||
printf("Control \"%s\" si not defined in the controls state\n", ids[i].name);
|
||||
continue;
|
||||
}
|
||||
|
||||
cs->used = 1;
|
||||
|
||||
// check if value needs changing
|
||||
|
||||
switch (inf.type) {
|
||||
case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
|
||||
case SNDRV_CTL_ELEM_TYPE_INTEGER:
|
||||
for (int j = 0; j < inf.count; j++) {
|
||||
if (cs->vals.i[j] != val.value.integer.value[j]) {
|
||||
// update
|
||||
//printf("%s <=[%d]= %"PRIi64"\n", ids[i].name, j, cs->vals.i[j]);
|
||||
|
||||
val.value.integer.value[j] = cs->vals.i[j];
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &val);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_WRITE failed");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case SNDRV_CTL_ELEM_TYPE_INTEGER64:
|
||||
for (int j = 0; j < inf.count; j++) {
|
||||
if (cs->vals.i[j] != val.value.integer64.value[j]) {
|
||||
// update
|
||||
//printf("%s <=[%d]= %"PRIi64"\n", ids[i].name, j, cs->vals.i[j]);
|
||||
|
||||
val.value.integer64.value[j] = cs->vals.i[j];
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &val);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_WRITE failed");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SNDRV_CTL_ELEM_TYPE_ENUMERATED: {
|
||||
for (int k = 0; k < inf.count; k++) {
|
||||
int eval = -1;
|
||||
for (int j = 0; j < inf.value.enumerated.items; j++) {
|
||||
inf.value.enumerated.item = j;
|
||||
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_INFO, &inf);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_INFO failed");
|
||||
|
||||
if (!strcmp(cs->vals.e[k], inf.value.enumerated.name)) {
|
||||
eval = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (eval < 0)
|
||||
error("enum value %s not found\n", cs->vals.e[k]);
|
||||
|
||||
if (eval != val.value.enumerated.item[k]) {
|
||||
// update
|
||||
//printf("%s <=%d= %s\n", ids[i].name, k, cs->vals.e[k]);
|
||||
|
||||
val.value.enumerated.item[k] = eval;
|
||||
ret = ioctl(fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &val);
|
||||
syscall_error(ret < 0, "SNDRV_CTL_IOCTL_ELEM_WRITE failed");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < n_controls; j++)
|
||||
if (!controls[j].used)
|
||||
printf("Control \"%s\" is defined in state but not present on the card\n", controls[j].name);
|
||||
|
||||
close(fd);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct audio_setup {
|
||||
bool mic_on;
|
||||
bool spk_on;
|
||||
bool hp_on;
|
||||
bool ear_on;
|
||||
bool hpmic_on;
|
||||
|
||||
// when sending audio to modem from AIF1 R, also play that back
|
||||
// to me locally (just like AIF1 L plays just to me)
|
||||
//
|
||||
// this is to monitor what SW is playing to the modem (so that
|
||||
// I can hear my robocaller talking)
|
||||
bool modem_playback_monitor;
|
||||
|
||||
// enable modem routes to DAC/from ADC (spk/mic)
|
||||
// digital paths to AIF1 are always on
|
||||
bool to_modem_on;
|
||||
bool from_modem_on;
|
||||
|
||||
// shut off/enable all digital paths to the modem:
|
||||
// keep this off until the call starts, then turn it on
|
||||
bool dai2_en;
|
||||
|
||||
int mic_gain;
|
||||
int hpmic_gain;
|
||||
int spk_vol;
|
||||
int ear_vol;
|
||||
int hp_vol;
|
||||
};
|
||||
|
||||
static void audio_set_controls(struct audio_setup* s)
|
||||
{
|
||||
struct audio_control_state controls[] = {
|
||||
//
|
||||
// Analog input:
|
||||
//
|
||||
|
||||
// Mic 1 (daughterboard)
|
||||
{ .name = "Mic1 Boost Volume", .vals.i = { s->mic_gain } },
|
||||
|
||||
// Mic 2 (headphones)
|
||||
{ .name = "Mic2 Boost Volume", .vals.i = { s->hpmic_gain } },
|
||||
|
||||
// Line in (unused on PP)
|
||||
// no controls yet
|
||||
|
||||
// Input mixers before ADC
|
||||
|
||||
{ .name = "Mic1 Capture Switch", .vals.i = { !!s->mic_on, !!s->mic_on } },
|
||||
{ .name = "Mic2 Capture Switch", .vals.i = { !!s->hpmic_on, !!s->hpmic_on } },
|
||||
{ .name = "Line In Capture Switch", .vals.i = { 0, 0 } }, // Out Mix -> In Mix
|
||||
{ .name = "Mixer Capture Switch", .vals.i = { 0, 0 } },
|
||||
{ .name = "Mixer Reversed Capture Switch", .vals.i = { 0, 0 } },
|
||||
|
||||
// ADC
|
||||
{ .name = "ADC Gain Capture Volume", .vals.i = { 0 } },
|
||||
{ .name = "ADC Capture Volume", .vals.i = { 160, 160 } }, // digital gain
|
||||
|
||||
//
|
||||
// Digital paths:
|
||||
//
|
||||
|
||||
// AIF1 (SoC)
|
||||
|
||||
// AIF1 slot0 capture mixer sources
|
||||
{ .name = "AIF1 Data Digital ADC Capture Switch", .vals.i = { 1, 0 } },
|
||||
{ .name = "AIF1 Slot 0 Digital ADC Capture Switch", .vals.i = { 0, 0 } },
|
||||
{ .name = "AIF2 Digital ADC Capture Switch", .vals.i = { 0, 1 } },
|
||||
{ .name = "AIF2 Inv Digital ADC Capture Switch", .vals.i = { 0, 0 } }, //XXX: capture right from the left AIF2?
|
||||
|
||||
// AIF1 slot0 capture/playback mono mixing/digital volume
|
||||
{ .name = "AIF1 AD0 Capture Volume", .vals.i = { 160, 160 } },
|
||||
{ .name = "AIF1 AD0 Stereo Capture Route", .vals.e = { "Stereo", "Stereo" } },
|
||||
{ .name = "AIF1 DA0 Playback Volume", .vals.i = { 160, 160 } },
|
||||
{ .name = "AIF1 DA0 Stereo Playback Route", .vals.e = { "Stereo", "Stereo" } },
|
||||
|
||||
// AIF2 (modem)
|
||||
|
||||
// AIF2 capture mixer sources
|
||||
{ .name = "AIF2 ADC Mixer ADC Capture Switch", .vals.i = { !!s->to_modem_on && !!s->dai2_en, 0 } }, // from adc/mic
|
||||
{ .name = "AIF2 ADC Mixer AIF1 DA0 Capture Switch", .vals.i = { 0, 1 } }, // from aif1 R
|
||||
{ .name = "AIF2 ADC Mixer AIF2 DAC Rev Capture Switch", .vals.i = { 0, 0 } },
|
||||
|
||||
// AIF2 capture/playback mono mixing/digital volume
|
||||
{ .name = "AIF2 ADC Capture Volume", .vals.i = { 160, 160 } },
|
||||
{ .name = "AIF2 DAC Playback Volume", .vals.i = { 160, 160 } },
|
||||
{ .name = "AIF2 ADC Stereo Capture Route", .vals.e = { "Mix Mono", "Mix Mono" } }, // we mix because we're sending two channels (from mic and AIF1 R)
|
||||
{ .name = "AIF2 DAC Stereo Playback Route", .vals.e = { "Sum Mono", "Sum Mono" } }, // we sum because modem is sending a single channel
|
||||
|
||||
// AIF3 (bluetooth)
|
||||
|
||||
{ .name = "AIF3 ADC Source Capture Route", .vals.e = { "None" } },
|
||||
{ .name = "AIF2 DAC Source Playback Route", .vals.e = { "AIF2" } },
|
||||
|
||||
// DAC
|
||||
|
||||
// DAC input mixers (sources from ADC, and AIF1/2)
|
||||
{ .name = "ADC Digital DAC Playback Switch", .vals.i = { 0, 0 } }, // we don't play our mic to ourselves
|
||||
{ .name = "AIF1 Slot 0 Digital DAC Playback Switch", .vals.i = { 1, !!s->modem_playback_monitor } },
|
||||
{ .name = "AIF2 Digital DAC Playback Switch", .vals.i = { 0, !!s->dai2_en && !!s->from_modem_on } },
|
||||
|
||||
//
|
||||
// Analog output:
|
||||
//
|
||||
|
||||
// Output mixer after DAC
|
||||
|
||||
{ .name = "DAC Playback Switch", .vals.i = { 1, 1 } },
|
||||
{ .name = "DAC Reversed Playback Switch", .vals.i = { 1, 1 } },
|
||||
{ .name = "DAC Playback Volume", .vals.i = { 160, 160 } },
|
||||
{ .name = "Mic1 Playback Switch", .vals.i = { 0, 0 } },
|
||||
{ .name = "Mic1 Playback Volume", .vals.i = { 0 } },
|
||||
{ .name = "Mic2 Playback Switch", .vals.i = { 0, 0 } },
|
||||
{ .name = "Mic2 Playback Volume", .vals.i = { 0 } },
|
||||
{ .name = "Line In Playback Switch", .vals.i = { 0, 0 } },
|
||||
{ .name = "Line In Playback Volume", .vals.i = { 0 } },
|
||||
|
||||
// Outputs
|
||||
|
||||
{ .name = "Earpiece Source Playback Route", .vals.e = { "Left Mixer" } },
|
||||
{ .name = "Earpiece Playback Switch", .vals.i = { !!s->ear_on } },
|
||||
{ .name = "Earpiece Playback Volume", .vals.i = { s->ear_vol } },
|
||||
|
||||
{ .name = "Headphone Source Playback Route", .vals.e = { "Mixer", "Mixer" } },
|
||||
{ .name = "Headphone Playback Switch", .vals.i = { !!s->hp_on, !!s->hp_on } },
|
||||
{ .name = "Headphone Playback Volume", .vals.i = { s->hp_vol } },
|
||||
|
||||
// Loudspeaker
|
||||
{ .name = "Line Out Source Playback Route", .vals.e = { "Mono Differential", "Mono Differential" } },
|
||||
{ .name = "Line Out Playback Switch", .vals.i = { !!s->spk_on, !!s->spk_on } },
|
||||
{ .name = "Line Out Playback Volume", .vals.i = { s->spk_vol } },
|
||||
};
|
||||
|
||||
audio_restore_state(controls, ARRAY_SIZE(controls));
|
||||
}
|
||||
|
||||
static struct audio_setup audio_setup = {
|
||||
.mic_on = false,
|
||||
.ear_on = false,
|
||||
.spk_on = false,
|
||||
.hp_on = false,
|
||||
.hpmic_on = false,
|
||||
|
||||
.from_modem_on = true,
|
||||
.to_modem_on = true,
|
||||
.modem_playback_monitor = false,
|
||||
|
||||
.dai2_en = false,
|
||||
|
||||
.hp_vol = 15,
|
||||
.spk_vol = 15,
|
||||
.ear_vol = 31,
|
||||
.mic_gain = 1,
|
||||
.hpmic_gain = 1,
|
||||
};
|
||||
|
||||
int main(int ac, char* av[])
|
||||
{
|
||||
int opt;
|
||||
|
||||
while ((opt = getopt(ac, av, "smhle2")) != -1) {
|
||||
switch (opt) {
|
||||
case 's':
|
||||
audio_setup.spk_on = 1;
|
||||
break;
|
||||
case 'm':
|
||||
audio_setup.mic_on = 1;
|
||||
break;
|
||||
case 'h':
|
||||
audio_setup.hp_on = 1;
|
||||
break;
|
||||
case 'l':
|
||||
audio_setup.hpmic_on = 1;
|
||||
break;
|
||||
case 'e':
|
||||
audio_setup.ear_on = 1;
|
||||
break;
|
||||
case '2':
|
||||
audio_setup.dai2_en = 1;
|
||||
break;
|
||||
default: /* '?' */
|
||||
fprintf(stderr, "Usage: %s [-s] [-m] [-h] [-l] [-e] [-2]\n", av[0]);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
audio_set_controls(&audio_setup);
|
||||
return 0;
|
||||
}
|
Binary file not shown.
|
@ -0,0 +1,133 @@
|
|||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="referrer" content="no-referrer"><link rel="stylesheet" href="EG25-G%20reverse%20engineering_files/style.css"><title>EG25-G reverse engineering</title></head><body><header><div class="title"><a href="https://xnux.eu/index.html">xnux.eu</a> - <a href="https://xnux.eu/map.html">site map</a> - <a href="https://xnux.eu/news.html">news</a></div></header><main><section><h1 id="toc-eg25-g-reverse-engineering">EG25-G reverse engineering</h1><h2 id="toc-quectel-daemon">quectel_daemon</h2><ul><li>makes
|
||||
<code>/sys/class/gpio/gpio1018/direction</code> an output</li><li>monitors
|
||||
<code>/sys/devices/virtual/android_usb/android0/state</code> and
|
||||
<code>/sys/devices/virtual/android_usb/android0/usb_sleep</code> and passes the
|
||||
state to modem via qmi</li><li>monitors <code>/run/gpio_data</code> and updates
|
||||
<code>/sys/class/gpio/gpio1018/direction</code> with
|
||||
<code>high</code>/<code>low</code></li><li>opens various pcm devices
|
||||
(voice_pcm_service)</li><li>handles call ringing and voice audio
|
||||
configuration</li><li>touches <code>/tmp/quec_daemon_rdy</code></li><li>talks
|
||||
via <code>/run/voc_svr</code> in the main loop</li></ul><h2 id="toc-quectel-monitor-daemon">quectel_monitor_daemon</h2><ul><li>if
|
||||
<code>/data/ModemRestartSystem</code> exists it writes <code>SYSTEM</code> to
|
||||
<code>/sys/devices/4080000.qcom,mss/subsys1/restart_level</code>
|
||||
or <code>/sys/devices/4080000.qcom,mss/subsys0/restart_level</code></li><li>if
|
||||
<code>/data/ModemRestartRelated</code> exists it writes <code>RELATED</code> to
|
||||
<code>/sys/devices/4080000.qcom,mss/subsys1/restart_level</code>
|
||||
or <code>/sys/devices/4080000.qcom,mss/subsys0/restart_level</code></li><li>then
|
||||
it monitors <code>/sys/devices/4080000.qcom,mss/subsys1/quec_state</code> and if
|
||||
it is changed to non-0 it restarts various daemons:<ul><li>system(„killall
|
||||
atfwd_daemon“);</li><li>system(„killall
|
||||
quectel_daemon“);</li><li>system(„killall
|
||||
alsaucm_test“);</li></ul></li></ul><h2 id="toc-quectel-pcm-daemon">quectel_pcm_daemon</h2><ul><li>waits for pcm codec
|
||||
to probe</li><li>reads <code>/data/quec/conf/auxpcm.conf</code> (written by
|
||||
<code>atfwd_daemon</code> via AT+QDAI command)</li><li>based on values therein
|
||||
it:<ul><li>loads various kernel modules for supported
|
||||
external codecs<ul><li>eg.:<p>system(„echo \"nau8814-codec.2–001a\“
|
||||
> /sys/devices/soc:sound/codec_name");</p><p>system(„echo
|
||||
\"nau8814-aif1\“ >
|
||||
/sys/devices/soc:sound/rx_dai_name");</p><p>system(„echo
|
||||
\"nau8814-aif1\“ >
|
||||
/sys/devices/soc:sound/tx_dai_name");</p><p>system(„insmod
|
||||
/usr/lib/modules/3.18.44/kernel/sound/soc/codecs/snd-soc-nau8814.ko“);</p></li></ul></li><li>configures
|
||||
PCM interface, like:<p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/mode“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/sync“</p><p>„echo %d >
|
||||
/sys/devices/soc:sound/pcm_mode_select“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/frame“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/quant“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/data“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/rate“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/num_slots“</p><p>„echo %d >
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/slot_mapping“</p><p>„echo %d >
|
||||
/sys/devices/soc:sound/quec_auxpcm_rate“</p></li></ul></li></ul><h2 id="toc-quectel-psm-aware">quectel_psm_aware</h2><ul><li>creates fifo
|
||||
<code>/run/psm_aware_cmd</code></li><li>reads this fifo and issues various
|
||||
<code>psm_*</code> calls to a library</li><li>some power saving
|
||||
stuff</li><li>fifo is written from <code>atfwd_daemon</code> via
|
||||
<code>AT+QPSM="fifo string"</code> command</li></ul><h2 id="toc-quectel-tts-service">quectel_tts_service</h2><ul><li>binds to
|
||||
127.0.0.1:17824</li><li>accepts connections and plays TTS audio from the issued
|
||||
command</li></ul><h2 id="toc-sendcal">sendcal</h2><ul><li>creates
|
||||
<code>/run/sendcal</code> device</li><li>does some basic processing</li></ul><h2 id="toc-subsystem-ramdump">subsystem_ramdump</h2><ul><li>allow to dump ram to
|
||||
a file in /data</li></ul><h2 id="toc-time-daemon">time_daemon</h2><ul><li>reads
|
||||
RTC time from modem over qmi and updates the ARM CPU time</li></ul><h2 id="toc-uim-test-client">uim_test_client</h2><ul><li>sim testing console
|
||||
client</li></ul><h2 id="toc-quectel-uart-ddp">quectel-uart-ddp</h2><ul><li>reads
|
||||
<code>/data/quec/conf/dynamic_console</code></li><li>passes data between debug
|
||||
uart port and <code>/dev/smd9</code></li></ul><h2 id="toc-quectel-thermal">quectel-thermal</h2><ul><li>monitors
|
||||
<code>/sys/devices/virtual/thermal/thermal_zone%d/temp</code></li><li>updates
|
||||
SAR and RF signal strength based on temperature via QMI</li></ul><h2 id="toc-quectel-smd-atcmd">quectel-smd-atcmd</h2><ul><li>probably supposed to
|
||||
forward commands from <code>/dev/ttyGS0</code>
|
||||
to <code>/dev/smd7</code></li><li>does nothing, just prints some crap in a
|
||||
weird way to console/kmsg</li><li>Sundy still didn't learn stdio so is using
|
||||
system(„echo %s > /dev/kmsg“); instead of fprintf</li></ul><h2 id="toc-quectel-remotefs-service">quectel-remotefs-service</h2><ul><li>opens
|
||||
<code>/dev/smd8</code></li><li>waits for commands from the modem over
|
||||
<code>/dev/smd8</code> and performs basic VFS operations, like
|
||||
open/close/read/write/seek, etc.</li><li>implements reaction to OMA DM push
|
||||
message by executing <code>/data/ipth_dme</code> binary, which implements vendor
|
||||
(Verizon, AT&T) specific remote FOTA/system config updates<ul><li>only if
|
||||
<code>fota_ip_a</code> or <code>fota_ip_v</code> exist in
|
||||
<code>/data/fota</code> directory</li></ul></li></ul><h2 id="toc-quectel-gps-handle">quectel-gps-handle</h2><ul><li>Sundy strikes again,
|
||||
this time using stdio in addition to system() calls for debug
|
||||
output!</li><li>writes 0 to
|
||||
<code>/data/quec/conf/gps_outport_flag</code></li><li>opens
|
||||
<code>/dev/smd7</code> (modem's GPS data shmem device)</li><li>reads a number
|
||||
from <code>/data/quec/conf/gps_outport_flag</code><ul><li>uses
|
||||
<code>/dev/ttyHSL0</code> or <code>/dev/ttyGS0</code> for NMEA output based on
|
||||
the number</li></ul></li><li>forwards data from <code>/dev/sdm7</code> to one
|
||||
of the serial ports</li><li>monitors
|
||||
<code>/sys/class/android_usb/android0/state</code> and
|
||||
<code>/sys/class/android_usb/f_serial/is_connected_flag</code> and presumably
|
||||
turns off GPS output if USB is not ‚CONNECTED‘</li></ul><h2 id="toc-quec-wifi-bridge">quec_wifi_bridge</h2><ul><li>opens
|
||||
<code>/data/wifi_bridge_in_pipe</code> and
|
||||
<code>/data/wifi_bridge_out_pipe</code></li><li>listens on
|
||||
‚0.0.0.0:5555‘</li><li>forwards data from connections to
|
||||
<code>/data/wifi_bridge_in_pipe</code> as is</li><li>forwards data from
|
||||
<code>/data/wifi_bridge_out_pipe</code> to the last accepted
|
||||
connection</li></ul><h2 id="toc-ql-usbcfg">ql_usbcfg</h2><ul><li>loads USB
|
||||
configuration for recovery mode</li></ul><h2 id="toc-ql-manager-server-ql-manager-cli">ql_manager_server /
|
||||
ql_manager_cli</h2><ul><li>some WWAN/WIFI management server + cli
|
||||
client</li><li>quectel code</li></ul><p>…</p><h1 id="toc-files">Files</h1><h2 id="toc-tmp-urc-sock">/tmp/.urc_sock</h2><ul><li>Unix socket that can be used to
|
||||
send URCs from linux userspace</li></ul><h1 id="toc-un-der-documented-at-commands">Un(der)-documented AT commands</h1><h2 id="toc-at-qprint-1">AT+QPRINT=1</h2><ul><li>(does literally
|
||||
<code>cat /proc/kmsg >/dev/ttyGS0 &</code>), you can get dmesg output
|
||||
from <code>cat /dev/ttyUSB1</code> on the A64 side</li></ul><h2 id="toc-at-qprint-0">AT+QPRINT=0</h2><ul><li>does literally
|
||||
<code>killall cat</code></li></ul><h2 id="toc-at-qfastboot">AT+QFASTBOOT</h2><ul><li>reboots the modem in fastboot
|
||||
mode</li></ul><h2 id="toc-at-qcfg-modemrstlevel-val">AT+QCFG=„modemrstlevel“,<code><val></code></h2><ul><li>/sys/bus/msm_subsys/devices/subsys1/restart_level</li></ul><p>val
|
||||
== 0:</p><ul><li>echo SYSTEM >
|
||||
/sys/bus/msm_subsys/devices/subsys0/restart_level</li><li>echo 00 >
|
||||
/data/ModemRestartSystem</li><li>rm -rf
|
||||
/data/ModemRestartRelated</li></ul><p>val == 1:</p><ul><li>echo RELATED >
|
||||
/sys/bus/msm_subsys/devices/subsys0/restart_level</li><li>echo 11 >
|
||||
/data/ModemRestartRelated</li><li>rm -rf
|
||||
/data/ModemRestartSystem</li></ul><h2 id="toc-at-qcfg-aprstlevel-val">AT+QCFG=„aprstlevel“,<code><val></code></h2><ul><li>echo
|
||||
<code>val</code> >
|
||||
/sys/bus/msm_subsys/devices/subsys0/system_reset_mode</li></ul><h2 id="toc-at-qcfg-usbid">AT+QCFG=„usbid“</h2><ul><li>handled by
|
||||
quectel-manager (see ql_mgmt_client_open C api)</li></ul><h2 id="toc-at-qcfg-usbee">AT+QCFG=„usbee“</h2><ul><li>handled by
|
||||
quectel-manager (see ql_mgmt_client_open C api)</li></ul><h2 id="toc-at-qcfg-usbcfg">AT+QCFG=„usbcfg“</h2><ul><li>handled by
|
||||
quectel-manager (see ql_mgmt_client_open C api)</li></ul><h2 id="toc-at-qcfg-usbnet">AT+QCFG=„usbnet“</h2><ul><li>handled by
|
||||
quectel-manager (see ql_mgmt_client_open C api)</li></ul><h2 id="toc-at-qcfg-pcmclk">AT+QCFG=„pcmclk“</h2><ul><li>reads/writes
|
||||
/sys/devices/soc:qcom,msm-sec-auxpcm/enable_clk</li><li>sets some params on
|
||||
alsa hw:0,0 device</li></ul><h2 id="toc-at-qcfg-tone-incoming-val">AT+QCFG=„tone/incoming“,<code><val></code></h2><ul><li>reads/writes
|
||||
DWORD <code>val</code> to /data/quec/conf/ringtype.conf</li></ul><h2 id="toc-at-qcfg-sleepind-level-val">AT+QCFG=„sleepind/level“,<code><val></code></h2><ul><li>echo
|
||||
<code>val</code> >
|
||||
/sys/devices/soc:quec,quectel-power-manager/sleep_polarity</li><li>echo
|
||||
<code>val</code> > /data/quec/conf/sleepind.txt</li></ul><h2 id="toc-at-qcfg-wakeupin-level-val">AT+QCFG=„wakeupin/level“,<code><val></code></h2><ul><li>echo
|
||||
<code>val</code> > /data/quec/conf/wakeupin.txt</li></ul><h2 id="toc-at-qcfg-thermal-modem-thermal-limit-rates-thermal-txpwrlmt">AT+QCFG=„thermal/modem“,
|
||||
„thermal/limit_rates“, „thermal/txpwrlmt“</h2><ul><li>modifies
|
||||
/data/quec_thermal_threshold (37B binary file)</li><li>modifies
|
||||
/data/quec_therm_cfg<ul><li>format
|
||||
enable=%d,sensor=%d,tempthreshold=%d,duration=%d,trig_cnt=%d,clr_cnt=%d</li></ul></li></ul><h2 id="toc-at-qcfg-codec-powsave">AT+QCFG=„codec/powsave“</h2><ul><li>echo
|
||||
<code>val</code> >
|
||||
/sys/devices/78b6000.i2c/i2c-2/2–001b/alc5616_pow_save_cfg</li></ul><h2 id="toc-at-qcfg-qcautoconnect-val">AT+QCFG=„qcautoconnect“,<code><val></code></h2><ul><li>sed
|
||||
-i ‚/<AutoConnect>[01]</<AutoConnect>‘$val'</g'
|
||||
/data/mobileap_cfg.xml</li></ul><h2 id="toc-at-qcfg-ftm-mbim">AT+QCFG=„ftm/mbim“</h2><ul><li>opens
|
||||
/data/quec/usb/ftm_mbim and drops the fd, doesn't close it?</li><li>kinda
|
||||
weird</li></ul><h2 id="toc-at-qcfg-multi-ip-package">AT+QCFG=„multi_ip_package“</h2><ul><li>configures
|
||||
/sys/devices/virtual/android_usb/android0/multi_package_enabled</li><li>and
|
||||
some other related sysfs files</li></ul><h2 id="toc-at-qcfg-dbgctl">AT+QCFG=„dbgctl“</h2><ul><li><code>echo 1 > /etc/dbgctl</code></li><li>or
|
||||
<code>rm /etc/dbgctl</code></li><li>of course it fails, since /etc is read-only
|
||||
fs</li></ul><h2 id="toc-at-qcfg-bootup-op">AT+QCFG=„bootup“,<code><op></code></h2><ul><li>1
|
||||
= start, 0 = stop, 2 = check if service (/etc/init.d) is running</li></ul><h2 id="toc-at-qcfg-usbmode">AT+QCFG=„usbmode“</h2><ul><li>echo %d >
|
||||
/data/usb/quec_usbmode_check</li><li>cat
|
||||
/sys/devices/virtual/android_usb/android0/state (CONFIGURED
|
||||
/ other)</li><li>cat
|
||||
/sys/devices/virtual/android_usb/android0/usb_sleep (0/1)</li></ul></section></main><footer><p>E-mail: <a href="mailto:x@xnux.eu">x@xnux.eu</a> - <a href="https://xnux.eu/map.html" accesskey="m">site map</a> - <a href="https://xnux.eu/rss.xml">RSS</a></p></footer></body></html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,105 @@
|
|||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="referrer" content="no-referrer"><link rel="stylesheet" href="Modem%20on%20PinePhone_files/style.css"><title>Modem on PinePhone</title></head><body><header><div class="title"><a href="https://xnux.eu/index.html">xnux.eu</a> - <a href="https://xnux.eu/map.html">site map</a> - <a href="https://xnux.eu/news.html">news</a></div></header><main><section><h1 id="toc-modem-on-pinephone">Modem on PinePhone</h1><div style="float:right"><a href="https://xnux.eu/contribute.html"><img src="Modem%20on%20PinePhone_files/contrib.png" style="vertical-align: middle"> Contribute</a></div><p><a href="https://www.quectel.com/product/eg25g.htm" class="external">Quectel
|
||||
EG25-G</a> modem in PinePhone handles WWAN, GPS and celular services. It is
|
||||
based on <code>Qualcomm MDM 9607</code> chipset, has 256 MiB DRAM, 256 MiB
|
||||
NAND, and a single Cortex-A7 CPU clocked up to 1.3GHz.</p><p>The
|
||||
modem's firmware is split into two parts:</p><ul><li>Linux kernel + userspace
|
||||
runs on an ARM CPU</li><li>Modem's firmware runs on Hexagon
|
||||
ADSP</li></ul><p>Most AT commands are run on a separeate DSP processor cores
|
||||
(Hexagon QDSP6 V5), with some being forwarded to a Linux userspace program
|
||||
called <code>atfwd_daemon</code> running on the ARM CPU.</p><p>Reverse
|
||||
engineering the exisintg software for ARM CPU inside the modem is quite easy
|
||||
using ghidra. ADB unlocker was made this way.</p><h2 id="toc-modem-power-driver">Modem power driver</h2><p>My kernel is a bit
|
||||
special, since it contains a special <a href="https://megous.com/git/linux/commit/?h=modem-5.8&id=9e26fe7200672c64256652b916319873fd602ebf" class="external">modem power manager driver</a> (released 2020–08–03 along
|
||||
with Linux 5.8).</p><p>My driver implements several features:</p><ul><li>it
|
||||
ensures modem is configured properly for audio and sleep</li><li>it implements
|
||||
airplane mode via rfkill interface</li><li>it implements modem
|
||||
suspend/resume</li><li>it hides PinePhone variant differences</li><li>it
|
||||
implements URC caching on all pinephone variants regardless of AP_READY
|
||||
availability</li><li>it makes the modem sleep most of the time</li><li>it
|
||||
handles powerup/powerdown errors properly</li><li>it checks for killswitch and
|
||||
reports it to userspace/dmesg</li><li>it doesn't waste time during powerdown and
|
||||
waits for actual modem powerdown (it doesn't just sleep for a
|
||||
fixed time)</li><li>it handles SoC wakeup on RI</li><li>it shuts down the modem
|
||||
properly during kernel powerdown/reboot to avoid data loss inside the
|
||||
modem's NAND flash</li><li>it reports all errors to dmesg for easy
|
||||
troubleshooting/failure detection</li></ul><p>Enabling and disabling the
|
||||
power to the modem is as simple as:</p><pre class="hl"><span class="hl
|
||||
slc"># request powerup</span>
|
||||
<span class="hl kwb">echo</span> <span class="hl
|
||||
num">1</span> <span class="hl opt">> /</span>sys<span class="hl
|
||||
opt">/</span>class<span class="hl opt">/</span>modem<span class="hl
|
||||
kwb">-power</span><span class="hl opt">/</span>modem<span class="hl
|
||||
kwb">-power</span><span class="hl opt">/</span>device<span class="hl
|
||||
opt">/</span>powered
|
||||
<span class="hl slc"># request powerdown</span>
|
||||
<span class="hl kwb">echo</span> <span class="hl num">0</span> <span class="hl
|
||||
opt">> /</span>sys<span class="hl opt">/</span>class<span class="hl
|
||||
opt">/</span>modem<span class="hl kwb">-power</span><span class="hl
|
||||
opt">/</span>modem<span class="hl kwb">-power</span><span class="hl
|
||||
opt">/</span>device<span class="hl opt">/</span>powered
|
||||
<span class="hl
|
||||
slc"># read power status (changes only after power state transition is complete)</span>
|
||||
<span class="hl kwc">cat</span> <span class="hl opt">/</span>sys<span class="hl
|
||||
opt">/</span>class<span class="hl opt">/</span>modem<span class="hl
|
||||
kwb">-power</span><span class="hl opt">/</span>modem<span class="hl
|
||||
kwb">-power</span><span class="hl opt">/</span>device<span class="hl
|
||||
opt">/</span>powered
|
||||
</pre><p>So there's no need to mess with gpios via
|
||||
sysfs.</p><h2 id="toc-connecting-to-the-modem">Connecting to the
|
||||
modem</h2><p>You can connect to the modem once it's powered up via:</p><pre class="hl">screen <span class="hl opt">/</span>dev<span class="hl
|
||||
opt">/</span>ttyUSB2 <span class="hl num">115200</span>
|
||||
</pre><p>Disconnect by
|
||||
<code>CTRL+a k</code>.</p><h2 id="toc-setting-up-the-modem-for-voice-calling">Setting up the modem for voice
|
||||
calling</h2><p>Once per a lifetime you have to run
|
||||
<code>AT+QDAI=1,0,0,2,0,1,1,1</code> and reboot the modem. That will configure
|
||||
audio on the modem side correctly and store the configuration persistently
|
||||
inside the modem. This is not necessary if you use my modem driver.</p><p>To
|
||||
setup audio for call use my <a href="https://xnux.eu/devices/feature/audio-pp.html">call audio setup
|
||||
program</a>.</p><p>You need to run the program after the call starts twice. Once
|
||||
with your desired audio setup without <code>-2</code> option and once with
|
||||
<code>-2</code> option.</p><p>To answer a call type <code>ATA</code>, to make a
|
||||
call <code>ATDsomenumber;</code>, to hangup <code>ATH</code>.</p><p>That's it.
|
||||
;)</p><h2 id="toc-modem-reverse-engineering">Modem reverse
|
||||
engineering</h2><p>See <a href="https://xnux.eu/devices/feature/modem-pp-reveng.html">this page for
|
||||
details</a>.</p><h2 id="toc-unlock-adb-access">Unlock ADB
|
||||
access</h2><p>It's possible to access the Linux side of the modem via adb, or
|
||||
reboot the modem to fastboot mode and boot your own kernel, The modem is rooted
|
||||
by default, and you can install and run your own software inside the modem.
|
||||
It's possible to communicate between A64 and the modem's ARM CPU via USB
|
||||
serial port (ttyGS0 on modem side and ttyUSB1 on A64).</p><p>It's also
|
||||
possible to create your own URCs up to 128B in size by sending them as a
|
||||
datagram message to UNIX socket <code>/tmp/.urc_sock</code>. See <a href="https://xnux.eu/devices/feature/urc.c" class="file">urc.c</a>.</p><p>To install your own program on the modem
|
||||
persistently you need to remount modem's root filesystem read write and install
|
||||
your program somewhere in <code>/usr/bin</code>. Add your startup script to
|
||||
<code>/etc/init.d</code>.</p><p>To get <code>adb</code> access to the
|
||||
modem:</p><ul><li>Get adb key via <code>AT+QADBKEY?</code></li><li>Enter the adb
|
||||
key to the <a href="https://xnux.eu/devices/feature/qadbkey-unlock.c" class="file">unlocker
|
||||
utility</a></li><li>Follow the instructions from the
|
||||
<code>qadbkey-unlock</code></li><li>Install or get <code>adb</code> for your
|
||||
distribution</li><li><code>adb shell</code> should get you a root shell on
|
||||
the modem</li><li><code>adb pull</code> and <code>adb push</code> can be used
|
||||
to copy files to/from the modem</li></ul><p>On Arch Linux ARM, adb is no longer
|
||||
supported, so you need to compile it from source code. You can use <a href="https://github.com/qhuyduong/arm_adb" class="external">https://github.com/…uong/arm_adb</a> with <a href="https://xnux.eu/devices/feature/0001-Fix-build-on-modern-Arch-Linux.patch" class="file">this patch</a> to
|
||||
make it work with current <code>openssl</code>.</p><h2 id="toc-modem-power-management">Modem power management</h2><p>Various PinePhone
|
||||
variants have SoC GPIOs routed to the modem differently. So you need to be aware
|
||||
of what PinePhone variant you have, when experimenting with
|
||||
the modem.</p><p>Power management comes down to:</p><ul><li>letting the modem
|
||||
sleep when it's not in use, and waking it up when it's needed for
|
||||
something,</li><li>and letting the host sleep, and configure the modem to wake
|
||||
the host up, when some important event happens (incomming call,
|
||||
sms, …).</li></ul><p>Summay of modem's behavior related to
|
||||
powerup/powerdown and power management:</p><ul><li>powerup takes about 14s,
|
||||
unless the modem is too hot (>50–60°C), then it may take as long as 22s
|
||||
due to CPU inside the modem being downclocked from 1.3Ghz
|
||||
to 400MHz</li><li>configuration of the physical UART and ttyUSB2 is shared for
|
||||
some reason, so ATE0 issued on UART will turn echo off also on
|
||||
ttyUSB2</li><li>modem sleeps when an election process based on the status of USB
|
||||
port, DTR pin, etc. results in a positive decision</li><li>modem disables RF
|
||||
based on #W_DISABLE only when configured to do so
|
||||
via <code>AT+QCFG="airplanecontrol"</code></li><li>modem wakes up the host via
|
||||
USB or RI pin based on <code>AT+QCFG="risignaltype"</code></li><li>modem will
|
||||
cache URCs based on <code>AP_READY</code> pin's status only when
|
||||
<code>AT+QCFG="apready"</code> is configured</li><li>powerdown takes about the
|
||||
same time as powerup</li></ul></section></main><footer><p>E-mail: <a href="mailto:x@xnux.eu">x@xnux.eu</a> - <a href="https://xnux.eu/map.html" accesskey="m">site map</a> - <a href="https://xnux.eu/rss.xml">RSS</a></p></footer></body></html>
|
Binary file not shown.
After Width: | Height: | Size: 813 B |
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,59 @@
|
|||
# PinePhone docs
|
||||
|
||||
- `Quectel_EC2x&EG9x&EG2x-G&EM05_Series_AT_Commands_Manual_V2.0.pdf`, from https://wiki.pine64.org/wiki/File:Quectel_EC2x%26EG9x%26EG2x-G%26EM05_Series_AT_Commands_Manual_V2.0.pdf
|
||||
- `modem.txt`, from https://megous.com/dl/tmp/modem.txt
|
||||
- `Modem on PinePhone.html`, from https://xnux.eu/devices/feature/modem-pp.html
|
||||
- `EG25-G reverse engineering.html`, from https://xnux.eu/devices/feature/modem-pp-reveng.html
|
||||
|
||||
The modem AT interface is on `/dev/EG25.AT`, which is a symlink (!) to `ttyUSB2`:
|
||||
|
||||
lrwxrwxrwx 1 root root 7 Nov 26 15:17 EG25.AT -> ttyUSB2
|
||||
lrwxrwxrwx 1 root root 7 Nov 26 15:17 EG25.MODEM -> ttyUSB3
|
||||
lrwxrwxrwx 1 root root 7 Nov 26 15:17 EG25.NMEA -> ttyUSB1
|
||||
|
||||
Generally useful settings:
|
||||
|
||||
ATE0Q0V1X4
|
||||
AT+CMEE=1
|
||||
|
||||
- E0 = don't echo commands sent to modem
|
||||
- Q0 = don't be quiet, output responses
|
||||
- V1 = use verbose response codes (alternative is numeric, might be worth looking into)
|
||||
- X4 = use detailed CONNECT responses, dial tone detection, and busy tone detection
|
||||
- +CMEE=1 = use numeric error codes (cf +CMEE=2, verbose values)
|
||||
|
||||
Result codes "OK", "CONNECT", "RING", "NO CARRIER", "ERROR", "NO DIALTONE", "BUSY", "NO ANSWER"
|
||||
|
||||
ATS3 and ATS4 allow customised replacements of CR and LF,
|
||||
respectively; might be useful for improved packetisation??
|
||||
|
||||
- AT+CFUN=0 --> minimum functionality
|
||||
- AT+CFUN=1 --> full functionality
|
||||
- AT+CFUN=1,1 --> full functionality and RESET THE MODEM
|
||||
- AT+CFUN=4 --> transmit and receive RF signals DISABLED (flight mode??)
|
||||
|
||||
Consider UCS2 character set selection via `AT+CSCS="UCS2"`.
|
||||
|
||||
Error code table (see table 22, section 15.4, page 293 of the Quectel
|
||||
manual):
|
||||
|
||||
| Error code | Error message |
|
||||
|----------------|------------------------------|
|
||||
| +CME ERROR: 10 | +CME ERROR: SIM not inserted |
|
||||
| +CME ERROR: 13 | +CME ERROR: SIM failure |
|
||||
|
||||
URC = Unsolicited Response Code. You can tell it to send URCs to a
|
||||
different port, to avoid interference with the regular AT
|
||||
command/response parsing. See command `AT+QURCCFG`.
|
||||
|
||||
Interesting stuff about +QCFG configuring individual URC types here:
|
||||
https://todo.sr.ht/~anteater/mms-stack-bugs/40
|
||||
|
||||
Most stacks seem to set URCs to go to the AT interface ("usbat"). The
|
||||
modem's default seems to be "all".
|
||||
|
||||
Lots of great stuff here
|
||||
https://gitlab.com/mobian1/devices/eg25-manager (of course!)
|
||||
|
||||
- AT+CPAS gets call status: 0 ready, 3 ringing, 4 call in progress or call on hold
|
||||
- AT+CEER gets extended error report
|
|
@ -0,0 +1,194 @@
|
|||
||||||||||||||||||||||||| READ FIRST! ||||||||||||||||||||||||||||||
|
||||
|
||||
This file is outdated, for kernels 5.5+
|
||||
|
||||
For current information go to: https://xnux.eu/devices/feature/modem-pp.html
|
||||
|
||||
||||||||||||||||||||||||| READ FIRST! ||||||||||||||||||||||||||||||
|
||||
|
||||
|
||||
Making calls work on PinePhone
|
||||
------------------------------
|
||||
|
||||
Modem needs to be setup with:
|
||||
|
||||
AT+QDAI=1,0,0,1,0,1,1,1
|
||||
AT+QDAI?
|
||||
|
||||
and restarted.
|
||||
|
||||
This sets modem to:
|
||||
|
||||
1 - Digital PCM
|
||||
0 - I2S master
|
||||
0 - Primary mode (short sync)
|
||||
1 - 256kHz clock (256kHz / 16bit = 16k samples/s)
|
||||
0 - 16bit linear format
|
||||
1 - 16kHz sample
|
||||
1 - 1 slot
|
||||
1 - map to first slot (the only slot)
|
||||
|
||||
The SoC I2S0 interface needs to be configured to match this. To try various
|
||||
configurations in real-time we can run pulseaudio and set it up so that:
|
||||
|
||||
1) alsamixer
|
||||
|
||||
- set "Line Out Source" to "Mono Differential"
|
||||
- Unmute "AIF1 Slot 0 Digital DAC"
|
||||
- (optional) unmute the microphone / mute loudpeaker
|
||||
|
||||
2) pulseaudio
|
||||
|
||||
# Outbound - connect audio from aif1 to i2s0
|
||||
pactl load-module module-loopback \
|
||||
source=alsa_input.platform-sound.stereo-fallback \
|
||||
sink=alsa_output.platform-sound-modem.mono-fallback
|
||||
|
||||
# Inbound - connect audio from i2s0 to aif1
|
||||
pactl load-module module-loopback \
|
||||
source=alsa_input.platform-sound-modem.mono-fallback \
|
||||
sink=alsa_output.platform-sound.stereo-fallback
|
||||
|
||||
To test inbound audio, we can play audio using modem's TTS (text to speech
|
||||
functionality):
|
||||
|
||||
AT+QTTS=2,"Welcome to use the module of QUECTEL"
|
||||
|
||||
To test outbound, we can make a call. I call the pinephone from a dumbphone
|
||||
and answer the call with:
|
||||
|
||||
ATA
|
||||
|
||||
I2S interface module has quite a lot of toggles/bits that can be configured,
|
||||
and the right configuration was found to be:
|
||||
|
||||
I2S0: (initial)
|
||||
0x01c22000 : 00000107
|
||||
0x01c22004 : 00000f33
|
||||
0x01c22008 : 00000030
|
||||
0x01c2200c : 00000000
|
||||
0x01c22010 : 00000000
|
||||
0x01c22014 : 000400f5
|
||||
0x01c22018 : 00390000
|
||||
0x01c2201c : 00000088
|
||||
0x01c22020 : 00000000
|
||||
0x01c22024 : 000001c4
|
||||
0x01c22028 : 00000000
|
||||
0x01c2202c : 00000000
|
||||
0x01c22030 : 00000000
|
||||
0x01c22034 : 00001010
|
||||
0x01c22038 : 00000000
|
||||
0x01c2203c : 00000000
|
||||
0x01c22040 : 00000000
|
||||
0x01c22044 : 76543210
|
||||
0x01c22048 : 00000000
|
||||
0x01c2204c : 00000000
|
||||
0x01c22050 : 00000000
|
||||
0x01c22054 : 00001000
|
||||
0x01c22058 : 76543210
|
||||
0x01c2205c : 00000050
|
||||
|
||||
I2S0: (working)
|
||||
0x01c22000 : 00000107
|
||||
0x01c22004 : 00080f33
|
||||
0x01c22008 : 00000030
|
||||
0x01c2200c : 00000004
|
||||
0x01c22010 : 00000006
|
||||
0x01c22014 : 000400f5
|
||||
0x01c22018 : 003e010e
|
||||
0x01c2201c : 00000088
|
||||
0x01c22020 : 00000000
|
||||
0x01c22024 : 000001c4
|
||||
0x01c22028 : 00316016
|
||||
0x01c2202c : 00314b88
|
||||
0x01c22030 : 00000000
|
||||
0x01c22034 : 00000010
|
||||
0x01c22038 : 00000000
|
||||
0x01c2203c : 00000000
|
||||
0x01c22040 : 00000000
|
||||
0x01c22044 : 76543210
|
||||
0x01c22048 : 00000000
|
||||
0x01c2204c : 00000000
|
||||
0x01c22050 : 00000000
|
||||
0x01c22054 : 00001000
|
||||
0x01c22058 : 76543210
|
||||
0x01c2205c : 00000050
|
||||
|
||||
The only difference comapred to what kernels configures is that TX offset should be
|
||||
set to 0. and RX offset to 1 (already is).
|
||||
|
||||
Linux kernel with necessary patches and DTS changes integrated is available at:
|
||||
|
||||
https://megous.com/git/linux/log/?h=pp-5.5
|
||||
|
||||
If you want to build my kernel, use this branch, because pp-5.5 branch is not
|
||||
standalone and depends on ths-5.5 branch. orange-pi-5.5 is integration
|
||||
branch for all my kernel work:
|
||||
|
||||
https://megous.com/git/linux/log/?h=orange-pi-5.5
|
||||
|
||||
|
||||
To enable the modem in my kernel you need to run this script (only on DEV
|
||||
phone version 1.0!!):
|
||||
|
||||
-------------------------------------------
|
||||
#!/bin/sh
|
||||
|
||||
GPIO=/sys/class/gpio
|
||||
PIN=/sys/class/gpio/gpio
|
||||
PB3_PWRKEY=35
|
||||
PL7_PWR=359
|
||||
PC4_RESET=68
|
||||
PH8_DISABLE=232
|
||||
PH7_WAKEUP=231
|
||||
|
||||
echo $PL7_PWR > $GPIO/export
|
||||
echo $PC4_RESET > $GPIO/export
|
||||
echo $PH7_WAKEUP > $GPIO/export
|
||||
echo $PH8_DISABLE > $GPIO/export
|
||||
echo $PB3_PWRKEY > $GPIO/export
|
||||
|
||||
echo out > $PIN$PH8_DISABLE/direction
|
||||
echo out > $PIN$PH7_WAKEUP/direction
|
||||
echo out > $PIN$PC4_RESET/direction
|
||||
echo out > $PIN$PL7_PWR/direction
|
||||
echo out > $PIN$PB3_PWRKEY/direction
|
||||
|
||||
echo 0 > $PIN$PH8_DISABLE/value
|
||||
echo 0 > $PIN$PH7_WAKEUP/value
|
||||
echo 0 > $PIN$PC4_RESET/value
|
||||
|
||||
echo 1 > $PIN$PL7_PWR/value
|
||||
sleep 0.1
|
||||
echo 1 > $PIN$PB3_PWRKEY/value
|
||||
sleep 0.2
|
||||
echo 0 > $PIN$PB3_PWRKEY/value
|
||||
-------------------------------------------
|
||||
|
||||
To disable the modem before poweroff/reboot:
|
||||
|
||||
-------------------------------------------
|
||||
#!/bin/sh
|
||||
|
||||
GPIO=/sys/class/gpio
|
||||
PIN=/sys/class/gpio/gpio
|
||||
PB3_PWRKEY=35
|
||||
PL7_PWR=359
|
||||
PC4_RESET=68
|
||||
PH8_DISABLE=232
|
||||
PH7_WAKEUP=231
|
||||
|
||||
echo 1 > $PIN$PB3_PWRKEY/value
|
||||
sleep 0.8
|
||||
echo 0 > $PIN$PB3_PWRKEY/value
|
||||
|
||||
echo waiting for shutdown
|
||||
sleep 30
|
||||
|
||||
echo 0 > $PIN$PL7_PWR/value
|
||||
-------------------------------------------
|
||||
|
||||
|
||||
Enjoy!
|
||||
|
||||
~megi
|
|
@ -0,0 +1 @@
|
|||
backups/
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,164 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
from fcntl import ioctl
|
||||
from time import sleep
|
||||
import struct
|
||||
from collections import namedtuple
|
||||
import cffi
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
ffi = cffi.FFI()
|
||||
|
||||
# Per cbd, "SS310 modem", "shannon310". This is a Samsung Galaxy S7 SM-G930F.
|
||||
# ["/sbin/cbd", "-d", "-tss310", "-bm", "-mm", "-P", "platform/155a0000.ufs/by-name/RADIO"]
|
||||
|
||||
# Aha! If we stay as root, then the security_request(2, 0, 0) fails
|
||||
# with error code 11. cbd does setuid(1001) (while retaining
|
||||
# capabilities!) before doing security_request(2, 0, 0), and in that
|
||||
# case it succeeds with error code 0. HOWEVER it seems like you can
|
||||
# ask cbd to stay as root with `-or`, in which case it gets the error
|
||||
# code 11 too - which it ignores! The modem seems (?) well-configured
|
||||
# afterward, so perhaps it's not required?
|
||||
|
||||
def mkstruct(name, fields, spec):
|
||||
cls = namedtuple(name, fields)
|
||||
def iter_load(bs):
|
||||
return map(cls._make, struct.iter_unpack(spec, bs))
|
||||
cls.iter_load = iter_load
|
||||
def load(bs):
|
||||
return cls._make(struct.unpack(spec, bs))
|
||||
cls.load = load
|
||||
def iter_save(items):
|
||||
return b''.join(struct.pack(spec, *item) for item in items)
|
||||
cls.iter_save = iter_save
|
||||
def save(item):
|
||||
return struct.pack(spec, *item)
|
||||
cls.save = save
|
||||
return cls
|
||||
|
||||
TOC = mkstruct('TOC', 'name offset loadaddr size crc entryid', '<12sIIIII')
|
||||
|
||||
# struct modem_firmware
|
||||
FirmwareChunk = mkstruct('FirmwareChunk', 'binary size m_offset b_offset mode len', '<QIIIII')
|
||||
|
||||
# struct modem_sec_req
|
||||
SecReq = mkstruct('SecReq', 'mode size_boot size_main', '<III4x')
|
||||
|
||||
def get_srinfo(fd):
|
||||
buf = bytearray(struct.pack('<I1020x', 1020)) # SHMEM_SRINFO_SIZE in link_device_shmem.c
|
||||
print('get_srinfo', ioctl(fd, 0x6f45, buf))
|
||||
return buf
|
||||
|
||||
# enum modem_state from modem_prj.h
|
||||
enum_modem_state = [
|
||||
'STATE_OFFLINE',
|
||||
'STATE_CRASH_RESET',
|
||||
'STATE_CRASH_EXIT',
|
||||
'STATE_BOOTING',
|
||||
'STATE_ONLINE',
|
||||
'STATE_NV_REBUILDING',
|
||||
'STATE_LOADER_DONE',
|
||||
'STATE_SIM_ATTACH',
|
||||
'STATE_SIM_DETACH',
|
||||
'STATE_CRASH_WATCHDOG',
|
||||
]
|
||||
|
||||
def modem_status(fd):
|
||||
return enum_modem_state[ioctl(fd, 0x6f27)]
|
||||
|
||||
def modem_on(fd):
|
||||
print('modem_on', ioctl(fd, 0x6f19))
|
||||
|
||||
def modem_boot_on(fd):
|
||||
print('modem_boot_on', ioctl(fd, 0x6f22))
|
||||
|
||||
def modem_boot_off(fd):
|
||||
print('modem_boot_off', ioctl(fd, 0x6f23))
|
||||
|
||||
def modem_dl_start(fd):
|
||||
print('modem_dl_start', ioctl(fd, 0x6f28))
|
||||
|
||||
def modem_reset(fd):
|
||||
print('modem_reset', ioctl(fd, 0x6f21))
|
||||
|
||||
def security_request(fd, req):
|
||||
print(req, ioctl(fd, 0x6f53, bytearray(req.save())))
|
||||
|
||||
def send_chunk(fd, total_size, load_offset, chunk, file_offset):
|
||||
p = ffi.from_buffer(chunk)
|
||||
mode = 0 ## cbd uses mode 0 for all three uploads
|
||||
mf = FirmwareChunk(int(ffi.cast('long long', p)), total_size, load_offset, file_offset, mode, len(chunk))
|
||||
print(mf, ioctl(fd, 0x6f40, bytearray(mf.save())))
|
||||
|
||||
def send_region(fd, fh, entry, base_loadaddr):
|
||||
load_offset = entry.loadaddr - base_loadaddr
|
||||
file_offset = entry.offset
|
||||
fh.seek(file_offset)
|
||||
total_size = entry.size
|
||||
remaining = total_size
|
||||
while remaining > 0:
|
||||
chunksize = min(remaining, 62 * 1024)
|
||||
chunk = fh.read(chunksize)
|
||||
send_chunk(fd, total_size, load_offset, chunk, file_offset)
|
||||
load_offset = load_offset + chunksize
|
||||
file_offset = file_offset + chunksize
|
||||
remaining = remaining - chunksize
|
||||
|
||||
print('poke_modem')
|
||||
|
||||
boot0_path = '/dev/umts_boot0'
|
||||
firmware_partition = '/dev/disk/by-partlabel/RADIO'
|
||||
nv_data_path = '/efs/nv_data.bin'
|
||||
|
||||
with open('/sys/power/wake_lock', 'wb') as f:
|
||||
f.write(b'ss310')
|
||||
|
||||
boot0_fd = os.open(boot0_path, os.O_RDWR)
|
||||
|
||||
with open(firmware_partition, 'rb') as f:
|
||||
toc = list(TOC.iter_load(f.read(512)))
|
||||
|
||||
(boot_toc_entry, main_toc_entry, nv_toc_entry) = toc[1:4]
|
||||
print(toc[0])
|
||||
print(boot_toc_entry)
|
||||
print(main_toc_entry)
|
||||
print(nv_toc_entry)
|
||||
|
||||
# get_srinfo(boot0_fd)
|
||||
# modem_status(boot0_fd)
|
||||
modem_reset(boot0_fd)
|
||||
security_request(boot0_fd, SecReq(2, 0, 0))
|
||||
|
||||
with open(firmware_partition, 'rb') as f:
|
||||
send_region(boot0_fd, f, boot_toc_entry, boot_toc_entry.loadaddr)
|
||||
send_region(boot0_fd, f, main_toc_entry, boot_toc_entry.loadaddr)
|
||||
with open(nv_data_path, 'rb') as f:
|
||||
send_region(boot0_fd, f, nv_toc_entry, boot_toc_entry.loadaddr)
|
||||
|
||||
security_request(boot0_fd, SecReq(0, boot_toc_entry.size, main_toc_entry.size))
|
||||
modem_on(boot0_fd)
|
||||
modem_boot_on(boot0_fd)
|
||||
modem_dl_start(boot0_fd)
|
||||
|
||||
os.write(boot0_fd, bytearray(struct.pack('I', 0x0000900d)))
|
||||
print(hex(struct.unpack('I', os.read(boot0_fd, 4))[0]))
|
||||
os.write(boot0_fd, bytearray(struct.pack('I', 0x00009f00)))
|
||||
print(hex(struct.unpack('I', os.read(boot0_fd, 4))[0]))
|
||||
|
||||
modem_boot_off(boot0_fd)
|
||||
|
||||
os.close(boot0_fd)
|
||||
|
||||
with open('/sys/power/wake_unlock', 'wb') as f:
|
||||
f.write(b'ss310')
|
||||
|
||||
sys.stdout.flush()
|
||||
with open(boot0_path, 'rb') as f:
|
||||
while True:
|
||||
i = f.read(512)
|
||||
if len(i) > 0:
|
||||
print(str(datetime.datetime.now()), '({:03x})'.format(len(i)), modem_status(f.raw.fileno()), i.hex())
|
||||
sys.stdout.flush()
|
||||
else:
|
||||
sleep(1)
|
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
from fcntl import ioctl
|
||||
from time import sleep
|
||||
import struct
|
||||
from collections import namedtuple
|
||||
import cffi
|
||||
import select
|
||||
import datetime
|
||||
import sys
|
||||
|
||||
ffi = cffi.FFI()
|
||||
|
||||
def mkstruct(name, fields, spec):
|
||||
cls = namedtuple(name, fields)
|
||||
def iter_load(bs):
|
||||
return map(cls._make, struct.iter_unpack(spec, bs))
|
||||
cls.iter_load = iter_load
|
||||
def load(bs):
|
||||
return cls._make(struct.unpack(spec, bs))
|
||||
cls.load = load
|
||||
def iter_save(items):
|
||||
return b''.join(struct.pack(spec, *item) for item in items)
|
||||
cls.iter_save = iter_save
|
||||
def save(item):
|
||||
return struct.pack(spec, *item)
|
||||
cls.save = save
|
||||
return cls
|
||||
|
||||
# struct sipc_fmt_hdr, modem_prj.h
|
||||
Packet = mkstruct('Packet', 'len msg_seq ack_seq main_cmd sub_cmd cmd_type', '<HBBBBB')
|
||||
|
||||
# enum modem_state from modem_prj.h
|
||||
enum_modem_state = [
|
||||
'STATE_OFFLINE',
|
||||
'STATE_CRASH_RESET',
|
||||
'STATE_CRASH_EXIT',
|
||||
'STATE_BOOTING',
|
||||
'STATE_ONLINE',
|
||||
'STATE_NV_REBUILDING',
|
||||
'STATE_LOADER_DONE',
|
||||
'STATE_SIM_ATTACH',
|
||||
'STATE_SIM_DETACH',
|
||||
'STATE_CRASH_WATCHDOG',
|
||||
]
|
||||
|
||||
def modem_status(fd):
|
||||
return enum_modem_state[ioctl(fd, 0x6f27)]
|
||||
|
||||
class Driver(object):
|
||||
def __init__(self, name, fd):
|
||||
self.name = name
|
||||
self.fd = fd
|
||||
|
||||
def read_ready(self):
|
||||
i = os.read(self.fd, 65536)
|
||||
self.decode(i)
|
||||
print(str(datetime.datetime.now()), self.name, '({:04x})'.format(len(i)), self.statusreport())
|
||||
|
||||
def decode(self, bs):
|
||||
raise Exception('subclassResponsibility')
|
||||
|
||||
def statusreport(self):
|
||||
raise Exception('subclassResponsibility')
|
||||
|
||||
class IpcDriver(Driver):
|
||||
def __init__(self, *args):
|
||||
super().__init__(*args)
|
||||
self.head = None
|
||||
self.body = b''
|
||||
self.leftover = b''
|
||||
|
||||
def decode(self, bs):
|
||||
self.head = Packet.load(bs[:7])
|
||||
bodysize = self.head.len - 7
|
||||
self.body = bs[7:self.head.len]
|
||||
self.leftover = bs[self.head.len:]
|
||||
|
||||
def statusreport(self):
|
||||
return ' '.join([modem_status(self.fd), repr(self.head), self.body.hex(), repr(self.body), self.leftover.hex()])
|
||||
|
||||
class RfsDriver(Driver):
|
||||
def __init__(self, *args):
|
||||
super().__init__(*args)
|
||||
self.packet = b''
|
||||
|
||||
def decode(self, bs):
|
||||
self.packet = bs
|
||||
|
||||
def statusreport(self):
|
||||
return self.packet.hex()
|
||||
|
||||
ipc0_path = '/dev/umts_ipc0'
|
||||
rfs0_path = '/dev/umts_rfs0'
|
||||
|
||||
ipc0_fd = os.open(ipc0_path, os.O_RDWR)
|
||||
rfs0_fd = os.open(rfs0_path, os.O_RDWR)
|
||||
drivers = {}
|
||||
drivers[ipc0_fd] = IpcDriver('ipc0', ipc0_fd)
|
||||
drivers[rfs0_fd] = RfsDriver('rfs0', rfs0_fd)
|
||||
|
||||
while True:
|
||||
(readfds, _writefds, errorfds) = select.select([ipc0_fd, rfs0_fd], [], [ipc0_fd, rfs0_fd])
|
||||
if len(errorfds) != 0:
|
||||
print('AIEEE', errorfds)
|
||||
break
|
||||
for fd in readfds:
|
||||
drivers[fd].read_ready()
|
||||
sys.stdout.flush()
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# shell quoting sucks *so hard* that I switched to python.
|
||||
|
||||
# PostmarketOS comes with mkbootimg-osm0sis and unpackbootimg, which
|
||||
# aren't *quite* inverses of each other. This script is a
|
||||
# quick-and-dirty almost-inverse of unpackbootimg.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
[_exe, basefilename] = sys.argv
|
||||
|
||||
cmdline = ['mkbootimg-osm0sis']
|
||||
|
||||
for p in ['base', 'board', 'cmdline', 'hashtype',
|
||||
'kernel_offset', 'os_patch_level', 'os_version', 'pagesize',
|
||||
'ramdisk_offset', 'second_offset', 'tags_offset']:
|
||||
filename = basefilename + '-' + p
|
||||
try:
|
||||
with open(filename, 'rt') as f:
|
||||
param = f.read().strip()
|
||||
except FileNotFoundError:
|
||||
param = ''
|
||||
if param:
|
||||
cmdline.append('--' + p)
|
||||
cmdline.append(param)
|
||||
|
||||
cmdline = cmdline + ['--kernel', basefilename + '-zImage',
|
||||
'--dt', basefilename + '-dt',
|
||||
'--ramdisk', basefilename + '-ramdisk.gz',
|
||||
'-o', basefilename]
|
||||
|
||||
os.execvp(cmdline[0], cmdline)
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
sudo python3 qnd_cbd.py | tee cbd.log
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
sudo python3 qnd_ril.py | tee ril.log
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
def unescape1(m):
|
||||
v = int(m[1], 16)
|
||||
return m[0] if v < 32 or v > 127 else chr(v)
|
||||
|
||||
for line in sys.stdin.readlines():
|
||||
sys.stdout.write(re.sub(r'\\x([0-9a-fA-F]{2})', unescape1, line))
|
|
@ -0,0 +1 @@
|
|||
256
|
|
@ -0,0 +1,34 @@
|
|||
Font Awesome Free License
|
||||
-------------------------
|
||||
|
||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||
commercial projects, open source projects, or really almost whatever you want.
|
||||
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||
|
||||
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
|
||||
packaged as SVG and JS file types.
|
||||
|
||||
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
|
||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||
packaged as web and desktop font files.
|
||||
|
||||
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||
non-icon files.
|
||||
|
||||
# Attribution
|
||||
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||
Awesome Free files already contain embedded comments with sufficient
|
||||
attribution, so you shouldn't need to do anything additional when using these
|
||||
files normally.
|
||||
|
||||
We've kept attribution comments terse, so we ask that you do not actively work
|
||||
to remove them from files, especially code. They're a great way for folks to
|
||||
learn about Font Awesome.
|
||||
|
||||
# Brand Icons
|
||||
All brand icons are trademarks of their respective owners. The use of these
|
||||
trademarks does not indicate endorsement of the trademark holder by Font
|
||||
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||
to represent the company, product, or service to which they refer.**
|
|
@ -0,0 +1,140 @@
|
|||
<h1><img src="https://img.fortawesome.com/349cfdf6/fa-free-logo.svg" alt="Font Awesome Free" width="50%"></h1>
|
||||
|
||||
> Version 5 – the iconic SVG, font, and CSS framework
|
||||
|
||||
The internet's most popular icon toolkit has been redesigned and built from
|
||||
scratch. On top of this, features like icon font ligatures, an SVG framework,
|
||||
official NPM packages for popular frontend libraries like React, and access to
|
||||
a new CDN.
|
||||
|
||||
Not familiar with Font Awesome 5? [Learn
|
||||
more](https://www.kickstarter.com/projects/232193852/font-awesome-5) about our
|
||||
successful Kickstarter and plan. You can also **[order Font Awesome
|
||||
Pro](https://fontawesome.com/pro)** which includes tons more icons directly
|
||||
from [fontawesome.com](https://fontawesome.com).
|
||||
|
||||
## Documentation
|
||||
|
||||
Learn how to get started with Font Awesome and then dive deeper into other and advanced topics:
|
||||
|
||||
### Using Font Awesome on the Web
|
||||
|
||||
* [With SVG with JavaScript](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=svg-with-js)
|
||||
* [With web fonts with CSS](https://fontawesome.com/how-to-use/on-the-web/setup/getting-started?using=web-fonts-with-css)
|
||||
* [Upgrading from version 4](https://fontawesome.com/how-to-use/on-the-web/setup/upgrading-from-version-4)
|
||||
* [Installing Font Awesome with a package manager](https://fontawesome.com/how-to-use/on-the-web/setup/using-package-managers)
|
||||
* [Downloading + hosting Font Awesome yourself](https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself)
|
||||
* [Performance and security](https://fontawesome.com/how-to-use/performance-and-security)
|
||||
* [Accessibility](https://fontawesome.com/how-to-use/on-the-web/other-topics/accessibility)
|
||||
* [Troubleshooting](https://fontawesome.com/how-to-use/on-the-web/other-topics/troubleshooting)
|
||||
|
||||
#### Advanced Options & Techniques
|
||||
|
||||
* [Using CSS pseudo-elements](https://fontawesome.com/how-to-use/on-the-web/advanced/css-pseudo-elements)
|
||||
* [SVG sprites](https://fontawesome.com/how-to-use/svg-sprites)
|
||||
* [The Font Awesome API](https://fontawesome.com/how-to-use/font-awesome-api)
|
||||
* [SVG symbols](https://fontawesome.com/how-to-use/on-the-web/advanced/svg-symbols)
|
||||
* [SVG JavaScript Core](https://fontawesome.com/how-to-use/on-the-web/advanced/svg-javascript-core)
|
||||
* [Server side rendering](https://fontawesome.com/how-to-use/server-side-rendering)
|
||||
|
||||
### Using Font Awesome on the Desktop
|
||||
|
||||
* [Getting started](https://fontawesome.com/how-to-use/on-the-desktop/setup/getting-started)
|
||||
* [Upgrading from version 4](https://fontawesome.com/how-to-use/on-the-desktop/setup/upgrading-from-version-4)
|
||||
* [Using ligatures](https://fontawesome.com/how-to-use/on-the-desktop/referencing-icons/using-ligatures)
|
||||
* [Using glyphs](https://fontawesome.com/how-to-use/on-the-desktop/referencing-icons/using-glyphs)
|
||||
* [Troubleshooting](https://fontawesome.com/how-to-use/on-the-desktop/other-topics/troubleshooting)
|
||||
|
||||
### Where did Font Awesome 4 (or 3) go?
|
||||
|
||||
Now that Font Awesome 5 has been released we are marking version 4 as
|
||||
end-of-life. We don't plan on releasing any further versions of the 4.x or 3.x.
|
||||
|
||||
Documentation is still available but it's moved to
|
||||
[https://fontawesome.com/v4.7.0](https://fontawesome.com/v4.7.0) and
|
||||
[https://fontawesome.com/v3.2.1](https://fontawesome.com/v3.2.1).
|
||||
|
||||
The Git repository for
|
||||
[v4.7.0](https://github.com/FortAwesome/Font-Awesome/releases/tag/v4.7.0) and
|
||||
[v3.2.1](https://github.com/FortAwesome/Font-Awesome/releases/tag/v3.2.1) can
|
||||
be found in our GitHub releases.
|
||||
|
||||
## Change log
|
||||
|
||||
We'll keep track of each release in the [CHANGELOG.md](./CHANGELOG.md)
|
||||
|
||||
Looking for older versions of Font Awesome? Check the [releases](https://github.com/FortAwesome/Font-Awesome/releases).
|
||||
|
||||
## Upgrading
|
||||
|
||||
From time-to-time we'll have special upgrading instructions from one version to the next.
|
||||
|
||||
Check out the [UPGRADING.md](./UPGRADING.md) guide when you upgrade your dependencies.
|
||||
|
||||
## Code of conduct
|
||||
|
||||
We will behave ourselves if you behave yourselves. For more details see our
|
||||
[CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read through our [contributing guidelines](./CONTRIBUTING.md). Included
|
||||
are directions for opening issues.
|
||||
|
||||
## Versioning
|
||||
|
||||
Font Awesome will be maintained under the Semantic Versioning guidelines as much as possible. Releases will be numbered
|
||||
with the following format:
|
||||
|
||||
`<major>.<minor>.<patch>`
|
||||
|
||||
For more information on SemVer, please visit http://semver.org.
|
||||
|
||||
**The major version "5" is part of an umbrella release. It includes many different types of files and technologies. Therefore
|
||||
we deviate from normal SemVer in the following ways:**
|
||||
|
||||
* Any release may update the design, look-and-feel, or branding of an existing
|
||||
icon
|
||||
* We will never intentionally release a `patch` version update that breaks
|
||||
backward compatibility
|
||||
* A `minor` release **may include backward-incompatible changes** but we will
|
||||
write clear upgrading instructions in UPGRADING.md
|
||||
* A `minor` or `patch` release will never remove icons
|
||||
* Bug fixes will be addressed as `patch` releases unless they include backward
|
||||
incompatibility then they will be `minor` releases
|
||||
|
||||
## License
|
||||
|
||||
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||
commercial projects, open source projects, or really almost whatever you want.
|
||||
|
||||
- Icons — CC BY 4.0 License
|
||||
- In the Font Awesome Free download, the CC BY 4.0 license applies to all icons packaged as .svg and .js files types.
|
||||
- Fonts — SIL OFL 1.1 License
|
||||
- In the Font Awesome Free download, the SIL OLF license applies to all icons packaged as web and desktop font files.
|
||||
- Code — MIT License
|
||||
- In the Font Awesome Free download, the MIT license applies to all non-font and non-icon files.
|
||||
|
||||
Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font
|
||||
Awesome Free files already contain embedded comments with sufficient
|
||||
attribution, so you shouldn't need to do anything additional when using these
|
||||
files normally.
|
||||
|
||||
We've kept attribution comments terse, so we ask that you do not actively work
|
||||
to remove them from files, especially code. They're a great way for folks to
|
||||
learn about Font Awesome.
|
||||
|
||||
## Team
|
||||
* [Dave Gandy](https://github.com/davegandy)
|
||||
* [Travis Chase](https://github.com/supercodepoet)
|
||||
* [Rob Madole](https://github.com/robmadole)
|
||||
* [Brian Talbot](https://github.com/talbs)
|
||||
* [Jory Raphael](https://github.com/sensibleworld)
|
||||
* [Mike Wilkerson](https://github.com/mlwilkerson)
|
||||
* [Frances Botsford](https://github.com/frrrances)
|
||||
* [Trevor Chase](https://github.com/trevorchase)
|
||||
* [Jason Lundien](https://github.com/jasonlundien)
|
||||
* [Jason Otero](https://github.com/deathnfudge)
|
||||
* [Edward Emanuel](https://github.com/ej2)
|
||||
* [Kelsey Jackson](https://github.com/kelseythejackson)
|
||||
* [Geremia Taglialatela](https://github.com/tagliala)
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,298 @@
|
|||
area-chart:
|
||||
name: chart-area
|
||||
arrow-circle-o-down:
|
||||
name: arrow-alt-circle-down
|
||||
prefix: far
|
||||
arrow-circle-o-left:
|
||||
name: arrow-alt-circle-left
|
||||
prefix: far
|
||||
arrow-circle-o-right:
|
||||
name: arrow-alt-circle-right
|
||||
prefix: far
|
||||
arrow-circle-o-up:
|
||||
name: arrow-alt-circle-up
|
||||
prefix: far
|
||||
arrows:
|
||||
name: arrows-alt
|
||||
arrows-alt:
|
||||
name: expand-arrows-alt
|
||||
arrows-h:
|
||||
name: arrows-alt-h
|
||||
arrows-v:
|
||||
name: arrows-alt-v
|
||||
bar-chart:
|
||||
name: chart-bar
|
||||
prefix: far
|
||||
bitbucket-square:
|
||||
name: bitbucket
|
||||
prefix: fab
|
||||
calendar:
|
||||
name: calendar-alt
|
||||
calendar-o:
|
||||
name: calendar
|
||||
prefix: far
|
||||
caret-square-o-down:
|
||||
name: caret-square-down
|
||||
prefix: far
|
||||
caret-square-o-left:
|
||||
name: caret-square-left
|
||||
prefix: far
|
||||
caret-square-o-right:
|
||||
name: caret-square-right
|
||||
prefix: far
|
||||
caret-square-o-up:
|
||||
name: caret-square-up
|
||||
prefix: far
|
||||
cc:
|
||||
name: closed-captioning
|
||||
prefix: far
|
||||
chain-broken:
|
||||
name: unlink
|
||||
circle-o-notch:
|
||||
name: circle-notch
|
||||
circle-thin:
|
||||
name: circle
|
||||
prefix: far
|
||||
clipboard:
|
||||
prefix: far
|
||||
clone:
|
||||
prefix: far
|
||||
cloud-download:
|
||||
name: cloud-download-alt
|
||||
cloud-upload:
|
||||
name: cloud-upload-alt
|
||||
code-fork:
|
||||
name: code-branch
|
||||
comment-alt:
|
||||
name: comment-dots
|
||||
prefix: far
|
||||
commenting:
|
||||
name: comment-dots
|
||||
compass:
|
||||
prefix: far
|
||||
compress:
|
||||
name: compress-alt
|
||||
copyright:
|
||||
prefix: far
|
||||
creative-commons:
|
||||
prefix: fab
|
||||
credit-card:
|
||||
prefix: far
|
||||
credit-card-alt:
|
||||
name: credit-card
|
||||
cutlery:
|
||||
name: utensils
|
||||
diamond:
|
||||
name: gem
|
||||
prefix: far
|
||||
eercast:
|
||||
name: sellcast
|
||||
prefix: fab
|
||||
eur:
|
||||
name: euro-sign
|
||||
exchange:
|
||||
name: exchange-alt
|
||||
expand:
|
||||
name: expand-alt
|
||||
external-link:
|
||||
name: external-link-alt
|
||||
external-link-square:
|
||||
name: external-link-square-alt
|
||||
eye:
|
||||
prefix: far
|
||||
eye-dropper:
|
||||
name: eye-dropper
|
||||
prefix: far
|
||||
eye-slash:
|
||||
prefix: far
|
||||
eyedropper:
|
||||
name: eye-dropper
|
||||
facebook:
|
||||
name: facebook-f
|
||||
prefix: fab
|
||||
facebook-official:
|
||||
name: facebook
|
||||
prefix: fab
|
||||
file-text:
|
||||
name: file-alt
|
||||
files-o:
|
||||
name: copy
|
||||
prefix: far
|
||||
floppy-o:
|
||||
name: save
|
||||
prefix: far
|
||||
gbp:
|
||||
name: pound-sign
|
||||
glass:
|
||||
name: glass-martini
|
||||
google-plus:
|
||||
name: google-plus-g
|
||||
prefix: fab
|
||||
google-plus-circle:
|
||||
name: google-plus
|
||||
prefix: fab
|
||||
google-plus-official:
|
||||
name: google-plus
|
||||
prefix: fab
|
||||
hand-o-down:
|
||||
name: hand-point-down
|
||||
prefix: far
|
||||
hand-o-left:
|
||||
name: hand-point-left
|
||||
prefix: far
|
||||
hand-o-right:
|
||||
name: hand-point-right
|
||||
prefix: far
|
||||
hand-o-up:
|
||||
name: hand-point-up
|
||||
prefix: far
|
||||
header:
|
||||
name: heading
|
||||
id-badge:
|
||||
prefix: far
|
||||
ils:
|
||||
name: shekel-sign
|
||||
inr:
|
||||
name: rupee-sign
|
||||
intersex:
|
||||
name: transgender
|
||||
jpy:
|
||||
name: yen-sign
|
||||
krw:
|
||||
name: won-sign
|
||||
level-down:
|
||||
name: level-down-alt
|
||||
level-up:
|
||||
name: level-up-alt
|
||||
life-ring:
|
||||
prefix: far
|
||||
line-chart:
|
||||
name: chart-line
|
||||
linkedin:
|
||||
name: linkedin-in
|
||||
prefix: fab
|
||||
linkedin-square:
|
||||
name: linkedin
|
||||
prefix: fab
|
||||
list-alt:
|
||||
prefix: far
|
||||
long-arrow-down:
|
||||
name: long-arrow-alt-down
|
||||
long-arrow-left:
|
||||
name: long-arrow-alt-left
|
||||
long-arrow-right:
|
||||
name: long-arrow-alt-right
|
||||
long-arrow-up:
|
||||
name: long-arrow-alt-up
|
||||
map-marker:
|
||||
name: map-marker-alt
|
||||
meanpath:
|
||||
name: font-awesome
|
||||
prefix: fab
|
||||
mobile:
|
||||
name: mobile-alt
|
||||
money:
|
||||
name: money-bill-alt
|
||||
prefix: far
|
||||
object-group:
|
||||
prefix: far
|
||||
object-ungroup:
|
||||
prefix: far
|
||||
paste:
|
||||
prefix: far
|
||||
pencil:
|
||||
name: pencil-alt
|
||||
pencil-square:
|
||||
name: pen-square
|
||||
pencil-square-o:
|
||||
name: edit
|
||||
prefix: far
|
||||
picture:
|
||||
name: image
|
||||
pie-chart:
|
||||
name: chart-pie
|
||||
refresh:
|
||||
name: sync
|
||||
registered:
|
||||
prefix: far
|
||||
repeat:
|
||||
name: redo
|
||||
rub:
|
||||
name: ruble-sign
|
||||
scissors:
|
||||
name: cut
|
||||
shield:
|
||||
name: shield-alt
|
||||
sign-in:
|
||||
name: sign-in-alt
|
||||
sign-out:
|
||||
name: sign-out-alt
|
||||
sliders:
|
||||
name: sliders-h
|
||||
sort-alpha-asc:
|
||||
name: sort-alpha-down
|
||||
sort-alpha-desc:
|
||||
name: sort-alpha-down-alt
|
||||
sort-amount-asc:
|
||||
name: sort-amount-down
|
||||
sort-amount-desc:
|
||||
name: sort-amount-down-alt
|
||||
sort-asc:
|
||||
name: sort-up
|
||||
sort-desc:
|
||||
name: sort-down
|
||||
sort-numeric-asc:
|
||||
name: sort-numeric-down
|
||||
sort-numeric-desc:
|
||||
name: sort-numeric-down-alt
|
||||
spoon:
|
||||
name: utensil-spoon
|
||||
star-half-empty:
|
||||
name: star-half
|
||||
star-half-full:
|
||||
name: star-half
|
||||
support:
|
||||
name: life-ring
|
||||
prefix: far
|
||||
tablet:
|
||||
name: tablet-alt
|
||||
tachometer:
|
||||
name: tachometer-alt
|
||||
television:
|
||||
name: tv
|
||||
thumb-tack:
|
||||
name: thumbtack
|
||||
thumbs-o-down:
|
||||
name: thumbs-down
|
||||
prefix: far
|
||||
thumbs-o-up:
|
||||
name: thumbs-up
|
||||
prefix: far
|
||||
ticket:
|
||||
name: ticket-alt
|
||||
trash:
|
||||
name: trash-alt
|
||||
trash-o:
|
||||
name: trash-alt
|
||||
prefix: far
|
||||
try:
|
||||
name: lira-sign
|
||||
usd:
|
||||
name: dollar-sign
|
||||
video-camera:
|
||||
name: video
|
||||
vimeo:
|
||||
name: vimeo-v
|
||||
prefix: fab
|
||||
volume-control-phone:
|
||||
name: phone-volume
|
||||
wheelchair-alt:
|
||||
name: accessible-icon
|
||||
prefix: fab
|
||||
window-maximize:
|
||||
prefix: far
|
||||
window-restore:
|
||||
prefix: far
|
||||
youtube-play:
|
||||
name: youtube
|
||||
prefix: fab
|
|
@ -0,0 +1,744 @@
|
|||
accusoft:
|
||||
icons:
|
||||
- accusoft
|
||||
label: Accusoft
|
||||
url: 'https://www.accusoft.com'
|
||||
administrator-technology:
|
||||
icons:
|
||||
- stream
|
||||
label: Administrator Technology
|
||||
url: 'https://administrator.de'
|
||||
adversal:
|
||||
icons:
|
||||
- adversal
|
||||
label: Adversal
|
||||
url: 'https://www.adversal.com'
|
||||
affiliatetheme:
|
||||
icons:
|
||||
- affiliatetheme
|
||||
label: affiliatetheme
|
||||
url: 'https://affiliatetheme.io/en'
|
||||
algolia:
|
||||
icons:
|
||||
- algolia
|
||||
label: Algolia
|
||||
url: 'http://www.algolia.com'
|
||||
amazon-web-services:
|
||||
icons:
|
||||
- aws
|
||||
label: Amazon Web Services
|
||||
url: 'https://aws.amazon.com'
|
||||
amilia:
|
||||
icons:
|
||||
- amilia
|
||||
label: Amilia
|
||||
url: 'http://www.amilia.com'
|
||||
angry-creative:
|
||||
icons:
|
||||
- angrycreative
|
||||
label: Angry Creative
|
||||
url: 'https://angrycreative.se'
|
||||
app-signal:
|
||||
icons:
|
||||
- stroopwafel
|
||||
label: AppSignal
|
||||
url: 'https://appsignal.com'
|
||||
apper-systems-ab:
|
||||
icons:
|
||||
- apper
|
||||
label: Apper Systems AB
|
||||
url: 'http://www.apper.com'
|
||||
'asymmetrik,ltd':
|
||||
icons:
|
||||
- asymmetrik
|
||||
label: 'Asymmetrik, Ltd.'
|
||||
url: 'http://asymmetrik.com'
|
||||
ausmed-education:
|
||||
icons:
|
||||
- user-nurse
|
||||
label: Ausmed Education
|
||||
url: 'https://www.ausmed.com.au'
|
||||
avianex:
|
||||
icons:
|
||||
- avianex
|
||||
label: avianex
|
||||
url: 'https://www.avianex.de'
|
||||
bi-mobject:
|
||||
icons:
|
||||
- bimobject
|
||||
label: BIMobject
|
||||
url: 'http://bimobject.com'
|
||||
bity:
|
||||
icons:
|
||||
- bity
|
||||
label: Bity
|
||||
url: 'http://bity.com'
|
||||
blackpulp-designs:
|
||||
icons:
|
||||
- pray
|
||||
label: Blackpulp Designs
|
||||
url: 'https://www.blackpulp.com'
|
||||
blissbook:
|
||||
icons:
|
||||
- pen-fancy
|
||||
label: Blissbook
|
||||
url: 'https://blissbook.com'
|
||||
büromöbel-experte-gmb-h &co-kg:
|
||||
icons:
|
||||
- buromobelexperte
|
||||
label: Büromöbel-Experte GmbH & Co. KG.
|
||||
url: 'https://www.bueromoebel-experte.de'
|
||||
c-panel:
|
||||
icons:
|
||||
- cpanel
|
||||
label: cPanel
|
||||
url: 'http://cpanel.com'
|
||||
centercode:
|
||||
icons:
|
||||
- centercode
|
||||
label: Centercode
|
||||
url: 'https://www.centercode.com'
|
||||
cibltd:
|
||||
icons:
|
||||
- drum-steelpan
|
||||
label: Comprehensive Insurance Brokers Limited
|
||||
url: 'http://www.cibltd.com'
|
||||
clear-blue-technologies:
|
||||
icons:
|
||||
- solar-panel
|
||||
label: Clear Blue Technologies
|
||||
url: 'http://www.clearbluetechnologies.com'
|
||||
cloudflare:
|
||||
icons:
|
||||
- cloudflare
|
||||
label: Cloudflare
|
||||
url: 'https://www.cloudflare.com'
|
||||
cloudscale-ch:
|
||||
icons:
|
||||
- cloudscale
|
||||
label: cloudscale.ch
|
||||
url: 'https://www.cloudscale.ch'
|
||||
cloudsmith:
|
||||
icons:
|
||||
- cloudsmith
|
||||
label: Cloudsmith
|
||||
url: 'https://cloudsmith.io'
|
||||
cloudversify:
|
||||
icons:
|
||||
- cloudversify
|
||||
label: cloudversify
|
||||
url: 'https://www.cloudversify.com'
|
||||
cuttlefish:
|
||||
icons:
|
||||
- cuttlefish
|
||||
label: Cuttlefish
|
||||
url: 'http://wearecuttlefish.com'
|
||||
cymedica:
|
||||
icons:
|
||||
- wave-square
|
||||
label: CyMedica
|
||||
url: 'https://www.cymedicaortho.com'
|
||||
darren-wiebe:
|
||||
icons:
|
||||
- church
|
||||
label: Darren Wiebe
|
||||
deploy-dog:
|
||||
icons:
|
||||
- deploydog
|
||||
label: deploy.dog
|
||||
url: 'http://deploy.dog'
|
||||
deskpro:
|
||||
icons:
|
||||
- deskpro
|
||||
label: Deskpro
|
||||
url: 'http://www.deskpro.com'
|
||||
discourse:
|
||||
icons:
|
||||
- discourse
|
||||
label: Discourse
|
||||
url: 'https://discourse.org'
|
||||
doc-hub:
|
||||
icons:
|
||||
- dochub
|
||||
label: DocHub
|
||||
url: 'https://dochub.com'
|
||||
draft2-digital:
|
||||
icons:
|
||||
- draft2digital
|
||||
label: Draft2Digital
|
||||
url: 'http://draft2digital.com'
|
||||
dyalog-apl:
|
||||
icons:
|
||||
- dyalog
|
||||
label: Dyalog APL
|
||||
url: 'http://www.dyalog.com'
|
||||
econopublish:
|
||||
icons:
|
||||
- hat-cowboy-side
|
||||
label: EconoPublish
|
||||
url: 'https://www.econopublish.com'
|
||||
firstdraft:
|
||||
icons:
|
||||
- firstdraft
|
||||
label: firstdraft
|
||||
url: 'http://www.firstdraft.com'
|
||||
fleetplan:
|
||||
icons:
|
||||
- helicopter
|
||||
label: FLEETPLAN
|
||||
url: 'https://www.fleetplan.net'
|
||||
getaroom:
|
||||
icons:
|
||||
- archway
|
||||
- dumbbell
|
||||
- hotel
|
||||
- map-marked
|
||||
- map-marked-alt
|
||||
- monument
|
||||
- spa
|
||||
- swimmer
|
||||
- swimming-pool
|
||||
label: getaroom
|
||||
url: 'https://www.getaroom.com'
|
||||
git-kraken:
|
||||
icons:
|
||||
- gitkraken
|
||||
label: GitKraken
|
||||
url: 'https://www.gitkraken.com'
|
||||
gofore:
|
||||
icons:
|
||||
- gofore
|
||||
label: Gofore
|
||||
url: 'http://gofore.com'
|
||||
'gripfire,inc':
|
||||
icons:
|
||||
- gripfire
|
||||
label: 'Gripfire, Inc.'
|
||||
url: 'http://gripfire.io'
|
||||
guilded:
|
||||
icons:
|
||||
- guilded
|
||||
label: Guilded
|
||||
url: 'https://www.guilded.gg'
|
||||
harvard-medical-school:
|
||||
icons:
|
||||
- allergies
|
||||
- ambulance
|
||||
- band-aid
|
||||
- briefcase-medical
|
||||
- burn
|
||||
- capsules
|
||||
- diagnoses
|
||||
- dna
|
||||
- file-medical
|
||||
- file-medical-alt
|
||||
- first-aid
|
||||
- heart
|
||||
- heartbeat
|
||||
- hospital
|
||||
- hospital-alt
|
||||
- hospital-symbol
|
||||
- id-card-alt
|
||||
- notes-medical
|
||||
- pills
|
||||
- plus
|
||||
- prescription-bottle
|
||||
- prescription-bottle-alt
|
||||
- procedures
|
||||
- smoking
|
||||
- stethoscope
|
||||
- syringe
|
||||
- tablets
|
||||
- thermometer
|
||||
- user-md
|
||||
- vial
|
||||
- vials
|
||||
- weight
|
||||
- x-ray
|
||||
label: Harvard Medical School
|
||||
url: 'https://hms.harvard.edu'
|
||||
hips:
|
||||
icons:
|
||||
- hips
|
||||
label: Hips
|
||||
url: 'https://hips.com'
|
||||
hire-a-helper:
|
||||
icons:
|
||||
- archive
|
||||
- box-open
|
||||
- couch
|
||||
- dolly
|
||||
- people-carry
|
||||
- route
|
||||
- sign
|
||||
- suitcase
|
||||
- tape
|
||||
- truck-loading
|
||||
- truck-moving
|
||||
- wine-glass
|
||||
label: HireAHelper
|
||||
url: 'https://www.hireahelper.com'
|
||||
hive:
|
||||
icons:
|
||||
- hive
|
||||
label: Hive Blockchain Network
|
||||
url: 'https://hive.io'
|
||||
hornbill:
|
||||
icons:
|
||||
- hornbill
|
||||
label: Hornbill
|
||||
url: 'https://www.hornbill.com'
|
||||
hotjar:
|
||||
icons:
|
||||
- hotjar
|
||||
label: Hotjar
|
||||
url: 'https://www.hotjar.com'
|
||||
hub-spot:
|
||||
icons:
|
||||
- hubspot
|
||||
label: HubSpot
|
||||
url: 'http://www.HubSpot.com'
|
||||
in-site-systems:
|
||||
icons:
|
||||
- toolbox
|
||||
label: InSite Systems
|
||||
url: 'https://www.insitesystems.com'
|
||||
innosoft:
|
||||
icons:
|
||||
- innosoft
|
||||
label: Innosoft
|
||||
url: 'https://innosoft.com.sa'
|
||||
inspira-bvba:
|
||||
icons:
|
||||
- chess-knight
|
||||
label: Inspira bvba
|
||||
url: 'https://www.inspira.be'
|
||||
instalod:
|
||||
icons:
|
||||
- instalod
|
||||
label: InstaLOD
|
||||
url: 'https://instalod.com'
|
||||
joe-emison:
|
||||
icons:
|
||||
- blender-phone
|
||||
label: Joe Emison
|
||||
joget:
|
||||
icons:
|
||||
- joget
|
||||
label: Joget
|
||||
url: 'http://www.joget.org'
|
||||
jon-galloway:
|
||||
icons:
|
||||
- crow
|
||||
label: Jon Galloway
|
||||
kevin-barone:
|
||||
icons:
|
||||
- file-contract
|
||||
label: Kevin Barone
|
||||
key-cdn:
|
||||
icons:
|
||||
- keycdn
|
||||
label: KeyCDN
|
||||
url: 'https://www.keycdn.com'
|
||||
korvue:
|
||||
icons:
|
||||
- korvue
|
||||
label: Korvue
|
||||
url: 'https://korvue.com'
|
||||
max-elman:
|
||||
icons:
|
||||
- frog
|
||||
label: Max Elman
|
||||
med-apps:
|
||||
icons:
|
||||
- medapps
|
||||
label: MedApps
|
||||
url: 'http://medapps.com.au'
|
||||
medapps:
|
||||
icons:
|
||||
- book-medical
|
||||
- clinic-medical
|
||||
- comment-medical
|
||||
- crutch
|
||||
- disease
|
||||
- hospital-user
|
||||
- laptop-medical
|
||||
- pager
|
||||
label: MedApps
|
||||
url: 'https://medapps.com.au'
|
||||
megaport:
|
||||
icons:
|
||||
- megaport
|
||||
label: Megaport
|
||||
url: 'https://www.megaport.com'
|
||||
mix:
|
||||
icons:
|
||||
- mix
|
||||
label: Mix
|
||||
url: 'http://mix.com'
|
||||
mizuni:
|
||||
icons:
|
||||
- mizuni
|
||||
label: Mizuni
|
||||
url: 'http://www.mizuni.com'
|
||||
mrt:
|
||||
icons:
|
||||
- medrt
|
||||
label: MRT
|
||||
url: 'https://medrt.co.jp'
|
||||
mylogin-info:
|
||||
icons:
|
||||
- user-shield
|
||||
label: mylogin.info
|
||||
url: 'https://www.mylogin.info'
|
||||
napster:
|
||||
icons:
|
||||
- napster
|
||||
label: Napster
|
||||
url: 'http://www.napster.com'
|
||||
nimblr:
|
||||
icons:
|
||||
- nimblr
|
||||
label: Nimblr
|
||||
url: 'https://nimblr.ai'
|
||||
nompse:
|
||||
icons:
|
||||
- chalkboard
|
||||
- chalkboard-teacher
|
||||
label: Nomp.se
|
||||
url: 'https://nomp.se'
|
||||
ns8:
|
||||
icons:
|
||||
- ns8
|
||||
label: NS8
|
||||
url: 'https://www.ns8.com'
|
||||
nutritionix:
|
||||
icons:
|
||||
- nutritionix
|
||||
label: Nutritionix
|
||||
url: 'http://www.nutritionix.com'
|
||||
octopus-deploy:
|
||||
icons:
|
||||
- octopus-deploy
|
||||
label: Octopus Deploy
|
||||
url: 'https://octopus.com'
|
||||
page4-corporation:
|
||||
icons:
|
||||
- page4
|
||||
label: page4 Corporation
|
||||
url: 'https://en.page4.com'
|
||||
pal-fed:
|
||||
icons:
|
||||
- palfed
|
||||
label: PalFed
|
||||
url: 'https://www.palfed.com'
|
||||
patch-patrol:
|
||||
icons:
|
||||
- vest
|
||||
- vest-patches
|
||||
label: Patch Patrol
|
||||
url: 'https://patchpatrol.com'
|
||||
pcsg:
|
||||
icons:
|
||||
- horse-head
|
||||
label: PCSG
|
||||
url: 'https://www.pcsg.de'
|
||||
perbyte:
|
||||
icons:
|
||||
- perbyte
|
||||
label: PerByte
|
||||
url: 'https://www.perbyte.com'
|
||||
phabricator:
|
||||
icons:
|
||||
- phabricator
|
||||
label: Phabricator
|
||||
url: 'http://phacility.com'
|
||||
promo-wizard:
|
||||
icons:
|
||||
- hat-wizard
|
||||
label: Promo Wizard
|
||||
url: 'https://promowizard.co.uk'
|
||||
pulse-eight:
|
||||
icons:
|
||||
- volume-mute
|
||||
label: Pulse-Eight
|
||||
url: 'https://pulse-eight.com'
|
||||
purely-interactive:
|
||||
icons:
|
||||
- kiwi-bird
|
||||
label: Purely Interactive
|
||||
url: 'https://www.purelyinteractive.ca'
|
||||
pushed:
|
||||
icons:
|
||||
- pushed
|
||||
label: Pushed
|
||||
url: 'https://pushed.co'
|
||||
quin-scape:
|
||||
icons:
|
||||
- quinscape
|
||||
label: QuinScape
|
||||
url: 'https://www.quinscape.de'
|
||||
reacteurope:
|
||||
icons:
|
||||
- reacteurope
|
||||
label: ReactEurope
|
||||
url: 'https://www.react-europe.org'
|
||||
readme-io:
|
||||
icons:
|
||||
- readme
|
||||
label: Readme.io
|
||||
url: 'http://readme.io'
|
||||
red-river:
|
||||
icons:
|
||||
- red-river
|
||||
label: red river
|
||||
url: 'https://river.red'
|
||||
replyd:
|
||||
icons:
|
||||
- replyd
|
||||
label: replyd
|
||||
resolving:
|
||||
icons:
|
||||
- resolving
|
||||
label: Resolving
|
||||
url: 'https://resolving.com'
|
||||
rev-io:
|
||||
icons:
|
||||
- rev
|
||||
label: Rev.io
|
||||
url: 'https://rev.io'
|
||||
rock-rms:
|
||||
icons:
|
||||
- rockrms
|
||||
label: Rock RMS
|
||||
url: 'http://rockrms.com'
|
||||
rocket-chat:
|
||||
icons:
|
||||
- comment
|
||||
- comment-alt
|
||||
- comment-dots
|
||||
- comment-slash
|
||||
- comments
|
||||
- frown
|
||||
- meh
|
||||
- phone
|
||||
- phone-slash
|
||||
- poo
|
||||
- quote-left
|
||||
- quote-right
|
||||
- rocketchat
|
||||
- smile
|
||||
- video
|
||||
- video-slash
|
||||
label: Rocket.Chat
|
||||
url: 'https://rocket.chat'
|
||||
rodney-oliver:
|
||||
icons:
|
||||
- folder-minus
|
||||
- folder-plus
|
||||
label: Rodney Oliver
|
||||
schlix:
|
||||
icons:
|
||||
- schlix
|
||||
label: SCHLIX
|
||||
url: 'http://schlix.com'
|
||||
search-eng-in:
|
||||
icons:
|
||||
- searchengin
|
||||
label: SearchEng.in
|
||||
url: 'http://searcheng.in'
|
||||
service-stack:
|
||||
icons:
|
||||
- servicestack
|
||||
label: ServiceStack
|
||||
url: 'https://servicestack.net'
|
||||
shawn-storie:
|
||||
icons:
|
||||
- teeth
|
||||
- teeth-open
|
||||
label: Shawn Storie
|
||||
shopware:
|
||||
icons:
|
||||
- shopware
|
||||
label: Shopware
|
||||
url: 'https://shopware.de'
|
||||
shp:
|
||||
icons:
|
||||
- school
|
||||
label: SHP
|
||||
url: 'http://shp.com'
|
||||
silicon-barn-inc:
|
||||
icons:
|
||||
- project-diagram
|
||||
label: Silicon Barn Inc
|
||||
url: 'https://siliconbarn.com'
|
||||
sistrix:
|
||||
icons:
|
||||
- sistrix
|
||||
label: SISTRIX
|
||||
url: 'https://www.sistrix.de'
|
||||
smup:
|
||||
icons:
|
||||
- shoe-prints
|
||||
label: Smup
|
||||
url: 'https://www.atomsoftware.com.au'
|
||||
speakap:
|
||||
icons:
|
||||
- speakap
|
||||
label: Speakap
|
||||
url: 'https://speakap.com'
|
||||
stay-linked:
|
||||
icons:
|
||||
- box
|
||||
- boxes
|
||||
- clipboard-check
|
||||
- clipboard-list
|
||||
- dolly
|
||||
- dolly-flatbed
|
||||
- pallet
|
||||
- shipping-fast
|
||||
- truck
|
||||
- warehouse
|
||||
label: StayLinked
|
||||
url: 'https://www.staylinked.com'
|
||||
sticker-mule:
|
||||
icons:
|
||||
- sticker-mule
|
||||
label: Sticker Mule
|
||||
url: 'https://stickermule.com'
|
||||
studio-vinari:
|
||||
icons:
|
||||
- studiovinari
|
||||
label: Studio Vinari
|
||||
url: 'https://studiovinari.com'
|
||||
supple:
|
||||
icons:
|
||||
- ad
|
||||
- bullhorn
|
||||
- bullseye
|
||||
- comment-dollar
|
||||
- comments-dollar
|
||||
- envelope-open-text
|
||||
- funnel-dollar
|
||||
- mail-bulk
|
||||
- poll
|
||||
- poll-h
|
||||
- search-dollar
|
||||
- search-location
|
||||
- supple
|
||||
label: Supple
|
||||
url: 'https://supple.com.au'
|
||||
the-red-yeti:
|
||||
icons:
|
||||
- the-red-yeti
|
||||
label: The Red Yeti
|
||||
url: 'http://theredyeti.com'
|
||||
the-us-sunnah-foundation:
|
||||
icons:
|
||||
- dollar-sign
|
||||
- donate
|
||||
- dove
|
||||
- gift
|
||||
- globe
|
||||
- hand-holding-heart
|
||||
- hand-holding-usd
|
||||
- hand-holding-water
|
||||
- hands-helping
|
||||
- handshake
|
||||
- heart
|
||||
- leaf
|
||||
- parachute-box
|
||||
- piggy-bank
|
||||
- ribbon
|
||||
- seedling
|
||||
label: The us-Sunnah Foundation
|
||||
url: 'https://www.ussunnah.org'
|
||||
themeco:
|
||||
icons:
|
||||
- themeco
|
||||
label: Themeco
|
||||
url: 'https://theme.co'
|
||||
think-peaks:
|
||||
icons:
|
||||
- think-peaks
|
||||
label: Think Peaks
|
||||
url: 'https://thinkpeaks.com/'
|
||||
typo3:
|
||||
icons:
|
||||
- typo3
|
||||
label: Typo3
|
||||
url: 'https://typo3.org'
|
||||
uncharted:
|
||||
icons:
|
||||
- uncharted
|
||||
label: Uncharted Software
|
||||
url: 'https://uncharted.software'
|
||||
uniregistry:
|
||||
icons:
|
||||
- uniregistry
|
||||
label: Uniregistry
|
||||
url: 'https://uniregistry.com'
|
||||
us-sunnah-foundation:
|
||||
icons:
|
||||
- ussunnah
|
||||
label: us-Sunnah Foundation
|
||||
url: 'https://www.ussunnah.org'
|
||||
vaadin:
|
||||
icons:
|
||||
- vaadin
|
||||
label: Vaadin
|
||||
url: 'http://vaadin.com'
|
||||
via:
|
||||
icons:
|
||||
- car-crash
|
||||
- draw-polygon
|
||||
- house-damage
|
||||
- layer-group
|
||||
- skull-crossbones
|
||||
- user-injured
|
||||
label: VIA Traffic Software Solutions
|
||||
url: 'https://www.via.software'
|
||||
victor-costan:
|
||||
icons:
|
||||
- otter
|
||||
label: Staphany Park and Victor Costan
|
||||
vnv:
|
||||
icons:
|
||||
- vnv
|
||||
label: VNV
|
||||
url: 'https://www.vnv.ch'
|
||||
watchman-monitoring:
|
||||
icons:
|
||||
- watchman-monitoring
|
||||
label: Watchman Monitoring
|
||||
url: 'https://www.watchmanmonitoring.com'
|
||||
weedable:
|
||||
icons:
|
||||
- bong
|
||||
- cannabis
|
||||
- hippo
|
||||
- joint
|
||||
- mortar-pestle
|
||||
- prescription
|
||||
label: Weedable
|
||||
url: 'https://www.weedable.com'
|
||||
whmcs:
|
||||
icons:
|
||||
- whmcs
|
||||
label: WHMCS
|
||||
url: 'https://www.whmcs.com'
|
||||
wodu:
|
||||
icons:
|
||||
- wodu
|
||||
label: Wodu Media
|
||||
url: 'https://www.wodu.com'
|
||||
workrails:
|
||||
icons:
|
||||
- briefcase
|
||||
label: WorkRails
|
||||
url: 'https://www.workrails.com'
|
||||
wpressr:
|
||||
icons:
|
||||
- wpressr
|
||||
label: wpressr
|
||||
url: 'https://wpressr.com'
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
Development images go here, one per subfolder.
|
|
@ -0,0 +1,3 @@
|
|||
sudo ip link set dev eth0 address 12:12:12:12:12:12
|
||||
sudo ip address add dev eth0 172.16.42.2/24
|
||||
SSH_AUTH_SOCK= ssh user@172.16.42.1
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
HOST=${1:-pm-rndis}
|
||||
ssh ${HOST} "stty -F /dev/EG25.AT raw"
|
||||
socat -v PTY,link=$HOME/src/squeak-phone/pinephone-modem,cfmakeraw EXEC:'ssh -T '"${HOST}"' socat - /dev/EG25.AT'
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
HOST=${1:-pm-rndis}
|
||||
rsync -avu \
|
||||
${HOST}:squeak.changes \
|
||||
${HOST}:squeak.image \
|
||||
images/current/.
|
||||
rsync -avu \
|
||||
${HOST}:squeak-output.log \
|
||||
.
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
HOST=${1:-pm-rndis}
|
||||
SUDOPASS=${SUDOPASS:-user}
|
||||
|
||||
rsync -avu \
|
||||
images/current/squeak.changes \
|
||||
images/current/squeak.image \
|
||||
sounds \
|
||||
squeak.pr \
|
||||
${HOST}:.
|
||||
|
||||
ssh ${HOST} "echo ${SUDOPASS} | sudo -S cp squeak.pr /etc/syndicate/services/squeak.pr"
|
|
@ -0,0 +1,22 @@
|
|||
config_version 1.2
|
||||
snapshot_root /home/tonyg/src/squeak-phone/pm-samsung-home-user/
|
||||
no_create_root 1
|
||||
|
||||
cmd_cp /usr/bin/cp
|
||||
cmd_rm /usr/bin/rm
|
||||
cmd_rsync /usr/bin/rsync
|
||||
cmd_ssh /usr/bin/ssh
|
||||
cmd_logger /usr/bin/logger
|
||||
|
||||
logfile /tmp/rsnapshot.backups-pm-samsung-home-user.log
|
||||
lockfile /tmp/rsnapshot.backups-pm-samsung-home-user.pid
|
||||
|
||||
retain adhoc 10000
|
||||
|
||||
verbose 2
|
||||
|
||||
one_fs 1
|
||||
|
||||
sync_first 1
|
||||
|
||||
backup user@pm:/home/user ./
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This is needed to let mprotect(2) of /dev/shm/* with PROT_EXEC work on Pinephone
|
||||
# i.e. to get Cog's JIT to run.
|
||||
sudo mount -o remount,exec /dev/shm
|
||||
|
||||
sudo /usr/lib/squeak/squeak \
|
||||
-vm-display-fbdev \
|
||||
-fbdev /dev/fb0 \
|
||||
-msdev /dev/null \
|
||||
-kbdev /dev/null \
|
||||
squeak.image 2>&1 | tee -a squeak-output.log
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,16 @@
|
|||
<require-service <daemon squeak>>
|
||||
|
||||
<daemon squeak {
|
||||
argv: "exec squeak -vm-display-fbdev -msdev /dev/null -kbdev /dev/null"
|
||||
dir: "/home/user"
|
||||
protocol: application/syndicate
|
||||
}>
|
||||
|
||||
? <service-object <daemon squeak> ?cap> [
|
||||
$cap {
|
||||
config: $config
|
||||
}
|
||||
]
|
||||
|
||||
<depends-on <daemon squeak> <service-state <daemon fbdev-setup> complete>>
|
||||
<daemon fbdev-setup <one-shot "echo 1 > /sys/class/graphics/fb0/state">>
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
HOST=${1:-pm-rndis}
|
||||
|
||||
exec ssh -L 5900:localhost:5900 ${HOST}
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
# # expects TightVNC Viewer version 1.3.10
|
||||
# exec xvncviewer -encodings "copyrect tight hextile zlib corre rre raw" localhost:0
|
||||
|
||||
# seems to work OK, with scaling even, with ssvnc!
|
||||
exec ssvncviewer -encodings "copyrect tight hextile zlib corre rre raw" -scale ${SCALE:-0.4} localhost:0
|
Loading…
Reference in New Issue