小手先の対応が完成した
一応、完成したので少しテストしてみてから公開します。VLCを使ったリアルタイム視聴はこれが最後かな?これ以上、うまくやるためのアイデアが今のところ無いので。
一応、完成したので少しテストしてみてから公開します。VLCを使ったリアルタイム視聴はこれが最後かな?これ以上、うまくやるためのアイデアが今のところ無いので。
ChameFX2Cap で VLC を用いて、リアルタイム視聴を行うときのTipsとして、チャンネルを切り替えた時に
ファイル→ネットワークストリームを開く
を行うと画像が安定する。
これを行うように現行ソフトを改良しようと考えている。
具体的には
1.VLCが起動しているかどうかの確認 (FindWindow)
2.起動していたら、アクティブ(前面に持ってくる)にする(SetForegroundWindow)
3.
みたいな感じである。
少しテストプログラムを書いてみる。
先週、失敗こいちゃったんで今週は気合を入れてやってみた。ほんの少しだけ改良したソフトでだ。

フォルダ選択していて、「あ、フォルダを作らねば!!」って思うときは良くあるんでそういう場面に対応しました。ソース的には定数を加えただけなんだけどね。
もうしばらく使ってみて、問題なさそうでしたら公開します。っていうか、フォルダ作成だけなんで主ロジックは変えていないんで大丈夫だと思うんだけどね。
リモコンの複数コード対応のソフトができたので、実戦投入。で、「二十面相の娘」と「コードギアス」にチャレンジするも不具合発生で両方とも撮れず……。
かなり、凹むね。しかも自分で作ったソフトだし、文句のやり場を持って行きようが無い。とりあえず、修正してテストしてみる。問題なさそうでしたら、サイドアップします。複数で利用している人には便利ではなかろうかと。
ちまちま、続くんだろうなぁー。
一週間ほど使っていて、それほど問題なさそうなのでリリースした。スケジュール周りに細かいバグがあるけど、実用できるし、それほど致命的ではないのですこしずつ直していく事にする。
新しいオモチャ (705NK) が届いたので、それで少し遊ぶことにする。まずは勝手アプリをインストール出来る様にしてみるか?
それが出来たら、SDKかな?でも、最近はSDKラッシュですよ。 iPhone, Android, Symbian って…。 Andoroid は Java だから除外するにしても、iPhone はどうすれば良いのだろう?ガワだけ買えるのかな?でも、買わないだろうな。しばらくの間は…。
少し妄想してみる。
1.現品で売っている地デジチューナモジュール
2.ICカードリーダのコネクタ
→小売もしてくれそうなところを数箇所見つけた
4.昇圧回路(MAX662 + コックロフト)
5.FX2と対応ファーム
6.視聴用ソフト
今のところ、わからないのは地デジチューナモジュールの I2C のコマンドセットだけだな。部品代だけなら、5千円くらいですみそう。逆に言えば、I2Cのコマンドセットさえわかればそこを抽象化して地デジチューナモジュールはどこのでも使えそう。3.5インチのHDDと物理的に同じ形状にすれば、PCに内蔵しやすいと思う。
とりあえず、ガワだけでも作ってみるか。
現在、ChameFX2Cap は cap_sts のブランチである cap_sts sea の成果物を使わせてもらっている。新しい cap_sts sea が 2ch で公開された。これと同時にファームも公開された。興味があるのはこのファーム。新しいコマンドが追加されている。bcas, ts の部分の初期化とキャプチャスタート、エンドを効率よく行うための拡張だ。
前回のバージョンではこの拡張コマンドの使い方が良くわからなかったので、昔のバージョンのファームウェアを使っていたが新しいバージョンはソースも公開されているのでこちらを使うことにした。新しいコマンドは今まで、ホストのソフトで指定していたことが、ファーム側で出来る様になっている。その部分を少し変更してみた。
上記の拡張で、かなりコード数を減らすことが出来る様になった。基本的なところは前回と変わっていないが、短いプログラムは精神衛生的にとてもよい。
本家のほうは BonDriver のインターフェイスを強化して、demux を可能にしている。すばらしい機能だが、こちらのユースケースとはあまりかぶらない。でも、新しいインターフェイスで絵が出るまで速くなったらしいし、軽くなったらしい。これは魅力的だ。コードをもう少し、読んでみようと思う。
連続して録画ができない現象ですが、解決しました。録画状態からネットワーク視聴への切替も問題なくできます。
原因はファームウェアとの組み合わせにあるようです。
今回の B25 化に際して、2chで見つけた cap_sts sea バージョン を利用させてもらっています。これは現在、cap_sts をベースに B25 化されたのは cap_sts sea004 〜 cap_sts sea007 までリリースされています。
これらにはそれぞれ、カメFX2のファームウェア fw.iic が同梱されています。このファームウェアは 3種類あります。cap_sts.c の中で、FX2_KAI1, FX2_KAI2, FX2_KAI3 となっています。
最新版は FX2_KAI3 です。当初はこちらのファームと cap_sts sea007 をベースにしたのですが、結果的に不具合が出ました。一発目の録画はうまくいくのですが、二発目以降が録画されません。同様にネットワーク視聴から録画への切替もうまくありません。
結果としてデータが流れてこないようです。
そこで以前のファームウェアで試したところ、問題なく動作しました。もうすこし、試してみて問題なさそうでしたら、公開いたします。
お待たせしました。
当方のB25の組み込み方に問題があるようで、連続しての録画(スケジュール録画含む)ができません。現在、原因を解析中です。いま、しばらくお待ちください。
以上、よろしくお願いいたします。
開発者のユースケースは1920x1200のLCDを主に使っている関係上、画面の一部にTV画面を映したい。地デジの解像度をそのままVLCにぶち込むと、画面のほとんどが食われてします。画面を小さくしておいても、チャンネルの切替時に再び、元の大きな画面に戻ってしまう。
できれば、最初から適度な画面の大きさで、なおかつネットワークでのストリーム読み込みに対応したいものだ。
少し調べてみると、以下のオプションで設定できることがわかった。
rtp://@:1234 --width=360 --height=360
これを起動時にオプションとして設定すればいいのだが、VLCの実行ファイル名と一緒にしたのでは、うまく動作しない。そこでオプションを保持しておけるようにした。「Network」をクリックすれば、適度な画面でネットワーク設定でVLCが起動する。だいぶ、使いやすくなった。
すこし、便利になったな。
VLCが使えるようになったので、PCをいじくりながらリアルタイム視聴が出来る様になった。ただ、チャンネル変更のたびに画面の大きさが変わってしまうのはいただけない。この辺の対策を施して、普通に使えるようにしよう。
このソフトの稼働時間はかなり高くなりそうだ。だって、自宅警備員のときは自分自身がPCの一部になっているもんな。
さらに便利な機能を追及していきます。
2ch に投稿された、cap_sts sea 007 を参考にさせてもらって、とりあえず、ChameFX2Cap に実装完了。引き続き、VLC周りを見ることにする。
長かったけど、かなり充実しています。
少し使ってみて、問題なさそうなら公開します。
お待ちください。
改善しているつもりが、バグを入れるような結果になったりしてけっこう進捗が遅くなっている。そろそろ、安定した基盤にして、機能追加に注力したい。
ある程度、まとまってきたのでページを充実させようかと考えているけど、ページ作成に時間をかけるくらいならソフトの制作を進めたほうがいいのでは?とも思っているし……。
うーん。
さて、どうするか…?
BSの局数って、けっこうあるのね(地デジより多いくらい)。BSにも完全対応をしてみた。それに伴い、三桁入力の準備も始めた。局名ファイルのフォーマットが少し、変更になった。
今まで端折って書いていたコードも見直しが必要になってきた。まぁ、少しずつと言うことで。
地方の局に対応した、チャンネル設定の要望があったので、すこし改良した。役に立てればいいのだが…。
昨日のバグだが、一行追加しただけで直すことができた。
「対策前」
if(m_ScheduleLock)
UpdateSchedule();
return 0;
「対策後」
if(m_ScheduleLock)
if(m_RecordStop == CAPTSFX2_STOP)
UpdateSchedule();
return 0;
→現在のステータスを見て、録画中ならスケジュールを登録するだけ。録画していなければ、そのスケジュールの状況を見て、既存のスケジュールと置き換えるようにした。
たった一行なんだよなぁー。
あとは登録と消去を繰り返すと、ポインタがずれることがありみたいです。
いまいち、再現試験ができていないので、徐々に直します。
不具合が発覚した。
録画中に次の iEPG ファイルをドラッグ&ドロップしたり、新しいスケジュールをサブミットすると、録画タイマーがおかしくなる。
原因は大体、わかっているので次のバージョンできっちり直すことにしよう。しかし、エンドレスだな。
でも、やるしかないな。
先日のトラブルは解消できた。コードの見直しも行った。けっこう、すっきりしたコードになったのはうれしい。スレッドは一つ減らせた。今まではスケジュールの更新にスレッドによるポーリングをおこなっていたが、今度はスケジュール更新時にスケジュールダイアログからメッセージを送って、そのタイミングで更新を行うようにした。リモコンの信号を受け取るのと同じ考えだ。
スレッドが減ったことで、システムの負荷もだいぶ減った。録画時間の不具合もスレッドの衝突のようで、競合がなくなったことにより、的確な表示が行えるようになった。
使い方のページを更新すれば、全部完了だ。
撮り溜めたTS抜きのファイルを見ていて2つほど気になったことがある。
1.録画開始のプレタイムが反映されていない。
2.ポストプロセスがしくるときがある。
1.については原因を探って、対策すること。
2.は録画されるファイルの大きさに応じての待ち時間が必要になるような感じだ。録画時間に応じて、待ち時間ができるようなメカニズムを入れる必要がある。
なかなか、終わらないな。楽しいけど。
使っていると、色々と気づくところが出てくるので改良(?)をしている。
今回の改良は、
+リプレースモードに入っていることがわかるようにする
+スケジュールのリプレースを行うときの確認
をするようにした。
これ以上の改良は少し、時間がかかりそうだ。もう少し使ってみたらページを更新します。
前回までの更新でソフトはできあがったと思ったけれど、色々と修正するところが出てきたのでまとめて直してみた。
これで、だいぶ安定してきたし直近で出来そうなことはとりあえずつぶせた。
そろそろ、本業に戻ります。
YDBC-30なんだけど、電源OFFの時でもデータは流れているんだね。で、リモコンの信号を送ってみたけどとりあえず、反応しなかった。最後のチャンネルがそのまま保持されているっぽい。だから、電源Onのときは最後のチャンネルが見えるのですね。
当たり前だけど、自分で確かめるのが大事。
問題が解決すると、他にもやることが出てくるのがソフト作りだ。
1.ファイルネームの生成
2.アイコン作り
3.リストコントロール
4.予約用のキューの作成
5.iEPG のパース
6.他のアプリとの連携
今後はリストコントロール部分を作ってみるか。
どこまでできるかな?
システムが完成したときにいつも思うのだが、最終的にはものすごくシンプルなつくりになる。今回のシステムも現在のところはマニュアルでの録画にしか対応していないが、最終的には予約録画が行えるようにするつもりである。予約録画とマニュアル録画の違いはイベントを誰が発生させるかということである。今までのシステムでは録画ボタンを押して、録画のハンドラが直接呼び出されていた。今回から、録画時間をキューにためて、それを順次実行できるシステムにした。これによりリストされた開始時刻、終了時刻を読み出しながら、実行することができる。
ベース部分はできた。
あとはこれを拡張していくだけである。
カタチや基本性能は問題ないようだ。きれいに抜けるし、再生も滑らかだ。アプリケーションはさらにシンプルになってきた。

でも、Winアプリつくりの経験不足は否めないな。エンジン部分のスレッドとは別にアプリ用のスレッドを立ててみたけど、動作が不安定。Webで調べるとけっこう、ありがちなミスみたい。こういうのをさくっと直して、本格的なアプリに仕上げていきたいよな。
毎回のことですが、がんばります。
TS抜きのコントロールソフトはだいぶ出来てきた。でも、完成に近づくにつれて、なんか違うことを始めてしまうのは自分だけではあるまい。

こんなことをはじめてしまった。一応、動作するところまではできた。はっきり言って無駄な実装だがこう言うのを作るのは楽しくてしょうがないのだ。わかって欲しい。
TSのストリーム処理で使っているスレッド、B-CASのデータの取り込みに使うスレッドはOptimizeの開発したミドルウェアで処理されるのは前回のBlogで書いたとおり、システム全体を定期的に取り仕切るためのスレッドが必要で、今回はこれを実装した。この実装により、録画時間を監視することができるので、留守録機能を付けたときには活躍しそうだ。

みんなが作っているのはかなりスパルタンだ。俺のテクではあそこまではまだ無理かな?とりあえず、カメFX2+YDBC-30 専用のシンプルな録画機能に徹した。B-CAS の取り込みはデフォルトで出来るので、そこそこ便利に使える。
寝ないでプログラムしていたから、少し ハイ 。 たまには良いかもしれないし、週末はこうでなきゃだめだな。
進捗をまとめると
1.Windowsのタイトルの文字を変える →OK
2.ボタンの文字を変える、イネーブル、ディセーブル →OK
3.チェックボックスのチェックと読み出し →OK
4.ファイルダイアログの出し方 →未
5.メニューのチェック方法 →未
6.ファイルのオープン →未
7.ファームウェアのダウンロード →OK
8.スレッドを立てる →OK
9.ファイルの書き込み →OK
cypress の新しいドライバでオーバーラップI/Oになって、スレッドを多用するようになった。Optimizeが供給しているミドルウェアを用いて、極力インパクトを与えないで GUI化を試みた。あまり、かっこいいコードではないけど、とりあえずボタンに連動して番組の録画が出来る様になった。ただ、時々ECMを取り逃がすことがあり、録画がしくる場合があるので、傾向を調査して対策する。
ただ、今使っている方法以外の実装は少し時間がかかりそう。でも、この手法のおかげでかなり、高速なUSBの取り扱い技術を得ることができた。これで鬼吸いを作ったら、更に2−3倍の速度での吸出しも可能になるだろう。
スレッドの取り扱いだが、スレッドの終了は自身の終了を待つようにとのアドバイスが、ウェブ上で随所で見られた。最初はなんのことか全くわからなかった。現在のOptimizeのミドルウェアでスレッドからのコールバック関数は bool が戻り値になっている。この状態を適切に見極めて、外部から終了させることが肝要だ。
10.ファイルのクローズ →OK
11.他のアプリとの連携 →未
12.CTimeとCTimeSpanの取り扱い →未
13.タスクトレイへの格納方法 →未
14.リストコントロールの取り扱い →未
15.データベースとの連携 →未
ほとんど、未ばかりになってしまったがリモコンも使うことが出来る様になった。これで、あとはWindowsのプログラミングのみに集中していけばよくなったの大きい。もうすこし、がんばってみて、それなりの成果が出たら公開する。
開発力は復活してきたけど、完全なロジックを展開出来る様にするには実際にソフトを書くのが
一番早いし、今後にもつながる。
という事で、リハビリも兼ねて、Windowsのアプリを VS2008 環境で作り始めた。
VS2003はUIがちょっときつかった。VS2008になって少し改善されたのがうれしい。
MFC特有の作法があって、完全に忘却のかなたなので、おさらいが必要。
1.Windowsのタイトルの文字を変える
2.ボタンの文字を変える、イネーブル、ディセーブル
3.チェックボックスのチェックと読み出し
4.ファイルダイアログの出し方
5.メニューのチェック方法
6.ファイルのオープン
7.ファームウェアのダウンロード
8.スレッドを立てる
9.ファイルの書き込み
10.ファイルのクローズ
11.他のアプリとの連携
12.CTimeとCTimeSpanの取り扱い
13.タスクトレイへの格納方法
14.リストコントロールの取り扱い
15.データベースとの連携
多分、作っていく上で上記以外の様々なことが出てくるはずなので少しずつプログラムしていくことにする。
ワンセグって13セグメントあるデジタル放送のうち、一つのセグメントを使っているからワンセグって言うのはもはやコモンセンス。
地デジのTS抜きをやっていて気が付いたんだけど、B25に入れないで、吸い出した TS を GOM-Player で見てみると、低解像度でカクカクした映像を見ることができる。実はこれがワンセグ放送。
ワンセグは暗号化していないので、B25を通さなくてもそのまま見れる。
ワンセグ、ワンセグって言われて、1/13 セグメントって頭で理解していても、実感が今まで無かったのが氷解したのがうれしかった。
コンピュータは生活を豊かにしないといけない。TS抜きがほとんど実用になってきたので、あとは適当にエンコすれば、PSP や iPod でのモバイルプレイバック環境が構築できそうだ。
ここらで開発力にカンフル剤を注入する意味で、すこしソフトを書いてみることにする。
乞うご期待。
まぁ、こんな内容でまとまりました。
少しずつ、コンテンツを増やしていきます。
チューナーの改造も当初の予定通り進んでいる。けっこう、いい感じに仕上がりそう。問題はソフトだな。すこし、考えてみるか。
昨今、一部で大流行の TS-抜き のページを作成してみた。手元にある資料を色々と公開していく予定だ。
盛り上がってくれるとうれしい。
改造ファームを作るときに役立つだろうと思って、YDBC-30(a.k.a ユニデン DT300) のリモコン信号を調べておいた。
そのうちにリモコン対応のファームが出てくると思う。
長いこと放置していて、本当にごめんなさい。
を使えるように整備しました。
FX2(EZ-USB)のファームウェアとホストソフトウェアを一体化するときに大変、便利です。
FX2を使いこなす上で、ファームウェアを事前にCの配列としてホストSWに統合しておく事はものすごく便利である。でも、そのためにはバイナリやHEXファイルを読み込んで、Cの配列形式に変換する必要がある。
Cypressの昔のツールにはついていたけど、昨今のには付いていない気がする。また、UNIX系 OS はそもそもWindowsのツールは使えない。
そこで、bin2c を作ってもらった。
かなり、以前に作ってもらっておきながら、まだデビューさせていない。少し、落ち着いたところでこちらも紹介したいと思う。
おたのしみに
Makefile とかの細かい不具合を修正しました。
カメFX2の俺が考えている Killer Application が公開されたね。今後は様々なユーザが参加して、強化されていくと思う。一助にでもなればということで、SDCCでポートした結果を公開することにした。
http://www.teamknox.com/sdccKnowHow/sdccKnowHowj.html
他のFX2アプリにももちろん、流用可能だ。
SDCC でビルドした Hex ファイルを開発者に送って、動作確認をしてもらった。いくつか設定をなおしたけど、
ばっちり、OKっす!!
ページを明日以降、作成しますよ。
楽しみ。
EZ-USB FX2 でUSBの開発と言うと、オプティマイズのボードと fx2fw をたたき台にしているケースが多いのではないだろうか?
とりあえず、この fx2fw も SDCC 化してみた。これで、拡張するときも SDCC を利用できるので、お試し版Keil のコンパイラが持つファームのサイズ制限を気にせずに開発することが出来るかもしれない。
これも近日中にアップします。
Keil の 8051 用コンパイラで書かれた FX2+CPLD のコードを SDCC で書き直すことが出来た。実質的な作業は一時間程度ではなかっただろうか?ビルドまではすぐに出来たけど、Renum がなかなか出来なかった。
先の fenrir 氏の掲示板の書き込みを参考にさせてもらった。ディスクリプタテーブルのアライメントがうまくないと Renum 出来ないのだ。
動作するかどうかは保証の限りではない。なんせ、デバッグ環境がないからまともにデバッグできないのだ。
開発者に送って、評価してもらうことにしよう。そうしよう。
Fenrirさんのページを参考にさせてもらって、Windows 用で作ってみた。まだレナムしかしていないけど、何となく良い感じに仕上がった。本命は件のキラーアプリのSDCC化でフリーウェアにすることだ。もう少ししたら、ページをまとめてアップします。
でも、まじ Fenrir さんすごい。
こういう人がモノを作ってくれるなら、日本もしばらく安泰。
カメレオン USB はその多くの使い道から、一世を風靡した。でも、時代は移り変わり、USB も規格としては 3.0 が取沙汰されている。
このカメレオン USB の 2.0(Hi-Speed Version) を待っていたのは、ウェブマスターだけではあるまい!!
そう、Chameleon USB FX2 である。オプティマイズより発売された。このキットは既に発売されている FX2 + CPLD-MAX2 を組み合わせたものである。コンセプト的には初代カメレオンと同じだが、初代のキラーアプリであるロジアナに匹敵するキラーアプリケーションを持っている。
今の段階ではまだここには書けないけど、遠からずコンテンツとして、当Web ページにて公開する予定である。
SDCC 2.7.0 でビルドしたファームウェアはとりあえず、 Renumlation まで行くようになった。専用基板が手元にないので、システムとしての検証はまだ出来ないがたぶん、大丈夫だろう。
引っかかったのは、code 領域とデータ領域がかぶっていたらしい。
Makefile 中の
XDATA_START = 0x1000
↓
XDATA_START = 0x2000
に変えたら動作を開始した。
これからも細かい話はたくさん出てきそうだな。
今まで作った、ファームウェアを SDCC 2.7.0 でビルドしようとしている。最初に躓いたのが、
#pragma
で指定する構文が 大文字か小文字のいわゆる case sensitive かどうかと言うところだ。 具体的には
#pragma SAVE
#pragma NOIV
...
#pragma RESTORE
の部分をそれぞれ、小文字にすればOK.
次はこのファームがきちんとロードされるかどうかを試してみる。
Linux上で USB 開発を行う場合に役立ちそうな Tips を書いておく。
ファームウェアをバイナリとして持たせて、ホストのソフトウェアの起動時にそれを読み込んでロードするのは普通に行われることだと思う。インテルヘックスを読み込ませるのももちろんありだけど…。
で、Windowsの環境だと、hex2bix なんてコマンドがある。こんな感じで使う。
hex2bix -m 8192 $(TARGET)
Linuxなどでは objcopy を使う
objcopy -I ihex -O binary --pad-to 8192 main.hex main.bin
まぁ、こんな感じで。
あることを始めたいので、SDCC を PS3-Linux/ubuntu にソースからインストールしてみた。
./configure
make
sudo make install
なんの問題もなく、あっさりインストール完了。
FX2 の開発環境を整えていきます。
SPE との連携を模索するのだ。
以前にCQ出版社の「オリジナルUSB機器の設計と製作」で掲載させてもらった記事をMacにポーティングしている。
Macの素晴らしい所は開発用のソフト(XCode)が標準で本体に添付されているので、やる気のある人は誰でもソフトを組む事が出来るのだ。
Webマスターもやる気はあるのだが、スキルがついてこないので若干空回り気味ではあるが、とりあえずこちらの方のを参考にさせてもらって、ファームウェアのダウンロードまではなんとか出来た。
後は使えるパイプラインを求めて、そこにデータを流し込めば完成しそうである。

基板を接続すると、ステータスが変化していって、ファームゥエアのダウンロード後に idle になる。
鬼吸いの共同開発者が上京したので、飲む事に…。いつもとは違う視点での会話は大変楽しい。まったく違う視点、現場での開発は本当に刺激になるし、励みにもなる。
本職では手は動かさなくなってしまったが、趣味(こっちが本職?)ではマネージャーであり、設計者であり、利用者であることを再認識した次第。
協力も申し出てくれたが、本当にテンパッた時には頼りにしてしまうかもしれないけど、とりあえずは自分の力でがんばるつもり…。