AudioPolicyManagerBae : loadAudioPolicyConfig() loaded /system/etc/audio_polocy.conf
ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上
2014年7月28日 星期一
2014年7月11日 星期五
基本上就是 MIXER.
然後每個 可以/需要 控制的地方,都是一個 widget
然後用 route {out, sw, in} 把 widget 間的 routing 關係描述出來。
這一篇 說明得很好。
怎麼從一堆 route elem 中,把你要的 path (routing) 找出來。
就是依照 in - out 把你要的 path 繞出來。
最後把 path 中, sw 不是 NULL的寫下來。
這就是 asound.conf 要的 hook_args[ ]
playback 已經 OK.
以下就用 Capture 作測試:
Capture 就是:
然後每個 可以/需要 控制的地方,都是一個 widget
然後用 route {out, sw, in} 把 widget 間的 routing 關係描述出來。
這一篇 說明得很好。
怎麼從一堆 route elem 中,把你要的 path (routing) 找出來。
就是依照 in - out 把你要的 path 繞出來。
最後把 path 中, sw 不是 NULL的寫下來。
這就是 asound.conf 要的 hook_args[ ]
playback 已經 OK.
以下就用 Capture 作測試:
Capture 就是:
- IN : MIC
- OUT : I2S
首先要開啟 alsa-lib 的 debug message : SND_ERR
在 project 的 include/config.h ..
之後 logcat 就可以看到..
在 project 的 include/config.h ..
#ifndef NDEBUG #define NDEBUG #endif把這三行 comment 掉。
之後 logcat 就可以看到..
ALSALib( ): external/lib-alsa/src/control/setup.c:565:(add_elem) Cannot obtain infor for CTL elem (MIXER,'Speaker Switch' ,0,0,0): No such file or directory開啟了 之後,asound.conf 內容如果有錯,會有 error 顯示出來。
2014年7月10日 星期四
struct snd_kcontrol_new { snd_ctl_elem_iface_t iface; /* interface identifier */ unsigned int device; /* device/client number */ unsigned int subdevice; /* subdevice (substream) number */ unsigned char *name; /* ASCII name of item */ unsigned int index; /* index of item */ unsigned int access; /* access rights */ unsigned int count; /* count of same elements */ snd_kcontrol_info_t *info; snd_kcontrol_get_t *get; snd_kcontrol_put_t *put; union { snd_kcontrol_tlv_rw_t *c; const unsigned int *p; } tlv; unsigned long private_value; }; struct soc_mixer_control { int min, max, platform_max; unsigned int reg, rreg, shift, rshift, invert; }
static const struct snd_kcontrol_new rt5625_snd_controls[] = { ... SOC_DOUBLE("Headphone Playback Switch", RT5625_HP_OUT_VOL, RT5625_L_MUTE_SFT, RT5625_R_MUTE_SFT, 1, 1), ... };
#define SOC_DOUBLE(xname, xreg, shift_left, shift_right, xmax, xinvert) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \ .put = snd_soc_put_volsw, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ { .reg = xreg, .shift = shift_left, .rshift = shift_right, \ .max = xmax, .platform_max = xmax, .invert = xinvert \ } \ }
/* * DAPM audio route definition. * * Defines an audio route originating at source via control and finishing * at sink. */ struct snd_soc_dapm_route { const char *sink; const char *control; const char *source; /* Note: currently only supported for links where source is a supply */ int (*connected)(struct snd_soc_dapm_widget *source, struct snd_soc_dapm_widget *sink); };
2014年7月9日 星期三
notes : android and alsa conf
alsa 和 android 的介面好像是靠 一個 conf 決定的。
有些說是 alsa.conf ,有些說是 asound.conf
在 android 4.2,是 /usr/share/alsa/alsa.conf 裡指定了 /etc/asound.conf
這個系統是在 /etc/asound.conf
這個檔案是在 /rootfs/rootdir/etc/ 下。
這是一個 prebuild folder, 該 file 也是預先寫定。
在 build system 時,rootdir 的內容會被整個 copy 到最後 image 的 root/ 中。
也就是說,實際系統的 /etc/asound.conf 就是這裡來的。
android 设置Audio Path 根据 getStrategy(stream_type) 和 getDeviceForStrategy() 取出對應的输出、输入,
然後 call setOutputDevice(mHardwareOutput, newDevice)
他會 call alsa_default.cpp
然後 會用到 s_route, s_open 控制到底層。
s_open 利用 deviceName(handle, devices, mode)
依照 Devices 動態組合出path字串,
用 snd_pcm_open( ) 依照 asound.conf 設定檔的 pcm 裡的 controls
所以 logcat 時可以看到:
有些說是 alsa.conf ,有些說是 asound.conf
在 android 4.2,是 /usr/share/alsa/alsa.conf 裡指定了 /etc/asound.conf
這個系統是在 /etc/asound.conf
這個檔案是在 /rootfs/rootdir/etc/ 下。
這是一個 prebuild folder, 該 file 也是預先寫定。
在 build system 時,rootdir 的內容會被整個 copy 到最後 image 的 root/ 中。
也就是說,實際系統的 /etc/asound.conf 就是這裡來的。
android 设置Audio Path 根据 getStrategy(stream_type) 和 getDeviceForStrategy() 取出對應的输出、输入,
然後 call setOutputDevice(mHardwareOutput, newDevice)
他會 call alsa_default.cpp
然後 會用到 s_route, s_open 控制到底層。
s_open 利用 deviceName(handle, devices, mode)
依照 Devices 動態組合出path字串,
用 snd_pcm_open( ) 依照 asound.conf 設定檔的 pcm 裡的 controls
所以 logcat 時可以看到:
D/AudioHardwareALSA( 674): openOutputStream called for devices: 0x00000002 I/ALSAModule( 674): s_close AndroidPlayback D/ALSAModule( 674): open called for devices 00000002 in mode 0, channel 2... E/ALSAModule( 674): s_open: AndroidPlayback_Speaker_normal E/ALSALib ( 674): external/alsa-lib/src/control/setup.c:565:(add_elem) Cannot obtain info for CTL elem (MIXER,'Speaker Switch',0,0,0): No such file or directory E/ALSAModule( 674): s_open: AndroidPlayback_Speaker E/ALSALib ( 674): external/alsa-lib/src/control/setup.c:565:(add_elem) Cannot obtain info for CTL elem (MIXER,'Speaker Switch',0,0,0): No such file or directory E/ALSAModule( 674): s_open: AndroidPlayback D/ALSAModule( 674): force handle channels to 2 D/ALSAModule( 674): Set 48000 , handl channel 2 D/ALSAModule( 674): Set PCM format to S16_LE (Signed 16 bit Little Endian) D/ALSAModule( 674): Using 2 channels for stream. D/ALSAModule( 674): Set stream sample rate to 48000 HZ D/ALSAModule( 674): Buffer size: 4096 D/ALSAModule( 674): Latency: 85333 I/ALSAModule( 674): Initialized ALSA PLAYBACK device AndroidPlayback_Speaker_normalError 是因為我改了 codec kcontrol name...
2014年7月1日 星期二
usbmon -- usb sniffer for linux
usbmon 是一個 kernel module.
要啟動 debugfs 的 support 才能使用。
kernel 起來後,mount /sys/kernel/debugfs
usb mon 就會在 裡面。
然後 cat XXX 就會把 usb 內容都log 出來。
詳細可以google 一下 usbmon 就可以。
也可以直接看 kernel document
...偷看其他人的 protocol 時很好用...
要啟動 debugfs 的 support 才能使用。
kernel 起來後,mount /sys/kernel/debugfs
usb mon 就會在 裡面。
然後 cat XXX 就會把 usb 內容都log 出來。
詳細可以google 一下 usbmon 就可以。
也可以直接看 kernel document
...偷看其他人的 protocol 時很好用...
標籤
- 3g (19)
- 工作的備worklog (93)
- 自言自語 (36)
- 草稿 (1)
- 亂亂寫 (8)
- 翻譯 (3)
- administration (76)
- alsa (7)
- android (299)
- apple (5)
- application (42)
- archlinux (1)
- audio (3)
- avr (6)
- backup_restore (2)
- bluetooth (5)
- bookmark (38)
- bootloader (21)
- browser (5)
- cellphone (28)
- command (8)
- Configuration (27)
- debug (7)
- django (1)
- driver (15)
- earphone (1)
- editor (1)
- EFL (1)
- ffmpeg (18)
- Filesystem (4)
- GCC (8)
- Gentoo (1)
- google (1)
- Graphic (3)
- hardware (40)
- hero (7)
- hibernation (9)
- iMX51 (38)
- Info (3)
- Install (30)
- java (4)
- Kernel (102)
- language (2)
- life (2)
- make (11)
- MantainLog (38)
- MCU_P (9)
- memo (8)
- microcontroller (3)
- MINGW (7)
- network (19)
- OpenCL (1)
- OS (11)
- package (3)
- pad (1)
- ProblemAndSolve (15)
- programming (8)
- Python (7)
- raspberry_pi (23)
- SDL (2)
- sensation (13)
- setup (3)
- software_package (36)
- SQL (1)
- suspend (2)
- ToDo (5)
- tool (3)
- ubuntu (1)
- VersionControl (45)
- Virtualization (15)
- VLC (5)
- wheezy (1)
- wifi (3)
- Windows (16)
- xiaomi (1)
- xperia (1)
網誌存檔
-
▼
2014
(93)
-
▼
7月
(7)
- AudioPolicyManagerBae : loadAudioPolicyConfig() l...
- 基本上就是 MIXER. 然後每個 可以/需要 控制的地方,都是一個 widget 然後用 rou...
- 首先要開啟 alsa-lib 的 debug message : SND_ERR 在 projec...
- snd_kcontrol_new : snd_soc_add_controls( ) sn...
- struct snd_kcontrol_new { snd_ctl_elem_iface_t...
- notes : android and alsa conf
- usbmon -- usb sniffer for linux
-
▼
7月
(7)