lire a l'adresse d'un com

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

lire a l'adresse d'un com

Message par graph100 »

quand on fait : panneau de configuration, performance et maintenance
, systeme, gestionnaire de periphérique, Ports (COM et LTP), clic droit
sur "port de communication (COM1)", Propriété, Ressources,
on récupère des valeurs comme par exemples
Plage d'E/S 03F8 - 03FF
IRQ 04

je crois que ces valeurs sont les adresses du ports com 1
mais je n'arrive pas a y accéder !!
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

à ma connaissance, on ne peut pas accéder directement comme çà au port COM.

en fait, windows permet d'y accéder (presque) tout comme on accéderait à un fichier (OpenFile/WriteFile).

donc en passant par l'API Win32 :

Code : Tout sélectionner

;  ComPort (RS232) example , Write and Read-data, timer driven
;  good for a small terminal or a modem-configurator
;  Windows only, done on january, 14th. 2004
;  updated for PB4.x october 2006
;  Copyright 2004/2006 Siegfried Rings (CodeGuru)
;
OnErrorGoto(?Errorhandling) ;Enable Errorhandling (enable Linenumbering!)

;User Structure for all the ComPort-Stuff
Structure structComport
 Port.l
 Inbuffersize.l
 OutBuffersize.l
 Handle.l
 ct.COMMTIMEOUTS
 dcb.DCB
 Receivebuffer.l
 ReceivebufferLength.l
EndStructure

Enumeration
 #Gadget_TextSend
 #Gadget_TextReceive
 #Gadget_ButtonSend
 #Gadget_ButtonReceive
EndEnumeration

#Win=1
;#ReceiveSendbuffer=1
#MaxReceiveBuffer=1024


Procedure.l SR_OpenComPort(*RS232.structComport)
 *RS232\Handle =0
 Device.s="COM"+Str(*RS232\Port)+":"
 Result = CreateFile_(@Device, $C0000000, 0, 0, 3, 0, 0); create and open a existing device/file ;)
 If Result = -1
  MessageRequester("info", "Com Port " + Str(*RS232\Port) + " not available. Use Serial settings (on the main menu) To setup your ports.", 48)
  ProcedureReturn 0
 EndIf
 If Result
  *RS232\Handle=Result
  mydcb.DCB
  If GetCommState_(*RS232\Handle, @mydcb) ;First retrieve the Settings from ComPort

   ;Set Baudrate etc.
   mydcb\Baudrate=*RS232\dcb\Baudrate ;Change the Settings to our needs
   mydcb\Bytesize=*RS232\dcb\Bytesize
   mydcb\Parity=*RS232\dcb\Parity
   mydcb\StopBits=*RS232\dcb\StopBits
   Result=SetCommState_(*RS232\Handle, @mydcb) ;and write them back to Comport
   ;Debug "SetCommState="+Str(result)   

   Result=SetCommTimeouts_(*RS232\Handle,*RS232\ct) ;set the Timeouts set longer for problems :)
   ;Debug "SetCommTimeouts="+Str(Result)

   ;Set In/Outbuffers
   If result
    Result=SetupComm_(*RS232\Handle,*RS232\Inbuffersize,*RS232\Outbuffersize)
   EndIf
  EndIf
 Else
  CloseHandle_(Result)
 EndIf
 ProcedureReturn *RS232\Handle
EndProcedure

Procedure SR_CloseComPort(*RS232.structComport)
 If *RS232\Handle
  CloseHandle_(*RS232\Handle)
  *RS232\Handle=0
 EndIf
EndProcedure

Procedure SR_WriteComPort(*RS232.structComport,Rawdata.l,RawDataLength.l)
 If *RS232\Handle=0
  ProcedureReturn
 EndIf
 Written.l
 Result=WriteFile_(*RS232\Handle,RawData,RawDataLength,@Written,0)  ;WriteData now to ComPort
 FlushFileBuffers_(*RS232\Handle);Release buffer directly
 ProcedureReturn written
EndProcedure

Procedure SR_ReadComPort(*RS232.structComport)
 If *RS232\Handle=0
  ProcedureReturn
 EndIf
 Repeat
  Result=ReadFile_(*RS232\Handle , *RS232\Receivebuffer+Offset, 256, @RetBytes, 0) ;Read content
  If RetBytes>0
   Offset=Offset+RetBytes
  EndIf
 Until RetBytes=0 Or Offset>#MaxReceiveBuffer
 *RS232\ReceivebufferLength=Offset
; FlushFileBuffers_(*RS232\Handle);Release buffer directly
 ProcedureReturn Offset
EndProcedure


;- Begin of MainCode

 MyRS232.structComport ;set my own Structure For all the ComPorthandling
 MyRS232\Port=1
 MyRS232\dcb\Baudrate=9600
 MyRS232\dcb\Bytesize=8
 MyRS232\dcb\StopBits=1 ;#ONESTOPBIT
 MyRS232\dcb\Parity=#NOPARITY
 
 MyRS232\Inbuffersize=256 ;
 MyRS232\OutBuffersize=256
 
 MyRS232\ct\ReadIntervalTimeOut =200; in milliseconds '#MAXDWORD
 MyRS232\ct\ReadTotalTimeoutMultiplier = 1
 MyRS232\ct\ReadTotalTimeoutConstant = 1
 MyRS232\ct\WriteTotalTimeoutConstant = 10
 MyRS232\ct\WriteTotalTimeoutMultiplier = 1
   
 MyRS232\Receivebuffer=AllocateMemory(#MaxReceiveBuffer) ;Reserve mem For it
 MyRS232\ReceivebufferLength=0


;- Open Window
hwnd=OpenWindow(#Win, 1, 300, 400, 400,"PureBasic SerialPortDemo Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If hwnd
 If CreateGadgetList(WindowID(#Win))

  ;- CreateGadgets
  StringGadget(#Gadget_TextSend, 5, 5, 200, 20, "AT")
  ;StringGadget(#Gadget_TextReceive, 5, 55, 390, 340, "",#PB_String_Multiline  )
  EditorGadget(#Gadget_TextReceive,5, 55, 390, 340)
  ButtonGadget(#Gadget_ButtonSend,210,5,90,20,"Send")
  ButtonGadget(#Gadget_ButtonReceive,305,5,90,20,"Receive")

  ;- Setup Timer
  Result=SetTimer_(hwnd,1,100,0) ;Setup our timer For receiveing Data every 100 msecs

  ;- Setup and Open Comport
  Result=SR_OpenComPort(MyRS232)
 
 
  ;- Eventloop
  Repeat
   EventID.l = WaitWindowEvent()
 
   ;- Timer-Routine to read Data from ComPort
   If EventID =#WM_TIMER
     If MyRS232\Handle<>0
       Readed=SR_ReadComPort(MyRS232)
      If MyRS232\ReceiveBufferlength>0
        Buffer.s=Buffer.s+PeekS(MyRS232\ReceiveBuffer,MyRS232\ReceiveBufferlength)
        SetGadgetText(#Gadget_TextReceive,Buffer.s)
        MyRS232\ReceiveBufferlength=0
      EndIf
     EndIf
   EndIf
 
   If EventID =#PB_Event_Gadget
     GadgetNR = EventGadget()
     
     ;- Send Data to Comport
     If GadgetNR =#Gadget_ButtonSend
      SendText.s=GetGadgetText(#Gadget_TextSend) + Chr(13) ;add a CarriageReturn to send to modem
      ;Debug SendText
      Buffer.s=""
      SetGadgetText(#Gadget_TextReceive,Buffer.s);Reset inbuffer gadget
      Result=SR_WriteComPort(MyRS232,@SendText.s,Len(SendText.s)); Check Modem
      Debug "Characters sended:"+Str(Result)
     EndIf

     ;- Read Data from Comport
     If GadgetNR=#Gadget_ButtonReceive
      Readed=SR_ReadComPort(MyRS232) ; Read Incoming
      If Readed
       Debug "Characters readed="+Str(Readed)
       Buffer.s=Buffer.s+PeekS(MyRS232\ReceiveBuffer,MyRS232\ReceiveBufferlength)
       SetGadgetText(#Gadget_TextReceive,Buffer.s)
       MyRS232\ReceiveBufferlength=0 ;Shorten buffer now
      EndIf
     EndIf
   EndIf
   
  Until EventID = #PB_Event_CloseWindow
 EndIf
EndIf
SR_CloseComPort(MyRS232) ;Comport Close
End

;- Error-handler
Errorhandling:
 MessageRequester("Error","in line "+Str(GetErrorLineNR() ),0)
 End
Sinon, il y a toujours la librairie MVCOM de Marc Vitry (PB394 et PB40).
http://perso.orange.fr/marc.vitry/mvcom.htm
Image
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

merci beaucoup !
je vais voir : c'est pour un scanner assez mais qui fonctionne .
il font expres de ne pas faire les drivers pour xp pour que l'on changent le materiel !!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

graph100 a écrit :merci beaucoup !
je vais voir : c'est pour un scanner assez mais qui fonctionne .
il font expres de ne pas faire les drivers pour xp pour que l'on changent le materiel !!
ce serai pas un Primax 4800 par hasard ? 8O :?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Hyper classique! Mais quelquefois les pilotes existent mais c'est une cata. Là j'ai un scanner HP au boulot, l'interface twain a été codée avec les pieds! J'ai eu des scans il y a plus de 10 ans qui fonctionnaient mieux! Il y a un scan de diapos, non seulement ça bogue de partout (scan décalé par rapport au cadre défini, problèmes de résolution et de couleurs), mais c'est d'une lenteur, alors que la mécanique est hyper rapide. J'ai l'impression que c'est du .net en plus, franchement c'est pas une réussite.

J'espère que Photoshop ne passera pas à la moulinette .net.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

djes a écrit :J'espère que Photoshop ne passera pas à la moulinette .net.
çà m'étonnerait beaucoup à moins que .NET existe (ou existera) sous MacOS.


J'ai une infographiste en stage dans mon bureau ( pas de blague svp :D )
Tout les postes de leur école (50aine de postes) sont sous Mac. L'allure générale de PhotoShop est la même sous Windows et Mac donc Adobe doit avoir sa propre bibliothèque d'interface graphique.
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Flype a écrit :
djes a écrit :J'espère que Photoshop ne passera pas à la moulinette .net.
çà m'étonnerait beaucoup à moins que .NET existe (ou existera) sous MacOS.


J'ai une infographiste en stage dans mon bureau ( pas de blague svp :D )
Tout les postes de leur école (50aine de postes) sont sous Mac. L'allure générale de PhotoShop est la même sous Windows et Mac donc Adobe doit avoir sa propre bibliothèque d'interface graphique.
J'espère!



Alors comme ça t'as une infographiste en stage???? :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui mon collègue il en peut plus...
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

lol! Tu travailles dans une boîte de com?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

non - plus une boite de SAV (matos electronique) mais depuis peu on a monté une cellule de comm parcequ'on grossit et on a besoin d'etre plus crédibles... alors la nouvelle infographiste a rejoint les vieux briscards dans le bureau des informaticiens dont je fais parti (dev) avec mon collegue (admin).

et moi je passe mon temps à lui montrer comment faire si ou çà sous windows parceque sous Mac tout est apparemment plus simple, à écouter la demoiselle...
Image
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

Dobro a écrit : ce serai pas un Primax 4800 par hasard ? 8O :?
non mais un Trust 4800 (peut etre que c la meme chose pourkoi ? tu as des drivers ?) qui se branche sur une carte SCSI
le matos est nikel mais on peut pas s'en servir
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

a .. les SCSI ou les ports d'imprimantes (LTP) marche t il avec le meme protocole , meme modifier ?
Répondre