Panda: refactor get_firmware_version, return std::optional<std::vector> (#19896)
Co-authored-by: Willem Melching <willem.melching@gmail.com>pull/19949/head
parent
96cc633d91
commit
c4215d8476
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue