예제 #1
0
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)
예제 #2
0
파일: pdulib.py 프로젝트: icopavan/gr-burst
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);
예제 #3
0
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
예제 #4
0
    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
예제 #5
0
 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
예제 #6
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!"
예제 #7
0
파일: arq.py 프로젝트: icopavan/gr-burst
    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!"