Envoyer des packets UDP avec des données structurées
bonjour,
je sollicité votre aide. J'utilise AsyncUdpSocke pour envoyer et recevoir des données sous forme de packets UDP. Ces données servent à contrôler des éclairages par réseau filaire ou wifi.
Le protocole utilisé se nomme l'ARTNET (https://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf)
mes premiers essais ont été réalisés avec ce code :
NSString * string = @103;
NSString * address = @2.0.0.100;
UInt16 port = 6454;
NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
[sendSocket sendData:data toHost:address port:port withTimeout:-1 tag:1];
il y a bien quelque chose qui part, mais pas avec la bonne structure de données
Le protocole ArtNet travaille sur le port 0x1936, soit 6454 en décimal.
Le même port est utilisé pour la machine source et la machine destination.
La Valeur 538 (0x021a) correspond au nombre d'octets qui vont suivre (encore 538-512= 26 octets avant les DATA DMX)
La valeur 0xdf30 est la somme de contrôle qui permet au récepteur (destinataire) de vérifier s'il n'y a pas d'erreur dans la trame (due à des parasites, etc...)
l'ARTNET nécessite cette structure :
typedef struct {
char ID[8]; //"Art-Net"
UInt16 OpCode; // See Doc. Table 1 - OpCodes eg. 0x5000 OpOutput / OpDmx
UInt16 version; // 0x0e00 (aka 14)
UInt8 seq; // monotonic counter
UInt8 physical; // 0x00
UInt8 subUni; // low universe (0-255)
UInt8 net; // high universe (not used)
UInt16 length; // data length (2 - 512)
uint8_t data[512]; // universe data
} ArtnetDmx;
donc pour le moment j'envoie bien une commande contenant : l'IP, le port, et un message non structuré et il me manque tout le reste
j'aimerai par exemple envoyer
sur l'univers 3, canal 5, la valeur 213
pour illustrer mon propos voici une explication détaillée :
http://bac.sen.avp.st-gab.over-blog.com/article-analyse-de-la-trame-artnet-98857585.html
si une âme charitable veut bien se pencher sur mon problème
d'avance je vous en remercie
Réponses
Je n'ai pas compris l'histoire 538 vu que tu sembles en parler comme si tu donnais un exemple alors que non.
Tu ne sembles pas utiliser du tout ArtnetDmx.
Normalement, tu devrais pouvoir faire NSData <=> ArtnetDmx.
J'utiliserais ceci pour envoyer les données.
Tu as un exemples ici.
Bonjour,
je progresse un peu j'arrive presque à envoyer les bonnes data....
le NSLog myData me renvoie :
alors qu'une vraie console d'éclairage me revoie elle :
la différence n'est pas flagrante, mais dans les premiers octets ça se décale :
<4172742d 4e657400 0050000e 54000000 0200ff00 ff000000 ---> vraie console lumière
<4172742d 4e657400 0050000e 54000000 000200ff 00ff0000 ----> mon code
tu as une idée d'ou cela peu provenir?
Merci
J'ai l'impression que les données dans le protocole sont codés en Big-Endian alors que dans l'exemple les données (>= 16bits) sont en Little-Endian. Peut être qu'il suffit d'effectuer un swap ?
Résolu
merci à vous!!!!!!!!!