DMAバッファ
※サイズはSample.exeで使用されている値。
DMA開始
DMA終了
転送カウンタの処理
エラー状態取得
SetStreamEnable X3CS_Initiator.hより
uint index = tunerIndex*2 + isdb; uint bit = enable ? BIT_1(1) : BIT_1(0); uint data = BIT_1(bit) << (BIT_TS_ENABLE + index) | BIT_1(1) << (BIT_TS_ENABLE_ + index);
マイクロパケットの構造(EARTH_PT1.hからコピペ)
// マイクロパケットの構造 // +------------+----+----+----+----+----+----+----+----+----+----+----+ // | ビット位置 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | .. | 0 | // +------------+----+----+----+----+----+----+----+----+----+----+----+ // | 内容 | id | counter | st | er | data | // +------------+--------------+--------------+----+----+--------------+ // id : ストリームID // counter: ストリームごとのカウンタ // st : TS パケット開始位置フラグ // er : エラーフラグ (TransferCounter0 と TransferCounter1 と BufferOverflow の論理和) // data : データ // ストリームID // +----+------------------------+ // | id | 説明 | // +----+------------------------+ // | 0 | 禁止 | // | 1 | チューナー番号0 ISDB-S | // | 2 | チューナー番号0 ISDB-T | // | 3 | チューナー番号1 ISDB-S | // | 4 | チューナー番号1 ISDB-T | // | 5 | 予約 | // | 6 | 予約 | // | 7 | 予約 | // +----+------------------------+ // ストリームID が 0 になることは絶対にありません。 // DMA 転送がどこまで進んでいるのかを調べるには、転送前に ストリームID を 0 に設定して、 // その箇所が 0 以外になったかどうかを調べます。 // 実用上は転送前に 4 バイトのマイクロパケット領域に 0 を書き込み、0 以外になったかどうかを調べることになります。 // マイクロパケットから TS パケットを再構成する方法についてはサンプルコードをご参照ください。 // 次の関数を呼び出した直後に 188 バイトに満たないパケットが発生することがあり、切捨て処理が必要です。 // ・SetTunerSleep() // ・SetFrequency() // ・SetIdS() // ・SetLayerEnable() // ・SetStreamEnable() // ・SetTransferEnable(true)