From 85332d79d11a04a3a72dd28b91acd6e0422e0b33 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Tue, 11 Jun 2013 21:10:04 +0200 Subject: [PATCH] Initial commit - software by tomsuch --- .project | 16 +++ .settings | 22 ++++ FMain.class | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++ FMain.form | 89 ++++++++++++++++ 4 files changed, 423 insertions(+) create mode 100644 .project create mode 100644 .settings create mode 100644 FMain.class create mode 100644 FMain.form diff --git a/.project b/.project new file mode 100644 index 0000000..b0d8809 --- /dev/null +++ b/.project @@ -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 diff --git a/.settings b/.settings new file mode 100644 index 0000000..2288c99 --- /dev/null +++ b/.settings @@ -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 + diff --git a/FMain.class b/FMain.class new file mode 100644 index 0000000..0e346dc --- /dev/null +++ b/FMain.class @@ -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 + diff --git a/FMain.form b/FMain.form new file mode 100644 index 0000000..6e64c03 --- /dev/null +++ b/FMain.form @@ -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") + } +}