sebbie Posted June 24, 2008 Posted June 24, 2008 Hi here a more then newbi ;-) I am looking for the file commMG.au3 to include in a script. But i can not find it. I have seen the post of martin but the download link for this file is not there? best regards!! Sebastian
dorit30 Posted June 24, 2008 Posted June 24, 2008 Hi here a more then newbi ;-) I am looking for the file commMG.au3 to include in a script. But i can not find it. I have seen the post of martin but the download link for this file is not there? best regards!! Sebastianthis is it :http://www.autoitscript.com/forum/index.ph...p;hl=serial+udfAnd dont forget to say 10nx to Martin he done gr8 job
stbluesrul Posted September 24, 2011 Posted September 24, 2011 That link seems to be broken. Is there anyone that can post a link to the commMG.au3 include file?
sleepydvdr Posted September 24, 2011 Posted September 24, 2011 A quick search on google led me to this: http://www.magicsoftinc.com/software/tiltMouse/CommMG.au3 However, for prosperity purposes (that website may disappear someday), I will post the code:expandcollapse popup#cs UDF for commg.dll V1.0 Replaces mgcomm.au3 #ce Const $sUDFVersion = 'CommMG.au3 V2.1 ' #cs Version 2.1 Thanks to jps1x2 for the read/send bte array incentive and testing. Version 2.0.2 beta changed readbytearray so returns no of bytes read Version 2.0.1 beta added _CommSendByteArray and _CommReadByteArray Version 2.0 - added _CommSwitch. Can now use up to 4 ports. added option for flow control = NONE to _CommSetPort AutoIt Version: 3.2.3++ Language: English Description: Functions for serial comms using commg.dll Works with COM ports, USB to Serial converters, Serial to RS424 etc Functions available: _CommGetVersion _CommListPorts _CommSetPort _CommPortConnection _CommClearOutputBuffer _CommClearInputBuffer _CommGetInputcount _CommGetOutputcount _CommSendString _CommGetString _CommGetLine _CommReadByte _CommReadChar _CommSendByte _CommSendBreak; not tested!!!!!!!!!! _CommCloseport _CommSwitch _CommSendByteArray _CommReadByteArray Author: Martin Gibson #ce #include-once Global $fPortOpen = False Global $hDll ;=============================================================================== ; ; Function Name: _CommListPorts($iReturnType=1) ; Description: Gets the list of available ports seperated by '|' or as an array ; ; Parameters: $iReturnType - integer:if $iReturnType = 1 then return a string with the list of COM ports seperated by '|' ; if $iReturnType <> 1 then return an array of strings, with element [0] holding the number of COM ports ; Returns; on success - a string eg 'COM1|COM8', or array eg ['2','COM1','COM2'] ; on failure - an empty string and @error set to 1 if dll could not list any ports ; @error set to 2 id dll not open and couldn't be opened ;=============================================================================== Func _CommListPorts($iReturnType = 1) Local $vDllAns,$lpres If Not $fPortOpen Then $hDll = DllOpen('commg.dll') If $hDll = -1 Then SetError(2) $sErr = 'Failed to open commg.dll' Return 0;failed EndIf $fPortOpen = True EndIf If $fPortOpen Then $vDllAns = DllCall($hDll,'str','ListPorts') if @error = 1 then SetError(1) Return '' Else ;ConsoleWrite($vDllAns[0] & @CRLF) If $iReturnType = 1 Then Return $vDllAns[0] Else Return StringSplit($vDllAns[0],'|') EndIf EndIf Else SetError(1) Return '' EndIf EndFunc ;=============================================================================== ; ; Function Name: _Commgetversion($iType = 1) ; Description: Gets the version of the dll if $iType = 1 ; Or the version of this UDF if $iType = 2 ; Parameters: $iType - integer: = 1 to reurn the commg.dll version ; = 2 to return the UDF version ; Returns; on success - a string eg 'V1.3' ; on failure - an empty string and @error set to 1 ;=============================================================================== Func _CommGetVersion($iType = 1) Local $vDllAns If $iType = 2 Then Return $sUDFVersion If $fPortOpen Then $vDllAns = DllCall($hDll,'str','Version') if @error = 1 then SetError(1) ConsoleWrite('error in get version' & @CRLF) Return '' Else ;ConsoleWrite('length of version is ' & stringlen($vDllAns[0]) & @CRLF) Return $vDllAns[0] EndIf Else $vDllAns = DllCall('commg.dll','str','Version') if @error = 1 then SetError(1) ConsoleWrite('error in get version' & @CRLF) Return '' Else ;ConsoleWrite('length of version is ' & stringlen($vDllAns[0]) & @CRLF) Return $vDllAns[0] EndIf EndIf EndFunc ;=============================================================================== ; ; Function Name: _CommSwitch($channel) ;switches functions to operate on channel 1, 2, 3 or 4 ;if $channel > 4 then switches to 1 ;returns on succes the channel switched to ie 1 or 2 ; on failure -1 ;Remarks on start up of script channel 1 is selected, so if you only need one COM port ; you don't need to use _CommSwitch ; each channel needs to be set up with _CommSetPort ; The same COM port cannot be used on more than one channel. ; The channel number is not related to the COM port number, so channel 1 can ; be set to use COM2 and channel 4 can be set to use COM1 or any available port. ;====================================================================================== Func _CommSwitch($channel) Local $vDllAns $vDllAns = DllCall($hDll,'int','switch','int',$channel) If @error <> 0 Then SetError(1) Return -1 Else Return $vDllAns[0] EndIf EndFunc ;=========================================================================================================== ; ; Function Name: _CommSetport($iPort,ByRef $sErr,$iBaud=9600,$iBits=8,$vDllAnsar=0,$iStop=1,$iFlow=0) ; Description: Initialises the port and sets the parameters ; Parameters: $iPort - integer = the port or COM number to set. Allowed values are 1 or higher. ; NB WIndows refers To COM10 Or higher`as \\.\com10 but only use the number 10, 11 etc ; $sErr - string: the string to hold an error message if func fails. ; $iBaud - integer: the baud rate required. allowed values are one of ; 50, 75, 110, 150, 600, 1200, 1800, 2000, 2400, 3600, 4800, 7200, 9600, 10400, ; 14400, 15625, 19200, 28800, 38400, 56000, 57600, 115200, 128000, 256000 ; $iBits - integer: number of bits in code to be transmitted ; $iParity - integer: 0=None,1=Odd,2=Even,3=Mark,4=Space ; $iStop - integer: number of stop bits, 1=1 stop bit 2 = 2 stop bits, 15 = 1.5 stop bits ; $iFlow - integer: 0 sets hardware flow control, ; 1 sets XON XOFF control, ; 2 sets NONE i.e. no flow control. ; Returns; on success - returns 1 and sets $sErr to '' ; on failure - returns 0 and with the error message in $sErr, and sets @error as follows ; @error meaning error with ; 1 dll call failed ; 2 dll was not open and could not be opened ; -1 $iBaud ; -2 $iStop ; -4 $iBits ; -8 $iPort = 0 not allowed ; -16 $iPort not found ; -32 $iPort access denied (in use?) ; -64 unknown error ;Remarks You cannot set the same COM port on more than one channel ;=========================================================================================================== Func _CommSetPort($iPort,ByRef $sErr,$iBaud=9600,$iBits=8,$iPar=0,$iStop=1,$iFlow=0) Local $vDllAns $sMGBuffer = '' $sErr = '' If Not $fPortOpen Then $hDll = DllOpen('commg.dll') If $hDll = -1 Then SetError(2) $sErr = 'Failed to open commg.dll' Return 0;failed EndIf $fPortOpen = True EndIf ConsoleWrite('port = ' & $iPort & ', baud = ' & $iBaud & ', bits = ' & $iBits & ', par = ' & $iPar & ', stop = ' & $iStop & ', flow = ' & $iFlow & @CRLF) $vDllAns = DllCall($hDll,'int','SetPort','int',$iPort,'int',$iBaud,'int',$iBits,'int',$iPar,'int',$iStop,'int',$iFlow) if @error <> 0 then $sErr = 'dll SetPort call failed' SetError(1) Return 0 EndIf if $vDllAns[0] < 0 Then SetError($vDllAns[0]) switch $vDllAns[0] Case -1 $sErr = 'undefined baud rate' Case -2 $sErr = 'undefined stop bit number' Case -4 $sErr = 'undefined data size' Case -8 $sErr = 'port 0 not allowed' Case -16 $sErr = 'port does not exist' Case -32 $sErr = 'access denied, maybe port already in use' Case -64 $sErr = 'unknown error accessing port' EndSwitch Return 0 Else Return 1 EndIf EndFunc ;=================================================================================== ; ; Function Name: _CommPortConnection() ; Description: Gets the port connected to the selected channel - see _CommSwitch ; Parameters: None ; Returns; on success - a string eg 'COM5' ; on failure - an empty string and @error set to the rerror set by DllCall ; Remarks - Can be used to verify the port is connected ;==================================================================================== Func _CommPortConnection() Local $vDllAns $vDllAns = DllCall($hDll,'str','Connection');reply is port eg COM8 If @error <> 0 Then SetError(@error) Return '' Else Return $vDllAns[0] EndIf EndFunc ;===================================================================================== ; ; Function Name: _CommSendString($sMGString,$iWaitComplete=0) ; Description: Sends a string to the connected port on the currently selected channel ; Parameters: $sMGString: the string to send sent without any extra CR or LF added. ; $iWaitComplete- integer:0 = do not wait till string sent ; 1 = wait till sent ; Returns: always 1 ; on success- @error set to 0 ; on failure - @error set to the error returned from DllCall ;====================================================================================== Func _CommSendString($sMGString,$iWaitComplete=0) ;sends $sMGString on the currently open port ;returns 1 if ok, returns 0 if port not open/active Local $vDllAns $vDllAns = DllCall($hDll,'int','SendString','str',$sMGString,'int',$iWaitComplete) If @error <> 0 Then SetError(@error) Return '' Else Return $vDllAns[0] EndIf EndFunc ;================================================================================ ; ; Function Name: _CommGetstring() ; Description: Get whatever characters are available received by the port for the selected channel ; Parameters: none ; Returns: on success the string and @error is 0 ; if input buffer empty then empty string returned ; on failure an empty string and @error set to the error set by DllCall ; Notes: Use GetLIne to get a whole line treminated by @CR or a defined character. ;================================================================================= Func _Commgetstring() ;get a string NB could be part of a line depending on what is in buffer Local $vDllAns ;$sStr1 = '' ;$vDllAns = DllCall($hDll,'str','GetByte') $vDllAns = DllCall($hDll,'str','GetString') If @error <> 0 Then SetError(1) ConsoleWrite('error in _commgetstring' & @CRLF) Return '' EndIf Return $vDllAns[0] EndFunc ;==================================================================================== ; ; Function Name: _CommGetLine($EndChar = @CR,$maxlen = 10000, $maxtime = 10000) ; Description: Get a string ending in $lineEnd ; Parameters: $lineEnd the character to indicate the end of the string to return. ; The $lineEnd character is included in the return string. ; $MaxLen - integer: the maximum length of a string before ; returning even if $linEnd not received ; If $maxlen is 0 then there is no number of characters ; $maxtime - integer:the maximum time in mS to wait for the $EndChar before ; returning even if $linEnd not received. ; If $maxtime is 0 then there is no max time to wait ; ; Returns: on success the string and @error is 0 ; If $maxlen characters received without the $lineEnd character, then these ; characters are returned and @error is set To -1. ; If $maxtime passes without receiving the $lineEnd character, then the characters ; received so far are returned and @error is set To -2. ; on failure areturns any characters reeived and sets @error to 1 ;====================================================================================== Func _CommGetLine($sEndChar= @CR,$maxlen = 0, $maxtime = 0) Local $vDllAns, $sLineRet, $sStr1, $waited, $sNextChar, $iSaveErr $sStr1 = ''; $sMGBuffer $waited = TimerInit() while 1;stringinstr($sStr1,$EndChar) = 0 If TimerDiff($waited) > $maxtime And $maxtime > 0 Then SetError(-2) Return $sStr1 EndIf If StringLen($sStr1) >= $maxlen And $maxlen > 0 Then SetError(-1) Return $sStr1 EndIf $ic = _CommGetInputCount() $sNextChar = _CommReadChar() $iSaveErr = @error If $iSaveErr = 0 And $sNextChar <> '' Then $sStr1 = $sStr1 & $sNextChar ;ConsoleWrite($sStr1 & @CRLF) If $sNextChar = $sEndChar Then ExitLoop EndIf If $iSaveErr <> 0 Then SetError(1) Return $sStr1 EndIf WEnd Return $sStr1 EndFunc ;============================================================================ ; ; Function Name: _CommGetInputCount() ; Description: Get the number of characters available to be read from the port. ; Parameters: none ; Returns: on success a string conversion of the number of characters.(eg '0', '26') ; on failure returns an empty string and sets @error to 1 ;=============================================================================== Func _CommGetInputCount() Local $vDllAns $vDllAns = DllCall($hDll,'str','GetInputCount') If @error <> 0 Then SetError(1) Return 0 Else Return $vDllAns[0] EndIf EndFunc ;============================================================================ ; ; Function Name: _CommGetOutputCount() ; Description: Get the number of characters waiting to be sent from the port. ; Parameters: none ; Returns: on success a string conversion of the number of characters.(eg '0', '26') ; on failure returns an empty string and sets @error to 1 ;=============================================================================== Func _CommGetOutputCount() Local $vDllAns $vDllAns = DllCall($hDll,'str','GetOutputCount') If @error <> 0 Then SetError(1) Return '' Else Return $vDllAns[0] EndIf EndFunc ;================================================================================================ ; ; Function Name: _CommReadByte($wait = 0) ; Description: Reads the byte as a string ; Parameters: $wait:integer if 0 then if no data to read then return -1 and set @error to 1 ; if <> 0 then does not return untill a byte has been read ; Returns: on success a string conversion of the value of the byte read.(eg '0', '20') ; on failure returns empty string and sets @error to 1 if no data to read and $wait is 0 ; Returns empty string and sets @error to 2 ifDllCall failed ; ;;NB could hang if nothing rec'd when wait is <> 0 ;================================================================================================== Func _CommReadByte($wait = 0) Local $iCount, $vDllAns If Not $wait Then $iCount = _CommGetInputCount() If $iCount = 0 Then SetError(1) Return '' EndIf EndIf $vDllAns = DllCall($hDll,'str','GetByte') If @error <> 0 Then SetError(2) Return '' EndIf ;ConsoleWrite('byte read was ' & $vDllAns[0] & @CRLF) Return $vDllAns[0] EndFunc ;============================================================================ ; ; Function Name: _CommReadChar($wait = 0) ; Description: Reads the next Character as a string ; Parameters: $wait:integer if 0 then if no data to read then return -1 and set @error to 1 ; if <> 0 then does not return untill a byte has been read ; Returns: on success a string of 1 character ; on failure returns empty string and sets @error to 1 ; ; ;;NB could hang if nothing rec'd when wait is <> 0 ;=============================================================================== Func _CommReadChar($wait=0) Local $sChar, $iErr $schar = _CommReadByte($wait) $iErr = @error If $iErr > 2 Then SetError(1) Return '' EndIf If $iErr == 0 Then Return Chr(Execute($sChar)) EndFunc ;============================================================================ ; Function Name: SendByte($byte,$iWaitComplete=0) ; Description: Sends the byte value of $byte. $byte must be in range 0 to 255 ; Parameters: $byte the byte to send. ; $iWaitComplete - integer: if 0 then functions returns without ; waiting for byte to be sent ; If <> 0 then waits till byte sent. ; Returns: on success returns 1 ; on failure returns -1 and sets @error to 1 ; ;;NB could hang if byte cannot be sent and $iWaitComplete <> 0 ;=============================================================================== Func _CommSendByte($byte,$iWaitComplete=0) Local $vDllAns $vDllAns = DllCall($hDll,'int','SendByte','int',$byte,'int',$iWaitComplete) If @error <> 0 Then SetError(1) Return -1 Else Return $vDllAns[0] EndIf EndFunc ;=============================================================================== ; Function Name: _CommSendByteArray($pAddr,$iNum,$iWait) ; Description: Sends the bytes from address $pAddress ; Parameters: $iNum the number of bytes to send. ; $iWaitComplete - integer: if 0 then functions returns without ; waiting for bytes to be sent ; if <> 0 then waits untill all bytes are sent. ; Returns: on success returns 1 ; on failure returns -1 and sets @error to 1 ; ;;NB could hang if byte cannot be sent and $iWaitComplete <> 0 ; could lose data if you send more bytes than the size of the outbuffer. ; the output buffer size is 2048 ;=============================================================================== Func _CommSendByteArray($pAddr,$iNum,$iWait) $vDllAns = DllCall($hDll,'int','SendByteArray','ptr',$pAddr,'int',$iNum,'int',$iWait) If @error <> 0 Or $vDllAns[0] = -1 Then SetError(1) Return -1 Else Return $vDllAns[0] EndIf EndFunc ;==================================================================================== ; Function Name: _CommReadByteArray($pAddr,$iNum,$iWait) ; ; Description: Reads bytes and writes them to memory starting at address $pAddress ; Parameters: $iNum the number of bytes to read. ; $iWaitComplete - integer: if 0 and then the functions returns ; with the available bytes up to $iNum. ; if 1 then waits untill the $iNum bytes received. ; Returns: on success returns the Number of bytes read. ; on failure returns -1 and sets @error to 1 ; ;;NB could hang if bytes are not received and $iWaitComplete <> 0 ; the input buffer size is 4096 ;==================================================================================== Func _CommReadByteArray($pAddr,$iNum,$iWait) $vDllAns = DllCall($hDll,'int','ReadByteArray','ptr',$pAddr,'int',$iNum,'int',$iWait) If @error <> 0 Or $vDllAns[0] = -1 Then SetError(1) Return -1 Else Return $vDllAns[0] EndIf EndFunc ;=============================================================================== ; Function Name: ClearOutputBuffer() ; Description: Clears any characters in the out put queue5 ; Parameters: none ; Returns: on success returns 1 ; on failure returns -1 and sets @error to 1 ; ;=============================================================================== Func _CommClearOutputBuffer() Local $vDllAns = DllCall($hDll,'int','ClearOutputBuffer') EndFunc Func _CommClearInputBuffer() $sMGBuffer = '' Local $vDllAns = DllCall($hDll,'int','ClearInputBuffer') If @error <> 0 Then Return -1 Else Return 1 EndIf EndFunc ;=============================================================================== ; Function Name: ClosePort() ; Description: closes the port ; Parameters: none ; Returns: no return value ;=============================================================================== Func _CommClosePort() ;_CommClearOutputBuffer() ;_CommClearInputBuffer() DllCall($hDll,'int','CloseDown') DllClose($hDll) $fPortOpen = False EndFunc ;================================================================================================ ; Function Name: SendBreak($iDowTime,$iUpTime) ; NB Simulates the break signal used by some equipment to indicate the start of a sequence ; Not tested so might Not work. Any feedback welcome - PM martin on Autoit forum ; Description: sets the TX line low for $iDowTime, then sets it high for $iUpTime ; Parameters: $iDowTime - integer: the number of ms to hold the TX line down ; $iUpTime - integer: the number of ms to hold the line up for before returning ; if $iDowTime or $iUpTime is zero then does nothing and returns ; Returns: on success returns 1 ; on failure returns 0 and sets @error to ; = 1 if one of params is zero ; = 2 1 unable to use the DLL file, ; = 3 unknown "return type" from dll ; = 4 "function" not found in the DLL file. ; Notes : Not tested! ;================================================================================================ Func _CommSendBreak($iDowTime,$iUpTime);requires commg.dll v2.0 or later Local $vDllAns If $iDowTime = 0 Or $iUpTime = 0 Then SetError(1) Return 0 EndIf If Not $fPortOpen Then SetError(1) Return 0 EndIf $vDllAns = DllCall($hDll,'int','SendBreak','int',$iDowTime,'int',$iUpTime) If @error <> 0 Then SetError(@error + 1) Return 0 Else ;ConsoleWrite('done setbreak' & @CRLF) Return 1;success EndIf EndFunc #include <ByteMe.au3>
AdmiralAlkex Posted September 25, 2011 Posted September 25, 2011 That link seems to be broken. Is there anyone that can post a link to the commMG.au3 include file?Why don't you just download it from the It's right there in the first post. @sleepydvdrWhy? .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now