Envoyer des packets UDP avec des données structurées

jeffadsljeffadsl Membre
novembre 2017 modifié dans API UIKit #1

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.


  • jeffadsljeffadsl Membre
    novembre 2017 modifié #3

    Bonjour,


     


    je progresse un peu j'arrive presque à  envoyer les bonnes data....




      le NSLog myData me renvoie :



    <4172742d 4e657400 0050000e 54000000 000200ff 00ff0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000>

    alors qu'une vraie console d'éclairage me revoie elle :



    <4172742d 4e657400 0050000e 54000000 0200ff00 ff000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000>

    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 ? 


  • jeffadsljeffadsl Membre
    novembre 2017 modifié #5

    Résolu


     


    merci à  vous!!!!!!!!!


Connectez-vous ou Inscrivez-vous pour répondre.