Initial commit - software by tomsuch

This commit is contained in:
Petr Baudis 2013-06-11 21:10:04 +02:00
commit 85332d79d1
4 changed files with 423 additions and 0 deletions

16
.project Normal file
View file

@ -0,0 +1,16 @@
# Gambas Project File 2.0
# Compiled with Gambas 2.23.1
Title=NeuroskyTest
Startup=FMain
Version=0.0.3
Library=gb.gui
Library=gb.form
Library=gb.image
Library=gb.net
Library=gb.net.smtp
Library=gb.opengl
Library=gb.vb
TabSize=2
ControlPublic=1
ModulePublic=1
ExecPath=NeuroskyTest.gambas

22
.settings Normal file
View file

@ -0,0 +1,22 @@
[Breakpoints]
Count=0
[DebugWindow]
Count=0
[FFind]
SearchIn="Module"
CaseSensitive=False
SearchWord=False
SearchComment=False
SearchString=True
[OpenFile]
File[1]="FMain.form"
File[2]="FMain.class:189.17"
Active=2
Count=2
[Watches]
Count=0

296
FMain.class Normal file
View file

@ -0,0 +1,296 @@
' Gambas class file
PUBLIC CONST state_start AS Integer = 1
PUBLIC CONST state_sync AS Integer = 2
PUBLIC CONST state_size AS Integer = 3
PUBLIC CONST state_payload AS Integer = 4
PUBLIC CONST state_checksum AS Integer = 5
'PUBLIC FormResetLock AS Boolean = FALSE
PUBLIC plotx AS Integer = 0
PUBLIC plt_last AS Integer = 0
PUBLIC CONST data_code AS Integer = 1
PUBLIC CONST data_length AS Integer = 2
PUBLIC CONST data_value AS Integer = 3
PUBLIC ParseState AS Integer = state_start
PUBLIC PacketSize AS Byte
PUBLIC packetCounter AS Integer
PUBLIC PacketChecksum AS Byte
PUBLIC PacketIdx AS Integer
PUBLIC PacketBuffer AS NEW Byte[256]
'PUBLIC PacketTmp AS NEW Byte[256]
PUBLIC lamp_red AS Integer
PUBLIC lamp_blue AS Integer
PUBLIC lamp_green AS Integer
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
ComboBox1.add("RG")
ComboBox1.Add("CB")
ComboBox1.Index = 1
END
PUBLIC SUB ErrHandler(vstup AS String)
Message.error(vstup & "\n" & Error.text)
END
PUBLIC SUB btn_connect_Click()
IF SerialPort.Status = 0 THEN
SerialPort.PortName = "/dev/rfcomm0"
SerialPort.Speed = 57600
SerialPort.DataBits = 8
SerialPort.StopBits = 1
SerialPort.FlowControl = FALSE
SerialPort.Open
ELSE
SerialPort.Close
ENDIF
CATCH
ErrHandler("NeuroSky SerialPort - Error")
END
PUBLIC SUB SerialPort_Read()
DIM InByte AS Byte
'Message("CTU")
READ #SerialPort, InByte
'TextBox1.Text = TextBox1.Text & InByte & ";"
SELECT CASE ParseState
CASE state_start
IF InByte = 170 THEN ParseState = state_sync
CASE state_sync
IF InByte = 170 THEN
ParseState = state_size
ELSE
ParseState = state_start
ENDIF
CASE state_size
PacketSize = InByte
'TextBox2.Text = PacketSize
ParseState = state_payload
packetCounter = 0
PacketChecksum = 0
CASE state_payload
PacketBuffer[packetCounter] = InByte
PacketChecksum = PacketChecksum + InByte
packetCounter = packetCounter + 1
IF packetCounter = PacketSize THEN ParseState = state_checksum
CASE state_checksum
PacketChecksum = PacketChecksum XOR 255
IF InByte = PacketChecksum THEN
txt_crc.Text = "OK"
ParseState = state_start
PacketIdx = PacketIdx + 1
txt_packets.Text = PacketIdx
'PacketTmp = PacketBuffer
'TextBox5.Clear
Parsuj(PacketSize)
ELSE
txt_crc.Text = "CHYBA"
ParseState = state_start
ENDIF
CASE ELSE
END SELECT
'TextBox1.Text = TextBox1.Text & ";" & InByte
END
PUBLIC SUB Parsuj(size AS Integer)
DIM i, x AS Integer
DIM state AS Integer
DIM excode AS Integer
DIM code AS Integer
DIM length AS Integer
DIM data AS NEW Byte[128]
DIM data_idx AS Integer
DIM strtmp AS String
DIM PacketTmp AS NEW Byte[256]
PacketTmp = PacketBuffer
data_idx = 0
code = 0
excode = 0
state = data_code
FOR i = 0 TO size - 1
'TextBox5.Text = TextBox5.Text & PacketTmp[i] & ";"
SELECT CASE state
CASE data_code
IF PacketTmp[i] = 85 THEN
excode = excode + 1
ELSE
code = PacketTmp[i]
IF code > 127 THEN
state = data_length
ELSE
length = 1
state = data_value
ENDIF
ENDIF
CASE data_length
length = PacketTmp[i]
state = data_value
CASE data_value
data[data_idx] = PacketTmp[i]
data_idx = data_idx + 1
IF data_idx = length THEN
FOR x = 0 TO length - 1
strtmp = strtmp & data[x] & "."
NEXT
Zpracuj(code, data, length)
'TextArea1.Text = (Str(PacketIdx) & ":" & Str(code) & ";" & strtmp & ";" & Str(length)) & "\n" & TextArea1.Text
strtmp = ""
data_idx = 0
code = 0
excode = 0
state = data_code
length = 0
ENDIF
CASE ELSE
END SELECT
NEXT
END
PUBLIC SUB update_lampa()
DIM brightness, hue AS Float
SELECT CASE ComboBox1.Text
CASE "RG"
lamp_red = Progress_attention.Value * 200
lamp_green = Progress_meditation.Value * 200
CASE "CB"
brightness = 1 - Progress_meditation.Value
hue = Progress_attention.Value
lamp_red = brightness * 200 * hue
lamp_green = brightness * 200 * (1 - hue)
END SELECT
nastav_lampu("r " & lamp_red & " " & lamp_green & " " & "0")
END
PUBLIC SUB Zpracuj(code AS Byte, data AS Byte[], length AS Integer)
DIM raw_eeg AS Integer
DIM plt_aktual AS Integer
IF code = 2 THEN
progress_signal.Value = 1 - (data[0] / 200)
ENDIF
IF code = 4 THEN
Progress_attention.Value = data[0] / 100
update_lampa
ENDIF
IF code = 5 THEN
Progress_meditation.Value = data[0] / 100
update_lampa
ENDIF
IF code = 128 THEN
raw_eeg = (data[0] * 256) + data[1]
IF raw_eeg > 32767 THEN raw_eeg = raw_eeg - 65536
raw_eeg = raw_eeg * 40
Draw.Begin(dwgplot)
Draw.ForeColor = Color.White
plt_aktual = (raw_eeg + 32768) / (65536 / dwgplot.Height)
IF plotx = 0 THEN
Draw.Point(plotx, plt_aktual)
plt_last = plt_aktual
ELSE
Draw.Line(plotx - 1, plt_last, plotx, plt_aktual)
plt_last = plt_aktual
ENDIF
Draw.End
plotx = plotx + 1
IF plotx > dwgplot.Width THEN
plotx = 0
dwgplot.Clear
ENDIF
ENDIF
END
PUBLIC SUB btn_lam_con_Click()
IF SerialLamp.Status = 0 THEN
SerialLamp.PortName = "/dev/ttyUSB0"
SerialLamp.Speed = 9600
SerialLamp.DataBits = 8
SerialLamp.StopBits = 1
SerialLamp.FlowControl = FALSE
SerialLamp.Open
ELSE
SerialLamp.Close
ENDIF
CATCH
ErrHandler("Lamp SerialPort - Error")
END
PUBLIC SUB nastav_lampu(vstup AS String)
IF SerialLamp.status = 1 THEN
PRINT #SerialLamp, vstup
ENDIF
CATCH
ErrHandler("Lamp SerialPort - COMMAND Error")
END
PUBLIC SUB Timer1_Timer()
IF SerialLamp.Status = 0 THEN
Label6.BackColor = Color.Red
ELSE IF SerialLamp.Status = 1 THEN
Label6.BackColor = Color.Green
ELSE
Label6.BackColor = Color.Orange
ENDIF
IF SerialPort.Status = 0 THEN
Label5.BackColor = Color.Red
FormReset
ELSE IF SerialPort.Status = 1 THEN
Label5.BackColor = Color.Green
ELSE
Label5.BackColor = Color.Orange
ENDIF
END
PUBLIC SUB FormReset()
Progress_attention.Value = 0
Progress_meditation.Value = 0
progress_signal.Value = 0
txt_crc.Text = "- - -"
txt_packets.Text = 0
dwgplot.Clear
WAIT
END

89
FMain.form Normal file
View file

@ -0,0 +1,89 @@
# Gambas Form File 2.0
{ Form Form
Move(0,0,679,287)
#(Scaled) = False
Text = ("")
{ btn_connect Button
Move(7,7,98,28)
Text = ("NeuroSky")
}
{ SerialPort #SerialPort
#X = 539
#Y = 28
}
{ txt_crc TextBox
Move(329,42,105,21)
Text = (" - - -")
}
{ txt_packets TextBox
Move(329,14,105,21)
Text = ("0")
}
{ progress_attention ProgressBar
Move(126,231,210,21)
}
{ progress_meditation ProgressBar
Move(126,259,210,21)
}
{ SerialLamp #SerialPort
#X = 497
#Y = 28
}
{ btn_lam_con Button
Move(112,7,98,28)
Text = ("Lampa")
}
{ DwgPlot DrawingArea
Move(7,70,658,154)
Background = &H000000&
Cached = True
}
{ ComboBox1 ComboBox
Move(511,231,154,21)
Text = ("ComboBox1")
}
{ Label1 Label
Move(14,231,105,21)
Text = ("SOUSTREDENI")
}
{ Label2 Label
Move(14,259,105,14)
Text = ("RELAXACE")
}
{ Label3 Label
Move(224,14,98,21)
Text = ("Prijato paketu:")
}
{ Label4 Label
Move(224,42,98,21)
Text = ("Kontrola CRC:")
}
{ Timer1 #Timer
#X = 455
#Y = 28
Enabled = True
Delay = 100
}
{ Label5 Label
Move(7,42,98,21)
Text = ("STATUS")
Alignment = Align.Center
}
{ Label6 Label
Move(112,42,98,21)
Text = ("STATUS")
Alignment = Align.Center
}
{ Label7 Label
Move(413,231,84,21)
Text = ("PROGRAM")
}
{ progress_signal ProgressBar
Move(581,14,77,21)
}
{ Label8 Label
Move(504,14,56,21)
Text = ("SIGNAL")
}
}