Changeset 348 for trunk


Ignore:
Timestamp:
03/28/12 17:31:44 (8 years ago)
Author:
sc
Message:
  • Cython interface to Emotiv initial flight
Location:
trunk/project/PuzzleboxSynapseEmotiv/PuzzleboxSynapseEmotiv
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/project/PuzzleboxSynapseEmotiv/PuzzleboxSynapseEmotiv/hello.pyx

    r347 r348  
    1 #include <string> 
    21 
    32cdef extern from "edk.h": 
    43#       int EE_EngineRemoteConnect(const char* szHost, unsigned short port) 
    5         int EE_EngineRemoteConnect(char* szHost, unsigned short port) 
    6 #       int EE_EngineRemoteConnect(char* szHost, int port) 
    7 #       int EE_EngineRemoteConnect() 
     4        ctypedef void* EmoEngineEventHandle 
     5        ctypedef void* EmoStateHandle 
     6         
     7        #ctypedef enum EE_Event_enum { 
     8                #EE_UnknownEvent         = 0x0000, 
     9                #EE_EmulatorError        = 0x0001, 
     10                #EE_ReservedEvent        = 0x0002, 
     11                #EE_UserAdded            = 0x0010, 
     12                #EE_UserRemoved          = 0x0020, 
     13                #EE_EmoStateUpdated      = 0x0040, 
     14                #EE_ProfileEvent         = 0x0080, 
     15                #EE_CognitivEvent        = 0x0100, 
     16                #EE_ExpressivEvent       = 0x0200, 
     17                #EE_InternalStateChanged = 0x0400, 
     18                #EE_AllEvent             = EE_UserAdded | EE_UserRemoved | EE_EmoStateUpdated | EE_ProfileEvent | EE_CognitivEvent | EE_ExpressivEvent | EE_InternalStateChanged 
     19        #} EE_Event_t; 
     20         
     21        cdef int EE_EngineRemoteConnect(char* szHost, unsigned short port) 
     22        cdef int EE_EngineGetNextEvent(EmoEngineEventHandle hEvent) 
     23        cdef EmoEngineEventHandle EE_EmoEngineEventCreate() 
     24        cdef EmoStateHandle EE_EmoStateCreate() 
     25         
     26        #cdef EE_Event_t EE_EmoEngineEventGetType(EmoEngineEventHandle hEvent) 
     27        cdef int EE_EmoEngineEventGetUserId(EmoEngineEventHandle hEvent, unsigned int *pUserIdOut) 
     28        #cdef EE_EmoStateUpdated 
     29        cdef int EE_EmoEngineEventGetEmoState(EmoEngineEventHandle hEvent, EmoStateHandle hEmoState) 
     30         
     31        cdef float ES_GetTimeFromStart(EmoStateHandle state) 
     32        cdef int ES_GetWirelessSignalStatus(EmoStateHandle state) 
     33        cdef int ES_GetHeadsetOn(EmoStateHandle state) 
     34         
     35        cdef float ES_AffectivGetExcitementShortTermScore(EmoStateHandle state) 
     36        cdef float ES_AffectivGetExcitementLongTermScore(EmoStateHandle state) 
     37        cdef float ES_AffectivGetMeditationScore(EmoStateHandle state) 
     38        cdef float ES_AffectivGetFrustrationScore(EmoStateHandle state) 
     39        cdef float ES_AffectivGetEngagementBoredomScore(EmoStateHandle state) 
     40 
     41 
     42#cdef eEvent = EE_EmoEngineEventCreate() 
     43#cdef eState = EE_EmoStateCreate() 
    844 
    945def say_hello_to(name): 
    1046        print("Hello, %s" % name) 
    1147 
    12 #def emotiv(): 
    13         #handle = EE_EngineRemoteConnect("127.0.0.1", 1726) 
     48HOST = "127.0.0.1" 
     49PORT = 1726 
     50 
     51#def emotiv_connect(host, port): 
     52def emotiv_connect(): 
     53        handle = EE_EngineRemoteConnect(HOST, PORT) 
    1454        #print type(handle) 
    1555        #print handle 
     56         
     57        eEvent = EE_EmoEngineEventCreate() 
     58        eState = EE_EmoStateCreate() 
     59         
     60         
     61        while True: 
     62                result = EE_EngineGetNextEvent(eEvent) 
     63                 
     64                #processEmotivState(eEvent, eState) 
     65                #processEmotivState() 
     66         
     67 
     68#def processEmotivState(): 
     69         
     70                result = EE_EmoEngineEventGetEmoState(eEvent, eState) 
     71                 
     72                # Headset Status 
     73                time_from_start = ES_GetTimeFromStart(eState) 
     74                wireless_signal_status = (ES_GetWirelessSignalStatus(eState)) 
     75                headset_on = (ES_GetHeadsetOn(eState)) 
     76 
     77                # Affectiv Suite results 
     78                excitement = ES_AffectivGetExcitementShortTermScore(eState) 
     79                excitement_long_term = ES_AffectivGetExcitementLongTermScore(eState) 
     80                meditation = ES_AffectivGetMeditationScore(eState) 
     81                frustration = ES_AffectivGetFrustrationScore(eState) 
     82                engagement_boredom = ES_AffectivGetEngagementBoredomScore(eState) 
     83 
     84                packet = {} 
     85                 
     86                packet['emotiv_status'] = {} 
     87                packet['emotiv_status']['time_from_start'] = time_from_start 
     88                packet['emotiv_status']['headset_on'] = headset_on 
     89                #packet['emotiv_status']['contact_number_of_quality_channels'] = contact_number_of_quality_channels 
     90                #packet['emotiv_status']['contact_quality_from_all_channels'] = contact_quality_from_all_channels 
     91                packet['emotiv_status']['wireless'] = wireless_signal_status 
     92                #packet['emotiv_status']['battery'] = battery 
     93                 
     94                 
     95                packet['affectiv'] = {} 
     96                #print dir(excitement) 
     97                packet['affectiv']['excitement'] = excitement 
     98                packet['affectiv']['long_term_excitement'] = excitement_long_term 
     99                packet['affectiv']['meditation'] = meditation 
     100                packet['affectiv']['frustration'] = frustration 
     101                packet['affectiv']['engagement_boredom'] = engagement_boredom 
     102                 
     103                 
     104                 
     105                print 
     106                print 
     107                print "INFO [Emotiv]: Packet Received:" 
     108                for group in packet.keys(): 
     109                        for key in packet[group].keys(): 
     110                                print '[%s][%s]:' % (group, key), 
     111                                #if type(packet[group][key]): 
     112                                        #print '%f' % packet[group][key] 
     113                                #else: 
     114                                print packet[group][key] 
     115         
     116         
     117 
     118 
     119#EmoEngineEventHandle eEvent            = EE_EmoEngineEventCreate(); 
     120#EmoStateHandle eState                          = EE_EmoStateCreate(); 
     121#unsigned int userID                                    = 0; 
     122                         
     123        #int state = EE_EngineGetNextEvent(eEvent); 
     124 
     125        #// New event needs to be handled 
     126        #if (state == EDK_OK) { 
     127 
     128                #EE_Event_t eventType = EE_EmoEngineEventGetType(eEvent); 
     129                #EE_EmoEngineEventGetUserId(eEvent, &userID); 
     130 
     131                #// Log the EmoState if it has been updated 
     132                #if (eventType == EE_EmoStateUpdated) { 
     133 
     134                        #EE_EmoEngineEventGetEmoState(eEvent, eState); 
     135 
     136                        #// Headset Status 
     137                        #float time_from_start = ES_GetTimeFromStart(eState); 
     138                        #int wireless_signal_status = static_cast<int>(ES_GetWirelessSignalStatus(eState)); 
     139                        #int headset_on = static_cast<int>(ES_GetHeadsetOn(eState)); 
     140 
     141                        #// Affectiv Suite results 
     142                        #float excitement = ES_AffectivGetExcitementShortTermScore(eState); 
     143                        #float excitement_long_term = ES_AffectivGetExcitementLongTermScore(eState); 
     144                        #float meditation = ES_AffectivGetMeditationScore(eState); 
     145                        #float frustration = ES_AffectivGetFrustrationScore(eState); 
     146                        #float engagement_boredom = ES_AffectivGetEngagementBoredomScore(eState); 
     147                         
     148                         
     149                         
     150         
     151        #self.EmotivEngine = PyEpoc.PyEpoc.EpocHandler() 
     152        #self.engineeventhandle = self.EmotivEngine.EE_EmoEngineEventCreate() 
     153        #self.statehandle = self.EmotivEngine.EE_EmoStateCreate() 
     154        #self.EmotivEngine.ES_Init(self.statehandle) 
     155 
     156         
     157                #state = self.EmotivEngine.EE_EngineGetNextEvent(self.engineeventhandle) 
     158                 
     159                #self.processEmotivState(state) 
     160 
     161        #if (state == PyEpoc.PyEpoc.ERRCODE['EDK_OK']): 
     162                 
     163                #event = self.EmotivEngine.EE_EmoEngineEventGetType(self.engineeventhandle) 
     164                #user = self.EmotivEngine.EE_EmoEngineEventGetUserId(self.engineeventhandle)[1] 
     165                 
     166                #if (event == PyEpoc.PyEpoc.EVENT['EE_EmoStateUpdated']): 
     167                         
     168                        #self.EmotivEngine.EE_EmoEngineEventGetEmoState(self.engineeventhandle, self.statehandle) 
     169                         
     170                        ## Emotiv Status 
     171                        #time_from_start = self.EmotivEngine.ES_GetTimeFromStart(self.statehandle) 
     172                        #headset_on = self.EmotivEngine.ES_GetHeadsetOn(self.statehandle) 
     173                        #contact_number_of_quality_channels = self.EmotivEngine.ES_GetNumContactQualityChannels(self.statehandle) 
  • trunk/project/PuzzleboxSynapseEmotiv/PuzzleboxSynapseEmotiv/setup.py

    r347 r348  
    55ext_modules = [Extension("hello", \ 
    66                        ["hello.pyx"], \ 
    7                         language='c++')] 
     7                        language='c++', \ 
     8                        libraries=['..\lib\edk'], \ 
     9                        )] 
    810 
    911setup( 
Note: See TracChangeset for help on using the changeset viewer.