def sendRxCtrlToPhy(lc, trx_mode, bandwidth, chan, num_data_slots, seq_number,
                    mcs_idx, rx_gain, module, debug):

    # Basic Control
    trx_flag = trx_mode  # TRX Mode. 1 TX - 0 RX;
    seq_number = seq_number  # Sequence number.
    bw_idx = bandwidth  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    gain = rx_gain  # RX gain.
    num_slots = num_data_slots  # Number of slots. How many data slots we expect to receive from peer.

    # Create an Internal message for RX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number

    # Add values to the Basic Control Message for RX procedure.
    internal.receive.basic_ctrl.trx_flag = trx_flag
    internal.receive.basic_ctrl.bw_index = bw_idx
    internal.receive.basic_ctrl.ch = channel
    internal.receive.basic_ctrl.slot = slot
    internal.receive.basic_ctrl.mcs = mcs
    internal.receive.basic_ctrl.gain = gain
    internal.receive.basic_ctrl.length = num_slots

    # Print the basic control structure sent to PHY.
    if (debug == True):
        printBasicControl(internal.receive.basic_ctrl,
                          internal.transaction_index)

    # Send basic control to PHY.
    if (debug == True): print("Sending basic control to PHY.")
    lc.send(Message(module, interf.MODULE_PHY, internal))
def sendRxCtrlToPhy(lc, bandwidth, chan, mcs_idx, rx_gain, num_data_slots,
                    seq_number, send_to_id, module, print_stats):

    # Basic Control
    trx_flag = TRX_RX_ST  # TRX Mode. 1 TX - 0 RX;
    send_to = send_to_id  # Radio ID to send slot to.
    seq_number = seq_number  # Sequence number.
    bw_idx = bandwidth  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0
    gain = rx_gain  # RX gain. We use -1 for AGC mode.
    num_slots = num_data_slots  # Number of slots. How many data slots we expect to receive from peer.

    # Create an Internal message for RX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number

    # Add values to the Basic Control Message for RX procedure.
    internal.receive.basic_ctrl.trx_flag = trx_flag
    internal.receive.basic_ctrl.send_to = send_to
    internal.receive.basic_ctrl.bw_index = bw_idx
    internal.receive.basic_ctrl.ch = channel
    internal.receive.basic_ctrl.frame = frame
    internal.receive.basic_ctrl.slot = slot
    internal.receive.basic_ctrl.mcs = mcs
    internal.receive.basic_ctrl.gain = gain
    internal.receive.basic_ctrl.length = num_slots

    # Send basic control to PHY.
    lc.send(Message(module, interf.MODULE_PHY, internal))
def sendTxCtrlToPhy(lc, chan, bandwidth, mcs_idx, gain_value, slots,
                    sequence_number, send_to_id, module, data, debug):

    # Basic Control
    trx_flag = PHY_TX_ST  # TRX Mode. 1 TX - 0 RX; 2
    send_to = send_to_id  # ID of the radio where to send a packet to.
    seq_number = sequence_number  # Sequence number.
    bw_idx = bandwidth  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0  # Frame number.
    gain = gain_value  # RX gain. We use -1 for AGC mode.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.send_to = send_to
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.frame = frame
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.timestamp = 0
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.length = num_slots * getTransportBlockSize(
        bw_idx, mcs)
    internal.send.app_data.data = data

    lc.send(Message(module, interf.MODULE_PHY, internal))
示例#4
0
def sendTxCtrlToPhy(lc, chan, bw_idx, mcs_idx, gain_value, slots,
                    sequence_number, module, random_data, data, debug):

    # Basic Control
    trx_flag = TRX_TX_ST  # TRX Mode. 1 TX - 0 RX; 2
    seq_number = sequence_number  # Sequence number.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0  # Frame number (not used now, for future use)
    gain = gain_value  # RX gain. We use -1 for AGC mode.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.
    send_to = 0

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.send_to = send_to
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.frame = frame
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.length = num_slots * getTransportBlockSize(
        bw_idx, mcs)
    internal.send.app_data.data = data

    # Send basic control to PHY.
    lc.send(Message(module, interf.MODULE_PHY, internal))
def sendTxCtrlToPhy(lc, bandwidth, chan, mcs_idx, gain_value, slots,
                    sequence_number, cqi, rx_gain, tx_gain, send_to_id, module,
                    debug):

    # Basic Control
    trx_flag = PHY_TX_ST  # TRX Mode. 1 TX - 0 RX; 2
    send_to = send_to_id  # ID of the radio where to send a packet to.
    seq_number = sequence_number  # Sequence number.
    bw_idx = bandwidth  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    gain = gain_value  # TX gain.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.

    # Calculate number of bytes.
    tb_size = getTransportBlockSize(bw_idx, mcs)
    num_of_bytes = num_slots * tb_size

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.send_to = send_to
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.length = num_of_bytes
    internal.send.app_data.data = createPacketToBeSent(num_of_bytes, mcs,
                                                       sequence_number, cqi,
                                                       rx_gain, tx_gain)

    # Check size of transmited data.
    if (len(internal.send.app_data.data) != internal.send.basic_ctrl.length):
        print("Length of data is diffrent of field length.")
        sys.exit(-1)

    # Print the basic control structure sent to PHY.
    if (debug == True):
        printBasicControl(internal.send.basic_ctrl, internal.transaction_index,
                          internal.send.app_data.data)

    # Send basic control to PHY.
    if (debug == True): print("Sending basic control to PHY.")
    lc.send(Message(module, interf.MODULE_PHY, internal))
def sendTxCtrlToPhy(lc, chan, mcs_idx, gain_value, slots, sequence_number,
                    random_data):

    # Basic Control
    trx_flag = TRX_TX_ST  # TRX Mode. 1 TX - 0 RX; 2
    seq_number = sequence_number  # Sequence number.
    bw_idx = BW_IDX_Five  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    gain = gain_value  # RX gain. We use -1 for AGC mode.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.length = num_slots * NUM_BYTES_PER_SUBFRAME_VS_MCS[
        mcs]
    data = bytes()
    for j in range(num_slots):
        for i in range(NUM_BYTES_PER_SUBFRAME_VS_MCS[mcs]):
            data = data + bytes([seq_number + 1])
            #data = data + bytes([random_data[i]])
            #data = data + bytes([i%256])
            #data = data + bytes([seq_number+1])
    internal.send.app_data.data = data

    # Check size of transmited data.
    if (len(internal.send.app_data.data) != internal.send.basic_ctrl.length):
        print("Length of data is diffrent of field length.")
        sys.exit(-1)

    # Print the basic control structure sent to PHY.
    printBasicControl(internal.send.basic_ctrl, internal.transaction_index,
                      internal.send.app_data.data)

    # Send basic control to PHY.
    print("Sending basic control to PHY.")
    lc.send(Message(interf.MODULE_MAC, interf.MODULE_PHY, internal))
示例#7
0
def sendTxCtrlToPhy(lc, chan, bandwidth, mcs_idx, gain_value, slots,
                    sequence_number, send_to_id, module, data, rfboost, length,
                    debug):

    # Basic Control
    trx_flag = PHY_TX_ST  # TRX Mode. 1 TX - 0 RX; 2
    send_to = send_to_id  # ID of the radio where to send a packet to.
    seq_number = sequence_number  # Sequence number.
    bw_idx = bandwidth  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0  # Frame number.
    gain = gain_value  # RX gain. We use -1 for AGC mode.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.send_to = send_to
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.frame = frame
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.timestamp = 0
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.rf_boost = rfboost
    internal.send.basic_ctrl.length = length
    internal.send.app_data.data = data

    # Check size of transmited data.
    if (len(internal.send.app_data.data) != internal.send.basic_ctrl.length):
        print("Length of data is diffrent of field length.")
        sys.exit(-1)

    # Print the basic control structure sent to PHY.
    if (debug == True):
        printBasicControl(internal.send.basic_ctrl, internal.transaction_index,
                          internal.send.app_data.data)

    # Send basic control to PHY.
    lc.send(Message(module, interf.MODULE_PHY, internal))
def sendTxCtrlToPhy(lc, channel, bandwidth, mcs, gain_value, num_slots, sequence_number, timestamp, module, data, debug):
    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = sequence_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag     = PHY_TX_ST
    internal.send.basic_ctrl.send_to      = 0
    internal.send.basic_ctrl.bw_index     = bandwidth
    internal.send.basic_ctrl.ch           = channel
    internal.send.basic_ctrl.frame        = 0
    internal.send.basic_ctrl.slot         = 0
    internal.send.basic_ctrl.timestamp    = timestamp
    internal.send.basic_ctrl.mcs          = mcs
    internal.send.basic_ctrl.gain         = gain_value
    internal.send.basic_ctrl.length       = num_slots*getTransportBlockSize(bandwidth, mcs)
    internal.send.app_data.data           = data

    lc.send(Message(module, interf.MODULE_PHY, internal))
示例#9
0
def sendTxCtrlToPhy(lc, chan, mcs_idx, gain_value, slots, source_module):

    # Basic Control
    trx_flag = TRX_FLAG_TX  # TRX Mode. 2->TX - 1->RX;
    seq_number = 66  # Sequence number.
    bw_idx = BW_INDEX_5_MHZ  # By default use BW: 5 MHz. Possible values: 0 - UNKNOWN, 1 - 1.4 MHz, 2 - 3 MHz, 3 - 5 MHz, 4 - 10 MHz.
    mcs = mcs_idx  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0  # Frame number (not used now, for future use)
    gain = gain_value  # RX gain. We use -1 for AGC mode.
    num_slots = slots  # Number of slots. How many data slots we expect to receive from peer.
    send_to = 0

    # Create an Internal message for TX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number
    # Set basic control with proper values.
    internal.send.basic_ctrl.trx_flag = trx_flag
    internal.send.basic_ctrl.send_to = send_to
    internal.send.basic_ctrl.bw_index = bw_idx
    internal.send.basic_ctrl.ch = channel
    internal.send.basic_ctrl.slot = slot
    internal.send.basic_ctrl.frame = frame
    internal.send.basic_ctrl.mcs = mcs
    internal.send.basic_ctrl.gain = gain
    internal.send.basic_ctrl.length = num_slots * NUM_BYTES_PER_SUBFRAME_VS_MCS[
        mcs]
    data = bytes()
    for j in range(num_slots):
        for i in range(NUM_BYTES_PER_SUBFRAME_VS_MCS[mcs]):
            data = data + bytes([i % 256])
    internal.send.app_data.data = data

    # Print the basic control structure sent to PHY.
    printBasicControl(internal.send.basic_ctrl, internal.transaction_index,
                      internal.send.app_data.data)

    # Send basic control to PHY.
    print("Sending basic control to PHY.")
    lc.send(Message(source_module, interf.MODULE_PHY, internal))
示例#10
0
def sendRxCtrlToPhy(lc, chan, rx_gain, num_data_slots, seq_number,
                    source_module):

    # Basic Control
    trx_flag = TRX_FLAG_RX  # TRX Mode. 2->TX - 1->RX
    seq_number = seq_number  # Sequence number.
    bw_idx = BW_INDEX_5_MHZ  # By default use BW: 5 MHz. Possible values: 0 - 1.4 MHz, 1 - 3 MHz, 2 - 5 MHz, 3 - 10 MHz.
    mcs = 0  # It has no meaning for RX. MCS is recognized automatically by receiver. MCS varies from 0 to 28.
    channel = chan  # By default use channel 0.
    slot = 0  # Slot number (not used now, for future use)
    frame = 0  # Frame number (not used now, for future use)
    gain = rx_gain  # RX gain. We use -1 for AGC mode.
    num_slots = num_data_slots  # Number of slots. How many data slots we expect to receive from peer.
    send_to = 0

    # Create an Internal message for RX procedure.
    internal = interf.Internal()
    # Add sequence number to internal message.
    internal.transaction_index = seq_number

    # Add values to the Basic Control Message for RX procedure.
    internal.receive.basic_ctrl.trx_flag = trx_flag
    internal.receive.basic_ctrl.send_to = send_to
    internal.receive.basic_ctrl.bw_index = bw_idx
    internal.receive.basic_ctrl.ch = channel
    internal.receive.basic_ctrl.slot = slot
    internal.receive.basic_ctrl.frame = frame
    internal.receive.basic_ctrl.mcs = mcs
    internal.receive.basic_ctrl.gain = gain
    internal.receive.basic_ctrl.length = num_slots

    # Print the basic control structure sent to PHY.
    printBasicControl(internal.receive.basic_ctrl, internal.transaction_index)

    # Send basic control to PHY.
    print("Sending basic control to PHY.")
    lc.send(Message(source_module, interf.MODULE_PHY, internal))
示例#11
0
    #LOAD THE LAERY COMMUNICATOR
    module = interf.MODULE_PHY
    lc = LayerCommunicator(module, [interf.MODULE_MAC])

    #SLEEP FOR 4 SECS, TO SETUP THE OTHER MODULES
    sleep(4)

    print("START SENDING")

    #CREATE A PHY_STAT MESSAGE
    stat = interf.Internal()
    stat.transaction_index
    stat.get.attribute = interf.Get.MAC_STATS

    #ADD MESSAGE TO THE SENDING QUEUE
    lc.send(Message(module, interf.MODULE_MAC, stat))

    #GET THE HIGH PRIORITY QUEUE AND WAIT FOR A MESSAGE
    m = lc.get_high_queue().get()
    print("Get message " + str(m))
    #print("TRX Flag: "+str(m.message.trx_flag)+"\nseq_number: "+str(m.message.seq_number)+"\ncenter_freq: "+str(m.message.center_freq)+"\nbw_index: "+str(m.message.bw_index)+"\nch: "+str(m.message.ch)+"\nslot: "+str(m.message.slot)+"\nmcs: "+str(m.message.mcs)+"\ngain: "+str(m.message.gain)+"\nlength: "+str(m.message.length))

    try:
        #TRY TO GET THE NEXT MESSAGE WITHOUT WAITING
        m = lc.get_high_queue().get_nowait()
        print("Get message " + str(m))
    except queue.Empty:
        print("No message yet")

    sleep(10)
    print("STOP")