Я пишу программу для захвата последовательных данных со старого устройства GPS (Garmin Etrex Venture), подключенного к ПК. После отправки пакета «время отправки» на устройство я использую файл чтения с порта COM3 (hCom).
int read_packet() //READS PACKET FROM DEVICE hPort
{
unsigned char inbuff[64];
unsigned char inchar [1];
DWORD nb;
int j=0;
ReadFile(hPort, inbuff, 32, &nb, NULL); int k; for (j;j<25;j++) {printf("<read_packet> inbuff[%i] = %i \n",j,int(inbuff[j]));
//for (j=0;j<25;j++) {ReadFile(hPort, inchar, 1, &nb, NULL); printf("<read_packet> inchar[%i]: %i \n",j,int(inchar[0]));
}
return 0;
}
Допустимые пакеты начинаются с 0x10 и заканчиваются 0x10 0x03. Я ожидаю увидеть пакет ACK (0x06), а затем второй пакет, содержащий фактическое время.
При чтении данных все в одном inbuff
чтение продолжается после последнего 0x03 в inbuff[21]
с тем, что кажется бессмысленными значениями:
<read_packet> inbuff[0] = 16
<read_packet> inbuff[1] = 6
<read_packet> inbuff[2] = 2
<read_packet> inbuff[3] = 10
<read_packet> inbuff[4] = 0
<read_packet> inbuff[5] = 238
<read_packet> inbuff[6] = 16
<read_packet> inbuff[7] = 3
<read_packet> inbuff[8] = 16
<read_packet> inbuff[9] = 14
<read_packet> inbuff[10] = 8
<read_packet> inbuff[11] = 9
<read_packet> inbuff[12] = 14
<read_packet> inbuff[13] = 225
<read_packet> inbuff[14] = 7
<read_packet> inbuff[15] = 22
<read_packet> inbuff[16] = 0
<read_packet> inbuff[17] = 12
<read_packet> inbuff[18] = 25
<read_packet> inbuff[19] = 176
<read_packet> inbuff[20] = 16
<read_packet> inbuff[21] = 3
<read_packet> inbuff[22] = 42
<read_packet> inbuff[23] = 0
<read_packet> inbuff[24] = 32
Когда я раскомментирую вторую строку и читаю по одному символу за раз, я получил 2 ожидаемых пакета (хотя продолжает читать последний 0x03):
<read_packet> inchar[0]: 16
<read_packet> inchar[1]: 6
<read_packet> inchar[2]: 2
<read_packet> inchar[3]: 10
<read_packet> inchar[4]: 0
<read_packet> inchar[5]: 238
<read_packet> inchar[6]: 16
<read_packet> inchar[7]: 3
<read_packet> inchar[8]: 16
<read_packet> inchar[9]: 14
<read_packet> inchar[10]: 8
<read_packet> inchar[11]: 9
<read_packet> inchar[12]: 14
<read_packet> inchar[13]: 225
<read_packet> inchar[14]: 7
<read_packet> inchar[15]: 22
<read_packet> inchar[16]: 0
<read_packet> inchar[17]: 12
<read_packet> inchar[18]: 0
<read_packet> inchar[19]: 201
<read_packet> inchar[20]: 16
<read_packet> inchar[21]: 3
<read_packet> inchar[22]: 3
<read_packet> inchar[23]: 3
<read_packet> inchar[24]: 3
Может кто-нибудь посоветовать, почему первая ситуация с использованием inbuff
происходит? Я думаю, что это происходит потому, что Readfile
не знает, когда прекратить чтение. Однако я не понимаю, где дополнительные значения после inbuff[21]
приходят из.
Благодарю.
Задача ещё не решена.
Других решений пока нет …