[RESOLU] ReadSerialPortData() et port série USB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

[RESOLU] ReadSerialPortData() et port série USB

Message par Anonyme 2 »

Bonjour à tous :mrgreen:
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 :wink:
Dernière modification par Anonyme 2 le sam. 10/nov./2012 21:48, modifié 1 fois.
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: ReadSerialPortData()

Message 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.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: ReadSerialPortData()

Message 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 ..) :cry:
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 :)
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: ReadSerialPortData()

Message 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) :wink: ?

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
:mrgreen:

Ce n'est peut-être pas le même périphérique, mais il y a des idée à suivre :idea:
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: ReadSerialPortData()

Message 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 :arrow: je cherche encore :roll:
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: ReadSerialPortData()

Message 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 ?
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: ReadSerialPortData()

Message 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! :)
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: ReadSerialPortData()

Message par flaith »

Il existe une librairie ICI
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: ReadSerialPortData()

Message par Anonyme 2 »

8O j't'adore toi :mrgreen: merci beaucoup, j'ai pas encore test mais ça à l'air de fonctionner :D
C'est vrai qu'il faut penser à farfouiller dans le fofo anglais parfois 8)
Dernière modification par Anonyme 2 le sam. 10/nov./2012 22:08, modifié 1 fois.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: [RESOLU] ReadSerialPortData() et port série USB

Message par flaith »

De rien :mrgreen:
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: [RESOLU] ReadSerialPortData() et port série USB

Message 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 :?
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: [RESOLU] ReadSerialPortData() et port série USB

Message par flaith »

Tu as bien téléchargé le fichier zip et installé la librairie ?
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: [RESOLU] ReadSerialPortData() et port série USB

Message par Anonyme 2 »

:?
Dernière modification par Anonyme 2 le mer. 14/nov./2012 18:46, modifié 1 fois.
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: [RESOLU] ReadSerialPortData() et port série USB

Message 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 :wink:
Anonyme 2
Messages : 183
Inscription : ven. 18/mars/2011 11:53

Re: [RESOLU] ReadSerialPortData() et port série USB

Message par Anonyme 2 »

:idea: :mrgreen:
Répondre