Habe mir ein Überwachungsprogramm für die Serielle Schnittstelle gemacht. Wollte mal eure Meinung zum Quellcode hören, also ob das so in Ordnung ist oder ob ich hier und da anders Programmieren sollte. Mal abgesehen von der fehlenden Kommentierung :P
Hier der Code:
Code: Alles auswählen
Enumeration
#Window_0
#Button_0
#Button_1
#SerialPort
#Editor_0
#Combo_0
#Combo_1
#Combo_2
#Combo_3
#Combo_4
#Combo_5
#Text_0
#Text_1
#Text_2
#Text_3
#Text_4
#Text_5
EndEnumeration
Global SerialPort$
Procedure Open_Window_0()
If OpenWindow(#Window_0, 517, 217, 800, 300, "Serial Monitor", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
ButtonGadget(#Button_0, 655, 30, 80, 30, "Connect")
ButtonGadget(#Button_1, 745, 30, 30, 30, "C")
EditorGadget(#Editor_0, 25, 70, 730, 200)
ComboBoxGadget(#Combo_0, 25, 40, 75, 20)
ComboBoxGadget(#Combo_1, 105, 40, 75, 20)
ComboBoxGadget(#Combo_2, 185, 40, 110, 20)
ComboBoxGadget(#Combo_3, 300, 40, 40, 20)
ComboBoxGadget(#Combo_4, 345, 40, 50, 20)
ComboBoxGadget(#Combo_5, 400, 40, 250, 20)
TextGadget(#Text_0, 25, 20, 75, 20, "Port")
TextGadget(#Text_1, 105, 20, 75, 20, "Baud")
TextGadget(#Text_2, 185, 20, 110, 20, "Parity")
TextGadget(#Text_3, 300, 20, 40, 20, "Data")
TextGadget(#Text_4, 345, 20, 50, 20, "Stop")
TextGadget(#Text_5, 400, 20, 250, 20, "Handshake")
EndIf
EndProcedure
Procedure GetAvaileblePorts()
Found$ = "False"
For I = 0 To 20
If OpenSerialPort(#SerialPort, "COM" + Str(i), 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 2048, 2048)
AddGadgetItem(#Combo_0, -1, "COM" + Str(i))
CloseSerialPort(#SerialPort)
Found$ = "True"
EndIf
Next
If Found$ = "False"
MessageRequester("Serielle Schnittstelle","Konnte keine Serielle Schnittstelle verbinden")
Else
SetGadgetState(#Combo_0, 0)
SerialPort$ = GetGadgetText(#Combo_0)
EndIf
EndProcedure
Procedure SerialPortSettings()
AddGadgetItem(#Combo_1,-1,"50")
AddGadgetItem(#Combo_1,-1,"75")
AddGadgetItem(#Combo_1,-1,"110")
AddGadgetItem(#Combo_1,-1,"150")
AddGadgetItem(#Combo_1,-1,"300")
AddGadgetItem(#Combo_1,-1,"600")
AddGadgetItem(#Combo_1,-1,"1200")
AddGadgetItem(#Combo_1,-1,"1800")
AddGadgetItem(#Combo_1,-1,"2400")
AddGadgetItem(#Combo_1,-1,"4800")
AddGadgetItem(#Combo_1,-1,"9600")
AddGadgetItem(#Combo_1,-1,"19200")
AddGadgetItem(#Combo_1,-1,"38400")
AddGadgetItem(#Combo_1,-1,"57600")
AddGadgetItem(#Combo_1,-1,"115200")
AddGadgetItem(#Combo_2,-1,"Keine")
AddGadgetItem(#Combo_2,-1,"Gerade (Even)")
AddGadgetItem(#Combo_2,-1,"Mark")
AddGadgetItem(#Combo_2,-1,"Odd")
AddGadgetItem(#Combo_2,-1,"Space")
AddGadgetItem(#Combo_3,-1,"7")
AddGadgetItem(#Combo_3,-1,"8")
AddGadgetItem(#Combo_4,-1,"1")
AddGadgetItem(#Combo_4,-1,"1,5")
AddGadgetItem(#Combo_4,-1,"2")
AddGadgetItem(#Combo_5,-1,"Kein handshaking")
AddGadgetItem(#Combo_5,-1,"Kein handshaking, aber RTS wird auf 1 gesetzt")
AddGadgetItem(#Combo_5,-1,"RTS/CTS")
AddGadgetItem(#Combo_5,-1,"Xon/Xoff")
SetGadgetState(#Combo_1, 10)
SetGadgetState(#Combo_2, 0)
SetGadgetState(#Combo_3, 1)
SetGadgetState(#Combo_4, 0)
SetGadgetState(#Combo_5, 0)
EndProcedure
Baud = 9600
Parity = #PB_SerialPort_NoParity
DataBits = 8
StopBits.d = 1
Handshake = #PB_SerialPort_NoHandshake
Connected$ = "False"
Open_Window_0()
GetAvaileblePorts()
SerialPortSettings()
Repeat
Event = WaitWindowEvent(10)
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
Select Event
Case #PB_Event_Gadget
Select GadgetID
Case #Button_0
If GetGadgetText(#Button_0) = "Connect"
If OpenSerialPort(#SerialPort,SerialPort$,Baud,Parity,DataBits,StopBits.d,Handshake, 2048, 2048)
SetGadgetText(#Button_0,"Disconnect")
AddGadgetItem(#Editor_0, 0, FormatDate("%hh:%ii:%ss", Date()) + " | Connected to " + SerialPort$)
Connected$ = "True"
EndIf
Else
SetGadgetText(#Button_0,"Connect")
CloseSerialPort(#SerialPort)
AddGadgetItem(#Editor_0, 0, FormatDate("%hh:%ii:%ss", Date()) + " | Disconnected")
Connected$ = "False"
EndIf
Case #Button_1
ClearGadgetItems(#Editor_0)
Case #Combo_0
SerialPort$ = GetGadgetText(#Combo_0)
Case #Combo_1
Baud = Val(GetGadgetText(#Combo_1))
Case #Combo_2
State = GetGadgetState(#Combo_2)
Select state
Case 0
Parity = #PB_SerialPort_NoParity
Case 1
Parity = #PB_SerialPort_EvenParity
Case 2
Parity = #PB_SerialPort_MarkParity
Case 3
Parity = #PB_SerialPort_OddParity
Case 4
Parity = #PB_SerialPort_SpaceParity
EndSelect
Case #Combo_3
DataBits = Val(GetGadgetText(#Combo_3))
Case #Combo_4
StopBits.d = ValD(GetGadgetText(#Combo_4))
Case #Combo_5
State = GetGadgetState(#Combo_5)
Select State
Case 0
Handshake = #PB_SerialPort_NoHandshake
Case 1
Handshake = #PB_SerialPort_RtsHandshake
Case 2
Handshake = #PB_SerialPort_RtsCtsHandshake
Case 3
Handshake = #PB_SerialPort_XonXoffHandshake
EndSelect
EndSelect
Case #PB_Event_SizeWindow
If WindowWidth(#Window_0) < 800
ResizeWindow(#Window_0,WindowX(#Window_0),WindowY(#Window_0),800,WindowHeight(#Window_0))
EndIf
If WindowHeight(#Window_0) < 300
ResizeWindow(#Window_0,WindowX(#Window_0),WindowY(#Window_0),WindowWidth(#Window_0),300)
EndIf
ResizeGadget(#Editor_0, 25, 70, WindowWidth(#Window_0)-50, WindowHeight(#Window_0)-100)
Default
Delay(1)
EndSelect
If Connected$ = "True"
If AvailableSerialPortInput(#SerialPort) > 0
TempASCII$ = ""
TempHEX$ = ""
TempDecimal$ = ""
While AvailableSerialPortInput(#SerialPort) > 0
ReadSerialPortData(#SerialPort,@RD,1)
If RD = 13
TempASCII$ + " CR "
ElseIf RD = 10
TempASCII$ + " LF "
Else
TempASCII$ + Chr(RD)
EndIf
TempHEX$ + " " +RSet(Hex(RD, #PB_Byte),2,"0")
TempDecimal$ + " " + RSet(Str(RD),3,"0")
Wend
AddGadgetItem(#Editor_0, 0, "")
AddGadgetItem(#Editor_0, 0, "---------------------------------------------------------------------------------")
AddGadgetItem(#Editor_0, 0, " ASCII: " + TempASCII$)
AddGadgetItem(#Editor_0, 0, " HEX: " + TempHEX$)
AddGadgetItem(#Editor_0, 0, " Decimal: " + TempDecimal$)
AddGadgetItem(#Editor_0, 0, FormatDate("%hh:%ii:%ss", Date()) + " | ----------------------------------------------------------------")
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
;
The_Dark_Zim-.-
Edit:
War wohl das falsche Fach ^^ sry