Forums » Replicant development »
i9305 StartVoice org.ofono.QualcommCoreSoundDriver_Beta1 dbus error using scintill's branch
Added by Josh Branning over 2 years ago
Hi, I ran adb logcat and this looks to be the error that is stopping us getting audio in telephone calls on the i9305:
01-01 02:19:29.505 4760 4760 I dbus-send: Error org.freedesktop.DBus.Error.UnknownMethod: Method "StartVoice" with signature "uu" on interface "org.ofono.QualcommCoreSoundDriver_Beta1" doesn't exist
I did an online search for "StartVoice ofono" and also "org.ofono.QualcommCoreSoundDriver_Beta1" and didn't get much back.
Any help much appreciated.
Replies (3)
RE: i9305 StartVoice org.ofono.QualcommCoreSoundDriver_Beta1 dbus error using scintill's branch - Added by Josh Branning over 2 years ago
PROBING AUDIO LINES ON THE i9305 Samsung Galaxy SIII LTE
#==About==
I traced the error about dbus not finding org.ofono.QualcommCoreSoundDriver_Beta1 to the file:
https://git.replicant.us/contrib/scintill/frameworks_opt_telephony_ril_ofono/tree/src/c/libcsd-client.c?h=replicant-6.0
As ofono does not have that interface, it looks to me like we have to hook up audio routing
judging by the arguments in
csd_client_start_voice(int rx_dev_id, int tx_dev_id, int keep_previous_handles)
function
typically when we route audio, we hook up input to output, source to sync, mic to speaker
by the looks of things there is a tx device id and an rx device id
I'm guessing the device ids refer to audio lines on the modem
probably then this means we hook up tx to rx line
and rx to tx line
(though I may be incorrect on this)
either way, we need to know some information about the i9305's audio capabilities.
for this we can use alsa tools to probe for audio lines
we can also try initiate a call and record some sound on the device
and we can also try initiate a call and play some audio on the device down the phone line to another device
we can also check for speaker and microphone lines on the device
#==Methodology==
0) Download android-ndk-r8b-linux-x86.tar.bz2 and place in the same directory as the script at the end of this doc
1) Run the script to download the replicant 4.2 toolchain and compile tinyalsa.
[The required commands for checking the modem lines were not on the device so need to be compiled.]
2) Plug in the device to the computer, turn on USB debugging
3) Copy the tinyalsa commands to the device using
adb shell mkdir /data/local/tinyalsa
adb push tinyalsa/utils/tinypcminfo /data/local/tinyalsa/tinypcminfo
adb push tinyalsa/examples/pcm-readi /data/local/tinyalsa/pcm-readi
adb push tinyalsa/examples/pcm-writei /data/local/tinyalsa/pcm-writei
adb push tinyalsa/utils/tinycap /data/local/tinyalsa/tinycap
adb push tinyalsa/utils/tinymix /data/local/tinyalsa/tinymix
adb push tinyalsa/utils/tinyplay /data/local/tinyalsa/tinyplay
4.1) Connect the device and sudo adb shell (you should allow this and root access via adb in device settings)
4.2) cd to /data/local/tinyalsa and mark each file transferred as executable
4.3) run tinypcminfo on different cards and devices
4.4) run tinycap and tinyplay on different cards and devices
#==RESULTS==
I tried running tinycap on some of card 0: Devices 0,1,2 and 3.
I managed to record something WITHOUT dialing in a call on card 0, device 3, however, the recorded audio
was unaudiable/static sounding.
I managed to play back the file on card 0, device 3, WITHOUT dialing in a call, however the audio played back was
unaudiable/static sounding.
When I dialed a call, nothing changed, ie. I was still UNable to open devices 0,1 and 2 either by using tinyplay
or by using tinycap. It simply wouldn't work, additional devices were not opened due to the call being connected.
#==DATA==
#tinypcminfo CARD 0, DEVICE 0
./tinypcminfo -D 0 -d 0
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 0, device 0:
PCM out:
Access: 0x000009
Format[0]: 0x000044
Format[1]: 00000000
Format Name: S16_LE, S24_LE
Subformat: 0x000001
Rate: min=8000Hz max=96000Hz
Channels: min=2 max=6
Sample bits: min=16 max=32
Period size: min=43 max=2048
Period count: min=2 max=128
PCM in:
cannot open card(0) device (0): Invalid argument
Device does not exist.
#CARD 0, DEVICE 1
./tinypcminfo -D 0 -d 1
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 0, device 1:
PCM out:
Access: 0x000008
Format[0]: 0x000004
Format[1]: 00000000
Format Name: S16_LE
Subformat: 0x000001
Rate: min=8000Hz max=16000Hz
Channels: min=1 max=2
Sample bits: min=16 max=16
Period size: min=1024 max=4096
Period count: min=2 max=64
PCM in:
Access: 0x000008
Format[0]: 0x000004
Format[1]: 00000000
Format Name: S16_LE
Subformat: 0x000001
Rate: min=8000Hz max=16000Hz
Channels: min=1 max=2
Sample bits: min=16 max=16
Period size: min=1024 max=4096
Period count: min=2 max=64
#CARD 0, DEVICE 2
./tinypcminfo -D 0 -d 2
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 0, device 2:
PCM out:
Access: 0x000008
Format[0]: 0x000004
Format[1]: 00000000
Format Name: S16_LE
Subformat: 0x000001
Rate: min=8000Hz max=16000Hz
Channels: min=1 max=2
Sample bits: min=16 max=16
Period size: min=1024 max=4096
Period count: min=2 max=64
PCM in:
Access: 0x000008
Format[0]: 0x000004
Format[1]: 00000000
Format Name: S16_LE
Subformat: 0x000001
Rate: min=8000Hz max=16000Hz
Channels: min=1 max=2
Sample bits: min=16 max=16
Period size: min=1024 max=4096
Period count: min=2 max=64
#CARD 0, DEVICE 3
./tinypcminfo -D 0 -d 3
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 0, device 3:
PCM out:
Access: 0x000009
Format[0]: 0x000044
Format[1]: 00000000
Format Name: S16_LE, S24_LE
Subformat: 0x000001
Rate: min=8000Hz max=96000Hz
Channels: min=2 max=6
Sample bits: min=16 max=32
Period size: min=171 max=8192
Period count: min=2 max=128
PCM in:
Access: 0x000009
Format[0]: 0x000044
Format[1]: 00000000
Format Name: S16_LE, S24_LE
Subformat: 0x000001
Rate: min=8000Hz max=96000Hz
Channels: min=1 max=2
Sample bits: min=16 max=32
Period size: min=512 max=16384
Period count: min=2 max=128
#
# NON-HITS
#
./tinypcminfo -D 0 -d 4
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 0, device 4:
PCM out:
cannot open card(0) device (4): No such file or directory
Device does not exist.
PCM in:
cannot open card(0) device (4): No such file or directory
Device does not exist.
./tinypcminfo -D 1 -d 0
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 1, device 0:
PCM out:
cannot open card(1) device (0): No such file or directory
Device does not exist.
PCM in:
cannot open card(1) device (0): No such file or directory
Device does not exist.
./tinypcminfo -D 1 -d 2
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 1, device 2:
PCM out:
cannot open card(1) device (2): No such file or directory
Device does not exist.
PCM in:
cannot open card(1) device (2): No such file or directory
Device does not exist.
./tinypcminfo -D 2 -d 1
WARNING: linker: ./tinypcminfo has text relocations. This is wasting memory and prevents security hardening. Please fix.
Info for card 2, device 1:
PCM out:
cannot open card(2) device (1): No such file or directory
Device does not exist.
PCM in:
cannot open card(2) device (1): No such file or directory
Device does not exist.
#
#I also tried making a call and running tinypcminfo (on -D 1 -d 0) again (and -D 0 -d 4) and neither got additional hits when call was made
#
#
# tinymix controls
#
./tinymix -D 0 controls
WARNING: linker: ./tinymix has text relocations. This is wasting memory and prevents security hardening. Please fix.
Number of controls: 257
ctl type num name
0 ENUM 1 AIF1DRC1 Mode
1 ENUM 1 AIF1DRC2 Mode
2 ENUM 1 AIF2DRC Mode
3 INT 1 AIF1DAC1 EQ1 Volume
4 INT 1 AIF1DAC1 EQ2 Volume
5 INT 1 AIF1DAC1 EQ3 Volume
6 INT 1 AIF1DAC1 EQ4 Volume
7 INT 1 AIF1DAC1 EQ5 Volume
8 INT 1 AIF1DAC2 EQ1 Volume
9 INT 1 AIF1DAC2 EQ2 Volume
10 INT 1 AIF1DAC2 EQ3 Volume
11 INT 1 AIF1DAC2 EQ4 Volume
12 INT 1 AIF1DAC2 EQ5 Volume
13 INT 1 AIF2 EQ1 Volume
14 INT 1 AIF2 EQ2 Volume
15 INT 1 AIF2 EQ3 Volume
16 INT 1 AIF2 EQ4 Volume
17 INT 1 AIF2 EQ5 Volume
18 INT 1 IN1L Volume
19 BOOL 1 IN1L Switch
20 BOOL 1 IN1L ZC Switch
21 INT 1 IN1R Volume
22 BOOL 1 IN1R Switch
23 BOOL 1 IN1R ZC Switch
24 INT 1 IN2L Volume
25 BOOL 1 IN2L Switch
26 BOOL 1 IN2L ZC Switch
27 INT 1 IN2R Volume
28 BOOL 1 IN2R Switch
29 BOOL 1 IN2R ZC Switch
30 INT 1 MIXINL IN2L Volume
31 INT 1 MIXINL IN1L Volume
32 INT 1 MIXINL Output Record Volume
33 INT 1 MIXINL IN1LP Volume
34 INT 1 MIXINL Direct Voice Volume
35 INT 1 MIXINR IN2R Volume
36 INT 1 MIXINR IN1R Volume
37 INT 1 MIXINR Output Record Volume
38 INT 1 MIXINR IN1RP Volume
39 INT 1 MIXINR Direct Voice Volume
40 INT 1 Left Output Mixer IN2RN Volume
41 INT 1 Left Output Mixer IN2LN Volume
42 INT 1 Left Output Mixer IN2LP Volume
43 INT 1 Left Output Mixer IN1L Volume
44 INT 1 Left Output Mixer IN1R Volume
45 INT 1 Left Output Mixer Right Input Volume
46 INT 1 Left Output Mixer Left Input Volume
47 INT 1 Left Output Mixer DAC Volume
48 INT 1 Right Output Mixer IN2LN Volume
49 INT 1 Right Output Mixer IN2RN Volume
50 INT 1 Right Output Mixer IN1L Volume
51 INT 1 Right Output Mixer IN1R Volume
52 INT 1 Right Output Mixer IN2RP Volume
53 INT 1 Right Output Mixer Left Input Volume
54 INT 1 Right Output Mixer Right Input Volume
55 INT 1 Right Output Mixer DAC Volume
56 INT 2 Output Volume
57 BOOL 2 Output Switch
58 BOOL 2 Output ZC Switch
59 BOOL 1 Earpiece Switch
60 INT 1 Earpiece Volume
61 INT 1 SPKL Input Volume
62 INT 1 SPKL IN1LP Volume
63 INT 1 SPKL Output Volume
64 INT 1 SPKR Input Volume
65 INT 1 SPKR IN1RP Volume
66 INT 1 SPKR Output Volume
67 INT 2 Speaker Mixer Volume
68 INT 2 Speaker Volume
69 BOOL 2 Speaker Switch
70 BOOL 2 Speaker ZC Switch
71 INT 2 Speaker Boost Volume
72 ENUM 1 Speaker Reference
73 ENUM 1 Speaker Mode
74 INT 2 Headphone Volume
75 BOOL 2 Headphone Switch
76 BOOL 2 Headphone ZC Switch
77 BOOL 1 LINEOUT1N Switch
78 BOOL 1 LINEOUT1P Switch
79 INT 1 LINEOUT1 Volume
80 BOOL 1 LINEOUT2N Switch
81 BOOL 1 LINEOUT2P Switch
82 INT 1 LINEOUT2 Volume
83 INT 2 AIF1ADC1 Volume
84 INT 2 AIF1ADC2 Volume
85 INT 2 AIF2ADC Volume
86 ENUM 1 AIF1ADCL Source
87 ENUM 1 AIF1ADCR Source
88 ENUM 1 AIF2ADCL Source
89 ENUM 1 AIF2ADCR Source
90 ENUM 1 AIF1DACL Source
91 ENUM 1 AIF1DACR Source
92 ENUM 1 AIF2DACL Source
93 ENUM 1 AIF2DACR Source
94 INT 2 AIF1DAC1 Volume
95 INT 2 AIF1DAC2 Volume
96 INT 2 AIF2DAC Volume
97 INT 1 AIF1 Boost Volume
98 INT 1 AIF2 Boost Volume
99 BOOL 1 AIF1DAC1 EQ Switch
100 BOOL 1 AIF1DAC2 EQ Switch
101 BOOL 1 AIF2 EQ Switch
102 BOOL 1 AIF1DAC1 DRC Switch
103 BOOL 1 AIF1ADC1L DRC Switch
104 BOOL 1 AIF1ADC1R DRC Switch
105 BOOL 1 AIF1DAC2 DRC Switch
106 BOOL 1 AIF1ADC2L DRC Switch
107 BOOL 1 AIF1ADC2R DRC Switch
108 BOOL 1 AIF2DAC DRC Switch
109 BOOL 1 AIF2ADCL DRC Switch
110 BOOL 1 AIF2ADCR DRC Switch
111 INT 1 DAC1 Right Sidetone Volume
112 INT 1 DAC1 Left Sidetone Volume
113 INT 1 DAC2 Right Sidetone Volume
114 INT 1 DAC2 Left Sidetone Volume
115 ENUM 1 Sidetone HPF Mux
116 BOOL 1 Sidetone HPF Switch
117 ENUM 1 AIF1ADC1 HPF Mode
118 BOOL 2 AIF1ADC1 HPF Switch
119 ENUM 1 AIF1ADC2 HPF Mode
120 BOOL 2 AIF1ADC2 HPF Switch
121 ENUM 1 AIF2ADC HPF Mode
122 BOOL 2 AIF2ADC HPF Switch
123 ENUM 1 ADC OSR
124 ENUM 1 DAC OSR
125 INT 2 DAC1 Volume
126 BOOL 2 DAC1 Switch
127 INT 2 DAC2 Volume
128 BOOL 2 DAC2 Switch
129 INT 1 SPKL DAC2 Volume
130 INT 1 SPKL DAC1 Volume
131 INT 1 SPKR DAC2 Volume
132 INT 1 SPKR DAC1 Volume
133 INT 1 AIF1DAC1 3D Stereo Volume
134 BOOL 1 AIF1DAC1 3D Stereo Switch
135 INT 1 AIF1DAC2 3D Stereo Volume
136 BOOL 1 AIF1DAC2 3D Stereo Switch
137 INT 1 AIF2DAC 3D Stereo Volume
138 BOOL 1 AIF2DAC 3D Stereo Switch
139 INT 1 AIF3 Boost Volume
140 BOOL 1 AIF1DAC1 Noise Gate Switch
141 ENUM 1 AIF1DAC1 Noise Gate Hold Time
142 INT 1 AIF1DAC1 Noise Gate Threshold Volume
143 BOOL 1 AIF1DAC2 Noise Gate Switch
144 ENUM 1 AIF1DAC2 Noise Gate Hold Time
145 INT 1 AIF1DAC2 Noise Gate Threshold Volume
146 BOOL 1 AIF2DAC Noise Gate Switch
147 ENUM 1 AIF2DAC Noise Gate Hold Time
148 INT 1 AIF2DAC Noise Gate Threshold Volume
149 BOOL 1 AIF2ADCL DAT Invert
150 BOOL 1 AIF2ADCR DAT Invert
151 BOOL 1 HP Switch
152 BOOL 1 SPK Switch
153 BOOL 1 RCV Switch
154 BOOL 1 FM In Switch
155 BOOL 1 LINE Switch
156 BOOL 1 HDMI Switch
157 BOOL 1 Main Mic Switch
158 BOOL 1 Sub Mic Switch
159 BOOL 1 Headset Mic Switch
160 ENUM 1 AIF2 Mode
161 ENUM 1 Input Clamp
162 ENUM 1 LineoutSwitch Mode
163 ENUM 1 ADCR Mux
164 ENUM 1 ADCL Mux
165 ENUM 1 Right Headphone Mux
166 ENUM 1 Left Headphone Mux
167 BOOL 1 SPKR DAC2 Switch
168 BOOL 1 SPKR Input Switch
169 BOOL 1 SPKR IN1RP Switch
170 BOOL 1 SPKR Output Switch
171 BOOL 1 SPKR DAC1 Switch
172 BOOL 1 SPKL DAC2 Switch
173 BOOL 1 SPKL Input Switch
174 BOOL 1 SPKL IN1LP Switch
175 BOOL 1 SPKL Output Switch
176 BOOL 1 SPKL DAC1 Switch
177 ENUM 1 AIF3ADC Mux
178 ENUM 1 AIF2DACR Mux
179 ENUM 1 AIF2DACL Mux
180 ENUM 1 Mono PCM Out Mux
181 ENUM 1 AIF2ADC Mux
182 ENUM 1 AIF2DAC Mux
183 ENUM 1 AIF1DAC Mux
184 BOOL 1 DAC1R Mixer Right Sidetone Switch
185 BOOL 1 DAC1R Mixer Left Sidetone Switch
186 BOOL 1 DAC1R Mixer AIF2 Switch
187 BOOL 1 DAC1R Mixer AIF1.2 Switch
188 BOOL 1 DAC1R Mixer AIF1.1 Switch
189 BOOL 1 DAC1L Mixer Right Sidetone Switch
190 BOOL 1 DAC1L Mixer Left Sidetone Switch
191 BOOL 1 DAC1L Mixer AIF2 Switch
192 BOOL 1 DAC1L Mixer AIF1.2 Switch
193 BOOL 1 DAC1L Mixer AIF1.1 Switch
194 ENUM 1 Right Sidetone
195 ENUM 1 Left Sidetone
196 BOOL 1 AIF2DAC2R Mixer Right Sidetone Switch
197 BOOL 1 AIF2DAC2R Mixer Left Sidetone Switch
198 BOOL 1 AIF2DAC2R Mixer AIF2 Switch
199 BOOL 1 AIF2DAC2R Mixer AIF1.2 Switch
200 BOOL 1 AIF2DAC2R Mixer AIF1.1 Switch
201 BOOL 1 AIF2DAC2L Mixer Right Sidetone Switch
202 BOOL 1 AIF2DAC2L Mixer Left Sidetone Switch
203 BOOL 1 AIF2DAC2L Mixer AIF2 Switch
204 BOOL 1 AIF2DAC2L Mixer AIF1.2 Switch
205 BOOL 1 AIF2DAC2L Mixer AIF1.1 Switch
206 BOOL 1 AIF1ADC2R Mixer DMIC Switch
207 BOOL 1 AIF1ADC2R Mixer AIF2 Switch
208 BOOL 1 AIF1ADC2L Mixer DMIC Switch
209 BOOL 1 AIF1ADC2L Mixer AIF2 Switch
210 BOOL 1 AIF1ADC1R Mixer ADC/DMIC Switch
211 BOOL 1 AIF1ADC1R Mixer AIF2 Switch
212 BOOL 1 AIF1ADC1L Mixer ADC/DMIC Switch
213 BOOL 1 AIF1ADC1L Mixer AIF2 Switch
214 BOOL 1 LINEOUT2P Mixer Right Output Switch
215 BOOL 1 LINEOUT2N Mixer Left Output Switch
216 BOOL 1 LINEOUT2N Mixer Right Output Switch
217 BOOL 1 LINEOUT1P Mixer Left Output Switch
218 BOOL 1 LINEOUT1N Mixer Left Output Switch
219 BOOL 1 LINEOUT1N Mixer Right Output Switch
220 BOOL 1 SPKR Boost Direct Voice Switch
221 BOOL 1 SPKR Boost SPKL Switch
222 BOOL 1 SPKR Boost SPKR Switch
223 BOOL 1 SPKL Boost Direct Voice Switch
224 BOOL 1 SPKL Boost SPKL Switch
225 BOOL 1 SPKL Boost SPKR Switch
226 BOOL 1 Earpiece Mixer Direct Voice Switch
227 BOOL 1 Earpiece Mixer Left Output Switch
228 BOOL 1 Earpiece Mixer Right Output Switch
229 BOOL 1 Right Output Mixer Left Input Switch
230 BOOL 1 Right Output Mixer Right Input Switch
231 BOOL 1 Right Output Mixer IN2LN Switch
232 BOOL 1 Right Output Mixer IN2RN Switch
233 BOOL 1 Right Output Mixer IN1L Switch
234 BOOL 1 Right Output Mixer IN1R Switch
235 BOOL 1 Right Output Mixer IN2RP Switch
236 BOOL 1 Right Output Mixer DAC Switch
237 BOOL 1 Left Output Mixer Right Input Switch
238 BOOL 1 Left Output Mixer Left Input Switch
239 BOOL 1 Left Output Mixer IN2RN Switch
240 BOOL 1 Left Output Mixer IN2LN Switch
241 BOOL 1 Left Output Mixer IN2LP Switch
242 BOOL 1 Left Output Mixer IN1R Switch
243 BOOL 1 Left Output Mixer IN1L Switch
244 BOOL 1 Left Output Mixer DAC Switch
245 BOOL 1 MIXINR IN2R Switch
246 BOOL 1 MIXINR IN1R Switch
247 BOOL 1 MIXINL IN2L Switch
248 BOOL 1 MIXINL IN1L Switch
249 BOOL 1 IN2R PGA IN2RP Switch
250 BOOL 1 IN2R PGA IN2RN Switch
251 BOOL 1 IN2L PGA IN2LP Switch
252 BOOL 1 IN2L PGA IN2LN Switch
253 BOOL 1 IN1R PGA IN1RP Switch
254 BOOL 1 IN1R PGA IN1RN Switch
255 BOOL 1 IN1L PGA IN1LP Switch
256 BOOL 1 IN1L PGA IN1LN Switch
#==CONCLUSION==
I had hoped to use a library like libcmtspeechdata to route the audio for the modem as this would have been a
good candidate. Unfortunately I could not open any additional audio devices when the call was connected, although
I managed to find out that card 0 is the only active card on the phone, with devices 0 to 3 being used somehow.
#==SCRIPT TO BUILD TINYALSA TOOLS STARTS HERE==
#!/bin/sh
thepwd="${PWD}"
git clone https://github.com/tinyalsa/tinyalsa
wget https://ftp-osl.osuosl.org/pub/replicant/sdk/replicant-4.2/0001/sdk/replicant-sdk_linux-x86.zip
unzip replicant-sdk_linux-x86.zip
tar -xf android-ndk-r8b-linux-x86.tar.bz2
cd tinyalsa
mkdir include/sound
wget "https://raw.githubusercontent.com/broonie/tinyalsa/648e14a421f1795006f770de8c57602366b20c24/include/sound/asound.h" -O include/sound/asound.h
#tell src/Makefile to use sysroot
sed -i "s#CC = \$(CROSS_COMPILE)gcc#CC = \$(CROSS_COMPILE)gcc --sysroot=\"${thepwd}/android-ndk-r8b/platforms/android-9/arch-arm/\" -std=c99#g" src/Makefile
sed -i "s#LD = \$(CROSS_COMPILE)gcc#LD = \$(CROSS_COMPILE)gcc --sysroot=\"${thepwd}/android-ndk-r8b/platforms/android-9/arch-arm/\"#g" src/Makefile
#tell utils/Makefile to use sysroot
sed -i "s#CC = \$(CROSS_COMPILE)gcc#CC = \$(CROSS_COMPILE)gcc --sysroot=\"${thepwd}/android-ndk-r8b/platforms/android-9/arch-arm/\" -std=c99#g" utils/Makefile
#tell tinyalsa/examples to use sysroot
sed -i "s#CC = \$(CROSS_COMPILE)gcc#CC = \$(CROSS_COMPILE)gcc --sysroot=\"${thepwd}/android-ndk-r8b/platforms/android-9/arch-arm/\" -std=c99#g" examples/Makefile
export PATH="${thepwd}/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:$PATH"
CROSS_COMPILE="arm-linux-androideabi-" make
#==SCRIPT TO BUILD TINYALSA TOOLS ENDS HERE==
| tinyalsa-utils.zip (107 KB) tinyalsa-utils.zip |
RE: i9305 StartVoice org.ofono.QualcommCoreSoundDriver_Beta1 dbus error using scintill's branch - Added by Josh Branning about 2 years ago
Hi,
I got the audio control values using script get_control_values.sh and
took the difference between in-call and out-of-call controls on
LineageOS. Below is controls.txt for in-call.
24 IN2L Volume 28
31 MIXINL IN1L Volume 0
67 Speaker Mixer Volume 0
68 Speaker Volume 0
71 Speaker Boost Volume 0
77 LINEOUT1N Switch 1
78 LINEOUT1P Switch 1
99 AIF1DAC1 EQ Switch 0
118 AIF1ADC1 HPF Switch 0
152 SPK Switch 0
153 RCV Switch 1
186 DAC1R Mixer AIF2 Switch 1
191 DAC1L Mixer AIF2 Switch 1
I then installed scintill's version of Replicant 6, dialled a call and
ran set_control_values. Unfortunately I did not get audio. Here is the
output.
./set_control_values.sh controls_call.txt
< Attempting to set controls, saving old controls to reverse.txt
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting IN2L Volume to 28
... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting MIXINL IN1L Volume
to 0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting Speaker Mixer
Volume to 0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting Speaker Volume to
0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting Speaker Boost
Volume to 0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting LINEOUT1N Switch
to 1 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting LINEOUT1P Switch
to 1 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting AIF1DAC1 EQ Switch
to 0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting AIF1ADC1 HPF
Switch to 0 ... Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting SPK Switch to 0 ...
Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting RCV Switch to 1 ...
Successfully set control
WARNING: linker: ./tinymix has text relocations. This is wasting memory
and prevents security hardening. Please fix. Setting DAC1R Mixer AIF2
Switch to 1 ... Successfully set control
You will see that there is lots of warnings. This is because I used a
compiled version of tinymix. The script set_control_values.sh requires
this version. (I get "Invalid control" errors when using the default
version of tinymix and this script on replicant 6.)
Below are the last versions of the scripts I used; get_control_values.sh
and set_control_values.sh . The former generates controls.txt.
The latter uses controls.txt and saves a file called reverse.txt, so
you can reverse the settings once you exit call.
I don't know what to do now regarding the device.
#!/system/bin/sh
#run with: ./get_control_values.sh 2>/dev/null 1>controls.txt
#format: <control num> <control name> <value>if [ "$(which tinymix)" = "" ]; then
tinymix="./tinymix"
else
tinymix="tinymix"
fiif [ "$tinymix" = "tinymix" ]; then
controls="$($tinymix -D 0)"
first="no"
second="no"
third="no"
printf "%s\n" "$controls" | while read line; do
if [ "$first" = "yes" ]; then
if [ "$second" = "yes" ]; then
if [ "$third" = "yes" ]; then
value="$(echo "$line" | grep -o " .*" | grep -o "[A-Z|a-z|0-9].*")"if [ "$(echo "$value" | grep "(")" != "" ]; then
value="$(echo "$value" | cut -d '(' -f1 2>/dev/null)"
elif [ "$(echo "$value" | grep ">")" != "" ]; then
value="$(echo "$value" | cut -d '>' -f2 2>/dev/null | cut -d ',' -f1 | tr -d " ")"
elif [ "$(echo $value | cut -d ',' -f1)" = "Off" ]; then
value="0"
elif [ "$(echo $value | cut -d ',' -f1)" = "On" ]; then
value="1"
fiprintf "%s\t%s\t%s\n" "$(echo "$line" | cut -f 1)" "$(echo "$line" | cut -f 4 | rev | grep -o " .*" | grep -o "[A-Z|a-z|0-9].*" | rev)" "$value"
fi
third="yes"
fi
second="yes"
fi
first="yes"
done
else
controls="$($tinymix -D 0 controls)"first="no"
second="no"
printf "%s\n" "$controls" | while read line; do
if [ "$first" = "yes" ]; then
if [ "$second" = "yes" ]; then
value="$($tinymix -D 0 get $(echo "$line" | cut -f1) | cut -d "(" -f1)"
if [ "$(echo "$value" | grep "(")" != "" ]; then
value="$(echo "$value" | cut -d '(' -f1 2>/dev/null)"
elif [ "$(echo "$value" | grep ">")" != "" ]; then
value="$(echo "$value" | cut -d '>' -f2 2>/dev/null | cut -d ',' -f1 | tr -d " ")"
elif [ "$(echo $value | cut -d ',' -f1)" = "Off" ]; then
value="0"
elif [ "$(echo $value | cut -d ',' -f1)" = "On" ]; then
value="1"
fi
printf "%s\t%s\t%s\n" "$(echo "$line" | cut -f1)" "$(echo "$line" | cut -f 4)" "$value"
fi
second="yes"
fi
first=yes
donefi
#!/system/bin/sh
#run with
#./set_control_values.sh controls.txt
#or
#./set_control_values.sh reverse
#to reverse #
#format: <control num> <control name> <value>
thefile=""
if [ "$1" = "reverse" ]; then
echo "Reversing controls with reverse.txt"
thefile="reverse.txt"
elif [ -f "$1" ]; then
echo "Attempting to set controls, saving old controls to reverse.txt"
thefile="$1"
else
echo "Argv1: [ <control file> | "reverse"]"
exit
fitinymix="./tinymix"
if [ "$thefile" != "reverse.txt" ]; then
if [ -f "reverse.txt" ]; then
rm "reverse.txt"
fi
ficat "$thefile" | while read line; do
control="$(echo "$line" | cut -f 2)"
oldvalue="$($tinymix -D 0 get "$control")"
if [ "$(echo "$oldvalue" | grep "(")" != "" ]; then
oldvalue="$(echo "$oldvalue" | cut -d '(' -f1 2>/dev/null)"
elif [ "$(echo "$oldvalue" | grep ">")" != "" ]; then
oldvalue="$(echo "$oldvalue" | cut -d '>' -f2 2>/dev/null | cut -d ',' -f1 | tr -d " ")"
elif [ "$(echo $oldvalue | cut -d ',' -f1)" = "Off" ]; then
oldvalue="0"
elif [ "$(echo $oldvalue | cut -d ',' -f1)" = "On" ]; then
oldvalue="1"
fiif [ "$thefile" != "reverse.txt" ]; then
printf "%s\t%s\t%s\n" "$(echo "$line" | cut -f1)" "$control" "$oldvalue" >> "reverse.txt"
fivalue="$(echo "$line" | cut -f 3)"
if [ "$value" != "unknown" ] && [ "$value" != "" ]; then
echo "Setting $control to $value ..."
checkforerror="$($tinymix set "$control" "$value" 2>&1)"
if [ "$?" = 0 ] && [ "$(echo "$checkforerror" | grep "Error:")" = "" ] && [ "$(echo "$checkforerror" | grep "Invalid")" = "" ]; then
echo "Successfully set control"
else
if [ "$(echo "$checkforerror" | grep "Error:")" != "" ]; then
echo "$(echo $checkforerror | grep -o "Error:.*")"
fi
fi
else
echo "Not setting; value is unknown or blank"
fi
done
RE: i9305 StartVoice org.ofono.QualcommCoreSoundDriver_Beta1 dbus error using scintill's branch - Added by Josh Branning about 2 years ago
I run
sudo adb root
I compile tcpdump for android (it is not needed on Replicant 6 as tcpdump is already included)
I push tcpdump to the device using
sudo adb push tcpdump-4.99.4/tcpdump /data/local/tcpdump
You will notice the version I used. This was the last version I could successfully compile (but not run)
When I run my compiled version of tcpdump I get
error: only position independent executables (PIE) are supported.
I run (in "adb shell"):
lsusb
I get:
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 05c6:904c
You will see that Bus 001, Device 002 is the usb modem.
I run:
tcpdump -D
... to list devices:
1.nfqueue (Linux netfilter queue (NFQUEUE) interface)
2.usbmon1 (USB bus number 1)
3.wwan2
4.usbmon2 (USB bus number 2)
5.any (Pseudo-device that captures on all interfaces)
6.lo
I incorrectly try usbmon2 because I was reading the device number instead of the bus number and get
listening on usbmon2, link-type USB_LINUX (USB with Linux header), capture size 65535 bytes
and 0 packets captured
I then try "usbmon1", like a proper hacker lol.
tcpdump -i usbmon1 -vvv -XX -s0 -w modem_replicant.pcap
with tcpdump running I
- dial a call
for some reason, when sniffing with tcpdump, the call is automatically answered. Either way I hang up on the calling phone.
To try and dissect the file on my computer, I use:
sudo apt-get install tshark wireshark tcpdump
git clone https://github.com/dnlplm/WiresharkQMIDissector
git clone https://gitlab.freedesktop.org/mobile-broadband/libqmi.git
cd WiresharkQMIDissector
python3 generate_lua.py ../libqmi/data/
tshark -T json -r ../modem_replicant.pcap -X lua_script:qmi_dissector_gen.lua | tee modem_replicant_dissected.json
I grep the json for "qmi" and "QMI" but receive no results. I also search for the number I dialled and recieve no results.
I then try wireshark with the GUI because I am actually a novice.
wireshark -r ../modem_replicant.pcap -X lua_script:qmi_dissector_gen.lua
As with tshark, I don't see any qmi fields.
Regarding "Info" section of wireshark when reading the pcap file with the lua dissector...
There are "GET_STATUS Request" for [Port 1] to [Port 3]
There are "CLEAR FEATURE Request"
There are "CLEAR FEATURE Request [Port 2: C_PORT_SUSPEND]"
There are "GET STATUS Request"
There are "GET_STATUS Response" [Port 1] to [Port 3]
There are "SET FEATURE Request"
There are "SET_FEATURE Response"
There are "SET_FEATURE Request [Port 2: PORT_SUSPEND]"
There are "URB_BULK in"
There are "URB_CONTROL in"
There are "URB_INTERRUPT in"
The protocols are all either
"USB"
or
"USB HUB"
The source seems to be either
"host",
"1.1.0",
"1.1.1",
"1.2.0",
"1.2.1",
"1.2.3",
"1.2.8",
"1.2.9"
The destination (likewise) seems to be either
"host",
"1.1.0",
"1.1.1",
"1.2.0",
"1.2.1",
"1.2.3",
"1.2.8",
"1.2.9"
As I could see no QMI fields in wireshark or tshark, I decided not to install LineageOS yet and get a tcpdump for that to compare with. I only try on scintill's branch of replicant 6 so far.
Josh