Page 1 sur 1
[RESOLU] ReadSerialPortData() et port série USB
Publié : dim. 21/oct./2012 10:08
par Anonyme 2
Bonjour à tous
J'aimerais de l'aide concernant l'utilisation de ReadSerialPortData()
Je test actuellement la réception de données sur un port USB définis, mais je n'arrive pas à faire fonctionner mon petit bout de code plus-bas pour, par exemple, recéptioner et afficher les données recus de la souris qui, dans ses propriétés est localisé là: Port_#0002.Hub_#0005
Code : Tout sélectionner
Port$ = "" ;PORT à définir ici
*Buffer=AllocateMemory(1000)
If OpenSerialPort(0, Port$, 300, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
Debug "Port "+Port$+" ouvert"
Repeat
Resultat = AvailableSerialPortInput(0)
If Resultat
longueur = ReadSerialPortData(0, *Buffer, Resultat)
Debug "Rcv: "+Str(Peek ()) ;A configurer aussi
EndIf
ForEver
Else
Debug "Port "+Port$+" non ouvert."
EndIf
Merci d'avance de votre aide

Re: ReadSerialPortData()
Publié : dim. 21/oct./2012 14:18
par Golfy
Pour ma part, je préfère récupérer les données brutes et les transformer en chaines lisibles par un humain : voici la fonction
Code : Tout sélectionner
Procedure.s ReadMsg(*B, len)
a$ = ""
For t=0 To len-1
a$=a$+RSet(Hex(PeekB(*B+t) & $FF),2,"0")
Next t
ProcedureReturn a$
EndProcedure
Ca c'est pour voir ce qui arrive (tu peux continuer à travailler sur les données brutes dans *Buffer) mais gare aux PeekS (qui s'arrêtera au premier octet dont la valeur sera nulle).
Ensuite, la boucle que tu fournis et juste reste juste à mettre le bon port (ex: port$="COM3" sur Windows ou port$="/dev/ttyS0" sur Linux) Voici celle que j'utilise pour lire les informations de ma domotique :
Code : Tout sélectionner
Procedure.i LectureVelbus()
Serial = AvailableSerialPortInput(0)
VelbusRX = VelbusRX + Serial
If Serial
RXLen = ReadSerialPortData(0,*BSin,Serial)
If RXlen = Serial
nb1=ListSize(msg2network())
Repeat
If PeekB(*BSin+t) & $FF = $0F
counter+1
fixlen = 4
varlen = PeekB(*BSin+t+3) & $0F
fintrame = t+fixlen+varlen+1
crcloc = fintrame-1
tlen = fixlen+varlen+2
crc = checksum(*BSin+t,tlen-3)
If PeekB(*BSin+fintrame) & $FF = $04
AddElement(msg2network())
msg2network()\src = "VELBUS Modules"
msg2network()\len = tlen
msg2network()\Cmd = AllocateMemory(tlen)
CopyMemory(*BSin+t,msg2network()\cmd,tlen)
t = t+tlen-2
Else
EndIf
EndIf
t = t + 1
Until t=>RXLen
ProcedureReturn ListSize(msg2network())-nb1
EndIf
EndIf
ProcedureReturn 0
EndProcedure
Tu noteras l'utilisation de Serial = AvailableSerialPortInput(0) qui permet de ne pas lire le buffer s'il n'y a pas de données.
Re: ReadSerialPortData()
Publié : dim. 21/oct./2012 17:40
par Anonyme 2
Merci de ta réponse très productive Golfy
Mais pour la question du port, comment fait-on pour connaitre celui utilisé pour le périphérique ciblé? les seules indications que j'ai c'est ça: Port_#0002.Hub_#0005 (j'ai testé COM0 à COM10 mais rien ..)
Pourrais-tu me donner un exemple fonctionnel, si ce n'est pas trop demander, par rapport à un périphérique présent quelconque (clavier, écran, souris, clé..) ? merci de ta précieuse aide

Re: ReadSerialPortData()
Publié : dim. 21/oct./2012 19:29
par Golfy
Il faut déjà savoir comment tu obtiens
Port_#0002.Hub_#0005 : est-ce une fonction WMI, un programme quelconque... ou bien la liste des pilotes et périphériques Vista (ou Win7)

?
Mon flair me dit qu'il tu n'as pas l'exact bon driver ou qu'il n'est pas correctement installé...
... ou alors c'est Google qui m'a mit sur la piste :
http://h30434.www3.hp.com/t5/Notebook-O ... -p/1293119
Ce n'est peut-être pas le même périphérique, mais il y a des idée à suivre

Re: ReadSerialPortData()
Publié : dim. 21/oct./2012 20:20
par Anonyme 2
C'est dans la liste des pilotes et périphériques de windows 7
Je ne pense pas que ça soit du côté du driver

je cherche encore

Re: ReadSerialPortData()
Publié : dim. 21/oct./2012 20:54
par Golfy
Dans le Gestionnaire de périphériques, vois-tu les ports série (type COMx) ?
Sans cela, il sera difficile d'utiliser les commandes Purebasic...
Je n'ai -- hélas pour ce diagnostic -- pas de périphérique "série" sur mon PC Win7... sur le PC WinXP, j'en ai mais XP n'affiche pas de description Port_#
Est-ce que ton périphérique fonctionne (avec le programme d'origine) ?
As-tu (sur le CD) des exemples de programmation en C, ou autre langage ?
Re: ReadSerialPortData()
Publié : sam. 10/nov./2012 20:38
par Anonyme 2
Désolé du retard.. les vacances hein :3
Non le gestionnaire de périphériques n'affiche pas de "COMx"

Du coup dois-je me concentrer sur des dll spécialisés dans la genstion de port série ou bien?
Et sinon, oui mon périphérique fonctionne correctement: installés avec les CD d'origine etc.. aucuns problèmes de ce côté

Pas d'exemples de programmation malheuresement :/
Je tiens à préciser qu'il n'y a pas que la souris seulement qui possèdent ces caractéristiques, mais bien tout les autres périphériques aussi ( = aucuns emplacements de type "COMx")
Mon but général et de pouvoir réceptionner des données sur un port prédéfinis.
Etant donné cette tonne de logiciels (
listes,
USB Monitor), je pense que ce que je recherche à faire est faisable

Mais si quelqun a des idées pour me faire avances, je suis preneur!

Re: ReadSerialPortData()
Publié : sam. 10/nov./2012 21:37
par flaith
Il existe une librairie
ICI
Re: ReadSerialPortData()
Publié : sam. 10/nov./2012 21:46
par Anonyme 2

j't'adore toi

merci beaucoup, j'ai pas encore test mais ça à l'air de fonctionner
C'est vrai qu'il faut penser à farfouiller dans le fofo anglais parfois

Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : sam. 10/nov./2012 22:05
par flaith
De rien

Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : lun. 12/nov./2012 7:07
par Anonyme 2
Petit problème..
J'ai ouvert chaque exemple (Device_IO.pb, DeviceInfo.pb, DeviceTest.pb) mais rien ne marche.. il y a quelques erreurs: les fonctions ne semblent pas fonctionner (pas lier avec la librarie?) ou quelques structures comme "HID_Lib_DeviceInfo" qui ne marche pas non plus..
Besoin d'aide please

Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : lun. 12/nov./2012 12:45
par flaith
Tu as bien téléchargé le fichier zip et installé la librairie ?
Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : lun. 12/nov./2012 17:35
par Anonyme 2
Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : lun. 12/nov./2012 20:05
par flaith
Dans le zip tu as plusieurs répertoires et chacun d'entre eux doit etre installé dans le répertoire de Purebasic
Ex: dans le zip tu as le repertoire PureLibraries\UserLibraries et la librairie "HID_Lib" que tu dois donc copié dans le répertoire Purebasic\PureLibraries\UserLibraries et même chose pour les autres
Relance Purebasic et test les programmes

Re: [RESOLU] ReadSerialPortData() et port série USB
Publié : mer. 14/nov./2012 22:01
par Anonyme 2