Panda: refactor get_firmware_version, return std::optional<std::vector> (#19896)

Co-authored-by: Willem Melching <willem.melching@gmail.com>
pull/19949/head
Dean Lee 2021-01-28 23:25:05 +08:00 committed by GitHub
parent 96cc633d91
commit c4215d8476
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 18 deletions

View File

@ -133,12 +133,12 @@ bool usb_connect() {
panda->set_loopback(true);
}
const char *fw_sig_buf = panda->get_firmware_version();
if (fw_sig_buf){
params.write_db_value("PandaFirmware", fw_sig_buf, 128);
if (auto fw_sig = panda->get_firmware_version(); fw_sig) {
params.write_db_value("PandaFirmware", (const char *)fw_sig->data(), fw_sig->size());
// Convert to hex for offroad
char fw_sig_hex_buf[16] = {0};
const uint8_t *fw_sig_buf = fw_sig->data();
for (size_t i = 0; i < 8; i++){
fw_sig_hex_buf[2*i] = NIBBLE_TO_HEX((uint8_t)fw_sig_buf[i] >> 4);
fw_sig_hex_buf[2*i+1] = NIBBLE_TO_HEX((uint8_t)fw_sig_buf[i] & 0xF);
@ -146,8 +146,6 @@ bool usb_connect() {
params.write_db_value("PandaFirmwareHex", fw_sig_hex_buf, 16);
LOGW("fw signature: %.*s", 16, fw_sig_hex_buf);
delete[] fw_sig_buf;
} else { return false; }
// get panda serial

View File

@ -252,18 +252,11 @@ void Panda::set_loopback(bool loopback){
usb_write(0xe5, loopback, 0);
}
const char* Panda::get_firmware_version(){
const char* fw_sig_buf = new char[128]();
int read_1 = usb_read(0xd3, 0, 0, (unsigned char*)fw_sig_buf, 64);
int read_2 = usb_read(0xd4, 0, 0, (unsigned char*)fw_sig_buf + 64, 64);
if ((read_1 == 64) && (read_2 == 64)) {
return fw_sig_buf;
}
delete[] fw_sig_buf;
return NULL;
std::optional<std::vector<uint8_t>> Panda::get_firmware_version(){
std::vector<uint8_t> fw_sig_buf(128);
int read_1 = usb_read(0xd3, 0, 0, &fw_sig_buf[0], 64);
int read_2 = usb_read(0xd4, 0, 0, &fw_sig_buf[64], 64);
return ((read_1 == 64) && (read_2 == 64)) ? std::make_optional(fw_sig_buf) : std::nullopt;
}
std::optional<std::string> Panda::get_serial() {

View File

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