| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7,11 +7,16 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <QStackedLayout> | 
					 | 
					 | 
					 | 
					#include <QStackedLayout> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "selfdrive/common/params.h" | 
					 | 
					 | 
					 | 
					#include "selfdrive/common/params.h" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "selfdrive/common/timing.h" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					RecordButton::RecordButton(QWidget *parent) : QPushButton(parent) { | 
					 | 
					 | 
					 | 
					RecordButton::RecordButton(QWidget *parent) : QPushButton(parent) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  setCheckable(true); | 
					 | 
					 | 
					 | 
					  setCheckable(true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  setChecked(false); | 
					 | 
					 | 
					 | 
					  setChecked(false); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  setFixedSize(148, 148); | 
					 | 
					 | 
					 | 
					  setFixedSize(148, 148); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  QObject::connect(this, &QPushButton::toggled, [=]() { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    setEnabled(false); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void RecordButton::paintEvent(QPaintEvent *event) { | 
					 | 
					 | 
					 | 
					void RecordButton::paintEvent(QPaintEvent *event) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -20,8 +25,13 @@ void RecordButton::paintEvent(QPaintEvent *event) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QPoint center(width() / 2, height() / 2); | 
					 | 
					 | 
					 | 
					  QPoint center(width() / 2, height() / 2); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QColor bg(isChecked() ? "#FFFFFF" : "#404040"); | 
					 | 
					 | 
					 | 
					  QColor bg(isChecked() ? "#FFFFFF" : "#737373"); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QColor accent(isChecked() ? "#FF0000" : "#FFFFFF"); | 
					 | 
					 | 
					 | 
					  QColor accent(isChecked() ? "#FF0000" : "#FFFFFF"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (!isEnabled()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    bg = QColor("#404040"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    accent = QColor("#FFFFFF"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (isDown()) { | 
					 | 
					 | 
					 | 
					  if (isDown()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    accent.setAlphaF(0.7); | 
					 | 
					 | 
					 | 
					    accent.setAlphaF(0.7); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -62,7 +72,9 @@ BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QW | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  btn = new RecordButton(this); | 
					 | 
					 | 
					 | 
					  btn = new RecordButton(this); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  vlayout->addWidget(btn, 0, Qt::AlignBottom | Qt::AlignRight); | 
					 | 
					 | 
					 | 
					  vlayout->addWidget(btn, 0, Qt::AlignBottom | Qt::AlignRight); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QObject::connect(btn, &QPushButton::clicked, [=](bool checked) { | 
					 | 
					 | 
					 | 
					  QObject::connect(btn, &QPushButton::clicked, [=](bool checked) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    Params().putBool("EnableLogging", checked); | 
					 | 
					 | 
					 | 
					    btn->setEnabled(false); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    Params().putBool("DisableLogging", !checked); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    last_button = nanos_since_boot(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }); | 
					 | 
					 | 
					 | 
					  }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  w->raise(); | 
					 | 
					 | 
					 | 
					  w->raise(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -70,8 +82,6 @@ BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QW | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void BodyWindow::paintEvent(QPaintEvent *event) { | 
					 | 
					 | 
					 | 
					void BodyWindow::paintEvent(QPaintEvent *event) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  //QLabel::paintEvent(event);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  QPainter p(this); | 
					 | 
					 | 
					 | 
					  QPainter p(this); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  p.setRenderHint(QPainter::Antialiasing); | 
					 | 
					 | 
					 | 
					  p.setRenderHint(QPainter::Antialiasing); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -112,6 +122,11 @@ void BodyWindow::paintEvent(QPaintEvent *event) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void BodyWindow::offroadTransition(bool offroad) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  btn->setChecked(true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  btn->setEnabled(true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  fuel_filter.reset(1.0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void BodyWindow::updateState(const UIState &s) { | 
					 | 
					 | 
					 | 
					void BodyWindow::updateState(const UIState &s) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!isVisible()) { | 
					 | 
					 | 
					 | 
					  if (!isVisible()) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -132,5 +147,15 @@ void BodyWindow::updateState(const UIState &s) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    face->movie()->start(); | 
					 | 
					 | 
					 | 
					    face->movie()->start(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  // update record button state
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if (sm.updated("managerState") && (sm.rcv_time("managerState") - last_button)*1e-9 > 0.5) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for (auto proc : sm["managerState"].getManagerState().getProcesses()) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (proc.getName() == "loggerd") { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        btn->setEnabled(true); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        btn->setChecked(proc.getRunning()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  update(); | 
					 | 
					 | 
					 | 
					  update(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |