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))
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))
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))
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))
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))
#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")