uart string empfängen bis zeichenfolge vom gsm-modem

Gast #1466534
Lesenswert?

Meine Frage ich benutze momentan den code aus dem Tutorium um einen 
String über Uart zu empfangen. Jetzt möchte ich aber von meinem 
GSM-Modem über AT befehle die "OK"'s empfangen, diese werden jedoch 
angeführt vom befehl das man gesendet hat (quasi ECHO) und zusätzlich 
noch so ein paar \r und \n hier mal ein beispiel:

ich sende den befehl: at\r
Antwort: at\r\r\nOK\r\n

das führt natürlich zum abruch des string empfanges. Wie könnte ich den 
folgenden Code ändern das er wartet bis alles vom gsm-modem empfangen 
wurde???? und ggf. nach einer gewissen zeit (ok mit einem timer/counter) 
abgebrochen wird.
1
int usart0_getc(void)
2
{
3
    while (!(UCSR0A & (1<<RXC)));   //Warten bis Zeichen verfügbar
4
    return UDR0;          //Zeichen aus UDR an Aufrufer zurückgeben
5
}
6

7
void usart0_gets(char* Buffer, int MaxLen)
8
{
9
  int NextChar;
10
  int StringLen = 0;
11
 
12
   NextChar = usart0_getc();  //Warte auf und empfange das nächste Zeichen
13
                 //Sammle solange Zeichen, bis:
14
                // * entweder das String Ende Zeichen kam
15
                // * oder das aufnehmende Array voll ist
16
  while(NextChar != '\r' && StringLen < MaxLen - 1)
17
  {
18
      *Buffer++ = NextChar;
19
    printf("%c",NextChar);
20
      StringLen++;
21
      NextChar = usart0_getc();
22
  }
23
 
24
  //Noch ein '\0' anhängen um einen Standard
25
  //C-String daraus zu machen
26
  *Buffer = '\0';
27
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren