I have some serial port code that runs without error on PC, but crashes on MAC when there is data available?
SuperStrict
Framework wx.wxApp
Import wx.wxFrame
Import wx.wxCTB
Import wx.wxTimer
Import BRL.retro
'---------------------------------------------------------------------
Type MyApp Extends wxApp
'---------------------------------------------------------------------
Const WINDOW_WIDTH:Int = 442
Const WINDOW_HEIGHT:Int= 384
Field frame:MyFrame
Method OnInit:Int()
'
frame = MyFrame(New MyFrame.CreateMyFrame(Self,Null,wxID_ANY,AppTitle,0,0,WINDOW_WIDTH,WINDOW_HEIGHT))
frame.Centre()
SetTopWindow(frame)
frame.show()
Return True
End Method
End Type
New MyApp.run()
'---------------------------------------------------------------------
Type MyFrame Extends wxFrame 'MyFrame3Base
'---------------------------------------------------------------------
'
Const baudrate:Int = wxBAUD_2400
Const TIMEOUT:Int = 5
Const TIMER_FREQ:Int = 200
Field m_timer:wxTimer
Field dev:wxSerialPort
Field devname:String
Field token:String
Field buffer:TBank
'---------------------------------------------------------------------
Method CreateMyFrame:MyFrame( _my_app:MyApp, _parent:wxFrame, _id:Int, _s_title:String, _x:Int,_y:Int,_w:Int,_h:Int )
'---------------------------------------------------------------------
Return myFrame(Super.Create(_parent,_id,_s_title,_x,_y,_w,_h,wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU)) 'wxRESIZE_BORDER)
End Method
'
'---------------------------------------------------------------------
Method OnInit()
'---------------------------------------------------------------------
'
token:String = ""
buffer:TBank = CreateBank(1024)
'
dev:wxSerialPort = New wxSerialPort.Create()
Global DCS:wxSerialPort_DCS = New wxSerialPort_DCS.Create()
DCS.SetBaud(baudrate)
DebugLog "DCS.GetSettings = " + DCS.GetSettings()
' Try To open the given port
?win32
devname = "COM1:"
?MacOS
devname = wxChooseSerialPort()
?
If dev.Open(devname, DCS ) < 0
'
wxMessageBox("Cannot open " + devname )
dev.free()
Else
m_timer = New wxTimer.Create(Self)
m_timer.Start(TIMER_FREQ)
EndIf
' Connect frame events.
ConnectAny( wxEVT_CLOSE_WINDOW, OnCloseWindow )
Connect(wxID_ANY, wxEVT_TIMER, OnTimer)
End Method
'
'---------------------------------------------------------------------
Function OnTimer(event:wxEvent)
'---------------------------------------------------------------------
myFrame(event.parent)._OnTimer(wxCommandEvent(Event))
End Function
'---------------------------------------------------------------------
Method _OnTimer(event:wxCommandEvent)
'---------------------------------------------------------------------
Local bytesRead:Int
Local char:Byte Ptr = LockBank(buffer)
Select dev.ReadUntilEOS( char, bytesRead, "~n", TIMEOUT, True )
Case 0
DebugLog "timeout " + bytesRead
If bytesRead > 0
token :+ String.FromBytes( char, bytesRead )
EndIf
Case 1
token :+ String.FromBytes( char, bytesRead )
DebugLog "sucess token = " + token + " : " + bytesRead
token = ""
Case -1
DebugLog "otherwise"
End Select
UnlockBank(buffer)
EndMethod
'---------------------------------------------------------------------
Method OnCloseDown()
'---------------------------------------------------------------------
DebugLog "::OnCloseDown"
dev.Close()
dev.free()
End Method
'---------------------------------------------------------------------
Function OnCloseWindow(event:wxEvent)
'---------------------------------------------------------------------
'
DebugLog "::OnCloseWindow"
myFrame(event.parent).OnCloseDown()
event.Skip()
End Function
'---------------------------------------------------------------------
Function OnQuit(event:wxEvent)
'---------------------------------------------------------------------
'
DebugLog "::OnQuit"
myFrame(event.parent).Close(True)
End Function
End Type
Last edited 2011
Last edited 2011
|