Probleme checksum des packets UDP crc en code C besoin de traduction ...

Bonjour a tous,

Je rencontre un problème dans l'envoi de packet UDP. Le checksum n'est pas valide.

Donc je cherche comment envoyer des packets UDP avec un checksum valide.

Si quelqu'un peu m'aider.

#include <SPI.h>        
#include <Ethernet.h>
#include <EthernetUdp.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
unsigned int localPort = 8888;    
EthernetUDP Udp;

void setup() {

   Ethernet.begin(mac,ip);

  Udp.begin(localPort);

}



void loop() {

  Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());

    Udp.write("hello");

    Udp.endPacket();

}

Merci
Manu

Bonjour a tous

Apres avoir regardé les trames UDP le probleme est que le soft avec lequel je souhaite communiquer fait un CRC en fin de champ data.

J'ai un bout de code en c mais je ne connais pas cette langue :-(.

Si quelqu'un peu me le traduire en arduino je suis preneur.

static int verify_crc(const char *lpszBuffer)
{
unsigned char crc  = 0;
	unsigned char lastbyte = 0;
	unsigned char %%*%%ptr = (unsigned char%%*%%) lpszBuffer;
	while( ! (%%*%%ptr & 0x80) && %%*%%ptr )
		crc += %%*%%ptr++;
	crc |= 0x80;
}

Merci de votre aide
Manu

Salut,

A mon avis les %% sont en trop, retire les et le code devient parfaitement cohérent :wink:

Bonjour

Oui merci de la réponse,il y a bien un problème de copier / coller....

static int verify_crc(const char *lpszBuffer)
{
	// Verify CRC
	unsigned char crc  = 0;
	unsigned char lastbyte = 0;
	unsigned char *ptr = (unsigned char*) lpszBuffer;
	while( ! (*ptr & 0x80) && *ptr )
		crc += *ptr++;
	crc |= 0x80;
	return ((crc == *ptr) && (*(ptr+1) == '\0'));
}

Mais avec arduino comment récupérer lpszBuffer ?

Manu

lpszBuffer c'est l'argument passé à la fonction.
Il suffit de mettre le nom de ton buffer à l'appel de la fonction

manu_07:
J'ai un bout de code en c mais je ne connais pas cette langue :-(.

Le "langage arduino" c'est du C. Donc en fait tu connais le C.

Bonjour a tous

Oui il est vrai que l'arduino utilise le C mais ce n'est pas pour cela que je le maîtrise .....

Grace a vos réponses j'arrive a calculer le CRC et le PTR ....

Mais comment ajouter a la trame envoyée le deux variables CRC et PTR en hexa ?

Le schéma de la trame est:
DATA CRC PTR.

Si quelqu'un peu me donner un coup de main
Merci