Page 1 sur 1
lire a l'adresse d'un com
Publié : dim. 12/nov./2006 14:01
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 !!
Publié : dim. 12/nov./2006 14:22
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
Publié : dim. 12/nov./2006 18:12
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 !!
Publié : lun. 13/nov./2006 3:24
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 ?

Publié : lun. 13/nov./2006 11:06
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.
Publié : lun. 13/nov./2006 11:46
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

)
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.
Publié : lun. 13/nov./2006 14:50
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

)
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????

Publié : lun. 13/nov./2006 15:19
par Flype
oui mon collègue il en peut plus...
Publié : lun. 13/nov./2006 15:21
par djes
lol! Tu travailles dans une boîte de com?
Publié : lun. 13/nov./2006 15:28
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...
Publié : mar. 14/nov./2006 19:11
par graph100
Dobro a écrit :
ce serai pas un Primax 4800 par hasard ?

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
Publié : mar. 14/nov./2006 19:20
par graph100
a .. les SCSI ou les ports d'imprimantes (LTP) marche t il avec le meme protocole , meme modifier ?