boardd: include SPI panda in list (#27018)

* boardd: include SPI panda in list

* hexlify

* fix hexlify

* cleanup

* little more

Co-authored-by: Comma Device <device@comma.ai>
pull/27022/head
Adeeb Shihadeh 2 years ago committed by GitHub
parent c88853afae
commit b8ec32103a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      selfdrive/boardd/panda.cc
  2. 5
      selfdrive/boardd/panda_comms.h

@ -3,7 +3,9 @@
#include <unistd.h>
#include <cassert>
#include <iomanip>
#include <stdexcept>
#include <sstream>
#include "cereal/messaging/messaging.h"
#include "common/swaglog.h"
@ -40,7 +42,26 @@ bool Panda::comms_healthy() {
}
std::vector<std::string> Panda::list() {
return PandaUsbHandle::list();
std::vector<std::string> serials = PandaUsbHandle::list();
// check SPI
const int uid_len = 12;
uint8_t uid[uid_len] = {0};
PandaSpiHandle spi_handle("/dev/spidev0.0");
int ret = spi_handle.control_read(0xc3, 0, 0, uid, uid_len);
if (ret == uid_len) {
std::stringstream stream;
for (int i = 0; i < uid_len; i++) {
stream << std::hex << std::setw(2) << std::setfill('0') << int(uid[i]);
}
// might be on USB too
if (std::find(serials.begin(), serials.end(), stream.str()) == serials.end()) {
serials.push_back(stream.str());
}
}
return serials;
}
void Panda::set_safety_model(cereal::CarParams::SafetyModel safety_model, uint16_t safety_param) {

@ -30,9 +30,6 @@ public:
virtual int control_read(uint8_t request, uint16_t param1, uint16_t param2, unsigned char *data, uint16_t length, unsigned int timeout=TIMEOUT) = 0;
virtual int bulk_write(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT) = 0;
virtual int bulk_read(unsigned char endpoint, unsigned char* data, int length, unsigned int timeout=TIMEOUT) = 0;
protected:
std::recursive_mutex hw_lock;
};
class PandaUsbHandle : public PandaCommsHandle {
@ -50,6 +47,7 @@ public:
private:
libusb_context *ctx = NULL;
libusb_device_handle *dev_handle = NULL;
std::recursive_mutex hw_lock;
void handle_usb_issue(int err, const char func[]);
};
@ -69,6 +67,7 @@ private:
int spi_fd = -1;
uint8_t tx_buf[SPI_BUF_SIZE];
uint8_t rx_buf[SPI_BUF_SIZE];
inline static std::recursive_mutex hw_lock;
int wait_for_ack(spi_ioc_transfer &transfer, uint8_t ack);
int bulk_transfer(uint8_t endpoint, uint8_t *tx_data, uint16_t tx_len, uint8_t *rx_data, uint16_t rx_len);

Loading…
Cancel
Save