def parse(bitstream, payload_length): control = Control.parse(bitstream) payload_length = payload_length - 1 # subtract control byte dialog_id = bitstream.read("uint:8") payload_length = payload_length - 1 transaction_id = bitstream.read("uint:8") payload_length = payload_length - 1 target_rx_level_i = None if control.has_agc: target_rx_level_i = bitstream.read("uint:8") payload_length -= 1 tl = None if control.has_tl: tl = CT.parse(bitstream) payload_length -= 1 te = None if control.has_te: te = CT.parse(bitstream) payload_length -= 1 tc = None # TODO currently we have no way to know if Tc is present or not # Tc is present when control.is_ack_requested AND when we are requester, # while responders copy this flag but do NOT provide a Tc. # When parsing single frames without knowledge of dialogs we cannot determine this. # We use control.is_dialog_start for now but this will break when we start supporting multiple transactions per dialog if control.is_ack_requested and control.is_dialog_start: tc = CT.parse(bitstream) payload_length -= 1 ack_template = None if control.is_ack_not_void: transaction_id_start = bitstream.read("uint:8") payload_length = payload_length - 1 transaction_id_stop = bitstream.read("uint:8") payload_length = payload_length - 1 assert transaction_id_start == transaction_id, "Other case not implemented yet" assert transaction_id_stop == transaction_id, "Other case not implemented yet" # TODO ack bitmap (for when transaction_id_start != transaction_id) ack_template = [transaction_id_start, transaction_id_stop] assert control.is_ack_record_requested == False, "Not implemented yet" assert control.is_ack_not_void == False, "Not implemented yet" alp_command = AlpParser().parse(bitstream, payload_length) return Frame(control=control, dialog_id=dialog_id, transaction_id=transaction_id, agc_rx_level_i=target_rx_level_i, tl=tl, te=te, tc=tc, ack_template=ack_template, alp_command=alp_command)
def parse(s): channel_header = ChannelHeader.parse(s) channel_index = s.read("uint:16") rx_level = s.read("int:8") link_budget = s.read("uint:8") target_rx_level = s.read("uint:8") nls = s.read("bool") missed = s.read("bool") retry = s.read("bool") unicast = s.read("bool") _ = s.read("pad:4") fifo_token = s.read("uint:8") seq_nr = s.read("uint:8") response_to = CT.parse(s) addressee = Addressee.parse(s) return Status(channel_header=channel_header, channel_index=channel_index, rx_level=rx_level, link_budget=link_budget, target_rx_level=target_rx_level, nls=nls, missed=missed, retry=retry, unicast=unicast, fifo_token=fifo_token, seq_nr=seq_nr, response_to=response_to, addressee=addressee)
def parse_alp_interface_status_d7asp(self, s): channel_header = s.read("uint:8") # TODO parse channel_index = struct.unpack(">h", s.read("bytes:2"))[0] rx_level = s.read("int:8") link_budget = s.read("uint:8") target_rx_level = s.read("uint:8") nls = s.read("bool") missed = s.read("bool") retry = s.read("bool") unicast = s.read("bool" ) _ = s.read("pad:4") fifo_token = s.read("uint:8") seq_nr = s.read("uint:8") response_to = CT.parse(s) addressee = Addressee.parse(s) status = Status(channel_header=channel_header, channel_index=channel_index, rx_level=rx_level, link_budget=link_budget, target_rx_level=target_rx_level, nls=nls, missed=missed, retry=retry, unicast=unicast, fifo_token=fifo_token, seq_nr=seq_nr, response_to=response_to, addressee=addressee) return InterfaceStatus( operand=InterfaceStatusOperand(interface_id=0xd7, interface_status=status) )
def parse_alp_interface_status_d7asp(self, s): channel_header = ChannelHeader.parse(s) channel_index = struct.unpack(">h", s.read("bytes:2"))[0] rx_level = s.read("int:8") link_budget = s.read("uint:8") target_rx_level = s.read("uint:8") nls = s.read("bool") missed = s.read("bool") retry = s.read("bool") unicast = s.read("bool") _ = s.read("pad:4") fifo_token = s.read("uint:8") seq_nr = s.read("uint:8") response_to = CT.parse(s) addressee = Addressee.parse(s) status = Status(channel_header=channel_header, channel_index=channel_index, rx_level=rx_level, link_budget=link_budget, target_rx_level=target_rx_level, nls=nls, missed=missed, retry=retry, unicast=unicast, fifo_token=fifo_token, seq_nr=seq_nr, response_to=response_to, addressee=addressee) return InterfaceStatus(operand=InterfaceStatusOperand( interface_id=0xd7, interface_status=status))
def parse(self, bitstream, payload_length): timeout = CT.parse(bitstream) payload_length = payload_length - 1 # substract timeout control = Control( has_network_layer_security=bitstream.read("bool"), has_multi_hop=bitstream.read("bool"), has_origin_access_id=bitstream.read("bool"), is_origin_access_id_vid=bitstream.read("bool"), origin_access_class=bitstream.read("uint:4") ) payload_length = payload_length - 1 # substract control assert control.has_multi_hop == False, "Not implemented yet" assert control.has_network_layer_security == False, "Not implemented yet" if control.has_origin_access_id: if control.is_origin_access_id_vid: origin_access_id = map(ord, bitstream.read("bytes:2")) payload_length = payload_length - 2 else: origin_access_id = map(ord, bitstream.read("bytes:8")) payload_length = payload_length - 8 else: origin_access_id = [] #payload=map(ord,bitstream.read("bytes:" + str(payload_length))) d7atp_frame = D7atpParser().parse(bitstream, payload_length) return Frame(timeout=timeout, control=control, origin_access_id=origin_access_id, d7atp_frame=d7atp_frame)
def parse(s): scan_type_is_foreground = s.read("bool") csma_ca_mode = CsmaCaMode(s.read("uint:4")) nr_of_subbands = s.read("uint:3") subnet = s.read("int:8") scan_automation_period = CT.parse(s) s.read("uint:8") # RFU subbands = [] for i in range(nr_of_subbands): subbands.append(Subband.parse(s)) return AccessProfile(scan_type_is_foreground=scan_type_is_foreground, csma_ca_mode=csma_ca_mode, subnet=subnet, scan_automation_period=scan_automation_period, subbands=subbands)
def parse(s): qos = QoS.parse(s) dorm_to = CT.parse(s) addressee = Addressee.parse(s) return Configuration(qos=qos, dorm_to=dorm_to, addressee=addressee)
def parse(s): subband_bitmap = s.read("uint:8") scan_automation_period = CT.parse(s) return SubProfile(subband_bitmap=subband_bitmap, scan_automation_period=scan_automation_period)