/* * This function reads the attention input (copied from example c# 64 code) * and averages it, since there are so many strange values, we want a more stable output */ public int readAndAverageAttentionInput(int connectionID) { /* Read 10 ThinkGear Packets from the connection, 1 Packet at a time */ int packetsRead = 0; int packetsValue = 0; int errCode = 0; while (packetsRead < 100) //number of packets { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); Console.WriteLine("TG_ReadPackets returned: " + errCode); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { packetsRead++; //QUESTION: is this attracted value ACTUALLY Attention Value? //QUESTION: when using thinkgear connector test csharp 64, the response value will always be 53 or 54 when errCode = 1 if the while loop is less than 1000, what causes that? /* If attention value has been updated by TG_ReadPackets()... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { packetsValue += (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION); /* Get and print out the updated attention value */ //The original sentence //Console.WriteLine("New RAW value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW)); } /* end "If attention value has been updated..." */ } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ return((int)(packetsValue / packetsRead)); }
public void readEEGData() { while (isReading == true) { /* Attempt to read a Packet of data from the connection */ TG_ErrorCode = NativeThinkgear.TG_ReadPackets(connectionId, 1); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (TG_ErrorCode == 1) { /* If raw eeg value has been updated by TG_ReadPackets()... */ if (NativeThinkgear.TG_GetValueStatus(connectionId, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { byte signalQuality = (byte)NativeThinkgear.TG_GetValue(connectionId, NativeThinkgear.DataType.TG_DATA_POOR_SIGNAL); /* If the headset has a good signal send data to UI thread */ if (signalQuality == 0) { /* Get and print out the updated eeg value */ updateConnectionInfo("Strong Signal"); } else /* Headset needs adjusting */ { updateConnectionInfo("Poor Signal Received: " + signalQuality.ToString()); } /* Send new data to the UI thread and update EEG array */ OnRawDataReceived((int)NativeThinkgear.TG_GetValue(connectionId, NativeThinkgear.DataType.TG_DATA_RAW), signalQuality); } } } }
//Gets Value status and value private int GetValue(int cID) { int data_type = (int)NativeThinkgear.DataType.TG_DATA_RAW; int valueStatus = NativeThinkgear.TG_GetValueStatus(connectionId, data_type); Debug.Log("TG_GetValueStatus returned: " + valueStatus); if (NativeThinkgear.TG_GetValueStatus(cID, data_type) != 0) { string outMessage = "Raw: " + NativeThinkgear.TG_GetValue(connectionId, data_type); Debug.Log("Raw: " + outMessage); } else { Debug.Log("Could not get value status"); } return(valueStatus); }
private void AutoGetValue() { Console.Write("讀取開始"); int autoGet = NativeThinkgear.TG_EnableAutoRead(ConnectionID, 1); NativeThinkgear.MWM15_setFilterType(ConnectionID, NativeThinkgear.FilterType.MWM15_FILTER_TYPE_60HZ); int packetsRead = 0; Task t = Task.Run(() => { while (packetsRead < 20000) // it use as time { /* If raw value has been updated ... */ if (NativeThinkgear.TG_GetValueStatus(ConnectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { if (NativeThinkgear.TG_GetValueStatus(ConnectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) != 0) { Console.WriteLine(" Find Filter Type: " + NativeThinkgear.TG_GetValue(ConnectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) + " index: " + packetsRead); break; } float TEMP = NativeThinkgear.TG_GetValue(ConnectionID, NativeThinkgear.DataType.TG_DATA_RAW); /* Get and print out the updated raw value */ rawList.Add(TEMP); PrintRaw(TEMP); packetsRead++; panel1.Invalidate(); if (packetsRead == 800 || packetsRead == 1600) // call twice interval than 1s (512) { errCode = NativeThinkgear.MWM15_getFilterType(ConnectionID); Console.WriteLine(" MWM15_getFilterType called: " + errCode); } } } }); t.Wait(); }
private void button2_Click(object sender, EventArgs e) { startDraw = true; if (ifConnect == true && comboBox1.Text != "") { int packetsRead = 0; while (packetsRead < 2000) { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(ConnectionID, 1); Console.WriteLine("TG_ReadPackets returned: " + errCode + " " + packetsRead); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { packetsRead++; /* If attention value has been updated by TG_ReadPackets()... */ if (NativeThinkgear.TG_GetValueStatus(ConnectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { float temp = NativeThinkgear.TG_GetValue(ConnectionID, NativeThinkgear.DataType.TG_DATA_RAW); rawList.Add(temp); /* Get and print out the updated attention value */ PrintRaw(temp); label1.Text = "New RAW value: : " + (int)temp + DateTime.Now.ToShortDateString() + "/" + DateTime.Now.TimeOfDay; StringList.Add(label1.Text); Thread.Sleep(500); } /* end "If attention value has been updated..." */ } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ panel1.Invalidate(); } else { label1.Text = "you have to connect first!"; } }
static void Main(string[] args) { NativeThinkgear thinkgear = new NativeThinkgear(); /* Print driver version number */ Console.WriteLine("Version: " + NativeThinkgear.TG_GetVersion()); /* Get a connection ID handle to ThinkGear */ int connectionID = NativeThinkgear.TG_GetNewConnectionId(); Console.WriteLine("Connection ID: " + connectionID); if (connectionID < 0) { Console.WriteLine("ERROR: TG_GetNewConnectionId() returned: " + connectionID); return; } int errCode = 0; /* Set/open stream (raw bytes) log file for connection */ errCode = NativeThinkgear.TG_SetStreamLog(connectionID, "streamLog.txt"); Console.WriteLine("errCode for TG_SetStreamLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetStreamLog() returned: " + errCode); return; } /* Set/open data (ThinkGear values) log file for connection */ errCode = NativeThinkgear.TG_SetDataLog(connectionID, "dataLog.txt"); Console.WriteLine("errCode for TG_SetDataLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetDataLog() returned: " + errCode); return; } /* Attempt to connect the connection ID handle to serial port "COM5" */ string comPortName = "\\\\.\\COM40"; errCode = NativeThinkgear.TG_Connect(connectionID, comPortName, NativeThinkgear.Baudrate.TG_BAUD_57600, NativeThinkgear.SerialDataFormat.TG_STREAM_PACKETS); if (errCode < 0) { Console.WriteLine("ERROR: TG_Connect() returned: " + errCode); return; } /* Read 10 ThinkGear Packets from the connection, 1 Packet at a time */ int packetsRead = 0; while (packetsRead < 10) { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); Console.WriteLine("TG_ReadPackets returned: " + errCode); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { packetsRead++; /* If attention value has been updated by TG_ReadPackets()... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { /* Get and print out the updated attention value */ Console.WriteLine("New RAW value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW)); } /* end "If attention value has been updated..." */ } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ Console.WriteLine("auto read test begin:"); errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 1); int reset_data_count = 0; int conOut3 = 0; int conOut4 = 0; if (errCode == 0) { packetsRead = 0; //NativeThinkgear.MWM15_setFilterType(connectionID, NativeThinkgear.FilterType.MWM15_FILTER_TYPE_50HZ); while (packetsRead < 15000) { /* If raw value has been updated ... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW) != 0) { /* Get and print out the updated raw value */ if (packetsRead % 200 == 0) { Console.WriteLine("New RAW value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW)); } else { NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW); } packetsRead++; /* * if (packetsRead == 800 || packetsRead == 1600) * { * NativeThinkgear.MWM15_getFilterType(connectionID); * Console.WriteLine(" MWM15_getFilterType called"); * }*/ } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_POOR_QUALITY) != 0) { Console.WriteLine("BMD200_DATA_POOR_QUALITY: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_POOR_QUALITY)); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_HEART_RATE) != 0) { Console.WriteLine("BMD200_DATA_HEART_RATE: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_HEART_RATE)); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_SQS_LAST) != 0) { Console.WriteLine("BMD200_DATA_SQS_LAST: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_SQS_LAST)); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_SQS_OVERALL) != 0) { Console.WriteLine("BMD200_DATA_SQS_OVERALL: : " + NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_SQS_OVERALL)); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_RR_INTERVAL) != 0) { Console.WriteLine("BMD200_DATA_RR_INTERVAL: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_RR_INTERVAL)); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_1_RAW_FLAG) != 0) { Console.WriteLine("BMD200_1_RAW_FLAG: : "); NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_1_RAW_FLAG); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_ConOut4) != 0) { conOut4 = (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_ConOut4); Console.WriteLine("BMD200_DATA_ConOut4: : " + conOut4); } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_ConOut3) != 0) { conOut3 = (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_ConOut3); Console.WriteLine("BMD200_DATA_ConOut3: " + conOut3 + " BMD200_DATA_ConOut4: " + conOut4); reset_data_count++; if (reset_data_count == 2) { Console.WriteLine("BMD200_set8PacketMode: : "); NativeThinkgear.BMD200_set8PacketMode(connectionID, conOut4, conOut3); } else if (reset_data_count == 15) { NativeThinkgear.BMD200_set1PacketMode(connectionID, conOut4, conOut3); Console.WriteLine("BMD200_set1PacketMode: : "); } } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW_8B_1) != 0) { if (packetsRead % 100 == 0) { Console.WriteLine("BMD200_DATA_RAW_8B_1: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW_8B_1)); } else { NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_DATA_RAW_8B_1); } packetsRead += 8; } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.BMD200_8_RAW_FLAG) != 0) { Console.WriteLine("BMD200_8_RAW_FLAG: : "); NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.BMD200_8_RAW_FLAG); } /* * if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) != 0) * { * Console.WriteLine(" Find Filter Type: " + NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE)); * break; * }*/ } errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 0); //stop Console.WriteLine("auto read test stoped: " + errCode); } else { Console.WriteLine("auto read test failed: " + errCode); } NativeThinkgear.TG_Disconnect(connectionID); // disconnect test /* Clean up */ NativeThinkgear.TG_FreeConnection(connectionID); /* End program */ Console.ReadLine(); }
static void Main(string[] args) { NativeThinkgear thinkgear = new NativeThinkgear(); /* Print driver version number */ Console.WriteLine("Version: " + NativeThinkgear.TG_GetVersion()); /* Get a connection ID handle to ThinkGear */ int connectionID = NativeThinkgear.TG_GetNewConnectionId(); Console.WriteLine("Connection ID: " + connectionID); if (connectionID < 0) { Console.WriteLine("ERROR: TG_GetNewConnectionId() returned: " + connectionID); return; } int errCode = 0; /* Set/open stream (raw bytes) log file for connection */ errCode = NativeThinkgear.TG_SetStreamLog(connectionID, "streamLog.txt"); Console.WriteLine("errCode for TG_SetStreamLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetStreamLog() returned: " + errCode); return; } /* Set/open data (ThinkGear values) log file for connection */ errCode = NativeThinkgear.TG_SetDataLog(connectionID, "dataLog.txt"); Console.WriteLine("errCode for TG_SetDataLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetDataLog() returned: " + errCode); return; } /* Attempt to connect the connection ID handle to serial port "COM5" */ string comPortName = "\\\\.\\COM40"; errCode = NativeThinkgear.TG_Connect(connectionID, comPortName, NativeThinkgear.Baudrate.TG_BAUD_57600, NativeThinkgear.SerialDataFormat.TG_STREAM_PACKETS); if (errCode < 0) { Console.WriteLine("ERROR: TG_Connect() returned: " + errCode); return; } /* Read 10 ThinkGear Packets from the connection, 1 Packet at a time */ int packetsRead = 0; while (packetsRead < 10) { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); Console.WriteLine("TG_ReadPackets returned: " + errCode); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { packetsRead++; /* If attention value has been updated by TG_ReadPackets()... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { /* Get and print out the updated attention value */ Console.WriteLine("New RAW value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW)); } /* end "If attention value has been updated..." */ } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ Console.WriteLine("auto read test begin:"); errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 1); if (errCode == 0) { packetsRead = 0; NativeThinkgear.MWM15_setFilterType(connectionID, NativeThinkgear.FilterType.MWM15_FILTER_TYPE_50HZ); while (packetsRead < 2000) { /* If raw value has been updated ... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { /* Get and print out the updated raw value */ if (packetsRead % 20 == 0) { Console.WriteLine("New RAW value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW)); } else { NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW); } packetsRead++; if (packetsRead == 800 || packetsRead == 1600) { NativeThinkgear.MWM15_getFilterType(connectionID); Console.WriteLine(" MWM15_getFilterType called"); } } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE) != 0) { Console.WriteLine(" Find Filter Type: " + NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.MWM15_DATA_FILTER_TYPE)); break; } } errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 0); //stop Console.WriteLine("auto read test stoped: " + errCode); } else { Console.WriteLine("auto read test failed: " + errCode); } NativeThinkgear.TG_Disconnect(connectionID); // disconnect test /* Clean up */ NativeThinkgear.TG_FreeConnection(connectionID); /* End program */ Console.ReadLine(); }
private async Task _readRawData() { int errCode = 0; file.WriteLine(MindRecord.getCSVHeader()); iLiveFlag = 0; while (active) { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { if (iLiveFlag > iMaxFlag) { iMaxFlag = iLiveFlag; } iLiveFlag = 0; /* Check if connectio quality is OK */ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_POOR_SIGNAL); if (errCode != 0) { signal = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_POOR_SIGNAL); /* * ak sa data=0 spojenie je OK */ /* Get and print out the updated attention value */ if (signal == 0) { pb_working.Invoke(new Action(() => { pb_working.Image = Properties.Resources.connected_v1; })); MindRecord mindRecord = new MindRecord(); packetsRead++; mindRecord.time = DateTime.Now; errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION); if (errCode != 0) { mindRecord.iAttention = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_MEDITATION); if (errCode != 0) { mindRecord.iMeditation = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_MEDITATION); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_THETA); if (errCode != 0) { mindRecord.iTheta = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_THETA); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA1); if (errCode != 0) { mindRecord.iAlpha1 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA1); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA2); if (errCode != 0) { mindRecord.iAlpha2 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ALPHA2); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_BETA1); if (errCode != 0) { mindRecord.iBeta1 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_BETA1); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_BETA2); if (errCode != 0) { mindRecord.iBeta2 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_BETA2); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA1); if (errCode != 0) { mindRecord.iGamma1 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA1); } /**/ errCode = NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA2); if (errCode != 0) { mindRecord.iGamma2 = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_GAMMA2); } attention.Add(mindRecord.iAttention); meditation.Add(mindRecord.iMeditation); file.WriteLine(mindRecord.getCSVRecord()); file.Flush(); await Task.Delay(1000); } else { if (signal == 200) { pb_working.Invoke(new Action(() => { pb_working.Image = Properties.Resources.connecting1_v1; })); } else { if (signal < 100) { pb_working.Invoke(new Action(() => { pb_working.Image = Properties.Resources.connecting2_v1; })); } else { pb_working.Invoke(new Action(() => { pb_working.Image = Properties.Resources.connecting3_v1; })); } } } } } else { //NEžIJE iLiveFlag++; if (iLiveFlag > iMaxFlag * 10) { pb_working.Invoke(new Action(() => { pb_working.Image = Properties.Resources.nosignal_v1; })); reconnect(); iLiveFlag = 0; iMaxFlag = 1000; } } lb_liveflag.Invoke(new Action(() => { lb_liveflag.Text = "MAX: " + iMaxFlag.ToString() + " ACTUAL: " + iLiveFlag.ToString() + ""; })); if (errCode < 0) { //prázdny buffer } } /* end "Read 10 Packets of data from connection..." */ // }
private void getMindData() { NativeThinkgear thinkgear = new NativeThinkgear(); Console.WriteLine("Version: " + NativeThinkgear.TG_GetVersion()); int connectionID = NativeThinkgear.TG_GetNewConnectionId(); Console.WriteLine("Connection ID: " + connectionID); if (connectionID < 0) { Console.WriteLine("ERROR: TG_GetNewConnectionId() returned: " + connectionID); return; } errCode = NativeThinkgear.TG_SetStreamLog(connectionID, "streamLog.txt"); Console.WriteLine("errCode for TG_SetStreamLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetStreamLog() returned: " + errCode); return; } errCode = NativeThinkgear.TG_SetDataLog(connectionID, "dataLog.txt"); Console.WriteLine("errCode for TG_SetDataLog : " + errCode); if (errCode < 0) { Console.WriteLine("ERROR: TG_SetDataLog() returned: " + errCode); return; } string comPortName = "\\\\.\\COM4"; errCode = NativeThinkgear.TG_Connect(connectionID, comPortName, NativeThinkgear.Baudrate.TG_BAUD_57600, NativeThinkgear.SerialDataFormat.TG_STREAM_PACKETS); if (errCode < 0) { Console.WriteLine("ERROR: TG_Connect() returned: " + errCode); return; } int packetsRead = 0; while (packetsRead < 10) { errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); Console.WriteLine("TG_ReadPackets returned: " + errCode); if (errCode == 1) { packetsRead++; if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION) != 0) { /* Get and print out the updated attention value */ Console.WriteLine("New ATT value: : " + (int)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION)); } } } Console.WriteLine("Preparation is complete"); errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 1); packetsRead = 0; if (errCode == 0) { Date = DateTime.Now; NativeThinkgear.MWM15_setFilterType(connectionID, NativeThinkgear.FilterType.MWM15_FILTER_TYPE_50HZ); while (Run) { if (!controllType) { newData = false; for (int i = 0; i < Signals.Count; i++) { if (NativeThinkgear.TG_GetValueStatus(connectionID, Signals[i].Type) != 0) { Console.WriteLine("New Signal(" + Signals[i].Name + "): " + (int)NativeThinkgear.TG_GetValue(connectionID, Signals[i].Type)); Double value = (Double)NativeThinkgear.TG_GetValue(connectionID, Signals[i].Type); Signals[i].Add(value); newData = true; } } if (Chart.IsHandleCreated && newData) { this.Invoke((MethodInvoker) delegate { UpdateChart(); }); } } else { if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION) != 0) { bufAtt = (Double)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION); Console.WriteLine("New ATT value#" + Ca + ": " + (int)bufAtt); if (bufAtt != 0) { A = true; Ca++; } else { A = false; } } else { A = false; } if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_MEDITATION) != 0) { bufMed = (Double)NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_MEDITATION); Console.WriteLine("New MED value#" + Cm + ": " + (int)bufMed); if (bufMed != 0) { M = true; Cm++; } else { M = false; } } else { M = false; } if (A || M) { dataAtt[readyFor] = bufAtt; dataMed[readyFor] = bufMed; Graph[(int)bufAtt][(int)bufMed] = true; readyFor++; if (Clust) { addPoint((int)bufAtt, (int)bufMed); } if (readyFor == sizeFor) { Clusterisation(); Clust = true; } if (Chart.IsHandleCreated) { this.Invoke((MethodInvoker) delegate { UpdateChart(); }); } } } packetsRead++; } NativeThinkgear.TG_Disconnect(connectionID); NativeThinkgear.TG_FreeConnection(connectionID); } else { Console.WriteLine("Disable to read"); return; } ListSign.Enabled = true; }
public void startExperiment() { NativeThinkgear thinkgear = new NativeThinkgear(); /* Print driver version number */ Console.WriteLine("Version: " + NativeThinkgear.TG_GetVersion()); /* Get a connection ID handle to ThinkGear */ int connectionID = NativeThinkgear.TG_GetNewConnectionId(); Console.WriteLine("Connection ID: " + connectionID); if (connectionID < 0) { Console.WriteLine("ERROR: TG_GetNewConnectionId() returned: " + connectionID); return; } int errCode = 0; /* Attempt to connect the connection ID handle to serial port "COM5" */ //string comPortName = "\\\\.\\COM5"; string comPortName = "\\\\.\\COM6"; errCode = NativeThinkgear.TG_Connect(connectionID, comPortName, NativeThinkgear.Baudrate.TG_BAUD_57600, NativeThinkgear.SerialDataFormat.TG_STREAM_PACKETS); if (errCode < 0) { Console.WriteLine("ERROR: TG_Connect() returned: " + errCode); return; } ///* Read 10 ThinkGear Packets from the connection, 1 Packet at a time */ int packetsRead = 0; Console.WriteLine("auto read test begin:"); errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 1); if (errCode == 0) { packetsRead = 0; Thread sound_th = new Thread(new ThreadStart(soundLoop)); sound_th.Start(); while (isExperimentFinished == false) { /* If raw value has been updated ... */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { float raw_val = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW); wave_writer.WriteLine(getDateStrForLog() + "," + getUnixtimeInMillisec().ToString() + "," + raw_val.ToString()); packetsRead++; } } errCode = NativeThinkgear.TG_EnableAutoRead(connectionID, 0); //stop Console.WriteLine("auto read test stoped: " + errCode); } else { Console.WriteLine("auto read test failed: " + errCode); } NativeThinkgear.TG_Disconnect(connectionID); // disconnect test /* Clean up */ NativeThinkgear.TG_FreeConnection(connectionID); /* End program */ Console.WriteLine("please type Enter key to finish this program."); Console.ReadLine(); }
public static void CollectData(string userId, int numTrials, int trialStatus, string savePath, int sampleRate, bool toFile) { #region INITIALIZE Console.WriteLine("[INFO] Finding trial offset..."); int trialOffset = GetTrialOffset(savePath, userId, trialStatus); Console.WriteLine("[INFO] Trial offset = " + trialOffset.ToString()); StreamWriter rawWriter = new StreamWriter(savePath, true); DateTime previousTime; double seconds = 0.0f; int currentTrial = 0; int packetsRead = 0; int currentPacket = 0; string comPortName = "COM3"; Console.WriteLine("[INFO] Starting data collection in 3 seconds..."); Thread.Sleep(3000); Console.WriteLine("[INFO] Initializing headset..."); NativeThinkgear thinkgear = new NativeThinkgear(); Console.WriteLine("[INFO] Version: " + NativeThinkgear.TG_GetVersion()); /* Get a connection ID handle to ThinkGear */ int connectionID = NativeThinkgear.TG_GetNewConnectionId(); Console.WriteLine("[INFO] Connection ID: " + connectionID); if (connectionID < 0) { Console.WriteLine("[ERROR] TG_GetNewConnectionId() returned: " + connectionID); return; } int errCode = 0; /* Set/open stream (raw bytes) log file for connection */ errCode = NativeThinkgear.TG_SetStreamLog(connectionID, "streamLog.txt"); Console.WriteLine("[INFO] errCode for TG_SetStreamLog : " + errCode); if (errCode < 0) { Console.WriteLine("[ERROR] TG_SetStreamLog() returned: " + errCode); return; } /* Set/open data (ThinkGear values) log file for connection */ errCode = NativeThinkgear.TG_SetDataLog(connectionID, "dataLog.txt"); Console.WriteLine("[INFO] errCode for TG_SetDataLog : " + errCode); if (errCode < 0) { Console.WriteLine("[ERROR] TG_SetDataLog() returned: " + errCode); return; } /* Attempt to connect the connection ID handle to serial port "COM5" */ errCode = NativeThinkgear.TG_Connect(connectionID, comPortName, NativeThinkgear.Baudrate.TG_BAUD_57600, NativeThinkgear.SerialDataFormat.TG_STREAM_PACKETS); if (errCode < 0) { Console.WriteLine("[ERROR] TG_Connect() returned: " + errCode); return; } Console.WriteLine("[INFO] Initializing headset finsihed."); #endregion #region PROCESS List <Trial> trialList = new List <Trial>(); while (currentTrial < numTrials) { /* Attempt to read a Packet of data from the connection */ errCode = NativeThinkgear.TG_ReadPackets(connectionID, 1); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if (errCode == 1) { /* The raw data was updated since the last call */ if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_RAW) != 0) { /* Skip the first 2 seconds to avoid bad data */ if (packetsRead < sampleRate * 2) { Console.Write("\r[INFO] Skipping Packet (" + currentPacket + "/" + sampleRate * 2 + ")"); packetsRead++; currentPacket++; continue; } if (currentPacket % sampleRate == 0) { currentPacket = 0; currentTrial++; previousTime = DateTime.Now; seconds = (DateTime.Now - previousTime).TotalSeconds; if (toFile && trialList.Count > 0) { InsertTrialData(trialList, rawWriter); } trialList.Clear(); } //! Set up data for Trial float _raw = NativeThinkgear.TG_GetValue(connectionID, NativeThinkgear.DataType.TG_DATA_RAW); DateTime _time = DateTime.Now; Trial _currentTrial = new Trial(userId, trialStatus, currentTrial + trialOffset, _raw, currentPacket, _time); trialList.Add(_currentTrial); if (toFile && (currentPacket % sampleRate == 0 || currentPacket % sampleRate == 511)) { Console.WriteLine("[TRIAL] Trial=" + currentTrial + " Packet=" + currentPacket + " UserID=" + userId + " Status=" + trialStatus + " Total_Trial=" + (currentTrial + trialOffset)); } //! Update trackers packetsRead++; currentPacket++; } } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ #endregion #region DISCONNECT Console.WriteLine("[INFO] Disconnecting..."); NativeThinkgear.TG_Disconnect(connectionID); // disconnect test /* Clean up */ NativeThinkgear.TG_FreeConnection(connectionID); /* End program */ Console.ReadLine(); rawWriter.Close(); #endregion }