Advertisement
Guest User

SerialRead.au3

a guest
Aug 19th, 2011
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 2.70 KB | None | 0 0
  1. ; inspiré par http://kr3l.wordpress.com/2008/12/07/serial-com-port-communication-with-autoit/
  2.  
  3. #include <WinAPI.au3>
  4.  
  5. Func SetReadTimeout($h, $t = 500)
  6.     Local $timeouts = DllStructCreate("DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;")
  7.  
  8.     DllStructSetData($timeouts, "ReadIntervalTimeout", -1)
  9.     DllStructSetData($timeouts, "ReadTotalTimeoutMultiplier", -1)
  10.     DllStructSetData($timeouts, "ReadTotalTimeoutConstant", $t)
  11.     DllStructSetData($timeouts, "WriteTotalTimeoutMultiplier", 0)
  12.     DllStructSetData($timeouts, "WriteTotalTimeoutConstant", 0)
  13.  
  14.     DllCall("Kernel32.dll", "bool", "SetCommTimeouts", "handle", $h, "ptr", DllStructGetPtr($timeouts))
  15.  
  16.     $timeouts = 0
  17. EndFunc
  18.  
  19. Func SetComParams($h, $bauds)
  20.     Local $dcb = DllStructCreate("DWORD DCBlength; DWORD BaudRate;DWORD fBinary;DWORD fParity;DWORD fOutxCtsFlow;DWORD fOutxDsrFlow;DWORD fDtrControl;" & _
  21.                            "DWORD fDsrSensitivity;DWORD fTXContinueOnXoff;DWORD fOutX;DWORD fInX;DWORD fErrorChar;DWORD fNull;DWORD fRtsControl;" & _
  22.                            "DWORD fAbortOnError;DWORD fDummy2;WORD  wReserved;WORD  XonLim;WORD  XoffLim;BYTE  ByteSize;BYTE  Parity;BYTE  StopBits;" & _
  23.                            "char  XonChar;char  XoffChar;char  ErrorChar;char  EofChar;char  EvtChar;WORD  wReserved1;")
  24.  
  25.     DllStructSetData($dcb, "DCBlength", DllStructGetSize ($dcb))
  26.  
  27.     DllCall("Kernel32.dll", "bool", "GetCommState", "handle", $h, "ptr", DllStructGetPtr($dcb))
  28.  
  29.     DllStructSetData($dcb, "BaudRate", $bauds)
  30.     DllStructSetData($dcb, "ByteSize", 8)
  31.     DllStructSetData($dcb, "Parity", 0) ; pas de parité
  32.     DllStructSetData($dcb, "StopBits", 0) ; 1 bit de stop
  33.  
  34.     DllCall("Kernel32.dll", "bool", "SetCommState", "handle", $h, "ptr", DllStructGetPtr($dcb))
  35.  
  36.     $dcb = 0
  37.  
  38.     SetReadTimeout($h)
  39. EndFunc
  40.  
  41. Func OpenCom($port, $bauds)
  42.     Local $h = DllCall("Kernel32.dll", "handle", "CreateFile", "str", $port, "int", BitOR($GENERIC_READ,$GENERIC_WRITE), "int", 0, "ptr", 0, "int", $OPEN_EXISTING, "int", $FILE_ATTRIBUTE_NORMAL, "int", 0)
  43.  
  44.     If $h[0] <> $INVALID_HANDLE_VALUE Then
  45.         SetComParams($h[0], $bauds)
  46.     EndIf
  47.  
  48.     return $h[0]
  49. EndFunc
  50.  
  51. Func CloseCom($h)
  52.     _WinAPI_CloseHandle($h)
  53. EndFunc
  54.  
  55. Func ReadComChar($h)
  56.     Local $buff = DllStructCreate("char c")
  57.  
  58.     Local $bytesRead
  59.     _WinAPI_ReadFile($h, DllStructGetPtr($buff), 1, $bytesRead);
  60.     $c = DllStructGetData($buff, "c")
  61.     $buff = 0
  62.  
  63.     If $bytesRead = 1 Then
  64.         Return $c
  65.     Else
  66.         Return False
  67.     EndIf
  68. EndFunc
  69.  
  70. Func ReadComString($h, $separator = @CR)
  71.     Local $str
  72.  
  73.     While True
  74.         Local $c
  75.         $c = ReadComChar($h)
  76.         If $c Then
  77.             If $c <> $separator Then
  78.                 $str &= $c
  79.             Else
  80.                 Return $str
  81.             EndIf
  82.         EndIf
  83.     WEnd
  84. EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement