|  |  |  | @ -125,33 +125,40 @@ QWidget * device_panel() { | 
			
		
	
		
			
				
					|  |  |  |  |   Params params = Params(); | 
			
		
	
		
			
				
					|  |  |  |  |   std::vector<std::pair<std::string, std::string>> labels = { | 
			
		
	
		
			
				
					|  |  |  |  |     {"Dongle ID", params.get("DongleId", false)}, | 
			
		
	
		
			
				
					|  |  |  |  |     //{"Serial Number", "abcdefghijk"},
 | 
			
		
	
		
			
				
					|  |  |  |  |   }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto l : labels) { | 
			
		
	
		
			
				
					|  |  |  |  |   // get serial number
 | 
			
		
	
		
			
				
					|  |  |  |  |   //std::string cmdline = util::read_file("/proc/cmdline");
 | 
			
		
	
		
			
				
					|  |  |  |  |   //auto delim = cmdline.find("serialno=");
 | 
			
		
	
		
			
				
					|  |  |  |  |   //if (delim != std::string::npos) {
 | 
			
		
	
		
			
				
					|  |  |  |  |   //  labels.push_back({"Serial", cmdline.substr(delim, cmdline.find(" ", delim))});
 | 
			
		
	
		
			
				
					|  |  |  |  |   //}
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto &l : labels) { | 
			
		
	
		
			
				
					|  |  |  |  |     QString text = QString::fromStdString(l.first + ": " + l.second); | 
			
		
	
		
			
				
					|  |  |  |  |     device_layout->addWidget(new QLabel(text)); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // TODO: show current calibration values
 | 
			
		
	
		
			
				
					|  |  |  |  |   QPushButton *clear_cal_btn = new QPushButton("Reset Calibration"); | 
			
		
	
		
			
				
					|  |  |  |  |   device_layout->addWidget(clear_cal_btn); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(clear_cal_btn, &QPushButton::released, [=]() { | 
			
		
	
		
			
				
					|  |  |  |  |     Params().delete_db_value("CalibrationParams"); | 
			
		
	
		
			
				
					|  |  |  |  |   }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   std::map<std::string, const char *> power_btns = { | 
			
		
	
		
			
				
					|  |  |  |  |     {"Power Off", "sudo poweroff"}, | 
			
		
	
		
			
				
					|  |  |  |  |     {"Reboot", "sudo reboot"}, | 
			
		
	
		
			
				
					|  |  |  |  |   }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto b : power_btns) { | 
			
		
	
		
			
				
					|  |  |  |  |     QPushButton *btn = new QPushButton(QString::fromStdString(b.first)); | 
			
		
	
		
			
				
					|  |  |  |  |     device_layout->addWidget(btn); | 
			
		
	
		
			
				
					|  |  |  |  |   QPushButton *poweroff_btn = new QPushButton("Power Off"); | 
			
		
	
		
			
				
					|  |  |  |  |   device_layout->addWidget(poweroff_btn); | 
			
		
	
		
			
				
					|  |  |  |  |   QPushButton *reboot_btn = new QPushButton("Reboot"); | 
			
		
	
		
			
				
					|  |  |  |  |   device_layout->addWidget(reboot_btn); | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef __aarch64__ | 
			
		
	
		
			
				
					|  |  |  |  |     QObject::connect(btn, &QPushButton::released, | 
			
		
	
		
			
				
					|  |  |  |  |                      [=]() {std::system(b.second);}); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(poweroff_btn, &QPushButton::released, [=]() { std::system("sudo poweroff"); }); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(reboot_btn, &QPushButton::released, [=]() { std::system("sudo reboot"); }); | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // TODO: add confirmation dialog
 | 
			
		
	
		
			
				
					|  |  |  |  |   QPushButton *uninstall_btn = new QPushButton("Uninstall openpilot"); | 
			
		
	
		
			
				
					|  |  |  |  |   device_layout->addWidget(uninstall_btn); | 
			
		
	
		
			
				
					|  |  |  |  |   QObject::connect(uninstall_btn, &QPushButton::released, [=]() { Params().write_db_value("DoUninstall", "1"); }); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   QWidget *widget = new QWidget; | 
			
		
	
		
			
				
					|  |  |  |  |   widget->setLayout(device_layout); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |