DroneCAN.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "CANDriver.h"
  2. #include <canard.h>
  3. #define CAN_POOL_SIZE 4096
  4. class DroneCAN {
  5. public:
  6. DroneCAN();
  7. void init(void);
  8. void update(void);
  9. private:
  10. uint32_t last_node_status_ms;
  11. CANDriver can_driver;
  12. CanardInstance canard;
  13. uint32_t canard_memory_pool[CAN_POOL_SIZE/sizeof(uint32_t)];
  14. void node_status_send(void);
  15. uint8_t tx_fail_count;
  16. void processTx(void);
  17. void processRx(void);
  18. uint64_t micros64();
  19. uint64_t base_micros64;
  20. uint32_t last_micros32;
  21. void handle_get_node_info(CanardInstance* ins, CanardRxTransfer* transfer);
  22. void readUniqueID(uint8_t id[6]);
  23. bool do_DNA(void);
  24. void handle_allocation_response(CanardInstance* ins, CanardRxTransfer* transfer);
  25. uint32_t send_next_node_id_allocation_request_at_ms;
  26. uint32_t node_id_allocation_unique_id_offset;
  27. uint32_t last_DNA_start_ms;
  28. public:
  29. void onTransferReceived(CanardInstance* ins, CanardRxTransfer* transfer);
  30. bool shouldAcceptTransfer(const CanardInstance* ins,
  31. uint64_t* out_data_type_signature,
  32. uint16_t data_type_id,
  33. CanardTransferType transfer_type,
  34. uint8_t source_node_id);
  35. };