• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przesłanie struct przez UDP
#1
Z innej aplikacji przesyłam przez UDP strukturę danych
Kod:
typedef struct
{

 unsigned Timestamp;
 unsigned char Strefy[10];
 unsigned char Lampy[10];
 unsigned char Rozkaz;
 unsigned char Parametry[4];
 unsigned char Opoznienie;
}
Pakiet;

Łącznie jest to 34 bajty.
Te bajty odbieram prawidłowo:
 

Kod:
 int packetSize = UDPTestServer.parsePacket();
  if (packetSize)
  {  
   
      // receive incoming UDP packets
        Serial.printf("Received %d bytes from %s, port %d\n", packetSize, UDPTestServer.remoteIP().toString().c_str(), UDPTestServer.remotePort());
        int len = UDPTestServer.read(incomingPacket, 255);
        if (len > 0)
        {
          Serial.printf("UDP packet length: %d\n", len);
          incomingPacket[len + 1] = 0;
          Serial.printf("UDP packet contents: %s\n", incomingPacket);
          Serial.write("UDP packet HEX : "); //Serial.write(incomingPacket,HEX);Serial.write("\n\r");

          for (int i = 0; i< len; i++)
          {
            sprintf(s, "%02x", incomingPacket[i]);
            Serial.print(s);
          }
           Serial.println("");

Przykładowy ciąg bajtów: 373231363338333501020304050000000000f8030000000000000000cd0000ff00e2

I teraz chciałbym ten ciąg przypisać do zmiennych w strukturze:
Szukałem różnych przykładów, np memcpy(pakiet, incomingPacket, sizeof(pakiet))
ale przypisuje mi jakieś bajty z kosmosu. Nic się nie zgadza.
na przykład do zmiennej strefy przypisuje 33383335123450 a powinno być 01020304050000000000 (tablica 10 bajtów)
Nie wiem co robię źle.
Poradzicie coś jak to najłatwiej zrobić?
Ewentualnie mogę rozbić ten ciąg znaków w kilku krokach podając początek i ilość bajtów do skopiowania.

Przy okazji jeszcze jedno pytanie. Jaki tym danych mam użyć dla typu data czas + milisekundy.
 
Odpowiedź
#2
A przez UDP wysyłasz dane Ascii czy bin?
Pomagam (nie prowadzę kursów), tylko, gdy w poście załączone są niezbędne materiały (kod, schemat) a pytający zna podstawy.

Na kod z Delayi i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!




 
Odpowiedź
#3
Cytat:Nie wiem co robię źle.

A możesz napisać, co w ogóle robisz?


Cytat: do zmiennej strefy przypisuje 33383335123450 a powinno być  01020304050000000000 (tablica 10 bajtów)

Na jakiej podstawie twierdzisz, że tak powinno być?

P.S.
Zmienna Timestamp, to jest może podana w czasie Unix?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#4
Nie widziałem takiej konstrukcji, jeszcze pewnie wiele nie więc zapytam: czemu wszędzie są w strukturze po trzy słowa a w tej linijce ze stamp tylko dwa?
 
Odpowiedź
#5
unsigned oraz unsigned int jest równoznaczne.
I to właśnie było problemem, ponieważ z tego innego programu, timestamp wychodził jako 8 bajtów i podstawiając je do struktury było przesunięcie (unsigned int ma mniej bajtów).
Zamieniłem to na tablicę 8 bajtów.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości