|
|
|
|
|
|
|
|
# TODO für python3 anpassen und in gui mit einfügen |
|
|
|
|
|
|
|
|
|
|
|
# imports |
|
|
# imports |
|
|
from socket import * |
|
|
from socket import * |
|
|
import thread, threading, struct |
|
|
|
|
|
import Queue |
|
|
|
|
|
import time, datetime |
|
|
|
|
|
from time import clock |
|
|
|
|
|
import os |
|
|
|
|
|
import ctypes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import threading |
|
|
|
|
|
import queue |
|
|
|
|
|
import time |
|
|
|
|
|
|
|
|
# connect to BCI2000 in a new thread |
|
|
# connect to BCI2000 in a new thread |
|
|
class BCI2000ReceiverThread(threading.Thread): |
|
|
class BCI2000ReceiverThread(threading.Thread): |
|
|
|
|
|
|
|
|
self.UDPSock = socket(AF_INET,SOCK_DGRAM) |
|
|
self.UDPSock = socket(AF_INET,SOCK_DGRAM) |
|
|
self.UDPSock.bind(self.addr) # BIND to LISTEN |
|
|
self.UDPSock.bind(self.addr) # BIND to LISTEN |
|
|
print('%s initialized to %s at port %s' % (self.getName(), self.host, self.port)) |
|
|
print('%s initialized to %s at port %s' % (self.getName(), self.host, self.port)) |
|
|
print('Relaying SelectedTargerts to port -- %s ---' % self.UNITY_PORT) |
|
|
|
|
|
|
|
|
print('Relaying SelectedTargets to port -- %s ---' % self.UNITY_PORT) |
|
|
self.relay_unity = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO UNITY |
|
|
self.relay_unity = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO UNITY |
|
|
print('Relaying all to port -- %s ---' % self.FEATHER_PORT) |
|
|
print('Relaying all to port -- %s ---' % self.FEATHER_PORT) |
|
|
self.relay_feather = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO FEATHER |
|
|
self.relay_feather = socket(AF_INET,SOCK_DGRAM) # UDP RELAY TO FEATHER |
|
|
|
|
|
|
|
|
if "SelectedTarget 0" in self.data: |
|
|
if "SelectedTarget 0" in self.data: |
|
|
self.go = True |
|
|
self.go = True |
|
|
if "SelectedTarget" in self.data and "SelectedTarget 0" not in self.data and self.go == True: |
|
|
if "SelectedTarget" in self.data and "SelectedTarget 0" not in self.data and self.go == True: |
|
|
print "Relaying Command to Unity: ", self.data |
|
|
|
|
|
|
|
|
print("Relaying Command to Unity: ", self.data) |
|
|
self.relay_unity.sendto(self.data, (self.host, self.UNITY_PORT)) |
|
|
self.relay_unity.sendto(self.data, (self.host, self.UNITY_PORT)) |
|
|
self.go = False |
|
|
self.go = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#print (phaseInSequence) |
|
|
#print (phaseInSequence) |
|
|
|
|
|
|
|
|
if contains(self.data, "StimulusCode "): |
|
|
if contains(self.data, "StimulusCode "): |
|
|
print "Relaying Command to Feather: ", self.data |
|
|
|
|
|
|
|
|
print("Relaying Command to TactileBCIfilter: ", self.data) |
|
|
self.relay_feather.sendto(self.data, (self.host, self.FEATHER_PORT)) |
|
|
self.relay_feather.sendto(self.data, (self.host, self.FEATHER_PORT)) |
|
|
|
|
|
|
|
|
StimulusCode=int(self.data.replace('StimulusCode ','')) |
|
|
StimulusCode=int(self.data.replace('StimulusCode ','')) |
|
|
|
|
|
|
|
|
def returnProgramStatus(self): |
|
|
def returnProgramStatus(self): |
|
|
return self.running |
|
|
return self.running |
|
|
|
|
|
|
|
|
def kill(self): |
|
|
|
|
|
self.running=False |
|
|
|
|
|
log('%s terminated' % (self.getName())) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### M A I N P R O G R A M M ### |
|
|
### M A I N P R O G R A M M ### |
|
|
|
|
|
|
|
|
|
|
|
# # initialize queue |
|
|
|
|
|
# phaseInSequenceQueue = queue.Queue() |
|
|
|
|
|
# StimulusCodeQueue = queue.Queue() |
|
|
|
|
|
|
|
|
# initialize queue |
|
|
|
|
|
phaseInSequenceQueue = Queue.Queue() |
|
|
|
|
|
StimulusCodeQueue = Queue.Queue() |
|
|
|
|
|
|
|
|
|
|
|
RunApplication = True |
|
|
|
|
|
|
|
|
# RunApplication = True |
|
|
|
|
|
|
|
|
#start BCI2000ReceiverThread |
|
|
|
|
|
BCI2000ReceiverThread1=BCI2000ReceiverThread(1, phaseInSequenceQueue, StimulusCodeQueue) |
|
|
|
|
|
BCI2000ReceiverThread1.start() |
|
|
|
|
|
|
|
|
# #start BCI2000ReceiverThread |
|
|
|
|
|
# BCI2000ReceiverThread1=BCI2000ReceiverThread(1, phaseInSequenceQueue, StimulusCodeQueue) |
|
|
|
|
|
# BCI2000ReceiverThread1.start() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|