s600_can.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #include "s600.h"
  3. #include "byte_queue.h"
  4. #define S600_CAN_BUILD_CMD(cmd) \
  5. (CONFIG_CAN_ID << 8 | (cmd))
  6. #define S600_CAN_DEST_OFFSET 0
  7. #define S600_CAN_SRC_OFFSET 7
  8. #define S600_CAN_ALL_ID 0x7F
  9. #define S600_CAN_BAUDRATE 250
  10. #define S600_CAN_USE_MASK 0
  11. #define S600_CAN_DEST_ID(id) \
  12. (U32(id) << S600_CAN_DEST_OFFSET)
  13. #define S600_CAN_SRC_ID(id) \
  14. (U32(id) << S600_CAN_SRC_OFFSET)
  15. typedef struct {
  16. u32 efid;
  17. u8 length;
  18. u8 data[8];
  19. } s600_can_frame_t;
  20. #pragma anon_unions
  21. typedef struct {
  22. u8 dest;
  23. u8 src;
  24. u8 type;
  25. u8 index;
  26. u16 offset;
  27. u16 length;
  28. #if S600_CAN_USE_MASK
  29. u32 mask;
  30. #endif
  31. union {
  32. u8 data[256];
  33. u8 datas[32][8];
  34. };
  35. } s600_can_packet_t;
  36. void s600_can_device_config(void);
  37. void s600_can_device_deinit(void);
  38. u8 s600_can_find_mailbox(void);
  39. u8 s600_can_wait_mailbox(void);
  40. void s600_can_send_frame(u8 mailbox, u32 efid, const u8 *buff, u8 length);
  41. void s600_can_transmit(void);
  42. void s600_can_poll(void);
  43. bool s600_can_send_packet(u8 dest, u8 src, u8 type, const void *data, u16 length);
  44. void s600_can_send_packet_block(u8 dest, u8 src, u8 type, const void *data, u16 length);
  45. bool s600_can_send_command(u8 addr, const void *command, u16 length);
  46. bool s600_can_send_command_read_status(void);
  47. bool s600_can_send_response(u8 addr, const void *response, u16 length);
  48. bool s600_can_send_event(u8 addr, const void *event, u16 length);