Exemple #1
0
    // Find events from the buffer and process them according to their type.
    public void processBufferEvents()
    {
        int timeout = 5000;

        print(hdr.nEvents);

        try
        {
            print("Waiting for events...");
            SamplesEventsCount sec = client.waitForEvents(nEvents - 1, timeout);
            if (sec.nEvents > nEvents)
            {
                BufferEvent[] evs = client.getEvents(nEvents, sec.nEvents - 1);
                nEvents = sec.nEvents;
                print("Got " + evs.Length + " events");

                //grab the newest event (This means it only take 1 event every update)
                BufferEvent evt     = evs[evs.Length - 1];
                string      evttype = evt.getType().toString();

                // Handle Exit event
                if (evttype.Equals("exit"))
                {
                    client.disconnect();
                }

                // Handle keyboard events
                else if (evttype.Equals("keyboard"))
                {
                    predictions      = evt.getValue().toString();
                    currentBCIAction = predictions;
                    print(predictions);
                }
                // handle predictions events
                else if (evttype.Equals("classifier.prediction"))
                {
                    // Get highest prediction
                    predictionArray = (double[])evt.getValue().array;

                    double maxValue = predictionArray.Max();
                    int    maxIndex = predictionArray.ToList().IndexOf(maxValue);
                    highestPredictionindex = maxIndex;
                    // set variable to index of highest prediction or some other boundary.
                    //highestPredictionindex = 1;
                }
            }
        }
        catch
        {
            print("catch Error");
        }
    }
    // Buffer
    // TODO: This is a horrible combination of service management and buffer/event tracking... should separate into different pieces.
    private void eventsAdded(UnityBuffer _buffer, EventArgs e)
    {
        BufferEvent latestEvent = _buffer.getLatestEvent();

        if (latestEvent.getType().toString() == Config.feedbackEventType)
        {
            IList alphaLatObjects = latestEvent.getValue().array as IList;
            currentAlphaLat = alphaLatObjects.Cast <double> ().ToArray();
        }
        else if (latestEvent.getType().toString() == Config.rawfeedbackEventType)
        {
            IList rawpred = latestEvent.getValue().array as IList;
            currentrawpred = rawpred.Cast <double> ().ToArray();
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (isBufferOn && latestEvent.getType().toString() == "alphaLat" &&
            latestEvent.getValue().toString() != previousEvent.getValue().toString())
        {
            float alphaLatValue = float.Parse(latestEvent.getValue().toString());

            Vector3 targetPosition = new Vector3(0, 0, alphaLatValue);
            transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);

            previousEvent = latestEvent;
            Debug.Log(alphaLatValue);
        }
        if (isBufferOn)
        {
            transform.Rotate(turningRate * Time.deltaTime, 0, 0);
        }
    }
Exemple #4
0
	// Buffer
	// TODO: This is a horrilble combination of service management and buffer/event tracking... should separate into different pieces.
	private void eventsAdded(UnityBuffer _buffer, EventArgs e){
		BufferEvent latestEvent = _buffer.getLatestEvent();
		if(bufferIsOn && latestEvent.getType().toString()==Config.feedbackEventType)
		{
			clientIsConnected = true;
			IList alphaLatObjects = latestEvent.getValue().array as IList;
			currentAlphaLat = alphaLatObjects.Cast<double>().ToArray();
			//Debug.Log (alphaLatObjects);
		}
	}
    private void eventsAdded(UnityBuffer _buffer, EventArgs e)
    {
        BufferEvent latestEvent = _buffer.getLatestEvent();

        Debug.Log(latestEvent.getType().toString() + ": " + latestEvent.getValue().toString());
    }
Exemple #6
0
    public static int Main(String[] args)
    {
        String hostname = "localhost";
        int    port     = 1972;
        int    timeout  = 5000;

        if (args.Length >= 1)
        {
            hostname = args[0];
        }
        if (args.Length >= 2)
        {
            try {
                port = Convert.ToInt32(args[1]);
            }
            catch {     //  (NumberFormatException e)
                port = 0;
            }
            if (port <= 0)
            {
                System.Console.WriteLine("Second parameter (" + args[1] + ") is not a valid port number.");
                return(1);
            }
        }
        if (args.Length >= 3)
        {
            try {
                port = Convert.ToInt32(args[2]);
            }
            catch {     //  (NumberFormatException e)
                timeout = 5000;
            }
        }

        BufferClientClock C = new BufferClientClock();

        Header hdr = null;

        while (hdr == null)
        {
            try {
                System.Console.Write("Connecting to " + hostname + ":" + port + "...");
                C.connect(hostname, port);
                System.Console.WriteLine("done");
                System.Console.Write("Getting Header...");
                if (C.isConnected())
                {
                    hdr = C.getHeader();
                }
                System.Console.WriteLine("done");
            } catch {     //(IOException e)
                hdr = null;
            }
            if (hdr == null)
            {
                System.Console.WriteLine("Invalid Header... waiting");
                System.Threading.Thread.Sleep(1000);
            }
        }
        System.Console.WriteLine("#channels....: " + hdr.nChans);
        System.Console.WriteLine("#samples.....: " + hdr.nSamples);
        System.Console.WriteLine("#events......: " + hdr.nEvents);
        System.Console.WriteLine("Sampling Freq: " + hdr.fSample);
        System.Console.WriteLine("data type....: " + hdr.dataType);
        for (int n = 0; n < hdr.nChans; n++)
        {
            if (hdr.labels[n] != null)
            {
                System.Console.WriteLine("Ch. " + n + ": " + hdr.labels[n]);
            }
        }

        // Now do the echo-server
        int nEvents = hdr.nEvents;

        endExpt = false;
        while (!endExpt)
        {
            SamplesEventsCount sec = C.waitForEvents(nEvents, timeout);    // Block until there are new events
            if (sec.nEvents > nEvents)
            {
                // get the new events
                BufferEvent[] evs = C.getEvents(nEvents, sec.nEvents - 1);
                //float[][] data = C.getFloatData(0,sec.nSamples-1); // Example of how to get data also
                nEvents = sec.nEvents;// update record of which events we've seen
                // filter for ones we want
                System.Console.WriteLine("Got " + evs.Length + " events");
                for (int ei = 0; ei < evs.Length; ei++)
                {
                    BufferEvent evt     = evs[ei];
                    String      evttype = evt.getType().toString(); // N.B. to*S*tring, not upper case!
                    // only process if it's an event of a type we care about
                    // In our case, don't echo our own echo events....
                    if (!evttype.Equals("echo"))          // N.B. use equals, not == to compare string contents!
                    {
                        if (evttype.Equals("exit"))       // check for a finish event
                        {
                            endExpt = true;
                        }
                        // Print the event to the console
                        System.Console.WriteLine(ei + ") t:" + evt.getType().toString() + " v:" + evt.getValue().toString() + " s:" + evt.sample);
                        // Now create the echo event, with auto-completed sample number
                        // N.B. -1 for sample means auto-compute based on the real-time-clock
                        C.putEvent(new BufferEvent("echo", evt.getValue().toString(), -1));
                    }
                }
            }
            else         // timed out without new events
            {
                System.Console.WriteLine("Timeout waiting for events");
            }
        }
        System.Console.WriteLine("Normal Exit");
        C.disconnect();
        return(0);
    }