Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.31 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 *min)
  26. {
  27.     msg m = *min;
  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) frame_id, (_msg_id) msg_id, (uint8_t) msg_len, (uint8_t *) data}
  41.  
  42. #define TO_MSG(raw) \
  43.     (msg){(_frame_id) raw[0], (_msg_id) raw[1], (uint8_t) raw[2], (uint8_t *) &raw[3]};
  44.  
  45. int main() {
  46.     // Sending / pack frame
  47.     uint8_t data[8] = {0, 1, 2, 3, 4, 5, 6, 7};
  48.     msg m_send = MK_MSG(FRAME_ID_TIME, MSG_ID_DATA, 8, data);
  49.    
  50.     // Receiving / unpack frame
  51.     uint8_t raw[11] = {FRAME_ID_POSITION, MSG_ID_DATA, 8, 7, 6, 5 ,4, 3, 2, 1, 0};
  52.     msg m_recv = TO_MSG(raw);
  53.  
  54.     msg_print(&m_send);
  55.     msg_print(&m_recv);
  56.  
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement