private static void SubscribedOK(object sender, Dictionary <string, JArray> e) { foreach (string key in e.Keys) { if (key == "mot") { // print header ArrayList header = e[key].ToObject <ArrayList>(); //add timeStamp to header header.Insert(0, "Timestamp"); header.Add("Action1"); header.Add("Action2"); header.Add("Action3"); header.Add("Action4"); WriteDataToFile(header); // Determine what type of gyrometer we have available if (header.Contains("GYROX") && header.Contains("GYROY") && header.Contains("GYROZ")) { Console.WriteLine("Detected Epoc+ v1.1 model headset, which uses dps."); currentGyroType = GyrometerType.DPS; gyroXIndex = header.IndexOf("GYROX"); gyroYIndex = header.IndexOf("GYROY"); gyroZIndex = header.IndexOf("GYROZ"); } else if (header.Contains("GYROX") && header.Contains("GYROY")) { Console.WriteLine("Detected Epoc v1.0 model headset, which uses g."); currentGyroType = GyrometerType.G; gyroXIndex = header.IndexOf("GYROX"); gyroYIndex = header.IndexOf("GYROY"); } else if (header.Contains("Q0") && header.Contains("Q1") && header.Contains("Q2") && header.Contains("Q3")) { Console.WriteLine("Detected Epoc X or Epoc+ v1.1A model headset, which uses quaternions."); currentGyroType = GyrometerType.Quaternion; gyroXIndex = header.IndexOf("Q0"); gyroYIndex = header.IndexOf("Q1"); gyroZIndex = header.IndexOf("Q2"); gyroWIndex = header.IndexOf("Q3"); } else { Console.WriteLine("This is a type of headset we've not yet seen before. See the contained headers: " + header.ToString()); currentGyroType = GyrometerType.Unknown; } } } }
static void Main(string[] args) { Console.WriteLine("Motion LOGGER"); Console.WriteLine("Please wear Headset with good signal!!!"); // Delete Output file if existed if (File.Exists(OutFilePath)) { File.Delete(OutFilePath); } OutFileStream = new FileStream(OutFilePath, FileMode.Append, FileAccess.Write); rollingSums = rollingSums = new RollingSums { x = 0, y = 0, z = 0 }; currentGyroType = GyrometerType.Unknown; DataStreamExample dse = new DataStreamExample(); dse.AddStreams("mot"); dse.OnSubscribed += SubscribedOK; dse.OnMotionDataReceived += OnMotionDataReceived; dse.Start(licenseID); Console.WriteLine("Press Esc to flush data to file and exit"); while (Console.ReadKey().Key != ConsoleKey.Escape) { } // Unsubcribe stream dse.UnSubscribe(); Thread.Sleep(5000); // Close Session dse.CloseSession(); Thread.Sleep(5000); // Close Out Stream OutFileStream.Dispose(); }