    ~Panda();
  
    std::atomic<bool> connected = true;
    cereal::PandaState::PandaType hw_type = cereal::PandaState::PandaType::UNKNOWN;
    bool is_pigeon = false;
    bool has_rtc = false;
  
    // HW communication
    int usb_write(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned int timeout=TIMEOUT);
    int usb_read(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout=TIMEOUT);
 
</s> remove   Pigeon * pigeon = Pigeon::connect("/dev/ttyHS0");
 </s> add   Pigeon *pigeon = Pigeon::connect("/dev/ttyHS0"); </s> remove   if (!panda->is_pigeon) { return; };

  // ubloxRaw = 8042
 </s> add  </s> remove   is_pigeon =
    (hw_type == cereal::PandaState::PandaType::GREY_PANDA) ||
    (hw_type == cereal::PandaState::PandaType::BLACK_PANDA) ||
    (hw_type == cereal::PandaState::PandaType::UNO) ||
    (hw_type == cereal::PandaState::PandaType::DOS);
 </s> add   assert((hw_type != cereal::PandaState::PandaType::WHITE_PANDA) &&
         (hw_type != cereal::PandaState::PandaType::GREY_PANDA));
 </s> remove   Pigeon * pigeon = Pigeon::connect(panda);
 </s> add   Pigeon *pigeon = Pigeon::connect(panda); </s> remove     (hw_type == cereal::PandaState::PandaType::DOS);
 </s> add             (hw_type == cereal::PandaState::PandaType::DOS);
    ~Panda();
  
    std::atomic<bool> connected = true;
    cereal::PandaState::PandaType hw_type = cereal::PandaState::PandaType::UNKNOWN;

    bool has_rtc = false;
  
    // HW communication
    int usb_write(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned int timeout=TIMEOUT);
    int usb_read(uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout=TIMEOUT);
keep keep keep keep replace keep keep keep keep keep
 turn pigeon off when going offroad (#20296)

* cleanup

* power off pigeon

* comment

Co-authored-by: Comma Device <device@comma.ai> 
selfdrive/boardd/panda.h