def pong_handler(event, source=None):
    cmd = Message('PING', next(pyons.get_model().command_index))
    pyons.get_model().num_pings_generated += 1
    pyons.create_timeout(pyons.get_model().next_ping_timeout, cmd)
    pyons.info("received {}, sending {} in {} sec.".format(
        event, cmd, pyons.get_model().next_ping_timeout),
        sender="pong_handler")
Exemple #2
0
    def _initialize_vehicle(self):
        vrec = journal.VehicleInfoRecord()
        vrec.vehicle_id = self.vehicle_id
        vrec.created_at = pyons.time()
        vrec.destroyed_at = None
        vrec.direction = self.direction
        vrec.lane = self.lane
        vrec.speed = self.speed
        vrec.n_read = 0
        journal.Journal().write_vehicle_created(vrec)

        self._created_at = pyons.time()
        if self.front_tag is not None:
            self.front_tag.vehicle = self
            vrec.front_tag_epc = self.front_tag.epc
            vrec.front_tag_tid = self.front_tag.tid
            pyons.get_model().add_tag(self.front_tag)
        if self.back_tag is not None:
            self.back_tag.vehicle = self
            vrec.back_tag_epc = self.back_tag.epc
            vrec.back_tag_tid = self.back_tag.tid
            pyons.get_model().add_tag(self.back_tag)
        pyons.debug(
            f"created vehicle {self.vehicle_id} with "
            f"front tag epc={self.front_tag.epc if self.front_tag else '-'}, "
            f"back tag epc={self.back_tag.epc if self.back_tag else '-'}")
def finalize():
    m = pyons.get_model()
    pyons.info("PingPong is finished:", sender="finalize")
    print("\t+ pings generated:  {}".format(m.num_pings_generated))
    print("\t+ pongs generated:  {}".format(m.num_pongs_generated))
    print("\t+ events generated: {}".format(pyons.get_num_events_served()))

    events = ['{}@t={}'.format(envelope.event, envelope.time)
              for envelope in pyons.Dispatcher().events]
    print("\t+ resting events:   {}".format(events))
Exemple #4
0
 def _handle_generate_vehicle(self, event, source):
     msg, lane = event
     assert source is self and msg == 'generate vehicle'
     model = pyons.get_model()
     vehicle = Factory().build_vehicle(lane, model.channel)
     model.add_vehicle(vehicle)
     pyons.create_timeout(self.params.vehicle_generation_interval(),
                          ('generate vehicle', lane))
     self.n_generated += 1
     if self.n_generated % 10 == 0:
         print("{:4.1f} [GENERATOR] created {} vehicles".format(
             systime.time() - self.t_started, self.n_generated))
Exemple #5
0
def handle_update_position(event, source):
    assert event == UPDATE_POSITION_EVENT and source is None
    model = pyons.get_model()
    for tag in model.tags:
        assert isinstance(tag, Tag)
        tag.update_position()
        tag.update_received_power()
        j = journal.Journal()
        if j.channel_state_logging_enabled:
            rec = build_channel_state_record(model.reader, tag, model.channel)
            j.write_channel_state(rec)
    pyons.create_timeout(model.position_update_interval, UPDATE_POSITION_EVENT)
Exemple #6
0
    def _handle_ack_reply(self, reply):
        epc = (reply.epc if isinstance(reply.epc, str) else "".join(
            [format(x, '02X') for x in reply.epc]))

        assert isinstance(self.tag_read_data, journal.TagReadRecord)
        tag = pyons.get_model().get_tag(epc)
        self.tag_read_data.epc = epc
        self.tag_read_data.vehicle_lane = tag.lane
        self.tag_read_data.location = tag.location

        if self.read_tid:
            self._send(gen2.ReqRn(rn=self._rn))
        else:
            self._handle_slot_end()
Exemple #7
0
 def _vehicle_finalizer(self):
     t = pyons.time()
     journal.Journal().write_vehicle_destroyed(self.vehicle_id, t)
     if self.front_tag is not None:
         pyons.get_model().remove_tag(self.front_tag)
     if self.back_tag is not None:
         pyons.get_model().remove_tag(self.back_tag)
     pyons.get_model().remove_vehicle(self)
     pyons.debug(f"removed vehicle {self.vehicle_id}")
def check_generated_enough():
    return pyons.get_model().num_pongs_generated >= 300
def ping_handler(event, source=None):
    reply = Message('PONG', event.index)
    pyons.get_model().num_pongs_generated += 1
    pyons.create_timeout(pyons.get_model().reply_timeout, reply)
    pyons.info("received {}, sending {} in {} sec.".format(
        event, reply, pyons.get_model().reply_timeout), sender="ping_handler")
def initialize():
    pyons.info("PingPong is initializing", sender="initialize")
    cmd = Message('PING', next(pyons.get_model().command_index))
    pyons.get_model().num_pings_generated += 1
    pyons.create_timeout(0, cmd)
Exemple #11
0
    def _handle_round_start(self):
        if not self.is_powered_on:
            raise RuntimeError("round start during power-off")

        self._round_index += 1
        self._slot = 0

        #
        # Switching antenna if needed
        #
        if self.rounds_per_antenna is not None and (
                self._round_index % self.rounds_per_antenna == 0):
            n_antennas = len(self.antennas)
            self._antenna_index = (self._antenna_index + 1) % n_antennas

        #
        # Switching inventory flag if needed
        #
        if self.session_strategy == Reader.SessionStrategy.ALTER:
            if (self.rounds_per_inventory_flag is not None) and \
                    (self._round_index % self.rounds_per_inventory_flag == 0):
                self._inventory_flag = self._inventory_flag.invert()

        # pyons.fine(("\n\t*---------- NEW ROUND ------------*"
        #             "\n\t* round index  : {round_index}"
        #             "\n\t* antenna index: {antenna_index}"
        #             "\n\t* Q            : {q}"
        #             "\n\t* session      : {session}"
        #             "\n\t* target       : {target}").format(
        #     round_index=self._round_index, antenna_index=self._antenna_index,
        #     q=self.q, session=self.session, target=self._inventory_flag),
        #     sender=self.name)

        for transceiver in self.channel.passive_transceivers:
            transceiver.node.update_position()
            transceiver.node.update_received_power()

        #
        # Refresh statistics
        #
        # STATISTICS ====>
        self.tag_read_data = self._create_tag_read_data()
        self.round_info = self._create_round_info()
        self._slot_durations = []
        self._slot_started_at = pyons.time()
        self._round_started_at = pyons.time()
        model = pyons.get_model()
        self.round_info.n_tags = len(
            [tag for tag in model.tags if tag.energized])
        self.round_info.n_vehicles_registered = len(model.vehicles)
        self.round_info.antenna_index = self._antenna_index
        # <===== END OF STATISTICS

        #
        # Generating and sending Query
        #
        query = gen2.Query(dr=self.dr,
                           m=self.m,
                           trext=self.trext,
                           sel=self.sl,
                           session=self.session,
                           target=self._inventory_flag,
                           q=self.q)
        self._send(query)
Exemple #12
0
def init_mobility_manager():
    model = pyons.get_model()
    pyons.create_timeout(model.position_update_interval, UPDATE_POSITION_EVENT)