データ送信

■データ送信

データ送信には、F&eITプロトコルのデータストリームを使用します。
データストリームは、F&eITプロトコルヘッダに、ストリームコマンドである事を設定し、ストリームヘッダとストリームデータを付加します。

 

■ストリームヘッダとデータの作成

送信するデータとストリームヘッダを作成します。

PSTRMHEAD pStrmHead;

BYTE* pTxData;

WORD DataSize;

 

pTxData = (BYTE*)( (DWORD)(TxBuffer) + sizeof(SVHEAD) + sizeof(STRMHEAD) );

strcpy( pTxData, "TEST DATA!");   ―――――――――――――― ①

DataSize = strlen(pTxData);

 

/* ストリースム ヘッダの作成 */

pStrmHead = (PSTRMHEAD)( (DWORD)(TxBuffer) + sizeof(SVHEAD) );

pStrmHead->bSTRMVer = STRM_VER;

pStrmHead->bSTRMCommand = STRM_SEND;  ―――――――――――― ②

pStrmHead->bSTRMHandle = COM_DEV_HANDLE;  ―――――――――― ③

pStrmHead->dwSTRMOffset = StrmOffs;   ―――――――――――― ④

pStrmHead->wSTRMSize = DataSize;

StrmOffs+= DataSize;

① 送信するデータを、ストリームヘッダのデータ部にエントリしています。
ここでは、データとして「TEST DATA!」をエントリしています。

② ストリーム送信コマンドを設定しています。

③ デバイスのハンドル番号を設定しています。
デバイスのハンドル番号は、メディアコンバータの仮想アドレスMAPのI/O空間にあるストリームコマンド用ハンドル番号(003000A4H)と一致する必要があります。

④ ストリームデータのオフセット位置とデータサイズを設定しています。
オフセット位置は、デバイスオープン時を0とした、送信データのオフセット(即ち、送信したデータバイト数の積算値)となります。

 

■F&eITプロトコルヘッダの作成

ストリーム送信をするためのF&eITプロトコルヘッダを作成します。

PSVHEAD pSVHead;

 

pSVHead = (PSVHEAD)(TxBuffer);

memset( pSVHead, 0x00, sizeof( SVHEAD ) );

 

pSVHead->bSVHCommand = SV_STREAM | SV_NO_ACK_FLAG;  ―――――― ①

pSVHead->dwSVHVAddr = 0;  ――――――――――――――――――― ②

pSVHead->wSVHAccessSize = DataSize + sizeof(STRMHEAD);  ―――― ③

pSVHead->wSVHId = SV_ID;

pSVHead->bSVHVer = SV_VER;

pSVHead->wSVHSeqNo = (++SeqNo);

pSVHead->wSVHReplyId = (++ReplyId);

pSVHead->wSVHStatus = 0;

①ストリームコマンドである事を設定しています。ここでは、応答なしのコマンドを指定しています。

②ストリームコマンドのため、0を設定しています。

③ストリームヘッダサイズにストリームデータサイズを加えたサイズを設定しています。

 

■送信

データをF&eITプロトコルのストリームにデータとして、Socketに対し送信を行います。