link もっと前
   2017年 6月 15日 -
      2017年 6月 6日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

ALSA のミキサーと regmap その 1

その 1その 2

メモ代わりの超マニアックな話です。なぜ ALSA のドライバ、特にミキサーが regmap を使うのかを調べました。

ALSA のドライバでミュートの ON/OFF とか、ボリューム上げ下げの機能を実装するときに、kcontrol というフレームワークを使います。

ボリュームはさらにもう一つ仕組みがあって面倒なので、ミュート ON/OFF スイッチを例にします。下記は Texsas Instruments の TAS5711 という DAC のドライバです。

kcontrol の宣言

//from linux-4.4/sound/soc/codecs/tas571x.c

static const struct snd_kcontrol_new tas5711_controls[] = {
...
        SOC_DOUBLE("Speaker Switch",
                   TAS571X_SOFT_MUTE_REG,
                   TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT,
                   1, 1),
};

引数の意味はスイッチの名前(Speaker Switch)、レジスタのアドレス、L チャネルを制御するときのシフト数、R チャネルを制御するときのシフト数、最大値、反転するかどか、みたいです。

「反転するかどうか」を何に使っているかというと、通常 ON = max 値, OFF = min 値という意味ですが、ON = min 値, OFF = max 値にするようです。TI TAS5711 仕様書の SOFT MUTE REGISTER (0x06) を見た感じ、Mute するときは 1 設定しろとありますので、多分合っていると思います。間違ってたらごめんよ。

もちろんこれだけではダメで、struct snd_soc_codec_driver の controls にポインタを代入し、snd_soc_register_codec() に渡す必要があります。

どうも tas571x.c のドライバは TAS5711 と TAS5717 という 2つの DAC に対応するため、渡し方がちょっと変わってるので、TAS5086 用のドライバを見ます。

kcontrol の宣言

//from linux-4.4/sound/soc/codecs/tas5086.c

static const struct snd_kcontrol_new tas5086_controls[] = {
        SOC_SINGLE_TLV("Master Playback Volume", TAS5086_MASTER_VOL,
...

static struct snd_soc_codec_driver soc_codec_dev_tas5086 = {
        .probe                  = tas5086_probe,
        .remove                 = tas5086_remove,
        .suspend                = tas5086_soc_suspend,
        .resume                 = tas5086_soc_resume,
        .controls               = tas5086_controls,    //★snd_kcontrol_new 配列のポインタをここに渡している★
        .num_controls           = ARRAY_SIZE(tas5086_controls),
        .dapm_widgets           = tas5086_dapm_widgets,
        .num_dapm_widgets       = ARRAY_SIZE(tas5086_dapm_widgets),
        .dapm_routes            = tas5086_dapm_routes,
        .num_dapm_routes        = ARRAY_SIZE(tas5086_dapm_routes),
};

static int tas5086_i2c_probe(struct i2c_client *i2c,
                             const struct i2c_device_id *id)
{
...
        if (ret == 0)
                ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_tas5086,    //★snd_soc_codec_driver のポインタをここに渡している★
                                             &tas5086_dai, 1);

        return ret;
}

こんな感じです。本当に言いたかったことは regmap ですけど、出てこないうちに終わってしまいました。また次回にします。

[編集者: すずき]
[更新: 2017年 6月 17日 18:29]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

Wizardry

昔買って放置していた「Wizardry 囚われし亡霊の街」を進めているのですが、シナリオ 1 終盤(アウダークルク迷宮 B6F)辺りで、進めなくなりました。敵が強すぎます。

自キャラ HP 600 に対し、同レベルの敵が 2000 ダメージ以上ぶち込んでくるので必ず一撃で死にます。レベル上げれば何とかなる系なのかなあ??

シナリオ 3 まで一気に買ってしまって後悔しています。こんなマゾいバランスだとは思いませんでした。せめてシナリオ 1 はクリアしようと思いますが、シナリオ 2, 3 は多分やらないです。

Facebook のコメントで B6F 辺りから運ゲーらしいことを教えてもらいました。うーん、そういうもんなのか。

メモ: 技術系の話は Facebook から転記しておくことにした。

パーティー編成

今のパーティー編成は、侍 x 2 と野伏と司祭 x 3 という大変偏った構成にしています。

何でかというと、侍は武器が強いことと、ノーリスクで敵 1グループを一度に殴れる強力な固有スキルを持っているためです。前作の「囚われし魂の迷宮」では大変強かったので、今作も強いだろうと期待して侍を入れました。

野伏は盗賊の上位互換です。盗賊の技能+僧侶系の魔法の一部を覚えます。Wizardry は扉や宝箱に鍵だの罠だのが掛かっていて、いきなり開けると罠に殺されるので、解除するために盗賊の技能が必須です。

司祭は僧侶系、魔法使い系の魔法を両方覚えます。Wizardry はダンジョンで拾ったアイテムが全て「不明な何か」になるので、鑑定スキルを使わないと何を拾ったかすらわかりません。司祭は 1人は居た方が良いです。

司祭の人数がやたら多いの魔法の使用回数が簡単に尽きないように人数でカバーするためです。Wizardry は魔法が 9レベルに分類されていて、各レベル最大でも 9回しか魔法が使えません(使用回数は作品に依って違うことがある)。どんなにキャラクターレベルが高かろうが 9回同じ魔法を使ったら同じレベルの魔法は使えません。特に魔法使い系 Lv.8 はワープ系の魔法がありまして、ここの使用回数が尽きてしまうと、ダンジョンから帰るのが大変面倒になります。

ダンジョンには魔力を 3 減らしてくるクソみたいな敵も居て、魔法を使わずとも使用回数が 0 になることがありますが、さすがに司祭が 3人も居れば全員の魔法が尽きることはありません。その前に殴られて死ぬ方が多いです……。

強すぎる侍、弱すぎる魔法

パーティー編成の思惑は大体当たっていたのですが、手痛い計算違いは攻撃魔法が弱すぎて後衛が置物になってしまったことです。

侍は武器さえあればメチャクチャ強いです。特に中盤の岩融という槍がバカみたいに強く 1撃で 1,000 以上のダメージを与えられます。ほとんどの敵が一撃で沈みます。

また今作は課金アイテムとして虎徹など、シナリオ後半で出てくる刀を序盤から使えます。試しに買ってみたところ、攻撃力不足で苦戦していた序盤の敵が紙切れのごとく蹴散らせました。武器の差が異常すぎます。

司祭は計算違いでした。魔法で強力な攻撃が出来ると思っていたのですが、全然ダメでした。僧侶系最強の Smite や、魔法使い系最強の NAL Burst ですら 200〜300 ダメージと弱く、3人がかりで連発してやっと効き目があるかどうかです。弱すぎます……。

異常な強さの敵

このゲームで一番やる気が削がれるポイントは「敵の異常な強さ」です。敵が 4桁以上のダメージを与えてくるので、前衛、後衛関係無く即死します。それでも防ぐ手立てがあるならまだ良いんですけど、防具による防御力は 100 行けば良い方で気休めにもなりません。防御系の魔法もほとんどありません。

侍辺りが先攻で攻撃できれば倒せるんですが、敵の方が圧倒的に速くて先攻が取れません。完全に詰んでます。どうしたら良いんだ。

クソゲーにノミネート

雑魚に全く勝てないので、私は数歩歩いてセーブ、敵にぶち殺されたらリセット&ロード、を繰り返しながら進めています。はっきり言って、全く面白くないです。しかもこのゲームは動きが全体的に遅いので、さらにイライラ度が上がります。

一体、他の人はどうやってクリアしているのか調べていたら、今作がクソゲー・オブ・ザ・イヤーにノミネートされているのを見つけてしまいました。あー、他の人も同じこと思ってるのね……。

前作はモッサリしてる以外は、そこそこ面白かったんだけどなあ?今作はちょっとクリアする気が起きないです。

[編集者: すずき]
[更新: 2017年 6月 8日 23:32]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

USB 3.0

先日(2017年 6月 2日の日記参照)の続きです。USB 3.0 機器のそばにワイヤレスマウスやワイヤレスキーボードのレシーバーを設置すると、動かなくなってしまう現象についてです。

まず、本当に USB 3.0 のせいなのか気になります。

CQ 出版「USB 3.0 設計のすべて」を良くわからんながらもパラパラ眺めているのですが、USB 3.0 は PCI Express の PHY を使い回せるという記述がやたら出てきます。

なるほど、高速 SerDes 設計は難しいので USB 3.0 用に新たに起こすより、PCI Express の PHY を使い回せる方が半導体ベンダも楽だし、結果的に安くなるしハッピーですよね。

5Gbps というバカっ速な信号の取り回しは大変ですが、物理層、コネクタ、ボード設計に PCI Express のノウハウが使い回せることも恩恵だそうです。これも結果的に値段に反映されてハッピーですね。

だから USB 3.0 の物理層と PCI Express の物理層の間で、2ペア作動信号による全二重通信、8b/10b エンコード、そして信号速度 5Gbps など共通点が多いのは、偶然では無いのです。

5Gbps の信号速度と 2.4GHz 無線の関係

USB 3.0 の信号速度は 5Gbps です。ということはクロックは 5GHz のはずで、一番強烈なノイズは 5GHz 付近じゃないかと思ったのですが、何故 2.5GHz なのでしょうか?

まず確実に言えるのは、USB 3.0 にクロック信号だけを伝える配線は存在しないことです。PCI Express や USB 3.0 の 8b/10b エンコードは信号とクロックを一緒に送る、埋め込みクロックと呼ばれる信号の送り方をするため、5GHz で単純に振動する信号はありません。

USB 3.0 は 5Gbps と名乗るからには、送信側、受信側ともに信号を 5G回/s で見ている、つまり 1bit の間隔が 0.2ns になっているはずです。もし 0.2ns 間隔で 1, 0 を交互に繰り返すような信号なら 2.5GHz の正弦波に近い信号になるため、2.5GHz 付近にノイズが発生するはずです。

しかし 8b/10b の信号表を見ていると 1, 0 が交互に出るパターンも存在しますが、1, 1, 0, 0 のように同じ値が 2回以上続いてから反転するパターンの方が多いように見えます。

少ないとは言え 8b/10b エンコーディングで 1, 0 のパターンが生成される以上、USB 3.0 が 2.5GHz 帯にノイズを出すことは間違いないと考えられますが、この考え方であってるんでしょうか?何だかスッキリしません……。

規格でのノイズ対策は?

本に依れば、コネクタやレセプタクルに厳しく品質を求めており、スペクトル拡散クロック(SSC)が必須で EMI 対策を頑張っているようにも見えます。

SSC で特定の周波数にピークが来るようなノイズは防げるけど、如何な SSC と言えども満遍なくノイズが発生するのは避けられません。また、ワイヤレスマウスやキーボードの出力がそれほど強いとは考えにくいので、無線がノイズに負けやすいのかもしれません。

[編集者: すずき]
[更新: 2017年 6月 8日 22:06]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

DTI の実力

先日(2017年 5月29日の日記参照)の続きです。

DTI から PPP 接続の ID やパスワードが送られてきましたので、早速、接続先を切り替えて通信速度を測ってみました。

比較しやすいように、先週に計測した WAKWAK の通信速度と重ねてグラフを作成しました。計測した日が異なるので厳密な比較ではありません。あと横軸の時間は大体同じに揃えましたが、計測の都合上 10分くらいズレてます。


日曜の速度推移、WAKWAK v.s. DTI

DTI は速いです。けっこう速度が揺れていて、今後、人が増えたら WAKWAK と同じ結末になるのでは……という不穏な気配もありますが、今のところ、日中〜夕方の速度は圧倒的です。10倍以上速いです。

これなら Amazon の漫画も数分でダウンロードできます。DTI にして良かったです。

[編集者: すずき]
[更新: 2017年 6月 6日 00:46]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2017年 6月 15日 -
      2017年 6月 6日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 12/7 11:16

カレンダー

<2017>
<<<06>>>
----123
45678910
11121314151617
18192021222324
252627282930-

最近のコメント 5件

  • link 17年11月24日
    すずき 「SHA-3 はもう決定していて、kecc...」
    (更新:11/26 17:09)
  • link 17年10月21日
    すずき 「家だとブリッジで良いんですが、会社だとそ...」
    (更新:10/28 12:43)
  • link 17年10月21日
    hdk 「VirtualBox 用に ICS 使う...」
    (更新:10/26 01:13)
  • link 17年09月23日
    すずき 「そうですね、体験していたはずなんですが、...」
    (更新:10/17 22:53)
  • link 17年09月23日
    hdk 「我々も小学校低学年の頃はまだ学校週5日制...」
    (更新:10/16 23:53)

最近の記事 3件

link もっとみる
  • link 17年11月24日
    すずき 「[モナコイン] 仮想通貨の勉強がてら、モナコイン(以外の仮想通貨に...」
    (更新:12/07 11:16)
  • link 17年12月01日
    すずき 「[ARM で CubeHash] 先日(2017年 11月 30日...」
    (更新:12/03 01:35)
  • link 17年11月30日
    すずき 「[モナコインと CubeHash] 先日(2017年 11月 24...」
    (更新:12/01 02:24)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報