Exemplo n.º 1
0
def xep_setup(device_name, baseband):
    reset(device_name)
    mc = ModuleConnector(device_name)
    app = mc.get_x4m300()
    try:
        app.set_sensor_mode(0x13, 0)  # Make sure no profile is running.
    except RuntimeError:
        pass
    try:
        app.set_sensor_mode(0x12, 0)  # Manual mode.
    except RuntimeError:
        pass

    xep = mc.get_xep()
    xep.mc = mc
    # Set DAC range
    xep.x4driver_set_dac_min(949)
    xep.x4driver_set_dac_max(1100)

    # Set integration
    xep.x4driver_set_iterations(16)
    xep.x4driver_set_pulses_per_step(10)
    xep.x4driver_set_downconversion(int(baseband))

    # Set detection range
    xep.x4driver_set_frame_area(0, 8.0)

    return xep
Exemplo n.º 2
0
def xep_setup(device_name, baseband):
	reset(device_name)
	mc = ModuleConnector(device_name)

	# Assume an X4M300/X4M200 module and try to enter XEP mode
	app = mc.get_x4m300()
	# Stop running application and set module in manual mode.
	try:
		app.set_sensor_mode(0x13, 0)  # Make sure no profile is running.
	except RuntimeError:
		# Profile not running, OK
		pass

	try:
		app.set_sensor_mode(0x12, 0)  # Manual mode.
	except RuntimeError:
		# Sensor already stopped, OK
		pass


	xep = mc.get_xep()
	xep.mc = mc
	# Set DAC range
	xep.x4driver_set_dac_min(949)
	xep.x4driver_set_dac_max(1100)

	# Set integration
	xep.x4driver_set_iterations(16)
	xep.x4driver_set_pulses_per_step(10)
	xep.x4driver_set_downconversion(int(baseband))

	# Set detection range
	xep.x4driver_set_frame_area(0, 5.0)

	return xep
def set_certification_mode(device_name, mode_code):
    mc = ModuleConnector(device_name)
    xep = mc.get_xep()
    app = mc.get_x4m300()
    data = mcw.ucVector()
    app.system_run_test(mode_code, data)
    print("Set Mode:0x%X" % mode_code)
    xep.module_reset()
    mc.close()
Exemplo n.º 4
0
def goto_bootloader(device_name):
    if device_name == "auto":
        devices = auto()
        if len(devices) == 0:
            print("Failed to find COM port matching known vid and pids")
            return 1
        device_name = devices[0]

    log_level = 1
    mc = ModuleConnector(device_name, log_level)
    x4m300 = mc.get_x4m300()
    sleep(1) # Allow for MC to read waiting messages from module.
    try:
        # if this fails it will throw
        x4m300.start_bootloader()
    except:
        print("Could not go to bootloader, may be there already.")
    mc.close()
Exemplo n.º 5
0
class StreamData:
    sampling_frequency = 17  # frames per second

    def __init__(self, usb_port):
        '''
        Parser for streaming data from Xethru X4M300 presence sensor from Novelda.

        :param usb_port: String
        '''
        self.usb_port = usb_port

        self.mc = ModuleConnector(usb_port)

        self.x4m300 = self.mc.get_x4m300()

        self.x4m300.set_sensor_mode(XTID_SM_STOP, 0)
        self.x4m300.load_profile(XTS_ID_APP_PRESENCE_2)
        self.x4m300.set_output_control(XTS_ID_PRESENCE_SINGLE, 1)
        self.x4m300.set_output_control(XTS_ID_BASEBAND_IQ, 1)
        self.x4m300.set_sensor_mode(XTID_SM_RUN, 0)

    def __iter__(self):
        while True:
            yield self.read_sensor()

    def read_sensor(self):
        '''
        Read data from sensor
        :return:
        '''
        messege = self.x4m300.read_message_baseband_iq()

        i_data = []
        q_data = []

        for data in messege.i_data:
            i_data = np.append(i_data, data)

        for data in messege.q_data:
            q_data = np.append(q_data, data)

        return (i_data, q_data)
def main():
    parser = OptionParser()
    parser.add_option(
        "-d",
        "--device",
        dest="device_name",
        help=
        "Seral port name used by target XeThru sensor, i.e com8, /dev/ttyACM0",
        metavar="FILE")
    parser.add_option("-r",
                      "--record",
                      action="store_true",
                      default=False,
                      dest="record",
                      help="Enable recording")
    parser.add_option("-f",
                      "--file",
                      dest="meta_filename",
                      metavar="FILE",
                      help="meta file from recording")

    (options, args) = parser.parse_args()

    if not options.meta_filename:
        if options.device_name:
            device_name = options.device_name
        else:
            try:
                device_name = auto()[0]
            except:
                print("Fail to find serial port, please specify it by use -d!")
                raise
        print_module_info(device_name)
        x4m300 = configure_x4m300(device_name, options.record,
                                  x4m300_par_settings)
    else:
        player = start_player(meta_filename=options.meta_filename)
        mc = ModuleConnector(player, log_level=0)
        x4m300 = mc.get_x4m300()
    print_x4m300_messages(x4m300)
Exemplo n.º 7
0
def start_playback(meta_filename, depth):
    print("start playback from: {}, depth: {}".format(meta_filename, depth))
    ##! [Typical usage]
    player = DataPlayer(meta_filename, depth)

    mc = ModuleConnector(player, log_level=0)

    # Get read-only interface and receive telegrams / binary packets from recording
    x4m300 = mc.get_x4m300()

    # Control output
    player.set_filter(DataType.BasebandIqDataType
                      | DataType.PresenceSingleDataType)
    player.play()
    # ...
    player.pause()
    # ...
    player.set_playback_rate(2.0)

    ##! [Typical usage]
    player.set_playback_rate(1.0)
    player.set_loop_mode_enabled(True)
    player.play()

    try:
        while True:
            if x4m300.peek_message_baseband_iq():
                data = x4m300.read_message_baseband_iq()
                print("received baseband iq data, frame counter: {}".format(
                    data.frame_counter))
            if x4m300.peek_message_presence_single():
                data = x4m300.read_message_presence_single()
                print(
                    "received presence single data, frame counter: {}".format(
                        data.frame_counter))
            time.sleep(0.02)  # Sleep 20 ms
    except (KeyboardInterrupt, SystemExit):
        del mc
        raise
Exemplo n.º 8
0
def try_xep(device_name):

    log_level = 0
    mc = ModuleConnector(device_name, log_level)
    x4m300 = mc.get_x4m300()

    # we have to go to manual mode
    x4m300.set_sensor_mode(XTS_SM_STOP, 0)
    x4m300.set_sensor_mode(XTS_SM_MANUAL, 0)

    xep = mc.get_xep()
    pong = xep.ping()
    print("Received pong:", hex(pong))

    print('ItemNumber =', xep.get_system_info(XTID_SSIC_ITEMNUMBER))
    print('OrderCode =', xep.get_system_info(XTID_SSIC_ORDERCODE))
    print('FirmWareID =', xep.get_system_info(XTID_SSIC_FIRMWAREID))
    print('Version =', xep.get_system_info(XTID_SSIC_VERSION))
    print('Build =', xep.get_system_info(XTID_SSIC_BUILD))
    print('SerialNumber =', xep.get_system_info(XTID_SSIC_SERIALNUMBER))
    print('VersionList =', xep.get_system_info(XTID_SSIC_VERSIONLIST))

    # inti x4driver
    xep.x4driver_init()

    # Set enable pin
    xep.x4driver_set_enable(1)

    # Set iterations
    xep.x4driver_set_iterations(16)
    # Set pulses per step
    xep.x4driver_set_pulses_per_step(256)
    # Set dac min
    xep.x4driver_set_dac_min(949)
    # Set dac max
    xep.x4driver_set_dac_max(1100)
    # Set TX power
    xep.x4driver_set_tx_power(2)

    # Enable downconversion
    xep.x4driver_set_downconversion(1)

    # Set frame area offset
    xep.x4driver_set_frame_area_offset(0.18)
    offset = xep.x4driver_get_frame_area_offset()
    print('x4driver_get_frame_area_offset returned: ', offset)

    # Set frame area
    xep.x4driver_set_frame_area(2, 6)
    frame_area = xep.x4driver_get_frame_area()
    print('x4driver_get_frame_area returned: [', frame_area.start, ', ',
          frame_area.end, ']')

    # Set TX center freq
    xep.x4driver_set_tx_center_frequency(3)

    # Set PRFdiv
    xep.x4driver_set_prf_div(16)
    prf_div = xep.x4driver_get_prf_div()
    print('x4driver_get_prf_div returned: ', prf_div)

    # Start streaming
    xep.x4driver_set_fps(20)
    fps = xep.x4driver_get_fps()
    print('xep_x4driver_get_fps returned: ', fps)

    # Wait 5 sec.
    time.sleep(5)

    # Stop streaming
    xep.x4driver_set_fps(0)

    # Read data float if available.
    if xep.peek_message_data_float() > 0:
        data_float = xep.read_message_data_float()
    else:
        print('No data float messages available.')

    # Reset module
    xep.module_reset()
def x4m300_presence_simpleoutput(device_name,
                                 detection_zone=(0.5, 9),
                                 sensitivity=5,
                                 num_messages=0):

    # User settings
    detzone_start = detection_zone[0]
    detzone_end = detection_zone[1]

    presence_state_text = []
    presence_state_text.append("No presence")
    presence_state_text.append("Presence")
    presence_state_text.append("Initializing")

    mc = ModuleConnector(device_name, log_level=0)
    x4m300 = mc.get_x4m300()

    sleep(1)  # Allow for MC to read waiting messages from module.

    try:
        x4m300.set_sensor_mode(XTID_SM_STOP,
                               0)  # Make sure no profile is running.
        print("Stopped already running profile.")
    except RuntimeError:
        # If not initialized, stop returns error. Still OK, just wanted to make sure the profile was not running.
        pass

    # Now flush old messages from module
    print("Flushing any old data.")
    while x4m300.peek_message_presence_single():
        presence_single = x4m300.read_message_presence_single()

    # Read module info
    print("FirmwareID:", x4m300.get_system_info(XTID_SSIC_FIRMWAREID))
    print("Version:", x4m300.get_system_info(XTID_SSIC_VERSION))
    print("Build:", x4m300.get_system_info(XTID_SSIC_BUILD))
    print("Serial number:", x4m300.get_system_info(XTID_SSIC_SERIALNUMBER))

    print("Loading new profile.")
    x4m300.load_profile(XTS_ID_APP_PRESENCE_2)

    print("Selecting module output.")
    x4m300.set_output_control(XTS_ID_PRESENCE_SINGLE, 1)  # PresenceSingle
    x4m300.set_output_control(XTS_ID_PRESENCE_MOVINGLIST,
                              0)  # PresenceMovingList

    print("Setting user settings: DetectionZone = " + str(detzone_start) +
          " to " + str(detzone_end) + ", Sensitivity = " + str(sensitivity))
    x4m300.set_detection_zone(detzone_start, detzone_end)
    x4m300.set_sensitivity(sensitivity)

    print("Start profile execution.")
    x4m300.set_sensor_mode(XTID_SM_RUN, 0)  # Make sure no profile is running.

    print("Waiting for data...")

    n = 0
    while num_messages == 0 or n < num_messages:
        time.sleep(0.1)

        while x4m300.peek_message_presence_single():
            presence_single = x4m300.read_message_presence_single()
            print("Presence ->" + " FrameCounter: " +
                  str(presence_single.frame_counter) + ", State: " +
                  presence_state_text[presence_single.presence_state] +
                  ", Distance: " + str(round(presence_single.distance, 2)) +
                  ", SignalQuality: " + str(presence_single.signal_quality))
            n += 1

    x4m300.set_sensor_mode(XTID_SM_STOP, 0)
Exemplo n.º 10
0
def x4m300_presence_simpleoutput(device_name, detection_zone=(0.5,9), sensitivity=5):
    # User settings
    detzone_start = detection_zone[0]
    detzone_end = detection_zone[1]

    #Reset module
    reset(device_name)

    mc = ModuleConnector(device_name, log_level=0)
    x4m300 = mc.get_x4m300()

    try:
        x4m300.set_sensor_mode(13, 0) # Make sure no profile is running.
        print("Stopped already running profile.")
    except RuntimeError:
        # If not initialized, stop returns error. Still OK, just wanted to make sure the profile was not running.
        pass

    # Read module info
    print("FirmwareID: " + x4m300.get_system_info(2))
    print("Version: " + x4m300.get_system_info(3))
    print("Build: " + x4m300.get_system_info(4))
    print("Serial number: " + x4m300.get_system_info(6))

    print("Loading new profile.")
    x4m300.load_profile(0x014d4ab8)

    print("Selecting module output.")
    x4m300.set_output_control(0x723bfa1f, 1) # PresenceMovingList

    print("Setting user settings: DetectionZone = " + str(detzone_start) + " to " + str(detzone_end) + ", Sensitivity = " + str(sensitivity))
    x4m300.set_detection_zone(detzone_start, detzone_end)
    x4m300.set_sensitivity(sensitivity)

    print("Start profile execution.")
    x4m300.set_sensor_mode(1, 0) # Make sure no profile is running.

    def clear_buffer():
        """Clears the frame buffer"""
        while x4m300.peek_message_presence_movinglist():
            x4m300.read_message_presence_movinglist()

    def read_movlist_fast():
        d = x4m300.read_message_presence_movinglist()
        mfast = np.array(d.movement_fast_items)
        mslow = np.array(d.movement_slow_items)
        return mfast, mslow

    def animate(i):
        mfast, mslow = read_movlist_fast();
        line1.set_ydata(mfast)  # update the data
        line2.set_ydata(mslow)  # update the data
        return line1, line2

    d = x4m300.read_message_presence_movinglist()
    State = d.presence_state
    print("Initializing,this will take around 2mins")
    while State == 2:
        d = x4m300.read_message_presence_movinglist()
        State = d.presence_state
    print("Initializing Done!")

    print("Start streaming movinglist...")
    fig = plt.figure()
    fig.suptitle("PresenceMovingList example")
    ax1 = fig.add_subplot(2,1,1)
    ax2 = fig.add_subplot(2,1,2)
    ax2.set_xlabel('Distance')
    ax1.set_ylabel('Fast Movement Metric')
    ax2.set_ylabel('Slow Movement Metric')

    mfast, mslow = read_movlist_fast()

    #setting upperlimits for y-axsis
    ax1.set_ylim(0,100)
    ax2.set_ylim(0,100)

    line1, = ax1.plot(mfast)
    line2, = ax2.plot(mslow)

    clear_buffer()
    ani = FuncAnimation(fig, animate, interval=100)
    plt.show()

    # stop streaming
    x4m300.set_sensor_mode(0x13, 0)
Exemplo n.º 11
0
def simple_xep_plot(device_name, bb=False):

    FPS = 10

    reset(device_name)
    mc = ModuleConnector(device_name)

    # Assume an X4M300/X4M200 module and try to enter XEP mode
    app = mc.get_x4m300()
    # Stop running application and set module in manual mode.
    try:
        app.set_sensor_mode(0x13, 0)  # Make sure no profile is running.
    except RuntimeError:
        # Profile not running, OK
        pass

    try:
        app.set_sensor_mode(0x12, 0)  # Manual mode.
    except RuntimeError:
        # Sensor already stopped, OK
        pass

    r = mc.get_xep()
    # Set DAC range
    r.x4driver_set_dac_min(900)
    r.x4driver_set_dac_max(1150)

    # Set integration
    r.x4driver_set_iterations(16)
    r.x4driver_set_pulses_per_step(26)

    if bb:
        r.x4driver_set_downconversion(1)
    else:
        r.x4driver_set_downconversion(0)

    # Start streaming of data
    r.x4driver_set_fps(FPS)

    def clear_buffer():
        """Clears the frame buffer"""
        while r.peek_message_data_float():
            _ = r.read_message_data_float()

    def read_frame():
        """Gets frame data from module"""
        d = r.read_message_data_float()
        frame = np.array(d.data)
        # Convert the resulting frame to a complex array if downconversion is enabled
        if bb:
            n = len(frame)
            frame = frame[:n / 2] + 1j * frame[n / 2:]

        return frame

    def animate(i):
        if bb:
            line.set_ydata(abs(read_frame()))  # update the data
        else:
            line.set_ydata(read_frame())  # update the data
        return line,

    fig = plt.figure()
    fig.suptitle("BreathingDetection_V1 10 FPS")
    ax = fig.add_subplot(1, 1, 1)
    frame = read_frame()

    if bb:
        frame = abs(frame)

    line, = ax.plot(frame)

    clear_buffer()

    ani = FuncAnimation(fig, animate, interval=FPS)
    #plt.margins(0,0)
    plt.xlim(50, 200)
    plt.ylim(-0.07, 0.07)
    #print(frame)
    plt.show()

    # Stop streaming of data
    r.x4driver_set_fps(0)
def configure_x4m300(device_name,
                     record=False,
                     x4m300_settings=x4m300_par_settings):

    mc = ModuleConnector(device_name)
    x4m300 = mc.get_x4m300()

    print('Clearing buffer')
    while x4m300.peek_message_baseband_iq():
        x4m300.read_message_baseband_iq()
    while x4m300.peek_message_baseband_ap():
        x4m300.read_message_baseband_ap()
    while x4m300.peek_message_presence_single():
        x4m300.read_message_presence_single()
    while x4m300.peek_message_presence_movinglist():
        x4m300.read_message_presence_movinglist()
    while x4m300.peek_message_pulsedoppler_byte():
        x4m300.read_message_pulsedoppler_byte()
    while x4m300.peek_message_pulsedoppler_float():
        x4m300.read_message_pulsedoppler_float()
    while x4m300.peek_message_noisemap_byte():
        x4m300.read_message_noisemap_byte()
    while x4m300.peek_message_noisemap_float():
        x4m300.read_message_noisemap_float()

    print('Start recorder if recording is enabled')
    if record:
        start_record(mc)  # , DataType.PresenceSingleDataType)

    print('Ensuring no Xethru profile running')
    try:
        x4m300.set_sensor_mode(XTID_SM_STOP, 0)
    except RuntimeError:
        print('Xethru module could not enter stop mode')
    print('Loading new Xethru profile')
    # Check XeThru Module Communication Protocal section 5.2.8 for more detail
    x4m300.load_profile(XTS_ID_APP_PRESENCE_2)

    print('Set specific parameters')
    for variable, value in x4m300_settings.items():
        try:
            if 'output_control' in variable:
                variable = 'output_control'
            setter = getattr(x4m300, 'set_' + variable)
        except AttributeError as e:
            print("X4M300 does not have a setter function for '%s'." %
                  variable)
            raise e

        if isinstance(value, tuple):
            setter(*value)
        else:
            setter(value)

        print("Setting %s to %s" % (variable, value))

    print_sesnor_settings(x4m300)
    print('Set module to RUN mode')
    try:
        x4m300.set_sensor_mode(XTID_SM_RUN, 0)  # RUN mode
    except RuntimeError:
        print('Xethru module cloud not enter run mode')

    return x4m300