can_message.h 1.6 KB

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