; Modificado por Juan Antonio Villalpando
; KIO4.COM
; http://kio4.com/autoit/69D_bluethooth_ordenador_appinventor_archivo.htm
; CHAT
#include <GUIConstants.au3>
#include <CommMG.au3>;or if you save the commMg.dll in the @scripdir use #include @SciptDir & '\commmg.dll'
#include <GuiEdit.au3>
#include <GuiComboBox.au3>
#include <windowsconstants.au3>
#include <buttonconstants.au3>
#include <Array.au3>
Opt("WINTITLEMATCHMODE", 3)
HotKeySet("{ESC}", "alldone")
$result = '';used for any returned error message setting port
Const $settitle = "COMMG listExample - set Port", $maintitle = "COMMG Example"
$setflow = 2;default to no flow control
Dim $FlowType[3] = ["Hardware (RTS, CTS)", "XOnXoff", "NONE"]
Dim $ParityType[5] = ["odd", "even", "none", "Mark", "Space"]
#region main program
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("COMMG Example", 475, 430, 453, 189)
$BtnSend = GUICtrlCreateButton("Send", 380, 353, 53, 30, $BS_FLAT)
$Input1 = GUICtrlCreateInput("", 18, 359, 337, 24)
$BtnSetPort = GUICtrlCreateButton("Set Port", 16, 392, 73, 30, $BS_FLAT)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
WinSetTitle($Form2, "", $maintitle & " UDF = " & _CommGetVersion(1))
While setport(0) = -1
If MsgBox(4, 'Port not set', 'Do you want to quite the program?') = 6 Then Exit
WEnd
Events()
_CommSetXonXoffProperties(11, 13, 100, 100)
$todo = ""
While 1
$instr = _CommGetString() ;
If $instr <> '' Then ;if we got something
$todo = $todo & $instr
$iPosition = StringInStr($todo, "_EOF")
if $iPosition <> 0 Then
received($todo)
$todo = ""
$instr = ""
_CommSendstring("Recibido") ; Response
EndIf
Else
Sleep(10) ;MichaelXMike
EndIf
WEnd
Alldone()
Func Events()
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "justgo")
GUICtrlSetOnEvent($BtnSend, "SendEvent")
GUICtrlSetOnEvent($BtnSetPort, "SetPortEvent")
EndFunc ;==>Events
Func SetPortEvent()
setport();needed because a parameter is optional for setport so we can't use "setport" for the event
EndFunc ;==>SetPortEvent
Func justgo()
Exit
EndFunc ;==>justgo
Func SendEvent();send the text in the inputand append CR
$poner = GUICtrlRead($Input1) & @CRLF ; CHAT
_CommSendstring($poner) ; CHAT
EndFunc ;==>SendEvent
Func AllDone()
_Commcloseport(true)
Exit
EndFunc ;==>AllDone
Func SetPort($mode = 1);if $mode = 1 then returns -1 if settings not made
Local $sportSetError
Opt("GUIOnEventMode", 0);keep events for $Form2, use GuiGetMsg for $Form3
#Region ### START Koda GUI section ### Form=d:\my documents\miscdelphi\commg\examplecommsetport.kxf
$Form3 = GUICreate("COMMG Example - set Port", 422, 279, 329, 268, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS, _
$DS_MODALFRAME), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$Group1 = GUICtrlCreateGroup("Set COM Port", 18, 8, 288, 252)
$CmboPortsAvailable = GUICtrlCreateCombo("", 127, 28, 145, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SORT))
$CmBoBaud = GUICtrlCreateCombo("9600", 127, 66, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_SORT, $WS_VSCROLL))
GUICtrlSetData(-1, "115200|1200|128000|14400")
$CmBoStop = GUICtrlCreateCombo("1", 127, 141, 145, 25)
GUICtrlSetData(-1, "1|2|1.5")
$CmBoParity = GUICtrlCreateCombo("", 127, 178, 145, 25)
GUICtrlSetData(-1, "odd|even|none|Mark|Space")
GUICtrlSetData(-1, "none")
$Label2 = GUICtrlCreateLabel("Port", 94, 32, 23, 17)
$Label3 = GUICtrlCreateLabel("baud", 89, 70, 28, 17)
$Label4 = GUICtrlCreateLabel("No. Stop bits", 52, 145, 65, 17)
$Label5 = GUICtrlCreateLabel("parity", 88, 182, 29, 17)
$CmboDataBits = GUICtrlCreateCombo("8", 127, 103, 145, 25)
GUICtrlSetData(-1, "7|8")
$Label7 = GUICtrlCreateLabel("No. of Data Bits", 38, 107, 79, 17)
$ComboFlow = GUICtrlCreateCombo("NONE", 127, 216, 145, 25)
GUICtrlSetData(-1, "NONE|XOnXOff|Hardware (RTS, CTS)")
$Label1 = GUICtrlCreateLabel("flow control", 59, 220, 58, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$BtnApply = GUICtrlCreateButton("Apply", 315, 95, 75, 35, $BS_FLAT)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$BtnCancel = GUICtrlCreateButton("Cancel", 316, 147, 76, 35, $BS_FLAT)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
WinSetTitle($Form3, "", $settitle) ;ensure a change to Koda design doesn't stop script working
$mainxy = WinGetPos($Form2)
WinMove($Form3, "", $mainxy[0] + 20, $mainxy[1] + 20)
$portlist = _CommListPorts(0);find the available COM ports and write them into the ports combo
If @error = 1 Then
MsgBox(0, 'trouble getting portlist', 'Program will terminate!')
Exit
EndIf
For $pl = 1 To $portlist[0]
$portnum = StringReplace($portlist[$pl], "COM", '')
if StringLen($portnum) = 1 then $portnum = ' ' & $portnum
$portlist[$pl] = 'COM' & $portnum
GUICtrlSetData($CmboPortsAvailable, $portlist[$pl]) ;_CommListPorts())
Next
GUICtrlSetData($CmboPortsAvailable, $portlist[1]) ;show the first port found
GUICtrlSetData($ComboFlow, $FlowType[$setflow])
_GUICtrlComboBox_SetMinVisible($CmBoBaud, 10) ;restrict the length of the drop-down list
$retval = 0
While 1
$msg = GUIGetMsg()
If $msg = $BtnCancel Then
If Not $mode Then $retval = -1
ExitLoop
EndIf
If $msg = $BtnApply Then
$comboflowsel = GUICtrlRead($ComboFlow)
For $n = 0 To 2
If $comboflowsel = $FlowType[$n] Then
$setflow = $n
ExitLoop
EndIf
Next
$setport = StringReplace(GUICtrlRead($CmboPortsAvailable), 'COM', '')
$ParitySel = GUICtrlRead($CmBoParity)
For $n = 0 To 4
If $ParitySel = $ParityType[$n] Then
$SetParity = $n
ExitLoop
EndIf
Next
$setStop = StringReplace(GUICtrlRead($CmBoStop), '.', '');replace 1.5 with 15 if needed
$resOpen = _CommSetPort($setport, $sportSetError, GUICtrlRead($CmBoBaud), GUICtrlRead($CmboDataBits), $SetParity, $setStop, $setflow)
if $resOpen = 0 then
Exit
EndIf
Sleep(1000)
$mode = 1;
ExitLoop
EndIf
;stop user switching back to $form2
If WinActive($maintitle) Then
ConsoleWrite('main is active' & @CRLF)
If WinActivate($settitle) = 0 Then MsgBox(0, 'not found', $settitle)
EndIf
WEnd
GUIDelete($Form3)
WinActivate($maintitle)
Events()
Return $retval
EndFunc
Func received($sData)
$BASE64_DATA = $sData
$BASE64_DATA = StringReplace ($BASE64_DATA, @CR, "")
$BASE64_DATA = StringReplace ($BASE64_DATA, @LF, "")
$base64_code = StringSplit($BASE64_DATA, "_EOF", 1)
$BASE64_DATA = $base64_code[1]
Local $hFile = 0
$sImageName = "mi_imagen.png"
$hFile=FileOpen($sImageName, 18)
FileWrite($hFile, _Encoding_Base64Decode($BASE64_DATA))
; FileWrite($hFile, $BASE64_DATA)
FileClose($hFile)
EndFunc ;==>received
Func _Encoding_Base64Decode($sData)
Local $struct = DllStructCreate("int")
$a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", _
"str", $sData, _
"int", 0, _
"int", 1, _
"ptr", 0, _
"ptr", DllStructGetPtr($struct, 1), _
"ptr", 0, _
"ptr", 0)
If @error Or Not $a_Call[0] Then
Return SetError(1, 0, "") ; error calculating the length of the buffer needed
EndIf
Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
$a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", _
"str", $sData, _
"int", 0, _
"int", 1, _
"ptr", DllStructGetPtr($a), _
"ptr", DllStructGetPtr($struct, 1), _
"ptr", 0, _
"ptr", 0)
If @error Or Not $a_Call[0] Then
Return SetError(2, 0, "") ; error decoding
EndIf
Return BinaryToString(DllStructGetData($a, 1))
EndFunc ;==>_Encoding_Base64Decode
|