Changeset 59 for remote_control


Ignore:
Timestamp:
06/21/10 17:56:00 (11 years ago)
Author:
sc
Message:

server_thinkgear:

  • initial headset sin wave sample data generator complete
File:
1 edited

Legend:

Unmodified
Added
Removed
  • remote_control/puzzlebox_brainstorms_server_thinkgear.py

    r58 r59  
    1313##################################################################### 
    1414 
    15 import os, signal, sys, time 
     15import math, os, signal, sys, time 
    1616import simplejson as json 
    1717 
     
    3737 
    3838MESSAGE_FREQUENCY_TIMER = 1 # 1 Hz 
    39 BLINK_FREQUENCY_TIMER = 10 # 10 seconds 
     39 
     40ENABLE_SIMULATE_HEADSET_DATA = True 
     41 
     42BLINK_FREQUENCY_TIMER = 6 # blink every 6 seconds 
     43                          # (6 seconds is listed by Wikipedia 
     44                          # as being the average number of times 
     45                          # an adult blinks in a laboratory setting) 
     46 
     47DEFAULT_SAMPLE_WAVELENGTH = 10 # number of seconds from 0 to max to 0 for 
     48                               # any given detection value below 
    4049 
    4150DEFAULT_AUTHORIZATION_MESSAGE = \ 
     
    5463DEFAULT_EEG_POWER_MESSAGE = \ 
    5564        {"eegPower": { \ 
     65                'delta': 0, \ 
     66                'theta': 0, \ 
     67                'lowAlpha': 0, \ 
     68                'highAlpha': 0, \ 
     69                'lowBeta': 0, \ 
     70                'highBeta': 0, \ 
    5671                'lowGamma': 0, \ 
    5772                'highGamma': 0, \ 
    58                 'highAlpha': 0, \ 
    59                 'delta': 0, \ 
    60                 'highBeta': 0, \ 
    61                 'lowAlpha': 0, \ 
    62                 'lowBeta': 0, \ 
    63                 'theta': 0, \ 
    6473                }, \ 
    6574         } # A container for the EEG powers. These may 
    6675           # be either integer or floating-point values. 
     76           # Maximum values are undocumented but assumed to be 65535 
    6777 
    6878DEFAULT_ESENSE_MESSAGE = \ 
    6979        {"eSense": { \ 
     80                'attention': 0, \ 
    7081                'meditation': 0, \ 
    71                 'attention': 0, \ 
    7282                }, \ 
    7383        } # A container for the eSense™ attributes. 
     
    106116                self.status_packet = DEFAULT_PACKET 
    107117                self.client_connected = False 
     118                self.connection_timestamp = time.time() 
     119                self.blink_timestamp = time.time() 
    108120 
    109121 
     
    155167                         
    156168 
     169        ################################################################## 
     170 
     171        def calculate_wave_point(self, x, max_height=100, wave_length=10): 
     172 
     173                # start at 0, increase to max value at half of one 
     174                # wavelength, decrease to 0 by end of wavelength 
     175                y = ( (max_height/2) * \ 
     176                      math.sin ((x-1) * ( math.pi / (wave_length / 2)))) + \ 
     177                      (max_height/2) 
     178 
     179                # start at max value, decrease to 0 at half of one 
     180                # wavelegnth, increase to max by end of wavelength 
     181##              y = ( (max_height/2) * \ 
     182##                    math.cos (x * ( math.pi / (wave_length / 2)))) + \ 
     183##                    (max_height/2) 
     184 
     185 
     186                return(y) 
     187 
     188 
     189        ################################################################## 
     190 
     191        def simulate_headset_data(self): 
     192 
     193                response = DEFAULT_PACKET 
     194 
     195                time_value = self.connection_timestamp - time.time() 
     196 
     197                for key in response.keys(): 
     198 
     199                        if key == 'poorSignalLevel': 
     200                                pass 
     201 
     202                        elif key == 'eSense': 
     203                                plot = self.calculate_wave_point( \ 
     204                                        time_value, \ 
     205                                        max_height=100, \ 
     206                                        wave_length=DEFAULT_SAMPLE_WAVELENGTH) 
     207 
     208                                for each in response[key].keys(): 
     209                                        response[key][each] = plot 
     210 
     211                        elif key == 'eegPower': 
     212                                plot = self.calculate_wave_point( \ 
     213                                        time_value, \ 
     214                                        max_height=65535, \ 
     215                                        wave_length=DEFAULT_SAMPLE_WAVELENGTH) 
     216 
     217                                for each in response[key].keys(): 
     218                                        response[key][each] = plot 
     219 
     220 
     221                return(response) 
     222 
     223 
    157224        ################################################################## 
    158225         
     
    175242                        response['isAuthorized'] = authorized 
    176243 
    177  
    178244                else: 
    179245                        response = DEFAULT_RESPONSE_MESSAGE 
     
    207273        def update_status(self): 
    208274 
     275                if ENABLE_SIMULATE_HEADSET_DATA: 
     276                        self.status_packet = self.simulate_headset_data() 
     277 
    209278                if self.DEBUG > 1: 
    210279                        print "status:", 
     
    217286 
    218287                self.client_connected = True 
     288                self.connection_timestamp = time.time() 
     289                self.status_packet = DEFAULT_PACKET 
    219290                self.looping_timer = task.LoopingCall(self.update_status) 
    220291                self.looping_timer.start(MESSAGE_FREQUENCY_TIMER) 
Note: See TracChangeset for help on using the changeset viewer.