  
    void init();
    void stop();
    bool wait_for_ack();
    bool send_with_ack(std::string cmd);
    virtual void set_baud(int baud) = 0;
    virtual void send(const std::string &s) = 0;
    virtual std::string receive() = 0;
    virtual void set_power(bool power) = 0;
 
</s> remove   struct tm sys_time;
  gmtime_r(&rawtime, &sys_time);

  return sys_time;
}

bool time_valid(struct tm sys_time){
  int year = 1900 + sys_time.tm_year;
  int month = 1 + sys_time.tm_mon;
  return (year > 2020) || (year == 2020 && month >= 10);
}
 </s> add  </s> remove     struct tm sys_time = get_time();
 </s> add     struct tm sys_time = util::get_time();
  bool wait_for_ack(std::string ack, std::string nack);
  
    void init();
    void stop();
    bool wait_for_ack();
  bool wait_for_ack(std::string ack, std::string nack);
    bool send_with_ack(std::string cmd);
    virtual void set_baud(int baud) = 0;
    virtual void send(const std::string &s) = 0;
    virtual std::string receive() = 0;
    virtual void set_power(bool power) = 0;
keep keep keep add keep keep keep keep keep
 Store almanac on ublox poweroff (#20967)

* Store almanac on ublox poweroff

* send current UTC time

* move message building to ublox_msg.h 
selfdrive/boardd/pigeon.h