      next_frame_time += dt;
    }
  }
  
  void send_empty_peripheral_state(PubMaster *pm) {
    MessageBuilder msg;
    auto peripheralState  = msg.initEvent().initPeripheralState();
    peripheralState.setPandaType(cereal::PandaState::PandaType::UNKNOWN);
    pm->send("peripheralState", msg);
  }
  
  void send_empty_panda_state(PubMaster *pm) {
    MessageBuilder msg;
    auto pandaStates = msg.initEvent().initPandaStates(1);
    pandaStates[0].setPandaType(cereal::PandaState::PandaType::UNKNOWN);
    pm->send("pandaStates", msg);
  }
  
  std::optional<bool> send_panda_states(PubMaster *pm, const std::vector<Panda *> &pandas, bool spoofing_started) {
    bool ignition_local = false;
    const uint32_t pandas_cnt = pandas.size();
  
    // build msg
 
</s> remove void panda_state_thread(PubMaster *pm, std::vector<Panda *> pandas, bool spoofing_started) {
 </s> add void panda_state_thread(std::vector<Panda *> pandas, bool spoofing_started) { </s> remove   // can = 8006
 </s> add  </s> remove     send_peripheral_state(pm, peripheral_panda);
    auto ignition_opt = send_panda_states(pm, pandas, spoofing_started);
 </s> add     send_peripheral_state(&pm, peripheral_panda);
    auto ignition_opt = send_panda_states(&pm, pandas, spoofing_started); </s> remove   // run at 100hz
 </s> add   // run at 100Hz
      next_frame_time += dt;
    }
  }
  














  std::optional<bool> send_panda_states(PubMaster *pm, const std::vector<Panda *> &pandas, bool spoofing_started) {
    bool ignition_local = false;
    const uint32_t pandas_cnt = pandas.size();
  
    // build msg
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 boardd: misc cleanup (#28969)

* boardd cleanup

* no more front frame

* faster connect loop

* fix that on mac 
selfdrive/boardd/boardd.cc