    }
  
    // connect to all provided serials
    std::vector<Panda *> pandas;
    for (int i = 0; i < serials.size() && !do_exit; /**/) {
      Panda *p = connect(serials[i], i);
 
</s> remove       // send empty pandaState & peripheralState and try again
      send_empty_panda_state(&pm);
      send_empty_peripheral_state(&pm);
      util::sleep_for(500);
 </s> add       util::sleep_for(100); </s> remove   PubMaster pm({"pandaStates", "peripheralState"});
  LOGW("attempting to connect");
 </s> add   LOGW("launching boardd"); </s> remove     // exit if no pandas are connected
 </s> add  </s> remove     // connect to all
 </s> add  </s> remove 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);
}

 </s> add 
  std::string serials_str;
  for (int i = 0; i < serials.size(); i++) {
    serials_str += serials[i];
    if (i < serials.size() - 1) serials_str += ", ";
  }
  LOGW("connecting to pandas: %s", serials_str.c_str());

    }
  
  std::string serials_str;
  for (int i = 0; i < serials.size(); i++) {
    serials_str += serials[i];
    if (i < serials.size() - 1) serials_str += ", ";
  }
  LOGW("connecting to pandas: %s", serials_str.c_str());

    // connect to all provided serials
    std::vector<Panda *> pandas;
    for (int i = 0; i < serials.size() && !do_exit; /**/) {
      Panda *p = connect(serials[i], i);
keep add 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