Quote:
Par contre l'envoie d'une commande au modem ne semble pas du tout fonctionner et meme fait plus ou moins planter le modem (obliger de l'eteindre pour que la commande 'interroger le modem' dans windows me donne une reponse.
Evidemment ça ne devrait pas. Si tu envoies un AT, tu dois voir les leds du modem clignoter gentiment, ce qui signifie qu'il te répond par un OK.
Mais ATTENTION, je vois déjà un problème potentiel. Je ne connais pas les classes Java qui travaillent avec le modem (et heureusement pour moi). Mais je ne peux m'empêcher de supposer que c'est mal foutu et que quand tu envoies un AT c'est n'est pas AT que tu envoies, mais AT en UNICODE. Et là évidement, le modem il risque de pas trop aimer. Il faut donc que tu commences par vérifier ce point et que tu le règles si nécessaire.
Quote:
1) Pourquoi la lecture [via inputStream = serialPort.getInputStream() ]est elle "bloquante" et pas l'ecriture [outputStream = serialPort.getOutputStream() ]
Sans doute parce que les classes sont mal foutues et que la lecture dans un thread séparé n'est pas automatique. Tu va donc devoir placer ton code de lecture dans un thread.
Quote:
2) Faut il envoyer commencer le pilotage en enoyant une commande particuliere au modem ?
Normalement non.
Quote:
3) dois je faire un thread qui ecoute en permanence une reponse du modem
Oui, très clairement.
Quote:
ou puis je faire des sequences du style "envoie de commande puis lecture de la reponse"
C'est une mauvaise approche. D'abord parce que tu n'es pas maître du temps de réponde du modem. Ensuite parce que le modem lui même peut envoyer des octets sans que tu ais envoyé une commande d'abord. Par exemple le modem peut t'envoyer RING si quelqu'un t'appelle sur la ligne.
La programmation du port série ne peut être solide QUE si elle est totalement asynchrone, c'est à dire que si tout est dans des threads, MEME ta routine d'écriture (C'est important)
Quote:
4)comment savoir si ma commande est bien passée etant donné que lorsque le programme s'arrete, je dois eteindre rallumé le modem (lorsque j'ai passé une commande)
Tu le sais. Si tu dois éteindre le modem ça a foiré. Attention à l'UNICODE.
Quote:
5) J'aimerai bien tester la classe lecture mais comment faire etant donné que si je la lance, je ne peut pas utiliser un autre prog qui ecrit (genre hyperterminal de windows) etant donné que le port est deja ouvert (par la classe de lecture)
Tu peux pas en dehors de ton programme. Comme tu le dis pertinement. Ton programme squatte le port.
Je n'ai pas le temps de regarder ton code pour l'instant. J'en suis navré. Peut être plus tard.
Mais si tu appliques l'ensemble de mes conseils, la situation devrait se débloquer pour toi, sans doute en grande partie.
Evidemment ça ne devrait pas. Si tu envoies un AT, tu dois voir les leds du modem clignoter gentiment, ce qui signifie qu'il te répond par un OK.
Mais ATTENTION, je vois déjà un problème potentiel. Je ne connais pas les classes Java qui travaillent avec le modem (et heureusement pour moi). Mais je ne peux m'empêcher de supposer que c'est mal foutu et que quand tu envoies un AT c'est n'est pas AT que tu envoies, mais AT en UNICODE. Et là évidement, le modem il risque de pas trop aimer. Il faut donc que tu commences par vérifier ce point et que tu le règles si nécessaire.
Sans doute parce que les classes sont mal foutues et que la lecture dans un thread séparé n'est pas automatique. Tu va donc devoir placer ton code de lecture dans un thread.
Normalement non.
Oui, très clairement.
C'est une mauvaise approche. D'abord parce que tu n'es pas maître du temps de réponde du modem. Ensuite parce que le modem lui même peut envoyer des octets sans que tu ais envoyé une commande d'abord. Par exemple le modem peut t'envoyer RING si quelqu'un t'appelle sur la ligne.
La programmation du port série ne peut être solide QUE si elle est totalement asynchrone, c'est à dire que si tout est dans des threads, MEME ta routine d'écriture (C'est important)
Tu le sais. Si tu dois éteindre le modem ça a foiré. Attention à l'UNICODE.
Tu peux pas en dehors de ton programme. Comme tu le dis pertinement. Ton programme squatte le port.
Je n'ai pas le temps de regarder ton code pour l'instant. J'en suis navré. Peut être plus tard.
Mais si tu appliques l'ensemble de mes conseils, la situation devrait se débloquer pour toi, sans doute en grande partie.