accessing the serial in FF

Started by Anonymous, January 25, 2006, 08:30:04 AM

Previous topic - Next topic

Anonymous

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

Anonymous

Hi,

just sorted it out myself.

Thanks

Herbert

Anonymous

I am still interested in seeing how others have done it.

Thanks

Herbert

TechSupport

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.

Roger Garstang

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