Hi,
does anybody have some code accessing the serial port under Firefly.
I have tried porting the example code which comes with Powerbasic, sending no problem, it is the receiving using threads - where my problems lye.
Thanks
Herbert
Hi,
just sorted it out myself.
Thanks
Herbert
I am still interested in seeing how others have done it.
Thanks
Herbert
Hi Herbert,
I have never had the need to access the serial port so I am not of much help to you. Happy to hear though that you found a solution.
Old code, I've since improved on, but gives a start and interesting ideas...
Global Running As Dword
Function ReadCOM(ByVal COMMhandle As Dword) As Dword
Local COMstring As String
Local COMtemp As String
Local COMlength As Dword
Local fileOpen As Dword
Do While IsWindowEnabled(HWND_COMREADER_CLOSE )
COMlength= Comm(#1, RxQue)
If COMlength Then
Comm Recv #1, COMlength, COMtemp
If FF_ComboBox_GetCurSel(HWND_COMREADER_WRITETO) Then ' To File
If fileOpen= 0 Then Open "COMoutput.txt" For Binary Access Write As #2: fileOpen= 1
Put$ #2, COMtemp
Else ' To Window
COMstring= COMstring + COMtemp
FF_TextBox_SetText(HWND_COMREADER_PREVIEW, Right$(COMstring, 32767))
SendMessage(HWND_COMREADER_PREVIEW, %EM_SETSEL, 32768, 32768)
SendMessage(HWND_COMREADER_PREVIEW, %EM_SCROLLCARET, 0, 0)
End If
End If
If IsWindowEnabled(HWND_COMREADER_XON)= 0 Then Comm Send #1, Chr$(17): EnableWindow(HWND_COMREADER_XON, %TRUE)
If IsWindowEnabled(HWND_COMREADER_XOFF)= 0 Then Comm Send #1, Chr$(19): EnableWindow(HWND_COMREADER_XOFF, %TRUE)
If IsWindowEnabled(HWND_COMREADER_EOF)= 0 Then Comm Send #1, Chr$(26): EnableWindow(HWND_COMREADER_EOF, %TRUE)
If IsWindowEnabled(HWND_COMREADER_SEND)= 0 Then Comm Send #1, FF_TextBox_GetText(HWND_COMREADER_SENDTEXT): EnableWindow(HWND_COMREADER_SEND, %TRUE)
FF_DoEvents()
Loop
Comm Close #1
If fileOpen Then Close #2
EnableWindow(HWND_COMREADER_XON, %TRUE)
EnableWindow(HWND_COMREADER_XOFF, %TRUE)
EnableWindow(HWND_COMREADER_EOF, %TRUE)
EnableWindow(HWND_COMREADER_SEND, %TRUE)
Running= 0
EnableWindow(HWND_COMREADER_OPEN, %TRUE)
EnableWindow(HWND_COMREADER_WRITETO, %TRUE)
End Function
Function COMREADER_CUSTOM (hWndForm As Dword, wMsg As Long, wParam As Dword, lParam As Long) As Long
Local threadHandle As Dword
Local hResult As Dword
Select Case wMsg
Case %WM_COMMAND
Select Case LoWrd(wParam)
Case 2 'ESC
SendMessage(HWND_COMREADER, %WM_CLOSE, 0, 0)
'Case IDC_COMREADER_WRITETO
'If HiWrd(wParam)= %CBN_SELCHANGE Then
'End If
Case IDC_COMREADER_FLOW
If Running And (HiWrd(wParam)= %CBN_SELCHANGE) Then
Select Case FF_ComboBox_GetCurSel(HWND_COMREADER_FLOW)
Case 0
Comm Set #1, CtsFlow = 0 ' Disable CTS
Comm Set #1, RtsFlow = 0 ' Disable RTS
Comm Set #1, DsrFlow = 0 ' Disable DSR
Comm Set #1, DtrFlow = 0 ' Disable DTR
Comm Set #1, XInpFlow = 0 ' Disable XON/OFF
Comm Set #1, XOutFlow = 0 ' Disable XON/XOFF
Case 1
Comm Set #1, CtsFlow = 0 ' Disable CTS
Comm Set #1, RtsFlow = 0 ' Disable RTS
Comm Set #1, DsrFlow = 0 ' Disable DSR
Comm Set #1, DtrFlow = 0 ' Disable DTR
Comm Set #1, XInpFlow = 1 ' Enable XON/OFF
Comm Set #1, XOutFlow = 1 ' Enable XON/XOFF
Case 2
Comm Set #1, CtsFlow = 1 ' Enable CTS
Comm Set #1, RtsFlow = 1 ' Enable RTS
Comm Set #1, DsrFlow = 1 ' Enable DSR
Comm Set #1, DtrFlow = 1 ' Enable DTR
Comm Set #1, XInpFlow = 0 ' Disable XON/OFF
Comm Set #1, XOutFlow = 0 ' Disable XON/XOFF
End Select
End If
Case IDC_COMREADER_XON, IDC_COMREADER_XOFF, IDC_COMREADER_EOF, IDC_COMREADER_SEND
If ((HiWrd(wParam)= %BN_CLICKED) Or (HiWrd(wParam)= %BN_DBLCLK)) And Running Then
EnableWindow(lParam, %FALSE)
End If
Case IDC_COMREADER_OPEN
If (HiWrd(wParam)= %BN_CLICKED) Or (HiWrd(wParam)= %BN_DBLCLK) Then
Comm Open FF_ComboBox_GetText(HWND_COMREADER_PORT, FF_ComboBox_GetCurSel(HWND_COMREADER_PORT)) As #1
If ErrClear Then
Comm Close #1
MsgBox "Could not open " + FF_ComboBox_GetText(HWND_COMREADER_PORT, FF_ComboBox_GetCurSel(HWND_COMREADER_PORT)), %MB_ICONERROR Or %MB_TASKMODAL, "Port Error"
Exit Select
End If
Comm Set #1, Baud = Val(FF_ComboBox_GetText(HWND_COMREADER_BPS, FF_ComboBox_GetCurSel(HWND_COMREADER_BPS)))
Comm Set #1, Byte = Val(FF_ComboBox_GetText(HWND_COMREADER_DATA, FF_ComboBox_GetCurSel(HWND_COMREADER_DATA)))
If FF_ComboBox_GetCurSel(HWND_COMREADER_PARITY) Then
Comm Set #1, Parity = %TRUE
Comm Set #1, ParityType = FF_ComboBox_GetCurSel(HWND_COMREADER_PARITY)
Else
Comm Set #1, Parity = %FALSE
End If
Comm Set #1, Stop = FF_ComboBox_GetCurSel(HWND_COMREADER_STOP)
Comm Set #1, TxBuffer = 2048
Comm Set #1, RxBuffer = 4096
' Optional settings for flow control
Select Case FF_ComboBox_GetCurSel(HWND_COMREADER_FLOW)
Case 0
Comm Set #1, CtsFlow = 0 ' Disable CTS
Comm Set #1, RtsFlow = 0 ' Disable RTS
Comm Set #1, DsrFlow = 0 ' Disable DSR
Comm Set #1, DtrFlow = 0 ' Disable DTR
Comm Set #1, XInpFlow = 0 ' Disable XON/OFF
Comm Set #1, XOutFlow = 0 ' Disable XON/XOFF
Case 1
Comm Set #1, CtsFlow = 0 ' Disable CTS
Comm Set #1, RtsFlow = 0 ' Disable RTS
Comm Set #1, DsrFlow = 0 ' Disable DSR
Comm Set #1, DtrFlow = 0 ' Disable DTR
Comm Set #1, XInpFlow = 1 ' Enable XON/OFF
Comm Set #1, XOutFlow = 1 ' Enable XON/XOFF
Case 2
Comm Set #1, CtsFlow = 1 ' Enable CTS
Comm Set #1, RtsFlow = 1 ' Enable RTS
Comm Set #1, DsrFlow = 1 ' Enable DSR
Comm Set #1, DtrFlow = 1 ' Enable DTR
Comm Set #1, XInpFlow = 0 ' Disable XON/OFF
Comm Set #1, XOutFlow = 0 ' Disable XON/XOFF
End Select
Running= 1
Thread Create ReadCOM(1) To threadHandle
Thread Close threadHandle To hResult
EnableWindow(HWND_COMREADER_OPEN, %FALSE)
EnableWindow(HWND_COMREADER_WRITETO, %FALSE)
EnableWindow(HWND_COMREADER_CLOSE, %TRUE)
End If
Case IDC_COMREADER_CLOSE
If (HiWrd(wParam)= %BN_CLICKED) Or (HiWrd(wParam)= %BN_DBLCLK) Then
EnableWindow(HWND_COMREADER_CLOSE, %FALSE)
End If
End Select
End Select
End Function
'------------------------------------------------------------------------------------------------------------------------
Function COMREADER_WM_CREATE (hWndForm As Dword, ByVal UserData As Long) As Long
FF_ComboBox_AddString(HWND_COMREADER_PORT, "COM1")
FF_ComboBox_AddString(HWND_COMREADER_PORT, "COM2")
FF_ComboBox_AddString(HWND_COMREADER_PORT, "COM3")
FF_ComboBox_AddString(HWND_COMREADER_PORT, "COM4")
FF_ComboBox_SetCurSel(HWND_COMREADER_PORT, 0)
FF_ComboBox_AddString(HWND_COMREADER_BPS, "110")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "300")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "600")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "1200")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "2400")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "4800")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "9600")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "14400")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "19200")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "38400")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "56000")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "57600")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "115200")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "128000")
FF_ComboBox_AddString(HWND_COMREADER_BPS, "256000")
FF_ComboBox_SetCurSel(HWND_COMREADER_BPS, 6)
FF_ComboBox_AddString(HWND_COMREADER_DATA, "4")
FF_ComboBox_AddString(HWND_COMREADER_DATA, "5")
FF_ComboBox_AddString(HWND_COMREADER_DATA, "6")
FF_ComboBox_AddString(HWND_COMREADER_DATA, "7")
FF_ComboBox_AddString(HWND_COMREADER_DATA, "8")
FF_ComboBox_SetCurSel(HWND_COMREADER_DATA, 4)
FF_ComboBox_AddString(HWND_COMREADER_PARITY, "None")
FF_ComboBox_AddString(HWND_COMREADER_PARITY, "Odd")
FF_ComboBox_AddString(HWND_COMREADER_PARITY, "Even")
FF_ComboBox_AddString(HWND_COMREADER_PARITY, "Mark")
FF_ComboBox_AddString(HWND_COMREADER_PARITY, "Space")
FF_ComboBox_SetCurSel(HWND_COMREADER_PARITY, 0)
FF_ComboBox_AddString(HWND_COMREADER_STOP, "1")
FF_ComboBox_AddString(HWND_COMREADER_STOP, "1.5")
FF_ComboBox_AddString(HWND_COMREADER_STOP, "2")
FF_ComboBox_SetCurSel(HWND_COMREADER_STOP, 0)
FF_ComboBox_AddString(HWND_COMREADER_FLOW, "None")
FF_ComboBox_AddString(HWND_COMREADER_FLOW, "Xon/off")
FF_ComboBox_AddString(HWND_COMREADER_FLOW, "C/R/D")
FF_ComboBox_SetCurSel(HWND_COMREADER_FLOW, 0)
FF_ComboBox_AddString(HWND_COMREADER_WRITETO, "Window")
FF_ComboBox_AddString(HWND_COMREADER_WRITETO, "File")
FF_ComboBox_SetCurSel(HWND_COMREADER_WRITETO, 0)
End Function