DMX Controller, besoin d'aide

orfaitorfait Membre
janvier 2008 modifié dans Vos applications #1
Bonjour,

Je recycle ce topic car le projet est tombé à  l'eau suite à  des besoins biens plus précis.
La nouvelle application n'est pas vraiment totalement différente dans le fond, mais dans la forme, on a du changement.

Le but premier : envoyer sur un périphérique USB des informations par blocs de 64 octets (5 blocs au total). Et ceci avec une fréquence de rafraà®chissement de 50Hz environ (sauf si le bloc en question est inchangé).
Le premier problème : si je met du timer avec une période de 20ms, l'interface graphique se bloque et le soft devient inutilisable (par exemple, certaines valeurs sont modifiés par des sliders... et c'est vraiment saccadé/bloqué).
Le second problème : le périphérique USB respecte la norme HID, mais je lui ai fait un driver pour qu'il soit "pris" par IOUSBInterface. L'ennui, c'est que je dois me reconnecter au périphérique à  chaque fois, soit au pire 250 fois par seconde. C'est tellement consommateur de ressources que j'avais même envisagé me rabattre sur un port série...

Le second but : recevoir les données qu'envoie le périphérique USB... toujours 5 blocs de 64 octets à  50Hz (si les blocs sont modifiés).

Pour reconnaà®tre chaque bloc, on utilise un des octets (le premier par exemple).


J'ai quelques connaissances en programmation en Objective-C. J'utilise XCode3 et mon soft peut être spécifique à  léopard.
Et finalement, ce que je demande, c'est quelle tournure doit prendre le projet... comment faire pour parvenir à  mon but sans que le soft soit une usine à  gaz ni que la machine soit trop ralentie...



Je vous remercie d'avance pour vos conseils.





Bonjour,

je viens ici pour faire quelques tests de mon application "PowerBox Controller", toujours en développement ceci dit...
Ce logiciel est prévu pour contrôler deux interfaces USB ("PowerBox II" et "PowerBox II RE") et afficher des animations sur un écran secondaire, tout ceci en fonction du son qui entre au choix dans l'entrée ligne ou via le micro intégré (pour choisir l'entrée voulue, il suffit normalement de la sélectionner dans les préférences système).
Plus d'info sur les interfaces sur http://www.orfony.fr

Je suis aussi preneur de toute suggestion.


Les fichiers : http://sourceforge.net/projects/pbc/ (les sources sont disponibles via svn).


Merci aux cinglés qui testeront  ::)

Réponses

  • orfaitorfait Membre
    janvier 2008 modifié #2
    -
  • orfaitorfait Membre
    18:10 modifié #3
    Et un petit up pour un vieux topic recyclé :)
  • psychoh13psychoh13 Mothership Developer Membre
    18:10 modifié #4
    Je te conseille d'aller voir sur Developpez.com t'auras sans doute beaucoup plus de réponses qu'ici.  ;D
  • BruBru Membre
    18:10 modifié #5
    dans 1200738604:

    Et un petit up pour un vieux topic recyclé :)


    Ben, c'est trop vague comme description...
    Que demandes tu au juste ?
    Envoyer/Recevoir via USB depuis un prog Cocoa ?
    Manipuler ce que tu envois/émets ?



    dans 1200741675:

    Je te conseille d'aller voir sur Developpez.com t'auras sans doute beaucoup plus de réponses qu'ici.  ;D


    Bonne idée.
    Et d'ailleurs, si tu pouvais y rester...

    .
  • orfaitorfait Membre
    janvier 2008 modifié #6
    dans 1200742858:

    Ben, c'est trop vague comme description...
    Que demandes tu au juste ?
    Envoyer/Recevoir via USB depuis un prog Cocoa ?
    Manipuler ce que tu envois/émets ?

    Non, j'avais déjà  demandé pour l'envoi par USB et j'avais été bien aidé et guidé (merci Mala d'ailleurs).
    Ce que je demande surtout, c'est quel serait le type de structure de programme permettant d'éviter le "gel" de l'interface graphique. Je me souviens avoir essayé de lancer un timer qui faisait l'envoi USB toutes les 20ms via un bouton simple, et ceci avait pour effet de faire totalement laguer l'interface graphique.
    Je cherche donc la voie à  suivre pour tenter d'optimiser au mieux le transfert... Par exemple la structure qui vous semblerait la plus optimisée...


    dans 1200742858:

    dans 1200741675:

    Je te conseille d'aller voir sur Developpez.com t'auras sans doute beaucoup plus de réponses qu'ici.  ;D


    Bonne idée.
    Et d'ailleurs, si tu pouvais y rester...

    .

    Je ne connais pas ce forum, donc impossible de savoir si c'est un conseil ou une blague... Je veux bien une éclaircissement.
    Mais je suis étonné du "dégage et ne reviens pas" de la part de quelqu'un qui chercher à  éviter les prises de têtes sur le forum...
    Suis-je néfaste à  ce point à  la bonne entente ?
  • BruBru Membre
    18:10 modifié #7
    dans 1200784773:

    dans 1200742858:

    dans 1200741675:

    Je te conseille d'aller voir sur Developpez.com t'auras sans doute beaucoup plus de réponses qu'ici.  ;D

    Bonne idée.
    Et d'ailleurs, si tu pouvais y rester...

    Je ne connais pas ce forum, donc impossible de savoir si c'est un conseil ou une blague... Je veux bien une éclaircissement.
    Mais je suis étonné du "dégage et ne reviens pas" de la part de quelqu'un qui chercher à  éviter les prises de têtes sur le forum...
    Suis-je néfaste à  ce point à  la bonne entente ?


    Ma dernière phrase répondait à  un post de psychoh13.
    Donc, le message ne s'adressait qu'à  lui, et non à  toi.

    .
  • schlumschlum Membre
    18:10 modifié #8
    dans 1200784773:

    Non, j'avais déjà  demandé pour l'envoi par USB et j'avais été bien aidé et guidé (merci Mala d'ailleurs).
    Ce que je demande surtout, c'est quel serait le type de structure de programme permettant d'éviter le "gel" de l'interface graphique. Je me souviens avoir essayé de lancer un timer qui faisait l'envoi USB toutes les 20ms via un bouton simple, et ceci avait pour effet de faire totalement laguer l'interface graphique.
    Je cherche donc la voie à  suivre pour tenter d'optimiser au mieux le transfert... Par exemple la structure qui vous semblerait la plus optimisée...


    Lance un thread qui gère l'envoi en boucle en faisant "usleep(20000);" entre deux passages dans la boucle.
    ça ira mieux pour l'interface graphique  ;)
  • orfaitorfait Membre
    18:10 modifié #9
    Bru : Effectivement, on pouvait l'interpréter des deux façons. Aller, on tourne la page.

    Schlum : Merci, ça correspond à  ce que j'avais commencé à  coder. Donc c'est ce qui serait le "mieux".

    J'ai un autre problème qui vient juste derrière, mais je vais attendre d'être sur mon mac de dev pour mettre du code ici.
  • schlumschlum Membre
    18:10 modifié #10
    dans 1200822496:
    Schlum : Merci, ça correspond à  ce que j'avais commencé à  coder. Donc c'est ce qui serait le "mieux".


    Oui, je pense... Maintenant j'émets des réserves parce que je n'ai jamais travaillé avec IOKit et je ne sais pas s'il gère bien le multi-threading.
  • letofletof Membre
    18:10 modifié #11
    Salut !

    Je m'en mèle, espérant ne pas donner un mauvaise piste :

    Si le Thread principal est réservé à  l'interface, et un thread au traitement avec IOKit, celui-ci ne se trouve donc pas en multi-thread ?
    Et si c'est le cas et que ça bloque, il y a les techniques Unix habituelles : une application en ligne de commande, une interface pour commander, et un mécanisme de sémaphore/mémoire partagée pour les faire communiquer. (ça complique, sans doute à  éviter )

  • letofletof Membre
    18:10 modifié #12
    Ah, j'oubliai : les objets distants sous Cocoa sont très bien gérés ! Donc ça complique pas tant que ça.
  • NseaProtectorNseaProtector Membre
    18:10 modifié #13
    Bonjour,
    ça me fais penser que j'ai une interface Sunlite 2002 et que j'ai pas regardé si une application savait la gérer... Si c'est pas le cas et bien c'est un projet intéressant ma fois...
  • orfaitorfait Membre
    18:10 modifié #14
    J'ai un petit doute sur l'intérêt de mon projet avec une interface sunlite 2002... dans mon cas, je fabrique aussi l'interface. Donc j'ai un protocole propriétaire (ou alors de l'Open DMX).
    Donc sauf si ton interface a le même protocole, il faudrait recoder la communication.

    Mais ca ne te coûtera rien d'essayer !
  • NseaProtectorNseaProtector Membre
    18:10 modifié #15
    En même temps ce pourrait-être malin d'avoir une méthode qui fonctionne sur les 2, ça laisserais plus de possibilités a ton soft...
  • orfaitorfait Membre
    18:10 modifié #16
    C'est prévu... puisque l'UI et la gestion du périphérique USB sont séparés.
  • NseaProtectorNseaProtector Membre
    18:10 modifié #17
    Juste au cas ou, je suppose que tu as jetter un oeil à  Arkaos et aux interface Enttec. Sinon j'ai uploader ton soft, c'est bien sympathique ma fois, mais ce serais pas mal d'avoir le code du pilote DMX, cela permettrais d'adapter ton soft a d'autres interfaces (et sur mac y'a pas grand chose) et aussi de répondre a tes questions, enfin je crois.
  • NseaProtectorNseaProtector Membre
    18:10 modifié #18
    Tiens c'est marrant quand je branche l'interface (sunlite) et que je regarde dans les informations système, il semblerait que l'interface soit reconnue et prise en compte ????
  • orfaitorfait Membre
    18:10 modifié #19
    Tu as uploadé mon soft ?

    Si tu parle de pbc (ex PowerBox Controller), sache que ce soft a été abandonné en totalité et que la dernière version ne fonctionnait pas.
  • NseaProtectorNseaProtector Membre
    18:10 modifié #20
    oui c'est bien de ce soft, et chez moi il semble fonctionner.
  • orfaitorfait Membre
    18:10 modifié #21
    Il semble fonctionner au détail près... qu'il ne fait absolument rien !  ;D
Connectez-vous ou Inscrivez-vous pour répondre.