シリアル通信で0x00を送信したいのですが。
こんにちは、VC++初心者です。
現在、下記サイトのプログラムをもとにシリアル通信用プログラムを作成しています。
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_A5B7A5EAA5A2A5EBC4CCBFAE2852532D3233324329A4C7C1F7BFAEA1A6BCF5BFAEA4F2B9D4A4A6A5D7A5EDA5B0A5E9A5E0.html
例えば、editboxに02 31 32 33 03と入力したら、0x02 0x31 0x32 0x33 0x03として送信するところまではできました。
ただし、00と入力したとき、0x00として送信することができません。
どうすれば0x00を送信できるか、ご教授お願いいたします。
m_editSend.GetWindowText()にて入手したstrSendのデータから、SPACEを除いて、
0xをつけてhexにしてから、Send()にて送信しています。
void CSerial2Dlg::OnBnClickedButtonSend()
{
CString strSend;
CString strSendCMD;
CString bw;
int i, n, i2;
unsigned int hex;
m_editSend.GetWindowText(strSend); // ポート名を取得
char *buff = new char[strSend.GetLength()+1];
if(strSend.GetLength() == 0 || strSend == " "){ //送るものが無ければ終了
AfxMessageBox("送信するコマンドがありません。");
}
else{
strcpy(buff, strSend); //editboxのデータをbuff[]へコピー
i = 0;
n = 0;
bw = "\0";
while (buff[i] != '\n'){
if( buff[i] == ' ' || buff[i] == ':' || buff[i] == ',')//SPEACEorコロンorカンマをSKIPして送信する。
else{
bw += buff[i];//2文字ためる
n++;
}
if(n == 2){
sscanf(bw, "%x", &hex); //bwに2文字溜まったら、hexに変換
strSendCMD += hex;
bw = "\0"; //変換が終わったらClear
n = 0; //カウントもリセット
}
i++;
}
m_serial->Send(strSendCMD, strlen(strSendCMD));
}
delete [] buff ; //bufferの開放
}
下記のプログラムで、 WriteFileにて送信しています。
void CSerialCommunication::Send(LPCSTR str, DWORD strLength)
{
if (m_hComm == NULL) {
AfxMessageBox("COMポートが開かれていません");
return;
}
// ** 送信! **
DWORD dwWrite; // COMポートに送ったバイト数
WriteFile(m_hComm, str, strLength, &dwWrite, NULL);
}
お礼
まさにこれです。 流石にドコモの技術資料だけあって、内容は重たい。 難しそうですが、がんばって読んでみます。 ありがとうございました。