Jump to content

newbi question commMG.au3


Recommended Posts

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

Link to comment
Share on other sites

  • 3 years later...

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:

#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>

Link to comment
Share on other sites

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.

@sleepydvdr

Why?

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...