■データ送信
データ送信には、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; |
① 送信するデータを、ストリームヘッダのデータ部にエントリしています。 ② ストリーム送信コマンドを設定しています。 ③ デバイスのハンドル番号を設定しています。 ④ ストリームデータのオフセット位置とデータサイズを設定しています。 |
■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に対し送信を行います。