Beispiel #1
0
    def download_data(self):
        libmetawear.mbl_mw_timer_remove(self.timer)
        libmetawear.mbl_mw_logging_stop(self.device.board)

        e = Event()
        def progress_update_handler(context, entries_left, total_entries):
            if (entries_left == 0):
                e.set()
        
        fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
        download_handler= LogDownloadHandler(context = None, \
            received_progress_update = fn_wrapper, \
            received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
            received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))

        callback = FnVoid_VoidP_DataP(lambda ctx, p: print("%f" % (parse_value(p))))
        libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback)
        libmetawear.mbl_mw_logging_download(self.device.board, 0, byref(download_handler))
        e.wait()
    def download_data(self, name='blank'):
        try:
            libmetawear.mbl_mw_settings_set_connection_parameters(
                self.device.board, 7.5, 7.5, 0, 6000)
            time.sleep(1.0)

            e = Event()

            def progress_update_handler(context, entries_left, total_entries):
                if (entries_left == 0):
                    e.set()

            fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
            download_handler = LogDownloadHandler(context = None, \
                received_progress_update = fn_wrapper, \
                received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
                received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))

            # print('Opening log file to write')
            f = open(name + self.default_name, 'a')

            callback = FnVoid_VoidP_DataP(lambda ctx, p: print(
                "{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p)),
                file=f))
            libmetawear.mbl_mw_logger_subscribe(self.logger, None, callback)
            libmetawear.mbl_mw_logging_download(self.device.board, 0,
                                                byref(download_handler))
            e.wait()

            # close the file, process the data into a csv, then delete the original file
            f.close()
            self.process_data(name)
            # os.remove(name + self.default_name)
            logging.info('data downloaded')

            return 1

        except RuntimeError as err:
            print(err)
            logging.info('runtime error in download_data() occurred')
            return 0
    fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
    download_handler = LogDownloadHandler(context = None, \
        received_progress_update = fn_wrapper, \
        received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
        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()
for s in states:
    # setup logging and acc
    print("Stop")
    libmetawear.mbl_mw_acc_stop(s.device.board)
    libmetawear.mbl_mw_acc_disable_acceleration_sampling(s.device.board)
    libmetawear.mbl_mw_acc_bosch_disable_motion_detection(s.device.board)
    libmetawear.mbl_mw_acc_bosch_stop(s.device.board)
    libmetawear.mbl_mw_logging_stop(s.device.board)

    # wait 1s
    print("Downloading data")
    sleep(1.0)

    # download handlers
    s.events["download"].clear()
    def progress_update_handler(context, entries_left, total_entries):
        if (entries_left == 0):
            s.events["download"].set()
    
    fn_wrapper = FnVoid_VoidP_UInt_UInt(progress_update_handler)
    download_handler = LogDownloadHandler(context = None, \
        received_progress_update = fn_wrapper, \
        received_unknown_entry = cast(None, FnVoid_VoidP_UByte_Long_UByteP_UByte), \
        received_unhandled_entry = cast(None, FnVoid_VoidP_DataP))

    log_callback = FnVoid_VoidP_DataP(lambda ctx, p: print("{epoch: %d, value: %s}" % (p.contents.epoch, parse_value(p))))
    libmetawear.mbl_mw_logger_subscribe(s.logger, None, log_callback)
    libmetawear.mbl_mw_logging_download(s.device.board, 0, byref(download_handler))
    s.events["download"].wait()