手動でデータを送信する場合は、フレームデリミタの先頭とフレームデリミタとチェックサムの終了を追加することをお勧めします。
ただシリアル番号を宣言してください。 StartOfMessage and EndOfMessage
はお使いの端末によって異なります。 あなたの送信内容がわかりません。うまくいけば、あなたのデバイスのドキュメントからあなたの発送内容を知ることができます。
私は
enum Constants
{
StartOfMessage = '\x02', /* Value of byte that marks the start of a message */
EndOfMessage = '\x03', /* Value of byte that marks the end of a message */
CarridgeReturn = '\x0D', /* Carridge return is first byte of end of line */
LineFeed = '\x0A', /* Line feed is second byte of end of line */
NullChar = '\0' /* Null Character */
};
void MainWindow::readData()
{
// read all
QByteArray data = serial->readAll();
// store all read data packet_storage is a QByteArray
packet_storage.append(data);
int start_index = 0;
int end_index = 0;
// process packet if not empty
if(!packet_storage.isEmpty())
{
if(packet_storage.contains(StartOfMessage) && packet_storage.contains(EndOfMessage))
{
start_index = packet_storage.indexOf(StartOfMessage,0);
end_index = packet_storage.indexOf(EndOfMessage,0);
int length = 0;
for (int i=start_index; i <= end_index; i++)
{
length++;
}
// get data
QByteArray dt = packet_storage.mid(start_index,length);
// do your processing here.
// store in vector write to file etc.
processpacket(dt);
packet_storage.remove(start_index,dt.size());
}
}
}
を使用しています私のためとしては、この同期または非同期ですか?あなたのパケットのフォーマットは何ですか? –
非同期で、パケットはint型です。 –
送信の開始と終了を決定する要因は何ですか?チェックサムを使用していますか? –