| 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
 
 
 |