def test_001(self): #test complementary operation of framer & deframer #want to frame some random data that has enough consecutive bits to #stuff at least a few bits npkts = 20 src_data = [0xFE, 0xDA, 0xAC, 0x29, 0x7F, 0xA2, 0x90, 0x0F, 0xF8] frame = digital.hdlc_framer_pb("wat") corr = digital.correlate_access_code_tag_bb("01111110", 0, "frame") deframe = digital.hdlc_deframer_bp("frame", 32, 500) debug = blocks.message_debug() self.tb.connect(frame, corr, deframe) self.tb.msg_connect(deframe, "out", debug, "store") self.tb.start() msg = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(src_data),src_data)) for i in xrange(npkts): frame.to_basic_block()._post(pmt.intern("in"), msg) sleep(0.2) self.tb.stop() self.tb.wait() rxmsg = debug.get_message(0) result_len = pmt.blob_length(pmt.cdr(rxmsg)) msg_data = [] for j in xrange(result_len): msg_data.append(pmt.u8vector_ref(pmt.cdr(rxmsg), j)) self.assertEqual(src_data, msg_data)
def test_001(self): #test complementary operation of framer & deframer #want to frame some random data that has enough consecutive bits to #stuff at least a few bits npkts = 20 src_data = [0xFE, 0xDA, 0xAC, 0x29, 0x7F, 0xA2, 0x90, 0x0F, 0xF8] frame = digital.hdlc_framer_pb("wat") corr = digital.correlate_access_code_tag_bb("01111110", 0, "frame") deframe = digital.hdlc_deframer_bp("frame", 32, 500) debug = blocks.message_debug() self.tb.connect(frame, corr, deframe) self.tb.msg_connect(deframe, "out", debug, "store") self.tb.start() msg = pmt.cons(pmt.PMT_NIL, pmt.init_u8vector(len(src_data), src_data)) for i in xrange(npkts): frame.to_basic_block()._post(pmt.intern("in"), msg) sleep(0.2) self.tb.stop() self.tb.wait() rxmsg = debug.get_message(0) result_len = pmt.blob_length(pmt.cdr(rxmsg)) msg_data = [] for j in xrange(result_len): msg_data.append(pmt.u8vector_ref(pmt.cdr(rxmsg), j)) self.assertEqual(src_data, msg_data)
def deframe_NPDU(self, msg_pmt): global pack_err global pack_tot global PER # veficcación del formato PMT if pmt.is_blob(msg_pmt): blob = msg_pmt #print "is blob" elif pmt.is_pair(msg_pmt): blob = pmt.cdr(msg_pmt) #print "is pair" else: print "Formato desconocido" return data_len = pmt.blob_length(blob) if (data_len < 11): print "MAC: muy corta!" pack_err = pack_err + 1.0 return data_np = pmt.to_python(blob) #numpy.ndarray data_py = data_np.tolist() #python list #print "Paquete",data_py,data_py.__class__ #print "Dir Gateway",self.SrcAddR," Dir Nodo",data_py[7:9] if len(set(self.SrcAddR).intersection( data_py)) < 2: #Validación TX de la misma dirección # Valodacion FCS y cuenta PER rec_FCS = [data_py[-2], data_py[-1]] #FCS recibido del data_py[-2], data_py[-1] #quita FCS s_to_fcs = struct.pack('B' * len(data_py), *data_py) # Convierte List a String a = self.crc16(s_to_fcs) #Calcula FCS FCS = [a & 0xFF, (a >> 8) & 0xFF] if FCS == rec_FCS: # paquete correcto index = 9 del data_py[: index] # FC(2),Sec_N(1),PanID(2),Dst_Add(2),Src_Add(2) # Crea un PMT vacio: send_pmt = pmt.make_u8vector(len(data_py), ord(' ')) # Copy all characters to the u8vector: for i in range(len(data_py)): pmt.u8vector_set(send_pmt, i, data_py[i]) # Send the message: self.message_port_pub(pmt.intern('out'), pmt.cons(pmt.PMT_NIL, send_pmt)) else: pack_err = pack_err + 1.0 pack_tot = pack_tot + 1.0 PER = pack_err / pack_tot * 100.0 print ",", pack_tot, ",", pack_err, ",", PER, "%"
def deframe_NPDU(self,msg_pmt): global pack_err global pack_tot global PER # veficcación del formato PMT if pmt.is_blob(msg_pmt): blob = msg_pmt #print "is blob" elif pmt.is_pair(msg_pmt): blob = pmt.cdr(msg_pmt) #print "is pair" else: print "Formato desconocido" return data_len = pmt.blob_length(blob) if(data_len < 11): print "MAC: muy corta!" pack_err = pack_err+1.0 return; data_np = pmt.to_python(blob) #numpy.ndarray data_py = data_np.tolist() #python list #print "Paquete",data_py,data_py.__class__ #print "Dir Gateway",self.SrcAddR," Dir Nodo",data_py[7:9] if len(set(self.SrcAddR).intersection(data_py)) < 2 : #Validación TX de la misma dirección # Valodacion FCS y cuenta PER rec_FCS = [data_py[-2],data_py[-1]] #FCS recibido del data_py[-2],data_py[-1] #quita FCS s_to_fcs = struct.pack('B'*len(data_py), *data_py) # Convierte List a String a = self.crc16(s_to_fcs) #Calcula FCS FCS= [a & 0xFF,(a>>8)&0xFF] if FCS == rec_FCS: # paquete correcto index = 9 del data_py[:index] # FC(2),Sec_N(1),PanID(2),Dst_Add(2),Src_Add(2) # Crea un PMT vacio: send_pmt = pmt.make_u8vector(len(data_py), ord(' ')) # Copy all characters to the u8vector: for i in range(len(data_py)): pmt.u8vector_set(send_pmt, i, data_py[i]) # Send the message: self.message_port_pub(pmt.intern('out'), pmt.cons(pmt.PMT_NIL, send_pmt)) else: pack_err = pack_err+1.0 pack_tot = pack_tot +1.0 PER =pack_err/pack_tot*100.0 print ",",pack_tot,",",pack_err,",",PER,"%"