三探音效卡值controls

2021-06-18 17:37:34 字數 2209 閱讀 1642

三論音效卡值controls:

首先我們操作control

裝置節點檔案時候要先開啟,看看開啟函式做了什麼?

snd_ctl_open(struct inode *inode, struct file *file)

err = nonseekable_open(inode, file);//設定filp->f_mode,這樣核心就不會讓lseek

呼叫成功

card = snd_lookup_minor_data(iminor(inode), sndrv_device_type_control); //得到snd_card結構體

err = snd_card_file_add(card, file);//設定snd_monitor_file結構體,並放到card->files_list鍊錶

/*申請並初始化snd_ctl_file結構體*/

ctl = kzalloc(sizeof(*ctl), gfp_kernel);

init_list_head(&ctl->events);

init_waitqueue_head(&ctl->change_sleep);

spin_lock_init(&ctl->read_lock);

ctl->card = card;

ctl->prefer_pcm_subdevice = -1;

ctl->prefer_rawmidi_subdevice = -1;

ctl->pid = get_pid(task_pid(current));

file->private_data = ctl; //把設定好的snd_ctl_file結構體放到上面申請的file->private_data

list_add_tail(&ctl->list, &card->ctl_files);  //吧snd_ctl_file結構體放到card->ctl_files鍊錶

總結:這個開啟函式:申請和初始化snd_monitor_file結構體、snd_ctl_file結構體,並放到card的對應鍊錶成員。

操作該control

裝置節點,主要通過呼叫snd_ctl_ioctl來實現多種設定.

例如使用者空間設定某個control:

snd_ctl_elem_write_user(ctl, argp)

control = memdup_user(_control, sizeof(*control));  //從使用者空間獲得snd_ctl_elem_value設定好的結構體

result = snd_ctl_elem_write(card, file, control);

kctl = snd_ctl_find_id(card, &control->id); //獲取

card

裡對應的

control

裡的snd_kcontrol結構體

result = kctl->put(kctl, control);  //呼叫上面獲取的snd_kcontrol結構體的put函式,傳入的引數為

card

裡對應的

control

裡的snd_kcontrol結構體和從使用者空間獲得snd_ctl_elem_value設定好的結構體,所以可以推測就是用後乙個引數來設定前乙個引數。

加入這個control是soc_double_tlv("headphone playback volume", ac97_headphone, 8, 0, 31, 1,out_tlv),那麼對應的put函式為snd_soc_put_volsw:

int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,truct snd_ctl_elem_value *ucontrol)

/*處理從使用者空間傳入的值*/

val = (ucontrol->value.integer.value[0] & mask); 

..........

unsigned int reg = mc->reg;  // 這裡對應ac97_headphone暫存器

snd_soc_update_bits_locked(codec, reg, val_mask, val);

change = snd_soc_update_bits(codec, reg, mask, value);

snd_soc_write(codec, reg, new);  //new就是上面的val,設定暫存器,這樣使用者空間就能實現對音效卡的靈活性設定了。(像設定聲音)

細探顏色值

transparent ie8及更早的版本不支援,顯示為black color name 包括16各基本顏色關鍵字,28各系統顏色,多個svg顏色關鍵字 hex 16進製制型顏色值,rrggbb或 rgb,每個引數值取值範圍00 ff rgb,rgb r g b r指red,g指green,b指bl...

再探MFC 三 選單

使用頂層選單 建立選單資源 並在應用程式執行時載入生成的選單.建立選單資源 建立選單資源 命名選單資源id 編輯選單項id 載入並顯示選單 主對話方塊屬性的 menu 項設定為選單 id.或者主對話方塊的 oninitdialog 函式新增如下 塊.cmenu menu menu.loadmenuw...

引數化(三) 引數嗅探

在之前的隨筆中我提到過引數嗅探,這是非常重要的概念。下面我們深入的研究一下引數嗅探 首先我們知道批處理可以是引數化的或者非引數化。引數化的批處理計畫有兩種型別 prepared 或者 proc 前者對應帶有至少乙個引數的sys.sp executesql的執行,並且從t sql批處理,或者應用程式通...