can_message.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef _CAN_MESSAGE_H__
  2. #define _CAN_MESSAGE_H__
  3. #include <stdint.h>
  4. #include "libs/node_list.h"
  5. #include "os/os_types.h"
  6. #include "bsp/bsp_driver.h"
  7. #define can_payload_offset 2
  8. typedef struct {
  9. uint16_t key;
  10. uint8_t dest;
  11. uint8_t src;
  12. uint8_t *data;
  13. uint16_t len;
  14. uint8_t idx;
  15. uint8_t total_frame;
  16. uint8_t type;
  17. }can_message_t;
  18. #define CAN_MESSAGE_MAX_FRAMES 32
  19. #define CAN_SEND_SUCCESS 0
  20. #define CAN_SEND_TIMEOUT -1
  21. #define CAN_SEND_ERROR -2
  22. #define CAN_SEND_ACK_FAILT -3
  23. #define CAN_SEND_NO_WAIT_QUEUE -4
  24. void can_message_init(void);
  25. s32 can_send_message(uint32_t can_id, u8 *data, int len, s32 timeout);
  26. static __inline__ uint32 get_can_id(u8 dest, u8 src, u8 type, u8 retry){
  27. can_id_t id;
  28. id.id = 0;
  29. id.dest = dest;
  30. id.src = src;
  31. id.type = type;
  32. id.retry = retry;
  33. return id.id;
  34. }
  35. static __inline__ uint32 get_request_can_id(u8 dest, u8 retry){
  36. return get_can_id(dest,CAN_MY_ADDRESS, ptype_request, retry);
  37. }
  38. static __inline__ uint32 get_indicator_can_id(u8 dest){
  39. return get_can_id(dest,CAN_MY_ADDRESS, ptype_indicater, 1);
  40. }
  41. static __inline__ uint32 get_reponse_can_id(u8 dest){
  42. return get_can_id(dest,CAN_MY_ADDRESS, ptype_response, 1);
  43. }
  44. //EXPORT FUNCTIONS
  45. extern void can_send_message_ack(can_message_t *msg, uint8_t success);
  46. extern void can_send_ack(uint8_t can_addr, uint16_t key, uint8_t data);
  47. extern void can_send_response(uint8_t can_add, uint8_t *data, int len);
  48. extern void can_send_indicator(uint8_t can_add, uint8_t *data, int len);
  49. extern void can_send_request(uint8_t can_add, uint8_t *data, int len);
  50. extern bool can_is_connect_pc(void);
  51. #endif /* _CAN_MESSAGE_H__ */