Exemplo n.º 1
0
    def button_1_callback(self):
        '''Write your function here if it's simple. If it is more complex, you might want to import it from a separate
        document and call it here.'''
        if not DataFileObj.data_collect_flag:
            if not DataFileObj.is_data_file_created():
                # Create the file
                DataFileObj.update_file_name(globls.subject_name)
                DataFileObj.update_header_into_data_file()

            globls.dump_log('start saving data')
            globls.custom_button[0].configure(text="Stop Save")
            globls.update_cont_data(1)
            DataFileObj.update_data_collect_flag(True)
            # print(globls.DUMP_DATA_CONTINUALLY)

        else:
            globls.dump_log('stop saving data')
            globls.DUMP_DATA_CONTINUALLY = 0
            DataFileObj.update_data_collect_flag(False)
            globls.update_cont_data(0)
            globls.custom_button[0].configure(text="Start Save")
            # DataFileObj.dump_data_to_file()
            # DataFileObj.total_data_dumped_to_file()
            DataFileObj.reset_file_name()

        return
Exemplo n.º 2
0
    def button_2_callback(self):
        globls.dump_log('Gate is opened')
        data_str = '6 100 /'
        data_recv_ts = time.time()
        data = data_str + """{}""".format('q' *
                                          (1024 - len(data_str.encode())))
        DataFileObj.save_raw_eye_taskdata(data_recv_ts,
                                          0,
                                          0,
                                          0,
                                          0,
                                          task_data=data)

        return
Exemplo n.º 3
0
def send_data(sock, dest_addr, data_string, msg=None):
    data = data_string
    tmp_msg = ''
    if dest_addr:
        data = data_padder(data_string)
        try:
            sock.sendto(data, dest_addr)
            if msg is not None:
                tmp_msg = tmp_msg + msg
                globls.dump_log('{}. length {}. Data {}'.format(
                    tmp_msg, len(data), data_string))
            return data
        except Exception as e:
            log.exception(e)
            tmp_msg = 'Exception Sending ' + msg if msg else ''
    else:
        tmp_msg = 'Matlab socket not initilized to Send ' + msg if msg else ''
    globls.dump_log('Error: {}'.format(tmp_msg))
    return data
Exemplo n.º 4
0
    def button_3_callback(self):

        if globls.Shocked:
            globls.update_shock_flag(0)
            globls.ManualShock = 0
            globls.shock_off()
            globls.custom_button[2].configure(text="Shock Off")
            globls.dump_log('Shock Stopped')

            data_str = '6 200 /'
            data_recv_ts = time.time()
            data = data_str + """{}""".format('q' *
                                              (1024 - len(data_str.encode())))
            DataFileObj.save_raw_eye_taskdata(data_recv_ts,
                                              0,
                                              0,
                                              0,
                                              0,
                                              task_data=data)

        else:
            globls.update_shock_flag(1)
            globls.ManualShock = 1
            globls.shock_on()
            globls.custom_button[2].configure(text="Shock On")
            globls.dump_log('Shock Started')
            data_str = '6 201 /'
            data_recv_ts = time.time()
            data = data_str + """{}""".format('q' *
                                              (1024 - len(data_str.encode())))
            DataFileObj.save_raw_eye_taskdata(data_recv_ts,
                                              0,
                                              0,
                                              0,
                                              0,
                                              task_data=data)

        return
Exemplo n.º 5
0
    def receiver(self):
        '''
        Receiver loop to check the incoming packets
        :return:
        '''
        # globls.dump_log("Running Matlab thread")
        globls.dump_log('Listening to 3rd party messages')
        while globls.is_program_running:
            try:
                bin_data, addr = globls.arbitrator_sock.recvfrom(
                    globls.constant['data_size_length'])
                data = bin_data.decode()
                data_recv_ts = time.time()

                # process the variables
                if len(data):
                    # Check if there is any delimiter in the message '/' if yes then split
                    cmd_lists = data.split(
                        globls.constant['message_delimiter'])

                    # Data before / is valid data read and remove the space
                    cmd_list = cmd_lists[0].split()

                    if int(cmd_list[0]) == Constant.COMMAND_WORD_CONNECTION:
                        if int(cmd_list[1]) == Constant.CONNECTION_START:

                            # send the UDP packet to initiate the connection
                            data = '{} {}/{} {}/{} {}/{} {}/{} {}/'.format(
                                Constant.COMMAND_WORD_CONNECTION,
                                Constant.CONNECTION_ACK, const.SCREEN_HEIGHT,
                                globls.arbitrator_display['screen_height_mm'],
                                const.SCREEN_DISTANCE, globls.
                                arbitrator_display['screen_distance_mm'],
                                const.SCREEN_WIDTH,
                                globls.arbitrator_display['screen_width_mm'],
                                const.SCREEN_IOD,
                                globls.arbitrator_display['iod_mm'])
                            util.send_data(globls.arbitrator_sock,
                                           globls.arbitrator_sock_addr, data,
                                           'Connection Ack Message')
                            globls.update_load_subject_task_config_flag(True)
                        elif int(cmd_list[1]) == Constant.CONNECTION_ACK:
                            globls.connection_state = Constant.CONNECTION_ACK
                            # Update this flag to ensure that the user knows what is the next step after connection is up
                            globls.update_load_subject_task_config_flag(True)

                            # util.send_screen_parameters()
                            # print cmd_list
                    elif int(cmd_list[0]) == Constant.DISPLAY_COMMAND_WORD:

                        config = [int(cmd_list[1]), cmd_list[2]]
                        # print(config)
                        globls.update_displayable_config(config)

                    # Process the exit call
                    elif (int(cmd_list[0]) == Constant.COMMAND_WORD_CONTROL
                          and int(cmd_list[1]) == Constant.CONTROL_EXIT):
                        print('breaking code (arbitrator_server: line 99)')
                        break

                    elif int(cmd_list[0]) == Constant.EYE_IN_OUT_REQUEST:

                        eye_in_out = copy.copy(globls.eye_in_or_out)

                        # if (eye_in_out[0] != globls.last_sent_eye_in_out[0]
                        #     or eye_in_out[1] != globls.last_sent_eye_in_out[1]):
                        # '{LEye_Status} {in/out}
                        # {LEye_X_gain} {LEye_X_offset}
                        # {LEye_Y_gain} {LEye_Y_offset}/...
                        # {REye_Status} {in/out}
                        # {REye_X_gain} {REye_X_offset}
                        # {REye_Y_gain} {REye_Y_offset}/'
                        data = '{} {} {} {} {} {}/{} {} {} {} {} {}/'.format(
                            Constant.LEFT_EYE_STATUS,
                            globls.eye_in_or_out[0],
                            globls.offset_gain_config[
                                ConfigLabels.LEFT_EYE_GAIN_X],
                            globls.offset_gain_config[
                                ConfigLabels.LEFT_EYE_OFFSET_X],
                            globls.offset_gain_config[
                                ConfigLabels.LEFT_EYE_GAIN_Y],
                            globls.offset_gain_config[
                                ConfigLabels.LEFT_EYE_OFFSET_Y],
                            Constant.RIGHT_EYE_STATUS,
                            globls.eye_in_or_out[1],
                            globls.offset_gain_config[
                                ConfigLabels.RIGHT_EYE_GAIN_X],
                            globls.offset_gain_config[
                                ConfigLabels.RIGHT_EYE_OFFSET_X],
                            globls.offset_gain_config[
                                ConfigLabels.RIGHT_EYE_GAIN_Y],
                            globls.offset_gain_config[
                                ConfigLabels.RIGHT_EYE_OFFSET_Y],
                        )

                        # if (eye_in_out[0] != globls.last_sent_eye_in_out[0]
                        #     or eye_in_out[1] != globls.last_sent_eye_in_out[1]):
                        # data = '{} {}/{} {}/'.format(Constant.LEFT_EYE_STATUS, globls.eye_in_or_out[0],
                        #                             Constant.RIGHT_EYE_STATUS, globls.eye_in_or_out[1])
                        util.send_data(globls.arbitrator_sock_eye,
                                       globls.arbitrator_sock_addr_eye, data)
                        # print "EYE in or out ", data

                        globls.update_last_sent_eye_in_out(eye_in_out)

                    elif int(cmd_list[0]
                             ) == Constant.LATCHED_EYE_IN_OUT_REQUEST:
                        globls.latched_eye = 1
                        globls.caught = 0  # if just starting latched eye request, couldn't have caught eye out!
                        globls.dump_log('Initiating latched eye request')

                    elif int(cmd_list[0]) == Constant.END_LATCHED_EYE:
                        globls.latched_eye = 0
                        globls.caught = 0  # matlab finally caught your message about version violation
                        globls.dump_log('Ending latched eye request')

                    elif int(cmd_list[0]) == Constant.VERGENCE_REQUEST:
                        points = list(map(float, cmd_list[1:6]))

                        value = self.eye_check.vergence_error(points)
                        # if value != globls.last_vergence_error_sent:
                        data = '{} {}/'.format(Constant.VERGENCE_STATUS, value)
                        util.send_data(globls.arbitrator_sock_eye,
                                       globls.arbitrator_sock_addr_eye, data)
                        # print "Vergence error ", data
                        globls.update_last_sent_vergence_error(value)

                    elif int(cmd_list[0]) == Constant.SCREEN_WINDOW_WIDTH:
                        globls.update_arbitrator_server_screen_resolution(
                            width=int(cmd_list[1]))
                        globls.dump_log(
                            'Received the screen width and scale factor to display on GUI: {}'
                            .format(
                                globls.arbitrator_display['x_scale_factor']))

                    elif int(cmd_list[0]) == Constant.SCREEN_WINDOW_HEIGHT:
                        globls.update_arbitrator_server_screen_resolution(
                            height=int(cmd_list[1]))
                        globls.dump_log(
                            'Received the screen Height and scale factor to display on GUI: {}'
                            .format(
                                globls.arbitrator_display['y_scale_factor']))

                    elif int(cmd_list[0]) == Constant.CENTRE_OF_WINDOWS:
                        # print cmd_list
                        # 100 number list of X Y Z diameter
                        # Maximum 30 points
                        no_of_points = int(cmd_list[1])
                        config = []
                        lst = cmd_list[2:]
                        # pair the data and give it to UI for updation
                        for i in range(0, len(lst), 6):
                            config.append([
                                float(lst[i]),
                                float(lst[i + 1]),
                                float(lst[i + 2]),
                                float(lst[i + 3]), lst[i + 4], lst[i + 5]
                            ])

                            if len(config
                                   ) == Constant.MAXIMUM_CENTRE_OF_WINDOW:
                                break
                        globls.dump_log('Points to draw {}'.format(cmd_list))
                        globls.update_centre_point(no_of_points, config)

                    elif int(cmd_list[0]) == Constant.WINDOW_ON:
                        # print cmd_list
                        globls.update_centre_window_on_off(True)
                        globls.dump_log('Window On')

                    elif int(cmd_list[0]) == Constant.WINDOW_OFF:
                        # print cmd_list
                        globls.update_centre_window_on_off(False)
                        globls.dump_log('Window Off')
                        # Reset this to -1, -1 so that next time this is queried from
                        # Arbitrator server new values are sent
                        globls.update_last_sent_eye_in_out([-1, -1])
                    elif int(cmd_list[0]) == Constant.REWARD_ON:
                        # print cmd_list
                        self.DIO_obj.write_digital_bit(1)
                        #self.DIO_obj.reward_on()
                        globls.dump_log('Reward On')
                    elif int(cmd_list[0]) == Constant.REWARD_OFF:
                        # print cmd_list
                        self.DIO_obj.write_digital_bit(0)
                        #self.DIO_obj.reward_off()
                        globls.dump_log('Reward Off')
                    elif int(cmd_list[0]) == Constant.VERGENCE_ON:
                        # print cmd_list
                        globls.udpdate_vergence_display(True)
                        globls.dump_log('Vergence On')

                    elif int(cmd_list[0]) == Constant.VERGENCE_OFF:
                        # print cmd_list
                        globls.udpdate_vergence_display(False)
                        globls.dump_log('Vergence Off')
                        # Reset this to -1 so that next time this is queried from
                        # Arbitrator server new values are sent
                        globls.update_last_sent_vergence_error(-1)

                    elif int(cmd_list[0]) == Constant.DRAW_EVENTS:
                        tempnum = len(cmd_lists) - 1
                        globls.update_drawing_object_on(1)
                        globls.update_drawing_object_number(tempnum)

                        for i in range(0, tempnum):
                            templist = cmd_lists[i].split()

                            if i == 0:
                                tempx = float(templist[2])
                                tempy = float(templist[3])
                                if tempx == -1 and tempy == -1:
                                    if not globls.Shocked:
                                        globls.shock_on()
                                        data_str = '6 201 /'
                                        temp_data = data_str + """{}""".format(
                                            'q' *
                                            (1024 - len(data_str.encode())))
                                        DataFileObj.save_raw_eye_taskdata(
                                            data_recv_ts,
                                            0,
                                            0,
                                            0,
                                            0,
                                            task_data=temp_data)
                                        globls.update_shock_flag(1)
                                else:
                                    # globls.prt.setData(0)
                                    if not globls.ManualShock:
                                        if globls.Shocked:
                                            globls.shock_off()
                                            data_str = '6 200 /'
                                            temp_data = data_str + """{}""".format(
                                                'q' * (1024 -
                                                       len(data_str.encode())))
                                            globls.update_shock_flag(0)
                                            DataFileObj.save_raw_eye_taskdata(
                                                data_recv_ts,
                                                0,
                                                0,
                                                0,
                                                0,
                                                task_data=temp_data)
                            else:
                                tempx = float(templist[1])
                                tempy = float(templist[2])
                            globls.update_drawing_object_pos(i, 0, tempx)
                            globls.update_drawing_object_pos(i, 1, tempy)

                    elif int(cmd_list[0]) == Constant.EVENTS:
                        globls.dump_log('event {}'.format(cmd_list))
                        if not globls.DUMP_DATA_CONTINUALLY:
                            if int(cmd_list[1]) == Constant.EVENT_START:
                                # Start the data save
                                DataFileObj.update_data_collect_flag(True)

                                # Dump auto offset data
                                globls.auto_offset_dump_data = 1
                                # Make sure primer and flag is still off
                                globls.auto_offset_update_primer = 0
                                globls.auto_offset_update_flag = 0

                            elif int(cmd_list[1]) == Constant.EVENT_STOP:
                                # This needs to be saved here as we dump the saved data to file
                                # And data collection falg will be reset
                                DataFileObj.save_raw_eye_taskdata(
                                    data_recv_ts,
                                    globls.last_raw_eye_data[0],
                                    globls.last_raw_eye_data[1],
                                    globls.last_raw_eye_data[2],
                                    globls.last_raw_eye_data[3],
                                    task_data=data)

                                # Stop saving the data and dump tp file
                                # Flag to stop saving the data is set inside this function
                                DataFileObj.dump_data_to_file()
                                globls.update_last_sent_vergence_error(-1)
                                globls.update_last_sent_eye_in_out([-1, -1])

                                # Dump auto offset data
                                globls.auto_offset_dump_data = 1
                                # Set update flag so offsets can now be changed
                                globls.auto_offset_update_flag = 1

                            # Check for fixation acquired and hold time acquired to start/stop auto eye offset
                            elif int(
                                    cmd_list[1]) == Constant.FIXATION_ACQUIRED:
                                # Set "stop data collection" flag to false
                                globls.auto_offset_stop_collect = 0
                                # Set "start data collection" flag to true
                                globls.auto_offset_start_collect = 1
                                # Make sure primer is still off
                                globls.auto_offset_update_primer = 0

                            elif int(cmd_list[1]
                                     ) == Constant.FIXATION_HOLD_COMPLETE:
                                # Set "start data collection" flag to false
                                globls.auto_offset_start_collect = 0
                                # Set "stop data collection" flag to true
                                globls.auto_offset_stop_collect = 1

                            elif int(cmd_list[1]
                                     ) == Constant.SACCADE_TARGET_ACQUIRED:
                                # Set primer flag to update offsets after this trial is over
                                globls.auto_offset_update_primer = 1

# Save the data from 3rd party server
                    DataFileObj.save_raw_eye_taskdata(
                        data_recv_ts,
                        globls.last_raw_eye_data[0],
                        globls.last_raw_eye_data[1],
                        globls.last_raw_eye_data[2],
                        globls.last_raw_eye_data[3],
                        task_data=data)

                    # # Save the data from 3rd party server
                    # if globls.DUMP_DATA_CONTINUALLY:
                    #     DataFileObj.dump_data_continually(data_recv_ts, data)
            # except socket.timeout:
            #     pass

            except Exception as e:
                log.exception(e)

        globls.arbitrator_sock.close()
        print('globls.arbitrator_sock was closed (arbitrator_serve: line 290)')
Exemplo n.º 6
0
 def button_4_callback(self):
     globls.dump_log(
         'Add a custom button function in button_funs.py for the correct button callback!'
     )
     return
Exemplo n.º 7
0
 def total_data_dumped_to_file(self):
     globls.dump_log('Total data written to file is {}'.format(
         self.total_records))
Exemplo n.º 8
0
    def digital_reader(self):
        pylink = importlib.import_module('pylink')
        '''
        Read the eye data from eyelink
        :return:
        '''
        try:
            self.EyeTrack = pylink.EyeLink(
                globls.config_param['eyelink_service']['ip'])
            self.EyeTrack.sendCommand(
                "link_sample_data = LEFT,RIGHT,GAZE,AREA")
            self.EyeTrack.startRecording(0, 0, 1, 1)
            globls.dump_log("Initiated digital eye data reader")

            last_read_eye_time = 0

            while globls.is_program_running:
                # Sleep for 1 ms
                time.sleep(.001)

                dt = self.EyeTrack.getNewestSample(
                )  # check for new sample update
                eye_recv_data_ts = time.time()
                if dt is not None:
                    cur_eye_time = dt.getTime()
                    if float(cur_eye_time) != float(last_read_eye_time):
                        eye_closed = False
                        lx = ly = rx = ry = 0

                        if dt.getRightEye() and dt.getLeftEye():
                            lx, ly = dt.getLeftEye().getGaze()
                            rx, ry = dt.getRightEye().getGaze()
                        elif dt.getRightEye() and not dt.getLeftEye():
                            rx, ry = dt.getRightEye().getGaze()
                            lx, ly = rx, ry
                        elif dt.getLeftEye() and not dt.getRightEye():
                            lx, ly = dt.getLeftEye().getGaze()
                            rx, ry = lx, ly

                        pupilsize_left = dt.getLeftEye().getPupilSize()
                        pupilsize_right = dt.getRightEye().getPupilSize()

                        # # Do not update values if eye is closed or if eye is not avaialble
                        # if (pupilsize_left < globls.pupil_size['left'] or
                        #             pupilsize_right > globls.pupil_size['right']):
                        #     eye_closed = True
                        # print pupilsize_left, globls.pupil_size['right']

                        # convert this to coordinate (0, 0) at center
                        eyepos_lx, eyepos_ly = util.shift_to_centre(lx, ly)
                        eyepos_lx, eyepos_ly = util.convert_pix_to_mm(
                            eyepos_lx, eyepos_ly)

                        # convert this to coordinate (0, 0) at center
                        eyepos_rx, eyepos_ry = util.shift_to_centre(rx, ry)
                        eyepos_rx, eyepos_ry = util.convert_pix_to_mm(
                            eyepos_rx, eyepos_ry)

                        # Write eye data to list storing left and right X, Y and Z data
                        # data that we get from eyelink has only left and right eye
                        globls.update_last_raw_eye_data(
                            eyepos_lx, eyepos_ly, eyepos_rx, eyepos_ry)
                        DataFileObj.save_raw_eye_taskdata(
                            eye_recv_data_ts, eyepos_lx, eyepos_ly, eyepos_rx,
                            eyepos_ry)

                        # Get the mean of the raw eye data and later apply offset gain for the mean data
                        left_mean_x, left_mean_y, right_mean_x, right_mean_y = \
                            self.update_getmean_eye_sample(eyepos_lx, eyepos_ly,
                                                           eyepos_rx, eyepos_ry, eye_closed)

                        # apply offset and gain
                        left_og_x, left_og_y, right_og_x, right_og_y = \
                            self.get_offset_gain_applied_eye_data(left_mean_x, left_mean_y, right_mean_x,
                                                                              right_mean_y)

                        # update the offset and gain applied for drawing eye on canvas
                        globls.update_offset_gain_applied_eye_data(
                            left_og_x, left_og_y, right_og_x, right_og_y)

                        # If eye closed, then do not check eye in out or vergence error
                        if eye_closed:
                            return

                        # Validate the eye is in or out depending on the task
                        self.eye_check.eye_in_out()

                        # print "Eye position ", eyepos_lx, left_mean_x, left_og_x

                    last_read_eye_time = cur_eye_time
        except Exception as e:
            log.exception(e)
            globls.dump_log(
                'Exception reading eye link data from eyelink tracker {}'.
                format(e))
Exemplo n.º 9
0
    def analog_reader(self):
        analog_module = importlib.import_module('analog')
        analog = getattr(module, 'Analog')
        '''
        Read the eye data from Analog device
        :return:
        '''
        try:
            globls.dump_log("Initiated Analog eye data reader")
            self.analog_reader_obj = analog()
            while globls.is_program_running:
                time.sleep(.001)
                eye_closed = False

                pupilsize_left, pupilsize_right = 2000, 2000
                temp_eye_data = []

                temp_eye_pos_channel_data = globls.eye_recording_method_obj.get_eye_positions_channel(
                )
                for channel in temp_eye_pos_channel_data:
                    temp_eye_data.append(
                        self.analog_reader_obj.get_channel_analog_value(
                            int(channel)))
                eye_recv_data_ts = time.time()

                eyepos_lx, eyepos_ly = temp_eye_data[0], temp_eye_data[1]
                eyepos_rx, eyepos_ry = temp_eye_data[0], temp_eye_data[1]

                # Do not update values if eye is closed or if eye is not avaialble
                if (pupilsize_left < globls.pupil_size['left']
                        or pupilsize_right < globls.pupil_size['right']):
                    eye_closed = True

                # Write eye data to list storing left and right X, Y and Z data
                # data that we get from eyelink has only left and right eye
                globls.update_last_raw_eye_data(eyepos_lx, eyepos_ly,
                                                eyepos_rx, eyepos_ry)
                DataFileObj.save_raw_eye_taskdata(eye_recv_data_ts, eyepos_lx,
                                                  eyepos_ly, eyepos_rx,
                                                  eyepos_ry)

                # Get the mean of the raw eye data and later apply offset gain for the mean data
                left_mean_x, left_mean_y, right_mean_x, right_mean_y = \
                    self.update_getmean_eye_sample(eyepos_lx, eyepos_ly,
                                                   eyepos_rx, eyepos_ry, eye_closed)

                # apply offset and gain
                left_og_x, left_og_y, right_og_x, right_og_y = \
                    self.get_offset_gain_applied_eye_data(left_mean_x, left_mean_y, right_mean_x,
                                                                      right_mean_y)

                globls.update_offset_gain_applied_eye_data(
                    left_og_x, left_og_y, right_og_x, right_og_y)

                # If eye closed, then do not check eye in out
                if eye_closed:
                    return

                # Validate the eye is in or out depending on the task
                self.eye_check.eye_in_out()

        except Exception as e:
            log.exception(e)
    def receiver(self):
        '''
        Receiver loop to check the incoming packets
        :return:
        '''
        # globls.dump_log("Running Matlab thread")
        globls.dump_log('Listening to 3rd party messages')
        while globls.is_program_running:
            try:
                data, addr = globls.arbitrator_sock.recvfrom(globls.constant['data_size_length'])
                data_recv_ts = time.time()

                # process the variables
                if len(data):
                    # Check if there is any delimiter in the message '/' if yes then split
                    cmd_lists = data.split(globls.constant['message_delimiter'])

                    # Data before / is valid data read and remove the space
                    cmd_list = cmd_lists[0].split()

                    if int(cmd_list[0]) == Constant.COMMAND_WORD_CONNECTION:
                        if int(cmd_list[1]) == Constant.CONNECTION_START:

                            # send the UDP packet to initiate the connection
                            data = '{} {}/{} {}/{} {}/{} {}/{} {}/'.format(Constant.COMMAND_WORD_CONNECTION,
                                                                           Constant.CONNECTION_ACK,
                                                                           const.SCREEN_HEIGHT,
                                                                           globls.arbitrator_display[
                                                                               'screen_height_mm'],
                                                                           const.SCREEN_DISTANCE,
                                                                           globls.arbitrator_display[
                                                                               'screen_distance_mm'],
                                                                           const.SCREEN_WIDTH,
                                                                           globls.arbitrator_display['screen_width_mm'],
                                                                           const.SCREEN_IOD,
                                                                           globls.arbitrator_display['iod_mm'])
                            util.send_data(globls.arbitrator_sock, globls.arbitrator_sock_addr, data,
                                           'Connection Ack Message')
                            globls.update_load_subject_task_config_flag(True)
                        elif int(cmd_list[1]) == Constant.CONNECTION_ACK:
                            globls.connection_state = Constant.CONNECTION_ACK
                            # Update this flag to ensure that the user knows what is the next step after connection is up
                            globls.update_load_subject_task_config_flag(True)

                            # util.send_screen_parameters()
                            # print cmd_list
                    elif int(cmd_list[0]) == Constant.DISPLAY_COMMAND_WORD:
                        config = [int(cmd_list[1]), cmd_list[2]]
                        globls.update_displayable_config(config)

                    # Process the exit call
                    elif (int(cmd_list[0]) == Constant.COMMAND_WORD_CONTROL and
                                  int(cmd_list[1]) == Constant.CONTROL_EXIT):
                        break

                    elif int(cmd_list[0]) == Constant.EYE_IN_OUT_REQUEST:

                        eye_in_out = copy.copy(globls.eye_in_or_out)

                        # if (eye_in_out[0] != globls.last_sent_eye_in_out[0]
                        #     or eye_in_out[1] != globls.last_sent_eye_in_out[1]):
                        data = '{} {}/{} {}/'.format(Constant.LEFT_EYE_STATUS, globls.eye_in_or_out[0],
                                                     Constant.RIGHT_EYE_STATUS, globls.eye_in_or_out[1])
                        util.send_data(globls.arbitrator_sock_eye, globls.arbitrator_sock_addr_eye, data)
                        # print "EYE in or out ", data

                        globls.update_last_sent_eye_in_out(eye_in_out)

                    elif int(cmd_list[0]) == Constant.VERGENCE_REQUEST:
                        points = map(float, cmd_list[1:6])

                        value = self.eye_check.vergence_error(points)
                        # if value != globls.last_vergence_error_sent:
                        data = '{} {}/'.format(Constant.VERGENCE_STATUS, value)
                        util.send_data(globls.arbitrator_sock_eye, globls.arbitrator_sock_addr_eye, data)
                        # print "Vergence error ", data
                        globls.update_last_sent_vergence_error(value)

                    elif int(cmd_list[0]) == Constant.SCREEN_WINDOW_WIDTH:
                        globls.update_arbitrator_server_screen_resolution(width=int(cmd_list[1]))
                        globls.dump_log('Received the screen width and scale factor to display on GUI: {}'.
                                        format(globls.arbitrator_display['x_scale_factor']))

                    elif int(cmd_list[0]) == Constant.SCREEN_WINDOW_HEIGHT:
                        globls.update_arbitrator_server_screen_resolution(height=int(cmd_list[1]))
                        globls.dump_log('Received the screen Height and scale factor to display on GUI: {}'.
                                        format(globls.arbitrator_display['y_scale_factor']))

                    elif int(cmd_list[0]) == Constant.CENTRE_OF_WINDOWS:
                        # print cmd_list
                        # 100 number list of X Y Z diameter
                        # Maximum 30 points
                        no_of_points = int(cmd_list[1])
                        config = []
                        lst = cmd_list[2:]
                        # pair the data and give it to UI for updation
                        for i in range(0, len(lst), 6):
                            config.append([float(lst[i]), float(lst[i + 1]), float(lst[i + 2]),
                                           float(lst[i + 3]), lst[i + 4], lst[i + 5]])

                            if len(config) == Constant.MAXIMUM_CENTRE_OF_WINDOW:
                                break
                        globls.dump_log('Points to draw {}'.format(cmd_list))
                        globls.update_centre_point(no_of_points, config)

                    elif int(cmd_list[0]) == Constant.WINDOW_ON:
                        # print cmd_list
                        globls.update_centre_window_on_off(True)
                        globls.dump_log('Window On')

                    elif int(cmd_list[0]) == Constant.WINDOW_OFF:
                        # print cmd_list
                        globls.update_centre_window_on_off(False)
                        globls.dump_log('Window Off')
                        # Reset this to -1, -1 so that next time this is queried from
                        # Arbitrator server new values are sent
                        globls.update_last_sent_eye_in_out([-1, -1])
                    # elif int(cmd_list[0]) == Constant.REWARD_ON:
                    #     # print cmd_list
                    #     self.DIO_obj.write_digital_bit(1)
                    #     #self.DIO_obj.reward_on()
                    #     globls.dump_log('Reward On')
                    # elif int(cmd_list[0]) == Constant.REWARD_OFF:
                    #     # print cmd_list
                    #     self.DIO_obj.write_digital_bit(0)
                    #     #self.DIO_obj.reward_off()
                    #     globls.dump_log('Reward Off')
                    elif int(cmd_list[0]) == Constant.VERGENCE_ON:
                        # print cmd_list
                        globls.udpdate_vergence_display(True)
                        globls.dump_log('Vergence On')

                    elif int(cmd_list[0]) == Constant.VERGENCE_OFF:
                        # print cmd_list
                        globls.udpdate_vergence_display(False)
                        globls.dump_log('Vergence Off')
                        # Reset this to -1 so that next time this is queried from
                        # Arbitrator server new values are sent
                        globls.update_last_sent_vergence_error(-1)

                    elif int(cmd_list[0]) == Constant.DRAW_EVENTS:
                        tempnum = len(cmd_lists)-1
                        globls.update_drawing_object_on(1)
                        globls.update_drawing_object_number(tempnum)

                        for i in range(0, tempnum):
                            templist = cmd_lists[i].split()
                            if i == 0:
                                tempx = float(templist[2])
                                tempy = float(templist[3])

                                data_str = '6 9 /'
                                temp_data = data_str+"""{}""".format('q'*( 1024 - len(data_str.encode())))
                                DataFileObj.save_raw_eye_taskdata(data_recv_ts, 0,0,0,0, task_data=temp_data)

                            else:
                                tempx = float(templist[1])
                                tempy = float(templist[2])
                            globls.update_drawing_object_pos(i, 0, tempx)
                            globls.update_drawing_object_pos(i, 1, tempy)


                    # elif int(cmd_list[0]) == Constant.EVENTS:
                    #     globls.dump_log('event {}'.format(cmd_list))
                    #     if not globls.DUMP_DATA_CONTINUALLY:
                    #         if int(cmd_list[1]) == Constant.EVENT_START:
                    #             # Start the data save
                    #             DataFileObj.update_data_collect_flag(True)
                    #
                    #         elif int(cmd_list[1]) == Constant.EVENT_STOP:
                    #             # This needs to be saved here as we dump the saved data to file
                    #             # And data collection falg will be reset
                    #             DataFileObj.save_raw_eye_taskdata(
                    #                 data_recv_ts,
                    #                 globls.last_raw_eye_data[0], globls.last_raw_eye_data[1],
                    #                 globls.last_raw_eye_data[2], globls.last_raw_eye_data[3],
                    #                 task_data=data)
                    #
                    #             # Stop saving the data and dump tp file
                    #             # Flag to stop saving the data is set inside this function
                    #             DataFileObj.dump_data_to_file()
                    #             globls.update_last_sent_vergence_error(-1)
                    #             globls.update_last_sent_eye_in_out([-1, -1])

                    # Save the data from 3rd party server
                    if globls.DUMP_DATA_CONTINUALLY:
                        DataFileObj.dump_data_continually(data_recv_ts, data)
            # except socket.timeout:
            #     pass
            except Exception as e:
                log.exception(e)
        globls.arbitrator_sock.close()