************************************
***** ptTimer (PT録画タイマー) *****
************************************

PT1/PT2(以下、PTと略す)で番組情報を取得し自動で録画をする為のプログラムです。
PT専用の為、BonDriverは別途不要です。ptTimer.exe 一つでEPG取得から番組検索、
番組の予約登録、そして録画まで行います。
録画できる状態になるまでの手順をできるだけ簡単にをコンセプトに開発しました。

※ 付属のBonDriver_ptmr.dllはptTimer.exeの起動には必要ありません(詳細は後述)。
※ より簡単に使う事に主眼が置かれている為、簡単な録画機能しか実装してません。
   録画後に別プログラムを実行する機能やPTの複数枚差しには対応していません。
   また、WEBブラウザやメールなどで外部からの録画予約する機能もありません。
   高度な予約録画を行いたい場合は他のプログラムをご使用下さい。


・ セットアップ

1. アースソフトのサイトからドライバとSDKをインストール。
2. 書込みのできるディレクトリにptTimer.exeを入れて起動。
  (最終的にptTimer.db, ptTimer.ini, channel.txt, record.logの4つのファイルが
   作成されます。)
3. タスクトレイのアイコン(田の様なデザイン)を右クリックしメニューを表示。
4. 設定を選択し、設定ダイアログを開く。
5. チャンネルスキャンボタンを押して暫く待つ。
6. OKボタンで設定ダイアログに戻り、録画先等を指定し設定ボタンで設定完了。
7. メニューからEPG取得を選択して暫く待つ。
  (タスクトレイのアイコンが口の様なデザインに変わります。EPG取得状況に従い、
   下から緑色で埋まって行きます。)
8. EPG取得が終わるとタスクトレイのアイコンが田の様な形に戻ります。
9. タスクトレイのアイコンを左クリックすると番組表が開きます。
   録画したい番組を左クリックするとその番組が予約されます。


・ 設定について

録画マージンは、録画データの前後に何秒間余裕を持たせるかを指定します。前後、
別々の値を設定することができます。(最低値は1秒です。)

復帰マージンは、サスペンド(スタンバイ・休止状態)から何分前に復帰するかを指定
します。(最低値は1分です。)

サスペンドマージンは、録画処理終了後、指定時間(分)内に次の予約がある場合には
サスペンドへの移行を抑制します。(最低値は復帰マージン+2分以上です。)

シャットダウンマージンは、録画処理終了後、指定時間(分)内に次の予約がある場合
にはシャットダウンを抑制します。(最低値はサスペンドマージン値以上です。)

EMM処理は、録画データ中のEMM情報をカードに送信するかを指定します。

録画先ディレクトリは、録画データを保存するディレクトリを指定します。指定しない
場合はカレント(大抵はptTimer.exeのある)ディレクトリに保存されます。

録画終了後処理は、録画処理終了後の処理をどれにするかを指定します。スタンバイ・
休止状態の場合はサスペンドマージンの値が、シャットダウンの場合はシャットダウン
マージンの値が参照されます。何もしないの場合は文字通り何もしません。

チャンネルスキャンは4つのチューナすべて同時に行います。よって、かなり高速に
完了します。スキャン結果の反映は常に既存の値を追加する形で行います。

設定を反映させる場合は、設定ボタンを押して設定ダイアログを閉じて下さい。


・ EPG取得について

EPG取得は0時と12時の2回、PTの4つのチューナーを使用して自動的に行います。
4つのチューナーを効率的に利用する事でできるだけ速く取得終了する様にしました。
(地上デジタルは各チャンネル毎に、BS/CSは各3チャンネルのみで取得します。)
メニューからEPG取得を選択すると直にEPG取得処理が始まります(手動取得モード)。

録画中でも時間が来ると空いているチューナーを使用してEPG取得を行います。
録画処理の方が優先されますので、EPG取得中でも録画を開始できます。
(EPG取得は残ったチューナーがある限り継続して行います。地上デジタル、BS/CSの
 どちらかのチューナが録画処理で埋まった場合は、埋まった方の処理を中止します。)

EPG取得時刻は設定ファイルを編集する事で変更可能です(詳細は後述)。


・ 予約録画について

録画処理は4つのチューナーを自動的に割り当てて行います。チューナーに空きが無い
場合は予約録画はキャンセルされます。

※ チューナーが空いた後で途中から録画処理を開始する機能はありません。
※ プログラムの起動が予約時刻を過ぎてしまっていた場合、その番組を途中から録画
   する機能もありません。

プログラムは設定の番組開始前の前方録画マージン+30秒前から処理を開始します。
この開始時点でチューナーが使用可能かの判断を行います。PCの時刻と送られてくる
時刻データとを比較して2秒以上の差がある時は自動的に補正して録画を行います。
PCの時刻を更新する機能はありませんが、±10秒ぐらいの誤差であれば録画データの
先頭や末尾が切れること無く保存されると思います。

※ 録画されるデータには全てのサービスが入った状態です。サービス指定をチェック
   して録画した場合は、PAT, CAT, NIT, SDT, EMMと指定サービスのPMT, PCR, ECM, 
   映像や音声、データの各ストリームのみが保存され、それ以外は破棄されます。
※ 時間指定録画では時刻データによる自動補正は働きません。
※ 番組指定と時間指定の両方で同じ番組を録画した場合、ファイル名が重複しますが
   後で作成された物には拡張子の前に(数字)が付きます。例:なるほどＴＶ(1).ts

片方のチューナーが録画処理中で、もう片方のチューナーが同一チャンネルの連続した
番組の録画を行う場合、録画されるデータは欠損無く保存されます。
(二つの番組を結合するとドロップ無しで続いたデータとなります。)
違うチャンネルの時間的に連続した番組の場合は録画処理が開始された時点で前番組の
録画は終了します。(つまり、前方録画マージン+30秒前に終了。)

開始時間になっても指定の番組が始まらない時は自動的にそのチャンネルのEPG情報を
再取得し、予約録画開始時刻を更新します。
(EPG情報に指定の番組が見つからない場合は更新せずに予約自体をキャンセルします。)

※ イベントリレーには対応していません。


・ 番組表について

メニューの番組表表示選択で表示するチャンネルを選択する事ができます。
(CSはチャンネル数が多いので全部表示するには時間が掛かります。)

番組を左クリックする事で予約または即録を行う事ができます。
CTRLキーを押しながらの左クリックではサービス指定での予約・即録になります。
番組を右クリックするとポップアップメニューが表示され、予約の取り消しや番組名を
自動録画登録の検索キーワードとして登録する事ができます。

チャンネル名をダブルクリックするとそのチャンネルの1週間番組表に切り替わります。
日別表示に戻るボタンを押すと元の表示に戻ります。
(一旦、番組表を閉じて再度表示しても、同じく日別表示に戻ります。)


・ 番組検索について

EPG情報より番組を検索することができます。
検索キーワードに入力された半角英数カナは全角に自動変換されます。
検索結果一覧に表示された番組を選択し、選択中の番組を予約ボタンを押すと録画予約
する事ができます。


・ 録画予約一覧

一覧リストで予約を選択して右クリックするとポップアップメニューが表示されます。
太字のメニューはダブルクリックでも同じ動作になります。

状態が×になっている予約は、チューナーの空きが無く録画に失敗する恐れがあります。
状態が？になっている予約は、番組データに予約の番組が見つからないものです。
(その番組が放送中止になった可能性があります。時間指定予約は含まれません。)

時間指定で録画追加ボタンを押すと時間指定録画の設定ダイアログが開き、時間指定に
録画予約を追加することができます(毎週予約可能)。
番組指定による(時間指定でない)予約はEPG取得後に開始時刻の更新を自動で行います。


・ 自動検索予約一覧

一覧リストで予約を選択して右クリックするとポップアップメニューが表示されます。
太字のメニューはダブルクリックでも同じ動作になります。
新規追加ボタンで新しい自動検索予約キーワードを追加する事ができます。
自動検索で予約に登録されるタイミングは、自動検索予約編集で登録した時とEPG取得
完了時です。


・ 強制停止について

録画処理中のチューナーを停止し解放します(確認ダイアログが出ます)。
特に理由がない限り使用する事は無いと思います。


・ 録画終了時処理

録画処理およびEPG取得処理が終了し、全チューナーが解放された際に行う処理を
選択します。設定ダイアログで行う処理を抑制する(次の予約開始までの)マージン
時間を設定する事ができます。


・ タスクトレイ通知

チェックを外すとタスクトレイに現れる吹き出しを抑制することができます。
吹き出し自体を左クリックしても同様にチェックが外れます。
(チェックを外さずに消すには×ボタンをクリック)


・ ECM処理について

地上デジタルとBSは送られてきたPMTに属するすべてのPIDで暗号の解除を行いますが、
CSに関しては指定したチャンネル(サービス)のストリームのみ解除を行います。
カードを録画中に抜き差しした場合、抜いていた時間は暗号の解除は行えませんが、
再度差した後は暗号の解除を再開します。


・ EMM処理について

グループIDには対応していません。よって、業務用のカードは使えないと思われます。
基本的に自IDのEMM情報は全てカードに送信しますが、1回の録画処理で1回のみとして
います。(送る回数を少なくした方が良いかもとの判断です。)


・ 免責とライセンス

このプログラムを使用して生じたいかなる損害も当方は一切責任を負いません。
録画がうまく実行されない場合でも当方は一切責任を負いません。
EITデータから番組情報を取得している部分において、文字領域の初期化に関して
不明瞭の部分がある為、場合によっては文字化けが発生する可能性があります。

※ 古いPCや遅いCPUで場合、他のプログラムの影響などによって録画ファイルに
   エラーやドロップを生じることがあります。

このプログラムはライブラリとしてSQLite(3.6.22)を静的にリンクしています。

プログラムの配布は無償に限り自由に行えます。有償での配布(雑誌への掲載含む)は
禁止します。特にオークション等でPT1/PT2を販売(転売)する際に当ソフトウェアを
添付する行為の一切を固く禁じます。

ptTimer.exeに関してはGPLに感染しない様に、TSパーサーからGUI部分に至るまで
参考資料を元に一から作成しました。故にソースコードは公開しません。
(SmartCard処理に関しては茂木氏のB25ソースコードを参考にさせて頂きました。)
BonDriver_ptmr.dllに関しては凡ドライバインターフェース雛形のヘッダファイルを
流用してますのでGPLが適応されるか判断できません。
(ヘッダのみの流用はGPL適応外だったと思いますが。)


・ BonDriver_ptmr.dllについて

ptTimer.exeでの予約録画に影響を与えずにTVTestを利用する為に作成しました。
よって、TVTest以外での動作テストは行っていません。
PCへの負荷をそれなりに強いますので、遅いCPUやシングルコアのCPUでは録画処理に
支障をきたすかも知れません。

※ BonDriver_ptmr.dllに送られるデータは内部のTSパーサーを通してません。
   TVTest側でスマートカードなどによるスクランブル解除処理が必要です。

TVTestで視聴中に録画処理が始まった場合、録画処理に使用しているチューナーの
チャンネル変更ができなくなります(視聴はS1/T1での使用をお薦めします)。

EPG取得はTVTestで視聴に使用しているチューナーを使わずに処理を開始します。
TVTestで視聴していたチューナー以外はEPG取得中にチャンネル変更できません。
(EPG取得処理に合わせてチャンネルは自動的に変更されます。)

※ サスペンド復帰処理の関係上、全チューナー使用後はPTの解放を行います。
   その為、解放中は他のプログラムでPTを使用する事が可能です。
   逆に、他のプログラムでPTを使用中はptTimer.exeの処理で使用できません。
   EPG取得や録画処理などはエラーとなります。


・ 参考資料

インプレスR&D 改訂版デジタル放送教科書上
アスキー出版局 ポイント図解式最新MPEG教科書
ARIB STD-B10「デジタル放送に使用する番組配列情報」標準規格
ARIB STD-B25「デジタル放送におけるアクセス制御方式」標準規格
ARIB TR-B14 「地上デジタルテレビジョン放送運用規定」
ARIB TR-B15 「BS/広帯域CSデジタル放送運用規定」
総務省告示平15第37号
茂木氏作 ARIB STD-B25 仕様確認テストプログラムソースコード
アースソフト社製 PT-Windows-Sampleソースコード


・ 履歴

0.3.6.0  : 自動検索予約編集で一部半角→全角変換処理が抜けていたのを修正
           番組検索、録画予約一覧、自動検索予約一覧、番組表表示選択の
           ダイアログの大きさを変更できる様にした(但し、縦方向のみ)
           これに伴い、番組検索の検索件数を最大200件にまで拡大
           番組検索、録画予約一覧、自動検索予約一覧、自動検索予約編集の
           ダイアログにあるリストビューをソート表示できる様にした
0.3.5.0  : 番組表に表示できる文字の種類を少し増やした
           全録画終了時にタスクトレイ通知を消す様に変更
           タスクトレイにアイコンを登録するタイミングを変更
0.3.4.0  : 追っ掛け再生が出来る様に録画時の共有モードを変更
           録画ファイルのファイル命名規則を少し拡張
0.3.3.0  : 番組表で表示が崩れるのを修正
           メニューの録画強制終了に番組タイトルを表示(省略の長さ変更可)
           その他、細かな修正
0.3.2.0  : チャンネルスキャンの終了判定方法を変更
           (これで異常終了しなくなったと思います)
           番組表表示のカスタマイズをptTimer.iniから行えるようにした
0.3.1.1  : タイマーの処理の桁溢れで2010/2/24以降の予約処理に問題があった
           のを修正
0.3.1.0  : 初期設定を保存した時、EPGを自動取得しない状態になってしまうを
           修正(要ptTimer.ini内の「EPGTIME=」(=の後が空)を削除)
           地デジ難視対策放送のEPG取得・番組表表示対応
           但し、1チャンネル4サービス表示するのは辛いので、BSでも番組表で
           サービス毎に表示できる様にした(ついでに地デジもサービス毎可に)
           チャンネルスキャンをマルチスレッド化し負荷を分散する様にした
           接続エラー回避用にBonDriver_ptmr.dllで接続リトライする様にした
0.3.0.0  : 公開版
0.2.x.x  : 非公開


・ 上級者向け情報

設定ダイアログにある項目以外にもptTimer.iniで設定できる項目があります。
※ ptTimer.iniの直接編集を行うとエラーが発生する可能性がありますので、
   注意が必要です。また、ptTimer.iniはプログラム起動時にのみ、読込みを
   行いますので、設定変更を反映する為にはプログラムの再起動が必要です。

LNBPOWER=(数値)
	BS/CSアンテナへの電源供給を設定
	0=供給しない
	1=供給する(デフォルト)

EPGTIME=(時刻値、複数可)
	EPG取得を自動で行う時刻を設定
	hh:mmの形式で区切りを , で複数指定が可能(デフォルト=00:00,12:00)

AUTOPOWERMODE=(0か1の2値)
	スタンバイ・休止状態から復帰した時に録画終了時処理を自動的に変更
	0=無効(デフォルト)、1=有効
	復帰予定時刻の前に復帰した場合：「何もしない」に変更します。
	復帰予定時刻の後に復帰した場合：15秒以内「スタンバイ」、
					15秒以上「休止状態」に変更します。

EPGGETMODE=(数値)
	EPG取得の方法を指定
	0=BSとCSの取得は各チャンネル毎に行う
	1=BSの取得は各チャンネル毎に行い、CSはCS1/CS2の2チャンネルで行う
	2=BSとCSの取得はBS/CS1/CS2の3チャンネルで行う(デフォルト)
	※ 1,2で取得に使用するチャンネルはchannel.txtでより上にある物です。
	※ 地デジ難視対策放送は他のBSとは別に取得します。

EPGDISPMODE=(数値)
	番組表での表示方法を指定
	0=CSのみサービス毎で、BSと地デジはチャンネル毎に表示(デフォルト)
	1=CSとBSをサービス毎で、地デジのみチャンネル毎に表示
	2=地デジ、BSとCSすべてをサービス毎で表示
	※ サービス毎で表示にするとマルチ編成でない時間帯の番組は表示され
           ませんので副サービス側は歯抜けの様な表示になります。

FILENAMEFORMAT=(文字列)
	録画ファイルのファイル命名規則を設定
	%Y:年4桁、%y:年2桁、%M:月2桁、%D:日2桁、%h:時2桁、%m:分2桁、%s:秒2桁
	%W:曜日(漢字1文字)、%w:曜日(アルファベット3文字)
	%F:番組タイトル
	%f:番組タイトルから[字]などの記号や先頭にある[無料]などの無料放送を
	   示す文字列をできるだけ取り除いた物
	%S:%fに加えてタイトル中の「」で囲われた文字列も取り除いた物
	%C:チャンネル名
	※ 拡張子まで指定して下さい。(デフォルト=%Y%M%D-%h%m%s-%F.ts)

KEEPDISKFREE=(数値:単位GB)
	全チューナ使用後、保存ディレクトリにあるTSファイルを更新日時が
	古い物から自動削除し、指定した空き容量を保つ機能
	数値の単位はGBであり、0(デフォルト)を指定すると削除は行いません。
	※ 削除されるTSファイルはファイル名の先頭8つが数字であり読み取り
	   専用や隠しファイル、システム属性が付いていない物です。

PREPAREMARGIN=(数値)
	録画処理を開始する前方録画マージン＋αの時間を秒数で指定
	余り短くすると録画処理に支障をきたします。(デフォルト=30)

GENRECOLOR01=(RGB16進数)
     |
GENRECOLOR16=(RGB16進数)
	番組表で表示される番組の背景色を設定
	RRGGBBの形で指定(どのジャンルかはptTimer.ini内コメントを参照)

EPGFONTSIZE=(数値)
	番組表の番組情報で使われるフォントの大きさ(デフォルトは10)

EPGCHANFONTSIZE=(数値)
	番組表のチャンネル表示で使われるフォントの大きさ(デフォルトは12)

EPGCHANWIDTH=(数値)
	番組表のチャンネル毎の幅をドット単位で設定(デフォルトは120)

EPGCHANHEIGHT=(数値)
	番組表のチャンネル表示の高さをドット単位で設定(デフォルトは32)

EPGTIMEFONTSIZE=(数値)
	番組表の時間帯表示で使われるフォントの大きさ(デフォルトは10)

EPGTIMEWIDTH=(数値)
	番組表の時間帯表示の幅をドット単位で設定(デフォルトは12)

EPGTIMEHEIGHT=(数値)
	番組表の時間を表わす単位を設定
	1分に相当する値をドット単位で設定(デフォルトは2)

EPGTIPFONTSIZE=(数値)
	番組表のツールチップで使われるフォントの大きさ(デフォルトは14)

EPGTIPWIDTH=(数値)
	番組表のツールチップの幅をドット単位で設定(デフォルトは260)

STOPTITLENGTH=(数値)
	メニューの録画強制終了で表示するタイトルの最大長を設定(デフォルトは40)

INITTIPINFO=(0か1の2値)
	起動時に設定されるタスクトレイ通知の状態(デフォルトは1)
