예제 #1
0
    def pack(self):
       """
       Packs the header and payload and adds the CRC.

       Header and payload fields are packed using data in the class variables.
       Returns the packed packet
       """
       packet = self.pack_header() + self.payload
       return gru.gen_and_append_crc32(packet)
def make_packet(payload, samples_per_symbol, bits_per_symbol,
                pad_for_usrp=True, whitener_offset=0, whitening=True):
    """
    Build a packet, given access code, payload, and whitener offset

    @param payload:               packet payload, len [0, 4096]
    @param samples_per_symbol:    samples per symbol (needed for padding calculation)
    @type  samples_per_symbol:    int
    @param bits_per_symbol:       (needed for padding calculation)
    @type bits_per_symbol:        int
    @param whitener_offset        offset into whitener string to use [0-16)
    @param whitening:             Turn whitener on or off
    @type whitening:              bool
    
    Packet will have access code at the beginning, followed by length, payload
    and finally CRC-32.
    """

    if not whitener_offset >=0 and whitener_offset < 16:
        raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,)

    payload_with_crc = gru.gen_and_append_crc32(payload)
    #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])

    L = len(payload_with_crc)
    MAXLEN = len(random_mask_tuple)
    if L > MAXLEN:
        raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)

    pkt_hd = make_header(L, whitener_offset)
    pkt_dt = ''.join((payload_with_crc, '\x55'))
    packet_length = len(pkt_hd) + len(pkt_dt)

    if pad_for_usrp:
        usrp_packing = _npadding_bytes(packet_length, samples_per_symbol, bits_per_symbol) * '\x55'
        pkt_dt = pkt_dt + usrp_packing

    if(whitening):
        pkt = pkt_hd + whiten(pkt_dt, whitener_offset)
    else:
        pkt = pkt_hd + pkt_dt

    if 0:
      #print "make_packet: len(pkt) =", len(pkt)
      print "\n"
      print "len(pkt_hd) = %d + len(pkt_dt)= %d ==> len(pkt)= %d" % (len(pkt_hd), len(pkt_dt), len(pkt))
      print "len(payload)=", len(payload)
      print "len(payload_with_crc)=", len(payload_with_crc)
      print "plus 1 byte of preamble"
      print "\n"
      print "samples_per_symbol=", samples_per_symbol
      print "bits_per_symbol=", bits_per_symbol

    return pkt
예제 #3
0
def make_packet(payload, samples_per_symbol, bits_per_symbol,
                access_code=default_access_code, pad_for_usrp=True,
                whitener_offset=0, whitening=True):
    """
    Build a packet, given access code, payload, and whitener offset

    @param payload:               packet payload, len [0, 4096]
    @param samples_per_symbol:    samples per symbol (needed for padding calculation)
    @type  samples_per_symbol:    int
    @param bits_per_symbol:       (needed for padding calculation)
    @type bits_per_symbol:        int
    @param access_code:           string of ascii 0's and 1's
    @param whitener_offset        offset into whitener string to use [0-16)
    
    Packet will have access code at the beginning, followed by length, payload
    and finally CRC-32.
    """
    if not is_1_0_string(access_code):
        raise ValueError, "access_code must be a string containing only 0's and 1's (%r)" % (access_code,)

    if not whitener_offset >=0 and whitener_offset < 16:
        raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,)

    (packed_access_code, padded) = conv_1_0_string_to_packed_binary_string(access_code)
    (packed_preamble, ignore) = conv_1_0_string_to_packed_binary_string(preamble)
    
    payload_with_crc = gru.gen_and_append_crc32(payload)
    #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])
    print "outbound payload =", [(i, bin(int(string_to_hex_list(i)[0],16))) for i in payload_with_crc[1:-4]]

    L = len(payload_with_crc)
    MAXLEN = len(random_mask_tuple)
    if L > MAXLEN:
        raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)

    if whitening:
        pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset),
                       whiten(payload_with_crc, whitener_offset), '\x55'))
    else:
        pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset),
                       (payload_with_crc), '\x55'))

    if pad_for_usrp:
        pkt = pkt + (_npadding_bytes(len(pkt), int(samples_per_symbol), bits_per_symbol) * '\x55')

    #print "make_packet: len(pkt) =", len(pkt)
    return pkt
예제 #4
0
def make_packet(payload, samples_per_symbol, bits_per_symbol,
                access_code=default_access_code, pad_for_usrp=True,
                whitener_offset=0, whitening=True):
    """
    Build a packet, given access code, payload, and whitener offset

    @param payload:               packet payload, len [0, 4096]
    @param samples_per_symbol:    samples per symbol (needed for padding calculation)
    @type  samples_per_symbol:    int
    @param bits_per_symbol:       (needed for padding calculation)
    @type bits_per_symbol:        int
    @param access_code:           string of ascii 0's and 1's
    @param whitener_offset        offset into whitener string to use [0-16)
    
    Packet will have access code at the beginning, followed by length, payload
    and finally CRC-32.
    """
    if not is_1_0_string(access_code):
        raise ValueError, "access_code must be a string containing only 0's and 1's (%r)" % (access_code,)

    if not whitener_offset >=0 and whitener_offset < 16:
        raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,)

    (packed_access_code, padded) = conv_1_0_string_to_packed_binary_string(access_code)
    (packed_preamble, ignore) = conv_1_0_string_to_packed_binary_string(preamble)
    
    payload_with_crc = gru.gen_and_append_crc32(payload)
    #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])

    L = len(payload_with_crc)
    MAXLEN = len(random_mask_tuple)
    if L > MAXLEN:
        raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)

    if whitening:
        pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset),
                       whiten(payload_with_crc, whitener_offset), '\x55'))
    else:
        pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset),
                       (payload_with_crc), '\x55'))

    if pad_for_usrp:
        pkt = pkt + (_npadding_bytes(len(pkt), int(samples_per_symbol), bits_per_symbol) * '\x55')

    #print "make_packet: len(pkt) =", len(pkt)
    return pkt
예제 #5
0
def make_packet(payload, samples_per_symbol, bits_per_symbol,
                pad_for_usrp=True, whitener_offset=0, whitening=True):
    """
    Build a packet, given access code, payload, and whitener offset

    @param payload:               packet payload, len [0, 4096]
    @param samples_per_symbol:    samples per symbol (needed for padding calculation)
    @type  samples_per_symbol:    int
    @param bits_per_symbol:       (needed for padding calculation)
    @type bits_per_symbol:        int
    @param whitener_offset        offset into whitener string to use [0-16)
    @param whitening:             Turn whitener on or off
    @type whitening:              bool
    
    Packet will have access code at the beginning, followed by length, payload
    and finally CRC-32.
    """

    if not whitener_offset >=0 and whitener_offset < 16:
        raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,)

    payload_with_crc = gru.gen_and_append_crc32(payload)
    #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])

    L = len(payload_with_crc)
    MAXLEN = len(random_mask_tuple)
    if L > MAXLEN:
        raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)

    pkt_hd = make_header(L, whitener_offset)
    pkt_dt = ''.join((payload_with_crc, '\x55'))
    packet_length = len(pkt_hd) + len(pkt_dt)

    if pad_for_usrp:
        usrp_packing = _npadding_bytes(packet_length, samples_per_symbol, bits_per_symbol) * '\x55'
        pkt_dt = pkt_dt + usrp_packing

    if(whitening):
        pkt = pkt_hd + whiten(pkt_dt, whitener_offset)
    else:
        pkt = pkt_hd + pkt_dt

    #print "make_packet: len(pkt) =", len(pkt)

    return pkt