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 :

Comment récupérer code IMEI d'un modem ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment récupérer code IMEI d'un modem ?
    Bonjour,

    Tout d'abord, j'espère que je poste mon sujet dans la bonne rubrique du forum.

    J'ai fait un petit programme qui devrait (normalement) récupérer le code IMEI d'une carte SIM intégrée dans un modem. Le modem est branché à un pc sous linux donc le petit programme tourne sous linux aussi. Avec un dialer et en tapant la commande qui va bien, j'ai récupérer ce numéro IMEI (15 chiffres) afin que je le compare avec ce que j'obtiens par mon programme mais je n'obtiens pas du tout le résultat attendu.

    Je poste ici mon code afin que vous y jetiez un coup d'oeil :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    #include <stdio.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <signal.h>
    #include <stdlib.h>
    #include <termios.h>
    #include <time.h>
    #include <locale.h>
     
    #include <string.h>
     
     
     
     
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
     
    #pragma argsused
     
    using namespace std;
     
    int SignalRecu;
     
    void rien()
    {
    	SignalRecu=1;
    }
     
     
    int main(int argc, char* argv[])
    {
     
    	setlocale( LC_NUMERIC, "" );
    	struct termios oldtio,newtio;
    	int taille, lg;
    	char DemandeSerial[6];
    	int fd;	
    	unsigned char Serial[20];	
     
    	fd = open ("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY );
     
    	if (fd < 0)
    	{
     
    		printf ("Erreur ouverture port\n");
    		exit (EXIT_FAILURE);
     
    	}
    	else
    	{
    		printf ("Ouverture COM reussie\n");
    	}
     
    	tcgetattr(fd,&oldtio);
     
    	newtio.c_cflag = B230400 | CS8 | CREAD;
    	//newtio.c_lflag = ECHO;
    	newtio.c_oflag = OFDEL;
    	newtio.c_lflag = CSTOPB ;
    	newtio.c_cc[VMIN] = 1;
        newtio.c_cc[VTIME] = 0;
     
    	newtio.c_iflag = IGNPAR | ICRNL;
     
    	newtio.c_oflag = 0;
     
    	tcsetattr(fd,TCSANOW,&newtio);
     
    	SignalRecu = 0;
     
    	while(SignalRecu==0)
    	{	
     
    	DemandeSerial[0]='A';
    	DemandeSerial[1]='T';
    	DemandeSerial[2]='+';
    	DemandeSerial[3]='G';
    	DemandeSerial[4]='S';
    	DemandeSerial[5]='N';
     
    	lg = write (fd, DemandeSerial, 6);
    	if (lg < 0 )
    	{
    		printf ("Erreur ecriture port\n");
    		printf("%d\n",lg);
     
    	}
    	else
    	{
    		printf ("Demande Serial reussie\n");
    	}
     
     
    	taille = read(fd, Serial, sizeof(&Serial));
    	if (taille<0)
    	{
    		printf ("Erreur Lecture Serial IMEI\n");
    		//exit (EXIT_FAILURE);
    	}
    	else
    	{
        	int i = 0;
    		for (Serial[i]; i < sizeof(Serial); i++)
    		{
    			printf ("%d\n", Serial[i]);
    			SignalRecu=1;
    		}
    		//printf ("\r\n");
     
        }
    }
     
        if(close(fd) < 0)
    	{
    		printf("probleme a la fermeture\r\n");
    	}
     
     
    	return (EXIT_SUCCESS);
     
     
     
    }
    Merci d'avance pour votre aide et à bientôt !

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par petitclem Voir le message
    J'ai fait un petit programme qui devrait (normalement) récupérer le code IMEI d'une carte SIM intégrée dans un modem.
    Juste une petite remarque, l'IMEI n'est pas l'identifiant de la carte SIM mais du modem. L'identifiant équivalent pour la carte SIM est l'IMSI.

    Sinon, chaque commande AT envoyée à un modem doit être terminé par un Retour Chariot.
    Il ne faut donc pas envoyé "AT+GSN" mais "AT+GSN\r"

    Et au passage, es-tu certain que la commande est AT+GSN ? Ne serait-ce pas plutôt AT+CGSN ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    merci de ta réponse gl.

    Effectivement, la commande "AT+GSN" renvoi le numéro de série du modem. Sur mon modem la commande "AT+CGSN" donne la même chose.
    Merci pour l'info sur le IMSI, je vais jeter un coup d'oeil sur la doc !

    J'ai résolu mon problème en ajoutant "\r" à ma trame d'envoi donc : "AT+GSN\r" .

    Merci encore et à bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Comment récupérer code retour system de mon .bat
    Par cyborg123 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/11/2009, 10h43
  2. [C#]Comment récupérer le code d'une Exception ?
    Par joujoukinder dans le forum C#
    Réponses: 18
    Dernier message: 30/07/2007, 01h47
  3. Réponses: 6
    Dernier message: 18/09/2006, 15h06
  4. Réponses: 5
    Dernier message: 24/01/2006, 14h25
  5. Réponses: 5
    Dernier message: 21/12/2004, 18h12

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