Esempio n. 1
0
def handler(signum, frame):
    end_time = datetime.datetime.now()
    global running
    running = False
    print(
        '\n--------------------------------------\nProgram ended with signal %d \n--------------------------------------'
        % signum)
    print("Resetting devices")
    events = []
    for s in states:
        try:
            e = Event()
            events.append(e)
            s.device.on_disconnect = lambda s: e.set()
            libmetawear.mbl_mw_debug_reset(s.device.board)
        except:
            print(s.device.address + "Disconnected")
            pass
    for e in events:
        try:
            e.wait()
        except:
            pass
    for s in states:
        print("Total Samples Received %s->%d" % (s.device.address, s.samples))
    time_data_collect = (end_time - data_start_time).total_seconds()
    print("Total Time of Data Collection %fs" % time_data_collect)
    sys.exit()
Esempio n. 2
0
def setup_dc_event(device):

    # Setup disconnect event to blink the blue led 10x when fired
    dc_event = libmetawear.mbl_mw_settings_get_disconnect_event(device.board)
    libmetawear.mbl_mw_event_record_commands(dc_event)
    #libmetawear.mbl_mw_led_write_pattern(device.board, byref(pattern), LedColor.BLUE)
    #libmetawear.mbl_mw_led_play(device.board)
    libmetawear.mbl_mw_debug_reset(device.board)
    libmetawear.mbl_mw_event_end_record(dc_event, getStatusFn_handler_fn)
        received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))

    def data_handler(p):
        global read_count
        read_count += 2
        #print("{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p)))

    callback = FnVoid_VoidP_DataP(lambda ctx, p: data_handler(p))

    print("Subscribe to logger")
    libmetawear.mbl_mw_logger_subscribe(logger, None, callback)

    print("Download data")
    dl_time = time.time()
    libmetawear.mbl_mw_logging_download(d.board, 0, byref(download_handler))
    e.wait()
    dl_time = time.time() - dl_time
    print("Entry Read Count: %d" % (read_count))
    print("Entry Read Rate: %0.1f entries/s" % (read_count / dl_time))

except RuntimeError as err:
    print(err)
finally:
    print("Resetting device")

    e = Event()
    d.on_disconnect = lambda status: e.set()
    print("Debug reset")
    libmetawear.mbl_mw_debug_reset(d.board)
    e.wait()
Esempio n. 4
0
def startTracking(self, macAddress, location, patientID, led_on, target_angle):
    path_MAC = macAddress.replace(":", "-")
    m = Mobitrack()
    m.data_folder = os.path.join(
        Path(os.path.dirname(__file__)).parents[2], "data")
    m.patientID = patientID
    m.wearLocation = location

    minROM_slack = 5
    m.minROM = target_angle - minROM_slack
    m.minROM_raw = target_angle
    if m.minROM <= 5.:
        min.ROM = 5.
    if m.minROM >= 120.:
        min.ROM = 120.
    device = MetaWear(macAddress)
    state = State(device, m)
    state.led = led_on

    try:
        # Create lock file
        lock_folder = os.path.join(
            Path(os.path.dirname(__file__)).parents[2], "lock")
        if not os.path.exists(lock_folder):
            os.mkdir(lock_folder)
        lock_file = os.path.join(lock_folder, path_MAC + "_lock.txt")
        if os.path.isfile(lock_file):
            raise ValueError('Device %s already in use' % (macAddress))

        # Connect to device
        self.update_state(state='CONNECTING')
        print("Connecting to " + macAddress)
        device.connect()

        print("Configuring %s" % (macAddress))
        state.setup()

        print("Connected to " + macAddress)
        self.update_state(state='CONNECTED')

        # Create lock file
        if not os.path.isfile(lock_file):
            with open(lock_file, 'x'):
                os.utime(lock_file, None)

        print('Starting wearing session for patient %s on device %s' %
              (patientID, macAddress))
        state.start()

        while (os.path.isfile(lock_file)):
            pass

        self.update_state(state='DISCONNECTING')
        print("Disconnecting device")

        state.stop()

        event = Event()
        state.device.on_disconnect = lambda s: event.set()
        libmetawear.mbl_mw_debug_reset(state.device.board)
        event.wait()

        m.endSession()
        m.writeData()
        m.plotDataAccel()
        m.plotDataGyro()
        m.plotRawData()
        m.plotSmoothData()

        self.update_state(state='DISCONNECTED')
        print("Disconnected")
    except (Exception, ArithmeticError) as e:
        template = "An exception of type {0} occurred. Arguments:\n{1!r}"
        message = template.format(type(e).__name__, e.args)
        print(message)
        print("Exception occured: ")

        self.update_state(state='DISCONNECTING')
        state.stop()

        print("Disconnecting device")
        event = Event()

        state.device.on_disconnect = lambda s: event.set()
        libmetawear.mbl_mw_debug_reset(state.device.board)
        event.wait()

        stopTracking(macAddress)

        self.update_state(state='DISCONNECTED')
        print("Disconnected")
    return 1
Esempio n. 5
0
        libmetawear.mbl_mw_gyro_bmi160_start(self.device.board)
        libmetawear.mbl_mw_acc_start(self.device.board)


for i in range(len(argv) - 1):
    d = MetaWear(argv[i + 1])
    d.connect()
    print("Connected to " + d.address)
    states.append(State(d))

for s in states:
    print("Configuring %s" % (s.device.address))
    s.setup()

for s in states:
    s.start()

sleep(10.0)

print("Resetting devices")
events = []
for s in states:
    e = Event()
    events.append(e)

    s.device.on_disconnect = lambda s: e.set()
    libmetawear.mbl_mw_debug_reset(s.device.board)

for e in events:
    e.wait()
    ax2.set_ylabel('angular velocity (degree/s)')

    #sliding window
    ax2.set_xlim(left=max(0, len(gyroX) - 400), right=len(gyroX) + 1)


fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

ani = FuncAnimation(
    fig, animate, interval=20)  #change the interval if it doesn't run smoothly

#full screen
figManager = plt.get_current_fig_manager()
figManager.full_screen_toggle()

plt.show()

print("Resetting devices")
events = []
for s in states:
    e = Event()
    events.append(e)

    s.device.on_disconnect = lambda s: e.set(
    )  #Register a handler for disconnect events
    libmetawear.mbl_mw_debug_reset(s.device.board)  #Issues a soft reset

for e in events:
    e.wait()
 def reset_device(self):
     libmetawear.mbl_mw_debug_reset(self.device.board)
     logging.info('device reset')
Esempio n. 8
0
 def __exit__(self, type, value, traceback):
     libmetawear.mbl_mw_debug_reset(self.device.board)
Esempio n. 9
0
def mobitrack_connect(e):
    global mobitrack_status
    global states
    global sensor_data
    last_mobitrack_status = False
    logging.debug('Connecting to Mobitrack...')

    while (True):
        # starting session
        if (last_mobitrack_status == False and mobitrack_status == True):
            logging.debug('Starting Mobitrack Session...')

            d = MetaWear("F7:83:98:15:21:07")
            d.connect()
            print("Connected to " + d.address)
            states.append(State(d))

            for s in states:
                print("Configuring %s" % (s.device.address))
                s.setup()

            for s in states:
                s.start()

        # during session
        # while(mobitrack_status):
        # logging.debug('processStep()')
        # last_mobitrack_status = True
        # time.sleep(0.5)

        # end session
        if (last_mobitrack_status == True and mobitrack_status == False):
            logging.debug('endSession()')
            m.endSession()
            m.plotData()
            m.clear()
            print("Resetting devices")
            events = []
            for s in states:
                e = Event()
                events.append(e)

                s.device.on_disconnect = lambda s: e.set()
                libmetawear.mbl_mw_debug_reset(s.device.board)

            for e in events:
                e.wait()

            if not os.path.exists(data_folder_name):
                os.mkdir(data_folder_name)
                print("Directory ", data_folder_name, " created ")
            else:
                print("Directory ", data_folder_name, " already exists")

            #print(sensor_data)
            # Log data to file
            with open(os.path.join(data_folder_name, 'data_' + filename),
                      'w') as f:
                print(filename)
                f.write(
                    'timestamp, accel_x, accel_y, accel_z, gyro_x, gyro_y, gyro_z\n'
                )
                f.write('\n'.join(sensor_data))

        last_mobitrack_status = mobitrack_status
        time.sleep(0.5)