Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4.  
  5. typedef enum {
  6.     FRAME_ID_TIME,
  7.     FRAME_ID_POSITION,
  8.     FRAME_ID_VELOCITY,
  9. } _frame_id;
  10.  
  11. typedef enum {
  12.     MSG_ID_DATA,
  13.     MSG_ID_ERROR,
  14.     MSG_ID_STATUS,
  15. } _msg_id;
  16.  
  17.  
  18. typedef struct {
  19.     _frame_id frame_id;
  20.     _msg_id msg_id;
  21.     uint8_t msg_len;
  22.     uint8_t *msg_data;
  23. } msg;
  24.  
  25. void msg_print(msg *m_in)
  26. {
  27.     msg m = *m_in;
  28.     printf("   frame_id: 0x%02x\n", m.frame_id);
  29.     printf("     msg_id: 0x%02x\n", m.msg_id);
  30.     printf("    msg_len: 0x%02x\n", m.msg_len);
  31.    
  32.     printf("   msg_data: ");
  33.     while(m.msg_len--) {
  34.         printf("0x%02x, ", *m.msg_data++);
  35.     }
  36.     printf("\n");
  37. }
  38.  
  39. #define MK_MSG(frame_id, msg_id, msg_len, data) \
  40.     (msg){frame_id, msg_id, msg_len, data}
  41.  
  42. #define TO_MSG(raw) \
  43.     (msg){raw[0], raw[1], raw[2], &raw[3]};
  44.  
  45. int main() {
  46.  
  47.     // pack a msg struct to raw frame
  48.     // msg_data could be struct and (uint_t *) casted
  49.     uint8_t msg_data[4] = {0, 1, 2, 3};
  50.     msg m_send = MK_MSG(FRAME_ID_TIME, MSG_ID_DATA, 4, msg_data);
  51.     msg_print(&m_send);
  52.  
  53.     // or
  54.     m_send.frame_id = FRAME_ID_POSITION;
  55.     m_send.msg_id = MSG_ID_DATA;
  56.     m_send.msg_len = 4;
  57.     m_send.msg_data = msg_data;
  58.     msg_print(&m_send);
  59.  
  60.     // unpack a raw frame to msg type
  61.     uint8_t data_recv[7] = {FRAME_ID_POSITION, MSG_ID_DATA, 4, 0, 1, 2, 3};
  62.     msg m_recv = TO_MSG(data_recv);
  63.     msg_print(&m_recv);
  64.  
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement