panda: refactor get_serial, return std::optional<std::string> (#19895)

pull/19896/head^2
Dean Lee 4 years ago committed by GitHub
parent 6bd9e5ca6a
commit 96cc633d91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      selfdrive/boardd/boardd.cc
  2. 15
      selfdrive/boardd/panda.cc
  3. 3
      selfdrive/boardd/panda.h

@ -151,14 +151,9 @@ bool usb_connect() {
} else { return false; } } else { return false; }
// get panda serial // get panda serial
const char *serial_buf = panda->get_serial(); if (auto serial = panda->get_serial(); serial) {
if (serial_buf) { params.write_db_value("PandaDongleId", serial->c_str(), serial->length());
size_t serial_sz = strnlen(serial_buf, 16); LOGW("panda serial: %s", serial->c_str());
params.write_db_value("PandaDongleId", serial_buf, serial_sz);
LOGW("panda serial: %.*s", serial_sz, serial_buf);
delete[] serial_buf;
} else { return false; } } else { return false; }
// power on charging, only the first time. Panda can also change mode and it causes a brief disconneciton // power on charging, only the first time. Panda can also change mode and it causes a brief disconneciton

@ -266,17 +266,10 @@ const char* Panda::get_firmware_version(){
return NULL; return NULL;
} }
const char* Panda::get_serial(){ std::optional<std::string> Panda::get_serial() {
const char* serial_buf = new char[16](); char serial_buf[17] = {'\0'};
int err = usb_read(0xd0, 0, 0, (uint8_t*)serial_buf, 16);
int err = usb_read(0xd0, 0, 0, (unsigned char*)serial_buf, 16); return err >= 0 ? std::make_optional(serial_buf) : std::nullopt;
if (err >= 0) {
return serial_buf;
}
delete[] serial_buf;
return NULL;
} }
void Panda::set_power_saving(bool power_saving){ void Panda::set_power_saving(bool power_saving){

@ -4,6 +4,7 @@
#include <cstdint> #include <cstdint>
#include <pthread.h> #include <pthread.h>
#include <mutex> #include <mutex>
#include <optional>
#include <libusb-1.0/libusb.h> #include <libusb-1.0/libusb.h>
@ -73,7 +74,7 @@ class Panda {
health_t get_health(); health_t get_health();
void set_loopback(bool loopback); void set_loopback(bool loopback);
const char* get_firmware_version(); const char* get_firmware_version();
const char* get_serial(); std::optional<std::string> get_serial();
void set_power_saving(bool power_saving); void set_power_saving(bool power_saving);
void set_usb_power_mode(cereal::HealthData::UsbPowerMode power_mode); void set_usb_power_mode(cereal::HealthData::UsbPowerMode power_mode);
void send_heartbeat(); void send_heartbeat();

Loading…
Cancel
Save