def pdu_arg_add(pdu, k, v): meta = pmt.car(pdu) data = pmt.cdr(pdu) if (pmt.is_null(meta)): meta = pmt.make_dict() assert (pmt.is_dict(meta)) meta = pmt.dict_add(meta, k, v) return pmt.cons(meta, data)
def pdu_arg_add(pdu, k, v): meta = pmt.car(pdu); data = pmt.cdr(pdu); if(pmt.is_null(meta)): meta = pmt.make_dict(); assert(pmt.is_dict(meta)); meta = pmt.dict_add(meta, k, v); return pmt.cons(meta,data);
def tag_to_dict(tag): ''' Convert gnuradio stream tag to dict ''' d = { "offset": tag.offset, "key": pmt.symbol_to_string(tag.key), "value": pmt.to_python(tag.value) } if not pmt.is_null(tag.srcid): d["srcid"] = pmt.to_python(tag.srcid) return d
def general_work(self, input_items, output_items): # return self.work(input_items, output_items) #def work(self, input_items, output_items): #sys.stdout.write('.') #sys.stdout.flush() #sys.stderr.write("[w+]");sys.stderr.flush(); with self.lock: if self.arq_channel_state == ARQ_CHANNEL_IDLE: #msg = self.delete_head_nowait(pmt.intern('from_app_arq')) msg = self.pop_msg_queue(pmt.intern('from_app_arq')) if pmt.is_null(msg): return 0 #print "Via work:", msg #self.app_rx_arq(msg) self._app_rx(msg, True) else: #print "Not doing any work while ARQ channel is busy" pass #sys.stderr.write("[w-]");sys.stderr.flush(); return 0
def rx_handler(self, msg): meta = pmt.car(msg) data_in = array.array('B', pmt.u8vector_elements(pmt.cdr(msg))) data_list = data_in.tolist() if data_list[0:8] == self.operations["data"]: self.rx_cnt = self.rx_cnt + 1 seq = struct.unpack("<i", self.pack_bits(data_list[8:8 + 32]))[0] #print "rx sequence: %d"%(seq); # send ACK bak self.send_ack(seq) # pass along sequence number for fun if (pmt.is_null(meta)): meta = pmt.make_dict() meta = pmt.dict_add(meta, pmt.intern("arq_seq"), pmt.from_long(seq)) if (self.rx_record.has_key(seq)): print "duplicate recieve data pkt seq! %d" % (seq) return self.rx_record[seq] = time.time() # send payload to next layer data_upper = data_list[8 + 32:] self.message_port_pub( pmt.intern("rx_out"), pmt.cons(meta, pmt.init_u8vector(len(data_upper), data_upper))) return if data_list[0:8] == self.operations["ack"]: self.ack_rx_cnt = self.ack_rx_cnt + 1 # set pkt ack'd locally seq = struct.unpack("<i", self.pack_bits(data_list[8:8 + 32]))[0] print "got pkt ack (%d)" % (seq) self.ack(seq) return # fall through fail print "got invalid ARQ header, discarding!"
def rx_handler(self, msg): meta = pmt.car(msg); data_in = array.array('B', pmt.u8vector_elements(pmt.cdr(msg))) data_list = data_in.tolist(); if data_list[0:8] == self.operations["data"]: self.rx_cnt = self.rx_cnt + 1; seq = struct.unpack("<i", self.pack_bits(data_list[8:8+32]))[0]; #print "rx sequence: %d"%(seq); # send ACK bak self.send_ack(seq); # pass along sequence number for fun if(pmt.is_null(meta)): meta = pmt.make_dict(); meta = pmt.dict_add(meta, pmt.intern("arq_seq"), pmt.from_long(seq)); if(self.rx_record.has_key(seq)): print "duplicate recieve data pkt seq! %d"%(seq) return; self.rx_record[seq] = time.time(); # send payload to next layer data_upper = data_list[8+32:]; self.message_port_pub(pmt.intern("rx_out"), pmt.cons(meta,pmt.init_u8vector(len(data_upper),data_upper))); return; if data_list[0:8] == self.operations["ack"]: self.ack_rx_cnt = self.ack_rx_cnt + 1; # set pkt ack'd locally seq = struct.unpack("<i", self.pack_bits(data_list[8:8+32]))[0]; print "got pkt ack (%d)"%(seq) self.ack(seq); return; # fall through fail print "got invalid ARQ header, discarding!"