IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pilotage d'un générateur de signaux TV par USB à travers un programme en C++


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut Pilotage d'un générateur de signaux TV par USB à travers un programme en C++
    Bonjour à tous, et merci à ceux qui pourront m'aider.

    Dans le cadre d'un stage, je dois reprendre un ancien programme de pilotage d'un générateur de signaux TV DTU-215 de la marque DECTEK. Quand j'envoie des informations au générateur, le programme plante et quitte. Tout me porte a croire que leurs fichiers sources et leurs fichiers de ressources sont obsolètes.

    Quelqu'un a t'il déja eu le même probleme que moi ? Si quelqu'un connais les dessous d'envoi de données en USB en C++, je voudrais bien qu'il m’explique. Mon probleme pourrait-il venir des fichiers constructeurs ? ou alors je n'envoie pas mes données correctement ?

    Merci de votre aide !

    Voici la boucle d'envoi des données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
        void Envoi_Donnees()
        {
    	int RetValue(0);
    	Player ThePlayer;
    	static char argv[32][32];
    	char* pargv[32];
    	char* cmd= _commande;
    	char* pt = cmd;
     
     
    int i=0;
    while (true)
    	{
    		pt = strstr(cmd, " ");		// find space
    		if (pt == 0)				// space not find
    		{
    			strcpy(argv[i++], cmd);	// last command
    			break;					// end of cmd
    		}
    		*pt = 0;					// end of string
    		strcpy(argv[i++], cmd);		// one command
    		pargv[i] = &argv[i][0];		// init pointer
     
    		*pt++;						// next command
    		strcpy(cmd, pt);			// erase previous command
    	}
    	if (RetValue==0)
    	{
    		try
    		{   
    			RetValue = ThePlayer.Play(i-1, pargv);// Tout me porte a croire que c'est dans cette methode que le programme plante et donc renvoie RetValue=-1
    			if (RetValue==-1)
    					exit(2); //RetValue vaut toujours -1 ce qui me ferme automatiquement mon programme.
     
    		}
    		catch(...)
    		{
    			RetValue = -1;
     
    		}
    	}
    	else
    		return;
        }
    };

    Voici le code de la méthode Play (disponible dans les fichiers du DTU-215)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    int Player::Play(int argc, char* argv[])
    {
    	int RetValue=0;
     
    	try
    	{
    		try
    		{
    			// Parse command line options
    			m_CmdLineParams.Init();
    			m_CmdLineParams.ParseCommandLine(argc, argv);
    		}
    		catch ( Exc e ) {
    			Log(e, true);
    			Log("", true);
    			Log("Use -? option for help", true);
    			return -1;
    		}
    		catch ( ... ) {
    			return -1;
    		}
    		if ( m_CmdLineParams.m_ShowHelp )
    		{
    			// Disable silent mode
    			m_CmdLineParams.m_SilentMode = false;
    			ShowHelp();
    			return RetValue;
    		}



    Merci !

    Au revoir.

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Puisque tu es en C++, pourquoi pas laisser tomber le C et coder en C++ ? std::string, std::stringstream etc...

    Sinon tes utilisations de strcpy sont mauvaises.
    Doc de strcpy
    To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
    Si tu tiens à faire du code C (ce que je ne conseilles pas), regarde memmove, qui autorise l'aliasing.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut
    Salut, et merci de t’être penché sur le problème.

    Je pense que je vais plus me concentrer sur le C++ et oublier un peu le C. Étant donné que le C++ est une "amélioration" du C, le programme sera sûrement de meilleur qualité. Du coup je n'ai pas regardé memmove.
    .
    Donc pour toi, mes utilisations de strcpy sont mauvaises ? je vais essayer de les reprendre. Merci de me l'avoir dit parce que je ne serais jamais allé chercher de ce coté la.

    J'ai ajouté une fonction de test de connexion avec le DTU-215, il s'avère que la connexion en USB ne se fait pas, as tu déjà eu a connecter un DTU-215 en USB ? J'ai suivi à la lettre la procédure du constructeur (je ne la trouve pas sur leur site mais je peux te la fournir si tu veux, elle est sur mon PC) mais le programme ne reconnait pas le générateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Form2::testConnectionDektec()
    {
    DtDevice Dvc;
    if (Dvc.AttachToType(215)!=DTAPI_OK)
    MessageBox::Show("Aucun Dektec connecté"); // J'ai ce message même si l'appareil est connecté (et fonctionne très bien avec le logiciel du fabricant)
    Connais-tu les déclarations/instructions a effectuer afin de pouvoir le connecter ?


    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2012, 12h36
  2. générateur de signaux
    Par autousto dans le forum Simulink
    Réponses: 8
    Dernier message: 19/07/2011, 10h07
  3. connexion par usb entre Windows CE 4.2 et Windows 2000
    Par Titeuf82 dans le forum Administration
    Réponses: 2
    Dernier message: 04/10/2007, 17h41
  4. Comunication par USB, TCP/IP, Ethernet
    Par nicolastiss dans le forum Linux
    Réponses: 5
    Dernier message: 30/06/2006, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo