|  |  | @ -37,6 +37,8 @@ Sidebar::Sidebar(QWidget *parent) : QFrame(parent) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   home_img = QImage("../assets/images/button_home.png").scaled(180, 180, Qt::KeepAspectRatio, Qt::SmoothTransformation); |  |  |  |   home_img = QImage("../assets/images/button_home.png").scaled(180, 180, Qt::KeepAspectRatio, Qt::SmoothTransformation); | 
			
		
	
		
		
			
				
					
					|  |  |  |   settings_img = QImage("../assets/images/button_settings.png").scaled(settings_btn.width(), settings_btn.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);; |  |  |  |   settings_img = QImage("../assets/images/button_settings.png").scaled(settings_btn.width(), settings_btn.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   connect(this, &Sidebar::valueChanged, [=] { update(); }); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   setFixedWidth(300); |  |  |  |   setFixedWidth(300); | 
			
		
	
		
		
			
				
					
					|  |  |  |   setMinimumHeight(vwp_h); |  |  |  |   setMinimumHeight(vwp_h); | 
			
		
	
		
		
			
				
					
					|  |  |  |   setStyleSheet("background-color: rgb(57, 57, 57);"); |  |  |  |   setStyleSheet("background-color: rgb(57, 57, 57);"); | 
			
		
	
	
		
		
			
				
					|  |  | @ -48,45 +50,44 @@ void Sidebar::mousePressEvent(QMouseEvent *event) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Sidebar::update(const UIState &s) { |  |  |  | void Sidebar::updateState(const UIState &s) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   if (s.sm->frame % (6*UI_FREQ) == 0) { |  |  |  |   auto &sm = *(s.sm); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     connect_str = "OFFLINE"; |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     connect_status = warning_color; |  |  |  |   auto deviceState = sm["deviceState"].getDeviceState(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     auto last_ping = params.get<float>("LastAthenaPingTime"); |  |  |  |   setProperty("netType", (int)deviceState.getNetworkType()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     if (last_ping) { |  |  |  |   setProperty("netStrength", (int)deviceState.getNetworkStrength()); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       bool online = nanos_since_boot() - *last_ping < 80e9; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       connect_str = online ? "ONLINE" : "ERROR"; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       connect_status = online ? good_color : danger_color; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     repaint(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   auto deviceState = (*s.sm)["deviceState"].getDeviceState(); |  |  |  |   auto last_ping = deviceState.getLastAthenaPingTime(); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   net_type = deviceState.getNetworkType(); |  |  |  |   if (last_ping == 0) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   strength = deviceState.getNetworkStrength(); |  |  |  |     setProperty("connectStr", "OFFLINE"); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     setProperty("connectStatus", warning_color); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     bool online = nanos_since_boot() - last_ping < 80e9; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     setProperty("connectStr",  online ? "ONLINE" : "ERROR"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     setProperty("connectStatus", online ? good_color : danger_color); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   temp_status = danger_color; |  |  |  |   QColor tempStatus = danger_color; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   auto ts = deviceState.getThermalStatus(); |  |  |  |   auto ts = deviceState.getThermalStatus(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (ts == cereal::DeviceState::ThermalStatus::GREEN) { |  |  |  |   if (ts == cereal::DeviceState::ThermalStatus::GREEN) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     temp_status = good_color; |  |  |  |     tempStatus = good_color; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } else if (ts == cereal::DeviceState::ThermalStatus::YELLOW) { |  |  |  |   } else if (ts == cereal::DeviceState::ThermalStatus::YELLOW) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     temp_status = warning_color; |  |  |  |     tempStatus = warning_color; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |   temp_val = (int)deviceState.getAmbientTempC(); |  |  |  |   setProperty("tempStatus", tempStatus); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   setProperty("tempVal", (int)deviceState.getAmbientTempC()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   panda_str = "VEHICLE\nONLINE"; |  |  |  |   QString pandaStr = "VEHICLE\nONLINE"; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   panda_status = good_color; |  |  |  |   QColor pandaStatus = good_color; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if (s.scene.pandaType == cereal::PandaState::PandaType::UNKNOWN) { |  |  |  |   if (s.scene.pandaType == cereal::PandaState::PandaType::UNKNOWN) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     panda_status = danger_color; |  |  |  |     pandaStatus = danger_color; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     panda_str = "NO\nPANDA"; |  |  |  |     pandaStr = "NO\nPANDA"; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } else if (Hardware::TICI() && s.scene.started) { |  |  |  |   } else if (Hardware::TICI() && s.scene.started) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     panda_str = QString("SATS %1\nACC %2").arg(s.scene.satelliteCount).arg(fmin(10, s.scene.gpsAccuracy), 0, 'f', 2); |  |  |  |     pandaStr = QString("SATS %1\nACC %2").arg(s.scene.satelliteCount).arg(fmin(10, s.scene.gpsAccuracy), 0, 'f', 2); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     panda_status = (*s.sm)["liveLocationKalman"].getLiveLocationKalman().getGpsOK() ? good_color : warning_color; |  |  |  |     pandaStatus = sm["liveLocationKalman"].getLiveLocationKalman().getGpsOK() ? good_color : warning_color; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if (s.sm->updated("deviceState") || s.sm->updated("pandaState")) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     repaint(); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   setProperty("pandaStr", pandaStr); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   setProperty("pandaStatus", pandaStatus); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | void Sidebar::paintEvent(QPaintEvent *event) { |  |  |  | void Sidebar::paintEvent(QPaintEvent *event) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -101,7 +102,7 @@ void Sidebar::paintEvent(QPaintEvent *event) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   p.drawImage(60, 1080 - 180 - 40, home_img); |  |  |  |   p.drawImage(60, 1080 - 180 - 40, home_img); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   // network
 |  |  |  |   // network
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   p.drawImage(58, 196, signal_imgs[strength]); |  |  |  |   p.drawImage(58, 196, signal_imgs[net_strength]); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   configFont(p, "Open Sans", 35, "Regular"); |  |  |  |   configFont(p, "Open Sans", 35, "Regular"); | 
			
		
	
		
		
			
				
					
					|  |  |  |   p.setPen(QColor(0xff, 0xff, 0xff)); |  |  |  |   p.setPen(QColor(0xff, 0xff, 0xff)); | 
			
		
	
		
		
			
				
					
					|  |  |  |   const QRect r = QRect(50, 247, 100, 50); |  |  |  |   const QRect r = QRect(50, 247, 100, 50); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |